From 84a8299bcf0a38fe61975885e80eb044b8b8ee96 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Thu, 17 Aug 2023 21:37:23 -0500 Subject: [PATCH 01/68] Start battle message update --- src/battle_message.c | 458 +++++++++++++++++++++---------------------- 1 file changed, 229 insertions(+), 229 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index bce1438c083f..cb8f56c68160 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -56,264 +56,264 @@ EWRAM_DATA struct BattleMsgData *gBattleMsgDataPtr = NULL; // todo: make some of those names less vague: attacker/target vs pkmn, etc. static const u8 sText_Trainer1LoseText[] = _("{B_TRAINER1_LOSE_TEXT}"); -static const u8 sText_PkmnGainedEXP[] = _("{B_BUFF1} gained{B_BUFF2}\n{B_BUFF3} EXP. Points!\p"); +static const u8 sText_PkmnGainedEXP[] = _("{B_BUFF1} gained{B_BUFF2}\n{B_BUFF3} Exp. Points!\p"); static const u8 sText_EmptyString4[] = _(""); static const u8 sText_ABoosted[] = _(" a boosted"); -static const u8 sText_PkmnGrewToLv[] = _("{B_BUFF1} grew to\nLV. {B_BUFF2}!{WAIT_SE}\p"); +static const u8 sText_PkmnGrewToLv[] = _("{B_BUFF1} grew to\nLv. {B_BUFF2}!{WAIT_SE}\p"); static const u8 sText_PkmnLearnedMove[] = _("{B_BUFF1} learned\n{B_BUFF2}!{WAIT_SE}\p"); -static const u8 sText_TryToLearnMove1[] = _("{B_BUFF1} is trying to\nlearn {B_BUFF2}.\p"); -static const u8 sText_TryToLearnMove2[] = _("But, {B_BUFF1} can't learn\nmore than four moves.\p"); -static const u8 sText_TryToLearnMove3[] = _("Delete a move to make\nroom for {B_BUFF2}?"); +static const u8 sText_TryToLearnMove1[] = _("{B_BUFF1} wants to learn the\nmove {B_BUFF2}.\p"); +static const u8 sText_TryToLearnMove2[] = _("However, {B_BUFF1} already\nknows four moves.\p"); +static const u8 sText_TryToLearnMove3[] = _("Should a move be deleted and\nreplaced with {B_BUFF2}?"); static const u8 sText_PkmnForgotMove[] = _("{B_BUFF1} forgot\n{B_BUFF2}.\p"); -static const u8 sText_StopLearningMove[] = _("{PAUSE 32}Stop learning\n{B_BUFF2}?"); +static const u8 sText_StopLearningMove[] = _("{PAUSE 32}Give up on learning the move\n{B_BUFF2}?"); static const u8 sText_DidNotLearnMove[] = _("{B_BUFF1} did not learn\n{B_BUFF2}.\p"); -static const u8 sText_UseNextPkmn[] = _("Use next POKéMON?"); +static const u8 sText_UseNextPkmn[] = _("Use next Pokémon?"); static const u8 sText_AttackMissed[] = _("{B_ATK_NAME_WITH_PREFIX}'s\nattack missed!"); static const u8 sText_PkmnProtectedItself[] = _("{B_DEF_NAME_WITH_PREFIX}\nprotected itself!"); -static const u8 sText_AvoidedDamage[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\ndamage with {B_DEF_ABILITY}!"); -static const u8 sText_PkmnMakesGroundMiss[] = _("{B_DEF_NAME_WITH_PREFIX} makes GROUND\nmoves miss with {B_DEF_ABILITY}!"); +static const u8 sText_AvoidedDamage[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\ndamage with {B_DEF_ABILITY}!"); //not in gen 5+ +static const u8 sText_PkmnMakesGroundMiss[] = _("{B_DEF_NAME_WITH_PREFIX} makes GROUND\nmoves miss with {B_DEF_ABILITY}!"); //not in gen 5+ static const u8 sText_PkmnAvoidedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\nthe attack!"); static const u8 sText_ItDoesntAffect[] = _("It doesn't affect\n{B_DEF_NAME_WITH_PREFIX}…"); -static const u8 sText_AttackerFainted[] = _("{B_ATK_NAME_WITH_PREFIX}\nfainted!\p"); -static const u8 sText_TargetFainted[] = _("{B_DEF_NAME_WITH_PREFIX}\nfainted!\p"); +static const u8 sText_AttackerFainted[] = _("{B_ATK_NAME_WITH_PREFIX} fainted!\p"); +static const u8 sText_TargetFainted[] = _("{B_DEF_NAME_WITH_PREFIX} fainted!\p"); static const u8 sText_PlayerGotMoney[] = _("{B_PLAYER_NAME} got ¥{B_BUFF1}\nfor winning!\p"); -static const u8 sText_PlayerLostToEnemyTrainer[] = _("{B_PLAYER_NAME} is out of\nusable POKéMON!\pPlayer lost against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!{PAUSE_UNTIL_PRESS}"); -static const u8 sText_PlayerPaidPrizeMoney[] = _("{B_PLAYER_NAME} paid ¥{B_BUFF1} as the prize\nmoney…\p… … … …\p{B_PLAYER_NAME} whited out!{PAUSE_UNTIL_PRESS}"); -static const u8 sText_PlayerWhiteout[] = _("{B_PLAYER_NAME} is out of\nusable POKéMON!\p"); +static const u8 sText_PlayerLostToEnemyTrainer[] = _("{B_PLAYER_NAME} is out of\nusable Pokémon!\pPlayer lost against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!{PAUSE_UNTIL_PRESS}"); +static const u8 sText_PlayerPaidPrizeMoney[] = _("{B_PLAYER_NAME} paid out ¥{B_BUFF1}\nto the winner…\p{B_PLAYER_NAME} blacked out!{PAUSE_UNTIL_PRESS}"); +static const u8 sText_PlayerWhiteout[] = _("{B_PLAYER_NAME} is out of\nusable Pokémon!\p"); #if B_WHITEOUT_MONEY >= GEN_4 -static const u8 sText_PlayerWhiteout2[] = _("{B_PLAYER_NAME} panicked and lost ¥{B_BUFF1}…\p… … … …\p{B_PLAYER_NAME} whited out!{PAUSE_UNTIL_PRESS}"); +static const u8 sText_PlayerWhiteout2[] = _("{B_PLAYER_NAME} dropped ¥{B_BUFF1}\nin panic…\p{B_PLAYER_NAME} blacked out!{PAUSE_UNTIL_PRESS}"); #else -static const u8 sText_PlayerWhiteout2[] = _("{B_PLAYER_NAME} whited out!{PAUSE_UNTIL_PRESS}"); +static const u8 sText_PlayerWhiteout2[] = _("{B_PLAYER_NAME} blacked out!{PAUSE_UNTIL_PRESS}"); #endif static const u8 sText_PreventsEscape[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} prevents\nescape with {B_SCR_ACTIVE_ABILITY}!\p"); static const u8 sText_CantEscape2[] = _("Can't escape!\p"); static const u8 sText_AttackerCantEscape[] = _("{B_ATK_NAME_WITH_PREFIX} can't escape!"); static const u8 sText_HitXTimes[] = _("Hit {B_BUFF1} time(s)!"); static const u8 sText_PkmnFellAsleep[] = _("{B_EFF_NAME_WITH_PREFIX}\nfell asleep!"); -static const u8 sText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade {B_EFF_NAME_WITH_PREFIX} sleep!"); +static const u8 sText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade {B_EFF_NAME_WITH_PREFIX} sleep!"); //not in gen 5+ static const u8 sText_PkmnAlreadyAsleep[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready asleep!"); static const u8 sText_PkmnAlreadyAsleep2[] = _("{B_ATK_NAME_WITH_PREFIX} is\nalready asleep!"); -static const u8 sText_PkmnWasntAffected[] = _("{B_DEF_NAME_WITH_PREFIX}\nwasn't affected!"); +static const u8 sText_PkmnWasntAffected[] = _("{B_DEF_NAME_WITH_PREFIX}\nwasn't affected!"); //not in gen 5+ static const u8 sText_PkmnWasPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX}\nwas poisoned!"); -static const u8 sText_PkmnPoisonedBy[] = _("{B_EFF_NAME_WITH_PREFIX} was poisoned by\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}!"); -static const u8 sText_PkmnHurtByPoison[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby poison!"); +static const u8 sText_PkmnPoisonedBy[] = _("{B_EFF_NAME_WITH_PREFIX} was poisoned by\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}!"); //not in gen 5+ +static const u8 sText_PkmnHurtByPoison[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby poison!"); static const u8 sText_PkmnAlreadyPoisoned[] = _("{B_DEF_NAME_WITH_PREFIX} is already\npoisoned."); -static const u8 sText_PkmnBadlyPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX} is badly\npoisoned!"); +static const u8 sText_PkmnBadlyPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX} was badly\npoisoned!"); static const u8 sText_PkmnEnergyDrained[] = _("{B_DEF_NAME_WITH_PREFIX} had its\nenergy drained!"); static const u8 sText_PkmnWasBurned[] = _("{B_EFF_NAME_WITH_PREFIX} was burned!"); static const u8 sText_PkmnGotFrostbite[] = _("{B_EFF_NAME_WITH_PREFIX} got frostbite!"); -static const u8 sText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nburned {B_EFF_NAME_WITH_PREFIX}!"); -static const u8 sText_PkmnHurtByBurn[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby its burn!"); -static const u8 sText_PkmnHurtByFrostbite[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby its frostbite!"); +static const u8 sText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nburned {B_EFF_NAME_WITH_PREFIX}!"); //not in gen 5+ +static const u8 sText_PkmnHurtByBurn[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby its burn!"); +static const u8 sText_PkmnHurtByFrostbite[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby its frostbite!"); static const u8 sText_PkmnAlreadyHasBurn[] = _("{B_DEF_NAME_WITH_PREFIX} already\nhas a burn."); static const u8 sText_PkmnWasFrozen[] = _("{B_EFF_NAME_WITH_PREFIX} was\nfrozen solid!"); -static const u8 sText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nfroze {B_EFF_NAME_WITH_PREFIX} solid!"); +static const u8 sText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nfroze {B_EFF_NAME_WITH_PREFIX} solid!"); //not in gen 5+ static const u8 sText_PkmnIsFrozen[] = _("{B_ATK_NAME_WITH_PREFIX} is\nfrozen solid!"); -static const u8 sText_PkmnWasDefrosted[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndefrosted!"); -static const u8 sText_PkmnWasDefrosted2[] = _("{B_ATK_NAME_WITH_PREFIX} was\ndefrosted!"); -static const u8 sText_PkmnWasDefrostedBy[] = _("{B_ATK_NAME_WITH_PREFIX} was\ndefrosted by {B_CURRENT_MOVE}!"); -static const u8 sText_PkmnFrostbiteHealed[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nfrostbite was healed!"); -static const u8 sText_PkmnFrostbiteHealed2[] = _("{B_ATK_NAME_WITH_PREFIX}'s\nfrostbite was healed!"); +static const u8 sText_PkmnWasDefrosted[] = _("{B_DEF_NAME_WITH_PREFIX} thawed out!"); +static const u8 sText_PkmnWasDefrosted2[] = _("{B_ATK_NAME_WITH_PREFIX} thawed out!"); +static const u8 sText_PkmnWasDefrostedBy[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\nmelted the ice!"); +static const u8 sText_PkmnFrostbiteHealed[] = _("{B_DEF_NAME_WITH_PREFIX}'s frostbite\nwas healed!"); +static const u8 sText_PkmnFrostbiteHealed2[] = _("{B_ATK_NAME_WITH_PREFIX}'s frostbite\nwas healed!"); static const u8 sText_PkmnFrostbiteHealedBy[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\nhealed its frostbite!"); static const u8 sText_PkmnWasParalyzed[] = _("{B_EFF_NAME_WITH_PREFIX} is paralyzed!\nIt may be unable to move!"); -static const u8 sText_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nparalyzed {B_EFF_NAME_WITH_PREFIX}!\lIt may be unable to move!"); +static const u8 sText_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nparalyzed {B_EFF_NAME_WITH_PREFIX}!\lIt may be unable to move!"); //not in gen 5+ static const u8 sText_PkmnIsParalyzed[] = _("{B_ATK_NAME_WITH_PREFIX} is paralyzed!\nIt can't move!"); static const u8 sText_PkmnIsAlreadyParalyzed[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready paralyzed!"); -static const u8 sText_PkmnHealedParalysis[] = _("{B_DEF_NAME_WITH_PREFIX} was\nhealed of paralysis!"); -static const u8 sText_PkmnDreamEaten[] = _("{B_DEF_NAME_WITH_PREFIX}'s\ndream was eaten!"); -static const u8 sText_StatsWontIncrease[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1}\nwon't go higher!"); -static const u8 sText_StatsWontDecrease[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\nwon't go lower!"); -static const u8 sText_TeamStoppedWorking[] = _("Your team's {B_BUFF1}\nstopped working!"); -static const u8 sText_FoeStoppedWorking[] = _("The foe's {B_BUFF1}\nstopped working!"); +static const u8 sText_PkmnHealedParalysis[] = _("{B_DEF_NAME_WITH_PREFIX} was cured of\nparalysis."); +static const u8 sText_PkmnDreamEaten[] = _("{B_DEF_NAME_WITH_PREFIX}'s\ndream was eaten!"); //not in gen 5+ +static const u8 sText_StatsWontIncrease[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} won't\ngo any higher!"); +static const u8 sText_StatsWontDecrease[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1} won't\ngo any lower!"); +static const u8 sText_TeamStoppedWorking[] = _("Your team's {B_BUFF1}\nstopped working!"); //unused +static const u8 sText_FoeStoppedWorking[] = _("The foe's {B_BUFF1}\nstopped working!"); //unused static const u8 sText_PkmnIsConfused[] = _("{B_ATK_NAME_WITH_PREFIX} is\nconfused!"); -static const u8 sText_PkmnHealedConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} snapped\nout of confusion!"); +static const u8 sText_PkmnHealedConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} snapped out of its\nconfusion."); static const u8 sText_PkmnWasConfused[] = _("{B_EFF_NAME_WITH_PREFIX} became\nconfused!"); static const u8 sText_PkmnAlreadyConfused[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready confused!"); static const u8 sText_PkmnFellInLove[] = _("{B_DEF_NAME_WITH_PREFIX}\nfell in love!"); static const u8 sText_PkmnInLove[] = _("{B_ATK_NAME_WITH_PREFIX} is in love\nwith {B_SCR_ACTIVE_NAME_WITH_PREFIX}!"); static const u8 sText_PkmnImmobilizedByLove[] = _("{B_ATK_NAME_WITH_PREFIX} is\nimmobilized by love!"); -static const u8 sText_PkmnBlownAway[] = _("{B_DEF_NAME_WITH_PREFIX} was\nblown away!"); +static const u8 sText_PkmnBlownAway[] = _("{B_DEF_NAME_WITH_PREFIX} was\nblown away!"); //unused static const u8 sText_PkmnChangedType[] = _("{B_ATK_NAME_WITH_PREFIX} transformed\ninto the {B_BUFF1} type!"); -static const u8 sText_PkmnFlinched[] = _("{B_ATK_NAME_WITH_PREFIX} flinched!"); -static const u8 sText_PkmnRegainedHealth[] = _("{B_DEF_NAME_WITH_PREFIX} regained\nhealth!"); +static const u8 sText_PkmnFlinched[] = _("{B_ATK_NAME_WITH_PREFIX} flinched\nand couldn't move!"); +static const u8 sText_PkmnRegainedHealth[] = _("{B_DEF_NAME_WITH_PREFIX}'s HP was restored."); static const u8 sText_PkmnHPFull[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nHP is full!"); -static const u8 sText_PkmnRaisedSpDef[] = _("{B_ATK_PREFIX2}'s {B_CURRENT_MOVE}\nraised SP. DEF!"); -static const u8 sText_PkmnRaisedSpDefALittle[] = _("{B_ATK_PREFIX2}'s {B_CURRENT_MOVE}\nraised SP. DEF a little!"); -static const u8 sText_PkmnRaisedDef[] = _("{B_ATK_PREFIX2}'s {B_CURRENT_MOVE}\nraised DEFENSE!"); -static const u8 sText_PkmnRaisedDefALittle[] = _("{B_ATK_PREFIX2}'s {B_CURRENT_MOVE}\nraised DEFENSE a little!"); -static const u8 sText_PkmnCoveredByVeil[] = _("{B_ATK_PREFIX2}'s party is covered\nby a veil!"); -static const u8 sText_PkmnUsedSafeguard[] = _("{B_DEF_NAME_WITH_PREFIX}'s party is protected\nby Safeguard!"); -static const u8 sText_PkmnSafeguardExpired[] = _("{B_ATK_PREFIX3}'s party is no longer\nprotected by Safeguard!"); -static const u8 sText_PkmnWentToSleep[] = _("{B_ATK_NAME_WITH_PREFIX} went\nto sleep!"); +static const u8 sText_PkmnRaisedSpDef[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE}\nraised SP. DEF!"); //light screen +static const u8 sText_PkmnRaisedSpDefALittle[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE}\nraised SP. DEF a little!"); //light screen +static const u8 sText_PkmnRaisedDef[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE}\nraised DEFENSE!"); //reflect +static const u8 sText_PkmnRaisedDefALittle[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE}\nraised DEFENSE a little!"); //reflect +static const u8 sText_PkmnCoveredByVeil[] = _("{B_ATK_PREFIX1}'s team became cloaked in\na mystical veil!"); +static const u8 sText_PkmnUsedSafeguard[] = _("{B_DEF_NAME_WITH_PREFIX} is protected\nby Safeguard!"); +static const u8 sText_PkmnSafeguardExpired[] = _("{B_ATK_PREFIX1}'s team is no longer protected\nby Safeguard!"); +static const u8 sText_PkmnWentToSleep[] = _("{B_ATK_NAME_WITH_PREFIX} went\nto sleep!"); //not in gen 5+ static const u8 sText_PkmnSleptHealthy[] = _("{B_ATK_NAME_WITH_PREFIX} slept and\nbecame healthy!"); static const u8 sText_PkmnWhippedWhirlwind[] = _("{B_ATK_NAME_WITH_PREFIX} whipped\nup a whirlwind!"); -static const u8 sText_PkmnTookSunlight[] = _("{B_ATK_NAME_WITH_PREFIX} took\nin sunlight!"); -static const u8 sText_PkmnLoweredHead[] = _("{B_ATK_NAME_WITH_PREFIX} lowered\nits head!"); -static const u8 sText_PkmnIsGlowing[] = _("{B_ATK_NAME_WITH_PREFIX} is glowing!"); +static const u8 sText_PkmnTookSunlight[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed\nlight!"); +static const u8 sText_PkmnLoweredHead[] = _("{B_ATK_NAME_WITH_PREFIX} tucked in\nits head!"); +static const u8 sText_PkmnIsGlowing[] = _("{B_ATK_NAME_WITH_PREFIX} became\ncloaked in a harsh light!"); static const u8 sText_PkmnFlewHigh[] = _("{B_ATK_NAME_WITH_PREFIX} flew\nup high!"); -static const u8 sText_PkmnDugHole[] = _("{B_ATK_NAME_WITH_PREFIX} dug a hole!"); +static const u8 sText_PkmnDugHole[] = _("{B_ATK_NAME_WITH_PREFIX} burrowed\nits way under the ground!"); static const u8 sText_PkmnHidUnderwater[] = _("{B_ATK_NAME_WITH_PREFIX} hid\nunderwater!"); static const u8 sText_PkmnSprangUp[] = _("{B_ATK_NAME_WITH_PREFIX} sprang up!"); -static const u8 sText_PkmnSqueezedByBind[] = _("{B_DEF_NAME_WITH_PREFIX} was squeezed by\n{B_ATK_NAME_WITH_PREFIX}'s BIND!"); +static const u8 sText_PkmnSqueezedByBind[] = _("{B_DEF_NAME_WITH_PREFIX} was squeezed\nby {B_ATK_NAME_WITH_PREFIX}!"); static const u8 sText_PkmnInSnapTrap[] = _("{B_DEF_NAME_WITH_PREFIX} got trapped\nby a snap trap!"); -static const u8 sText_PkmnTrappedInVortex[] = _("{B_DEF_NAME_WITH_PREFIX} was trapped\nin the vortex!"); -static const u8 sText_PkmnTrappedBySandTomb[] = _("{B_DEF_NAME_WITH_PREFIX} was trapped\nby SAND TOMB!"); -static const u8 sText_PkmnWrappedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was WRAPPED by\n{B_ATK_NAME_WITH_PREFIX}!"); -static const u8 sText_PkmnClamped[] = _("{B_ATK_NAME_WITH_PREFIX} CLAMPED\n{B_DEF_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnTrappedInVortex[] = _("{B_DEF_NAME_WITH_PREFIX} became trapped\nin the vortex!"); +static const u8 sText_PkmnTrappedBySandTomb[] = _("{B_DEF_NAME_WITH_PREFIX} became trapped\nby Sand Tomb!"); +static const u8 sText_PkmnWrappedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was wrapped by\n{B_ATK_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnClamped[] = _("{B_ATK_NAME_WITH_PREFIX} clamped\n{B_DEF_NAME_WITH_PREFIX}!"); static const u8 sText_PkmnHurtBy[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby {B_BUFF1}!"); static const u8 sText_PkmnFreedFrom[] = _("{B_ATK_NAME_WITH_PREFIX} was freed\nfrom {B_BUFF1}!"); static const u8 sText_PkmnCrashed[] = _("{B_ATK_NAME_WITH_PREFIX} kept going\nand crashed!"); -const u8 gText_PkmnShroudedInMist[] = _("{B_ATK_PREFIX2} became\nshrouded in MIST!"); -static const u8 sText_PkmnProtectedByMist[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is protected\nby MIST!"); +const u8 gText_PkmnShroudedInMist[] = _("{B_ATK_TEAM1} team became\nshrouded in mist!"); +static const u8 sText_PkmnProtectedByMist[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is protected\nby the mist!"); const u8 gText_PkmnGettingPumped[] = _("{B_ATK_NAME_WITH_PREFIX} is getting\npumped!"); -static const u8 sText_PkmnHitWithRecoil[] = _("{B_ATK_NAME_WITH_PREFIX} is hit\nwith recoil!"); +static const u8 sText_PkmnHitWithRecoil[] = _("{B_ATK_NAME_WITH_PREFIX} was damaged\nby the recoil!"); static const u8 sText_PkmnProtectedItself2[] = _("{B_ATK_NAME_WITH_PREFIX} protected\nitself!"); static const u8 sText_PkmnBuffetedBySandstorm[] = _("{B_ATK_NAME_WITH_PREFIX} is buffeted\nby the sandstorm!"); -static const u8 sText_PkmnPeltedByHail[] = _("{B_ATK_NAME_WITH_PREFIX} is pelted\nby HAIL!"); -static const u8 sText_PkmnsXWoreOff[] = _("{B_ATK_PREFIX1}'s {B_BUFF1}\nwore off!"); +static const u8 sText_PkmnPeltedByHail[] = _("{B_ATK_NAME_WITH_PREFIX} is buffeted\nby the hail!"); +static const u8 sText_PkmnsXWoreOff[] = _("{B_ATK_PREFIX1} team's {B_BUFF1}\nwore off!"); static const u8 sText_PkmnSeeded[] = _("{B_DEF_NAME_WITH_PREFIX} was seeded!"); -static const u8 sText_PkmnEvadedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} evaded\nthe attack!"); -static const u8 sText_PkmnSappedByLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX}'s health is\nsapped by LEECH SEED!"); +static const u8 sText_PkmnEvadedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\nthe attack!"); +static const u8 sText_PkmnSappedByLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX}'s health is\nsapped by Leech Seed!"); static const u8 sText_PkmnFastAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} is fast\nasleep."); static const u8 sText_PkmnWokeUp[] = _("{B_ATK_NAME_WITH_PREFIX} woke up!"); -static const u8 sText_PkmnUproarKeptAwake[] = _("But {B_SCR_ACTIVE_NAME_WITH_PREFIX}'s UPROAR\nkept it awake!"); -static const u8 sText_PkmnWokeUpInUproar[] = _("{B_ATK_NAME_WITH_PREFIX} woke up\nin the UPROAR!"); -static const u8 sText_PkmnCausedUproar[] = _("{B_ATK_NAME_WITH_PREFIX} caused\nan UPROAR!"); -static const u8 sText_PkmnMakingUproar[] = _("{B_ATK_NAME_WITH_PREFIX} is making\nan UPROAR!"); -static const u8 sText_PkmnCalmedDown[] = _("{B_ATK_NAME_WITH_PREFIX} calmed down."); -static const u8 sText_PkmnCantSleepInUproar[] = _("But {B_DEF_NAME_WITH_PREFIX} can't\nsleep in an UPROAR!"); -static const u8 sText_PkmnStockpiled[] = _("{B_ATK_NAME_WITH_PREFIX} stockpiled\n{B_BUFF1}!"); +static const u8 sText_PkmnUproarKeptAwake[] = _("But the uproar kept\n{B_SCR_ACTIVE_NAME_WITH_PREFIX} awake!"); +static const u8 sText_PkmnWokeUpInUproar[] = _("The uproar woke up\nthe {B_ATK_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnCausedUproar[] = _("{B_ATK_NAME_WITH_PREFIX} caused\nan uproar!"); +static const u8 sText_PkmnMakingUproar[] = _("{B_ATK_NAME_WITH_PREFIX} is making\nan uproar!"); +static const u8 sText_PkmnCalmedDown[] = _("{B_ATK_NAME_WITH_PREFIX}\ncalmed down."); +static const u8 sText_PkmnCantSleepInUproar[] = _("But {B_DEF_NAME_WITH_PREFIX} can't\nsleep in an uproar!"); +static const u8 sText_PkmnStockpiled[] = _("{B_ATK_NAME_WITH_PREFIX} stockpiled {B_BUFF1}!"); static const u8 sText_PkmnCantStockpile[] = _("{B_ATK_NAME_WITH_PREFIX} can't\nstockpile any more!"); -static const u8 sText_PkmnCantSleepInUproar2[] = _("But {B_DEF_NAME_WITH_PREFIX} can't\nsleep in an UPROAR!"); -static const u8 sText_UproarKeptPkmnAwake[] = _("But the UPROAR kept\n{B_DEF_NAME_WITH_PREFIX} awake!"); -static const u8 sText_PkmnStayedAwakeUsing[] = _("{B_DEF_NAME_WITH_PREFIX} stayed awake\nusing its {B_DEF_ABILITY}!"); +static const u8 sText_PkmnCantSleepInUproar2[] = _("But {B_DEF_NAME_WITH_PREFIX} can't\nsleep in an uproar!"); +static const u8 sText_UproarKeptPkmnAwake[] = _("But the uproar kept\n{B_DEF_NAME_WITH_PREFIX} awake!"); +static const u8 sText_PkmnStayedAwakeUsing[] = _("{B_DEF_NAME_WITH_PREFIX} stayed awake\nusing its {B_DEF_ABILITY}!"); //not in gen 5+ static const u8 sText_PkmnStoringEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} is storing\nenergy!"); static const u8 sText_PkmnUnleashedEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} unleashed\nenergy!"); static const u8 sText_PkmnFatigueConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} became\nconfused due to fatigue!"); static const u8 sText_PlayerPickedUpMoney[] = _("{B_PLAYER_NAME} picked up\n¥{B_BUFF1}!\p"); static const u8 sText_PkmnUnaffected[] = _("{B_DEF_NAME_WITH_PREFIX} is\nunaffected!"); static const u8 sText_PkmnTransformedInto[] = _("{B_ATK_NAME_WITH_PREFIX} transformed\ninto {B_BUFF1}!"); -static const u8 sText_PkmnMadeSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} made\na SUBSTITUTE!"); -static const u8 sText_PkmnHasSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} already\nhas a SUBSTITUTE!"); -static const u8 sText_SubstituteDamaged[] = _("The SUBSTITUTE took damage\nfor {B_DEF_NAME_WITH_PREFIX}!\p"); -static const u8 sText_PkmnSubstituteFaded[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nSUBSTITUTE faded!\p"); +static const u8 sText_PkmnMadeSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} put in\na substitute!"); +static const u8 sText_PkmnHasSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} already\nhas a substitute!"); +static const u8 sText_SubstituteDamaged[] = _("The substitute took damage\nfor {B_DEF_NAME_WITH_PREFIX}!\p"); +static const u8 sText_PkmnSubstituteFaded[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nsubstitute faded!\p"); static const u8 sText_PkmnMustRecharge[] = _("{B_ATK_NAME_WITH_PREFIX} must\nrecharge!"); -static const u8 sText_PkmnRageBuilding[] = _("{B_DEF_NAME_WITH_PREFIX}'s RAGE\nis building!"); +static const u8 sText_PkmnRageBuilding[] = _("{B_DEF_NAME_WITH_PREFIX}'s rage\nis building!"); static const u8 sText_PkmnMoveWasDisabled[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\nwas disabled!"); -static const u8 sText_PkmnMoveDisabledNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is disabled\nno more!"); -static const u8 sText_PkmnGotEncore[] = _("{B_DEF_NAME_WITH_PREFIX} got\nan ENCORE!"); -static const u8 sText_PkmnEncoreEnded[] = _("{B_ATK_NAME_WITH_PREFIX}'s ENCORE\nended!"); -static const u8 sText_PkmnTookAim[] = _("{B_ATK_NAME_WITH_PREFIX} took aim\nat {B_DEF_NAME_WITH_PREFIX}!"); -static const u8 sText_PkmnSketchedMove[] = _("{B_ATK_NAME_WITH_PREFIX} SKETCHED\n{B_BUFF1}!"); -static const u8 sText_PkmnTryingToTakeFoe[] = _("{B_ATK_NAME_WITH_PREFIX} is trying\nto take its foe with it!"); -static const u8 sText_PkmnTookFoe[] = _("{B_DEF_NAME_WITH_PREFIX} took\n{B_ATK_NAME_WITH_PREFIX} with it!"); -static const u8 sText_PkmnReducedPP[] = _("Reduced {B_DEF_NAME_WITH_PREFIX}'s\n{B_BUFF1} by {B_BUFF2}!"); +static const u8 sText_PkmnMoveDisabledNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is no\nlonger disabled!"); +static const u8 sText_PkmnGotEncore[] = _("{B_DEF_NAME_WITH_PREFIX} received\nan encore!"); +static const u8 sText_PkmnEncoreEnded[] = _("{B_ATK_NAME_WITH_PREFIX}'s encore\nended!"); +static const u8 sText_PkmnTookAim[] = _("{B_ATK_NAME_WITH_PREFIX} took aim at\n{B_DEF_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnSketchedMove[] = _("{B_ATK_NAME_WITH_PREFIX} sketched\n{B_BUFF1}!"); +static const u8 sText_PkmnTryingToTakeFoe[] = _("{B_ATK_NAME_WITH_PREFIX} is trying\nto take its foe down with it!"); +static const u8 sText_PkmnTookFoe[] = _("{B_DEF_NAME_WITH_PREFIX} took its attacker\ndown with it!"); +static const u8 sText_PkmnReducedPP[] = _("It reduced the PP of {B_DEF_NAME_WITH_PREFIX}'s\n{B_BUFF1} by {B_BUFF2}!"); static const u8 sText_PkmnStoleItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole\n{B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}!"); -static const u8 sText_TargetCantEscapeNow[] = _("{B_DEF_NAME_WITH_PREFIX} can't\nescape now!"); -static const u8 sText_PkmnFellIntoNightmare[] = _("{B_DEF_NAME_WITH_PREFIX} fell into\na NIGHTMARE!"); -static const u8 sText_PkmnLockedInNightmare[] = _("{B_ATK_NAME_WITH_PREFIX} is locked\nin a NIGHTMARE!"); -static const u8 sText_PkmnLaidCurse[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP and\nlaid a CURSE on {B_DEF_NAME_WITH_PREFIX}!"); -static const u8 sText_PkmnAfflictedByCurse[] = _("{B_ATK_NAME_WITH_PREFIX} is afflicted\nby the CURSE!"); -static const u8 sText_SpikesScattered[] = _("Spikes were scattered all around\n{B_DEF_TEAM2} team!"); -static const u8 sText_PkmnHurtBySpikes[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is hurt\nby spikes!"); -static const u8 sText_PkmnIdentified[] = _("{B_ATK_NAME_WITH_PREFIX} identified\n{B_DEF_NAME_WITH_PREFIX}!"); -static const u8 sText_PkmnPerishCountFell[] = _("{B_ATK_NAME_WITH_PREFIX}'s PERISH count\nfell to {B_BUFF1}!"); +static const u8 sText_TargetCantEscapeNow[] = _("{B_DEF_NAME_WITH_PREFIX} can no\nlonger escape!"); +static const u8 sText_PkmnFellIntoNightmare[] = _("{B_DEF_NAME_WITH_PREFIX} began having\na nightmare!"); +static const u8 sText_PkmnLockedInNightmare[] = _("{B_ATK_NAME_WITH_PREFIX} is locked\nin a nightmare!"); +static const u8 sText_PkmnLaidCurse[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP\nand put a curse on {B_DEF_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnAfflictedByCurse[] = _("{B_ATK_NAME_WITH_PREFIX} is afflicted\nby the curse!"); +static const u8 sText_SpikesScattered[] = _("Spikes were scattered on the ground\nall around {B_DEF_TEAM2} team!"); +static const u8 sText_PkmnHurtBySpikes[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was hurt\nby the spikes!"); +static const u8 sText_PkmnIdentified[] = _("{B_DEF_NAME_WITH_PREFIX} was indentified!"); +static const u8 sText_PkmnPerishCountFell[] = _("{B_ATK_NAME_WITH_PREFIX}'s perish count\nfell to {B_BUFF1}!"); static const u8 sText_PkmnBracedItself[] = _("{B_ATK_NAME_WITH_PREFIX} braced\nitself!"); -static const u8 sText_PkmnEnduredHit[] = _("{B_DEF_NAME_WITH_PREFIX} ENDURED\nthe hit!"); -static const u8 sText_MagnitudeStrength[] = _("MAGNITUDE {B_BUFF1}!"); -static const u8 sText_PkmnCutHPMaxedAttack[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP\nand maximized ATTACK!"); +static const u8 sText_PkmnEnduredHit[] = _("{B_DEF_NAME_WITH_PREFIX} endured\nthe hit!"); +static const u8 sText_MagnitudeStrength[] = _("Magnitude {B_BUFF1}!"); +static const u8 sText_PkmnCutHPMaxedAttack[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP\nand maximized its Attack!"); static const u8 sText_PkmnCopiedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX}'s stat changes!"); -static const u8 sText_PkmnGotFree[] = _("{B_ATK_NAME_WITH_PREFIX} got free of\n{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}!"); -static const u8 sText_PkmnShedLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX} shed\nLEECH SEED!"); -static const u8 sText_PkmnBlewAwaySpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nspikes!"); +static const u8 sText_PkmnGotFree[] = _("{B_ATK_NAME_WITH_PREFIX} got free of\n{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}!"); //not in gen 5+, generic rapid spin? +static const u8 sText_PkmnShedLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX} shed\nLeech Seed!"); //not in gen 5+, generic rapid spin? +static const u8 sText_PkmnBlewAwaySpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nspikes!"); //not in gen 5+, generic rapid spin? static const u8 sText_PkmnFledFromBattle[] = _("{B_ATK_NAME_WITH_PREFIX} fled from\nbattle!"); static const u8 sText_PkmnForesawAttack[] = _("{B_ATK_NAME_WITH_PREFIX} foresaw\nan attack!"); static const u8 sText_PkmnTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX} took the\n{B_BUFF1} attack!"); -static const u8 sText_PkmnChoseXAsDestiny[] = _("{B_ATK_NAME_WITH_PREFIX} chose\n{B_CURRENT_MOVE} as its destiny!"); -static const u8 sText_PkmnAttack[] = _("{B_BUFF1}'s attack!"); -static const u8 sText_PkmnCenterAttention[] = _("{B_DEF_NAME_WITH_PREFIX} became the\ncenter of attention!"); +static const u8 sText_PkmnChoseXAsDestiny[] = _("{B_ATK_NAME_WITH_PREFIX} chose\nDoom Desire as its destiny!"); +static const u8 sText_PkmnAttack[] = _("{B_BUFF1}'s attack!"); //not in gen 5+, beat up rework +static const u8 sText_PkmnCenterAttention[] = _("{B_DEF_NAME_WITH_PREFIX} became\nthe center of attention!"); static const u8 sText_PkmnChargingPower[] = _("{B_ATK_NAME_WITH_PREFIX} began\ncharging power!"); -static const u8 sText_NaturePowerTurnedInto[] = _("NATURE POWER turned into\n{B_CURRENT_MOVE}!"); +static const u8 sText_NaturePowerTurnedInto[] = _("Nature Power turned into\n{B_CURRENT_MOVE}!"); static const u8 sText_PkmnStatusNormal[] = _("{B_ATK_NAME_WITH_PREFIX}'s status\nreturned to normal!"); static const u8 sText_PkmnSubjectedToTorment[] = _("{B_DEF_NAME_WITH_PREFIX} was subjected\nto torment!"); static const u8 sText_PkmnTighteningFocus[] = _("{B_ATK_NAME_WITH_PREFIX} is tightening\nits focus!"); -static const u8 sText_PkmnFellForTaunt[] = _("{B_DEF_NAME_WITH_PREFIX} fell for\nthe Taunt!"); +static const u8 sText_PkmnFellForTaunt[] = _("{B_DEF_NAME_WITH_PREFIX} fell for\nthe taunt!"); static const u8 sText_PkmnReadyToHelp[] = _("{B_ATK_NAME_WITH_PREFIX} is ready to\nhelp {B_DEF_NAME_WITH_PREFIX}!"); -static const u8 sText_PkmnSwitchedItems[] = _("{B_ATK_NAME_WITH_PREFIX} switched\nitems with its opponent!"); +static const u8 sText_PkmnSwitchedItems[] = _("{B_ATK_NAME_WITH_PREFIX} switched\nitems with its target!"); static const u8 sText_PkmnObtainedX[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}."); static const u8 sText_PkmnObtainedX2[] = _("{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}."); static const u8 sText_PkmnObtainedXYObtainedZ[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}.\p{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}."); static const u8 sText_PkmnCopiedFoe[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}!"); -static const u8 sText_PkmnMadeWish[] = _("{B_ATK_NAME_WITH_PREFIX} made a WISH!"); -static const u8 sText_PkmnWishCameTrue[] = _("{B_BUFF1}'s WISH\ncame true!"); +static const u8 sText_PkmnMadeWish[] = _("{B_ATK_NAME_WITH_PREFIX} made a wish!"); //not in gen 5+ +static const u8 sText_PkmnWishCameTrue[] = _("{B_BUFF1}'s wish\ncame true!"); static const u8 sText_PkmnPlantedRoots[] = _("{B_ATK_NAME_WITH_PREFIX} planted its roots!"); static const u8 sText_PkmnAbsorbedNutrients[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed\nnutrients with its roots!"); static const u8 sText_PkmnAnchoredItself[] = _("{B_DEF_NAME_WITH_PREFIX} anchored\nitself with its roots!"); -static const u8 sText_PkmnWasMadeDrowsy[] = _("{B_ATK_NAME_WITH_PREFIX} made\n{B_DEF_NAME_WITH_PREFIX} drowsy!"); +static const u8 sText_PkmnWasMadeDrowsy[] = _("{B_DEF_NAME_WITH_PREFIX} grew drowsy!"); static const u8 sText_PkmnKnockedOff[] = _("{B_ATK_NAME_WITH_PREFIX} knocked off\n{B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}!"); -static const u8 sText_PkmnSwappedAbilities[] = _("{B_ATK_NAME_WITH_PREFIX} swapped abilities\nwith its opponent!"); -static const u8 sText_PkmnSealedOpponentMove[] = _("{B_ATK_NAME_WITH_PREFIX} sealed the\nopponent's move(s)!"); -static const u8 sText_PkmnWantsGrudge[] = _("{B_ATK_NAME_WITH_PREFIX} wants the\nopponent to bear a GRUDGE!"); -static const u8 sText_PkmnLostPPGrudge[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} lost\nall its PP due to the GRUDGE!"); -static const u8 sText_PkmnShroudedItself[] = _("{B_ATK_NAME_WITH_PREFIX} shrouded\nitself in {B_CURRENT_MOVE}!"); -static const u8 sText_PkmnMoveBounced[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\nwas bounced back by MAGIC COAT!"); +static const u8 sText_PkmnSwappedAbilities[] = _("{B_ATK_NAME_WITH_PREFIX} swapped\nAbilities with its target!"); +static const u8 sText_PkmnSealedOpponentMove[] = _("{B_ATK_NAME_WITH_PREFIX} sealed any moves\nits target shares with it!"); +static const u8 sText_PkmnWantsGrudge[] = _("{B_ATK_NAME_WITH_PREFIX} wants its target\nto bear a grudge!"); +static const u8 sText_PkmnLostPPGrudge[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} lost all its PP\ndue to the grudge!"); +static const u8 sText_PkmnShroudedItself[] = _("{B_ATK_NAME_WITH_PREFIX} shrouded\nitself with Magic Coat!"); +static const u8 sText_PkmnMoveBounced[] = _("{B_ATK_NAME_WITH_PREFIX}\nbounced the {B_CURRENT_MOVE} back!"); static const u8 sText_PkmnWaitsForTarget[] = _("{B_ATK_NAME_WITH_PREFIX} waits for a target\nto make a move!"); -static const u8 sText_PkmnSnatchedMove[] = _("{B_DEF_NAME_WITH_PREFIX} SNATCHED\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s move!"); -static const u8 sText_ElectricityWeakened[] = _("Electricity's power was\nweakened!"); -static const u8 sText_FireWeakened[] = _("Fire's power was\nweakened!"); +static const u8 sText_PkmnSnatchedMove[] = _("{B_DEF_NAME_WITH_PREFIX} snatched\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s move!"); +static const u8 sText_ElectricityWeakened[] = _("Electricity's power was weakened!"); +static const u8 sText_FireWeakened[] = _("Fire's power was weakened!"); static const u8 sText_XFoundOneY[] = _("{B_ATK_NAME_WITH_PREFIX} found\none {B_LAST_ITEM}!"); static const u8 sText_SoothingAroma[] = _("A soothing aroma wafted\nthrough the area!"); -static const u8 sText_ItemsCantBeUsedNow[] = _("Items can't be used now.{PAUSE 64}"); -static const u8 sText_ForXCommaYZ[] = _("For {B_SCR_ACTIVE_NAME_WITH_PREFIX},\n{B_LAST_ITEM} {B_BUFF1}"); -static const u8 sText_PkmnUsedXToGetPumped[] = _("{B_ACTIVE_NAME_WITH_PREFIX} used\n{B_LAST_ITEM} to get pumped!"); +static const u8 sText_ItemsCantBeUsedNow[] = _("Items can't be used now.{PAUSE 64}"); //not in gen 5+, i think +static const u8 sText_ForXCommaYZ[] = _("For {B_SCR_ACTIVE_NAME_WITH_PREFIX},\n{B_LAST_ITEM} {B_BUFF1}"); //not in gen 5+, goes straight to if mon liked berry or not +static const u8 sText_PkmnUsedXToGetPumped[] = _("{B_ACTIVE_NAME_WITH_PREFIX} used\nthe {B_LAST_ITEM} to get pumped!"); static const u8 sText_PkmnLostFocus[] = _("{B_ATK_NAME_WITH_PREFIX} lost its\nfocus and couldn't move!"); static const u8 sText_PkmnWasDraggedOut[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndragged out!\p"); -static const u8 sText_TheWallShattered[] = _("The wall shattered!"); +static const u8 sText_TheWallShattered[] = _("The wall shattered!"); //not in gen5+, uses "your teams light screen wore off!" etc instead static const u8 sText_ButNoEffect[] = _("But it had no effect!"); static const u8 sText_PkmnHasNoMovesLeft[] = _("{B_ACTIVE_NAME_WITH_PREFIX} has no\nmoves left!\p"); static const u8 sText_PkmnMoveIsDisabled[] = _("{B_ACTIVE_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\nis disabled!\p"); -static const u8 sText_PkmnCantUseMoveTorment[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use the same\nmove in a row due to the Torment!\p"); -static const u8 sText_PkmnCantUseMoveTaunt[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use\n{B_CURRENT_MOVE} after the Taunt!\p"); -static const u8 sText_PkmnCantUseMoveSealed[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use the\nsealed {B_CURRENT_MOVE}!\p"); -static const u8 sText_PkmnCantUseMoveThroatChop[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use\n{B_CURRENT_MOVE} due to Throat Chop!\p"); -static const u8 sText_PkmnMadeItRain[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade it rain!"); -static const u8 sText_PkmnRaisedSpeed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nraised its SPEED!"); -static const u8 sText_PkmnProtectedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was protected\nby {B_DEF_ABILITY}!"); -static const u8 sText_PkmnPreventsUsage[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents {B_ATK_NAME_WITH_PREFIX}\lfrom using {B_CURRENT_MOVE}!"); -static const u8 sText_PkmnRestoredHPUsing[] = _("{B_DEF_NAME_WITH_PREFIX} restored HP\nusing its {B_DEF_ABILITY}!"); -static const u8 sText_PkmnsXMadeYUseless[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} useless!"); -static const u8 sText_PkmnChangedTypeWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nmade it the {B_BUFF1} type!"); -static const u8 sText_PkmnPreventsParalysisWith[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents paralysis!"); -static const u8 sText_PkmnPreventsRomanceWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents romance!"); -static const u8 sText_PkmnPreventsPoisoningWith[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents poisoning!"); -static const u8 sText_PkmnPreventsConfusionWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents confusion!"); -static const u8 sText_PkmnRaisedFirePowerWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nraised its FIRE power!"); -static const u8 sText_PkmnAnchorsItselfWith[] = _("{B_DEF_NAME_WITH_PREFIX} anchors\nitself with {B_DEF_ABILITY}!"); -static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncuts {B_DEF_NAME_WITH_PREFIX}'s attack!"); -static const u8 sText_PkmnPreventsStatLossWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents stat loss!"); +static const u8 sText_PkmnCantUseMoveTorment[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use the same move\ntwice in a row due to the torment!\p"); +static const u8 sText_PkmnCantUseMoveTaunt[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use\n{B_CURRENT_MOVE} after the taunt!\p"); +static const u8 sText_PkmnCantUseMoveSealed[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use\nthe sealed {B_CURRENT_MOVE}!\p"); +static const u8 sText_PkmnCantUseMoveThroatChop[] = _("The effects of Throat Chop prevent\n{B_ACTIVE_NAME_WITH_PREFIX} from using certain moves!\p"); +static const u8 sText_PkmnMadeItRain[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade it rain!"); //not in gen 5+, uses normal rain start text +static const u8 sText_PkmnRaisedSpeed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nraised its Speed!"); //not in gen 5+, uses normal speed raise text +static const u8 sText_PkmnProtectedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was protected\nby {B_DEF_ABILITY}!"); //not in gen 5+, uses "endured the hit" text in all cases +static const u8 sText_PkmnPreventsUsage[] = _("{B_ATK_NAME_WITH_PREFIX}\ncannot use {B_CURRENT_MOVE}!"); +static const u8 sText_PkmnRestoredHPUsing[] = _("{B_DEF_NAME_WITH_PREFIX} restored HP\nusing its {B_DEF_ABILITY}!"); //not in gen 5+, uses regular hp was restored text +static const u8 sText_PkmnsXMadeYUseless[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} useless!"); //not in gen 5+, "cannot use move" +static const u8 sText_PkmnChangedTypeWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nmade it the {B_BUFF1} type!"); //not in gen 5+, "(mon)'s type changed to (type)" +static const u8 sText_PkmnPreventsParalysisWith[] = _("{B_EFF_NAME_WITH_PREFIX} cannot\nbe paralyzed!"); //unused +static const u8 sText_PkmnPreventsRomanceWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents romance!"); //not in gen 5+, instead "it does not affect the pokemon" +static const u8 sText_PkmnPreventsPoisoningWith[] = _("{B_EFF_NAME_WITH_PREFIX} cannot\nbe poisoned!"); //unused +static const u8 sText_PkmnPreventsConfusionWith[] = _("{B_DEF_NAME_WITH_PREFIX} doesn't\nbecome confused!"); +static const u8 sText_PkmnRaisedFirePowerWith[] = _("{The power of {B_DEF_NAME_WITH_PREFIX}'s\nFire-type moves rose!"); +static const u8 sText_PkmnAnchorsItselfWith[] = _("{B_DEF_NAME_WITH_PREFIX} anchors itself!"); +static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncuts {B_DEF_NAME_WITH_PREFIX}'s attack!"); //not in gen 5+, uses normal attack fell text +static const u8 sText_PkmnPreventsStatLossWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents stat loss!"); //not in gen 5+ static const u8 sText_PkmnHurtsWith[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt by\n{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}!"); -static const u8 sText_PkmnTraced[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} TRACED\n{B_BUFF1}'s {B_BUFF2}!"); -static const u8 sText_PkmnsXPreventsBurns[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY}\nprevents burns!"); -static const u8 sText_PkmnsXBlocksY[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nblocks {B_CURRENT_MOVE}!"); -static const u8 sText_PkmnsXBlocksY2[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nblocks {B_CURRENT_MOVE}!"); -static const u8 sText_PkmnsXRestoredHPALittle2[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nrestored its HP a little!"); -static const u8 sText_PkmnsXWhippedUpSandstorm[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nwhipped up a sandstorm!"); -static const u8 sText_PkmnsXIntensifiedSun[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nintensified the sun's rays!"); -static const u8 sText_PkmnsXPreventsYLoss[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents {B_BUFF1} loss!"); -static const u8 sText_PkmnsXInfatuatedY[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\ninfatuated {B_ATK_NAME_WITH_PREFIX}!"); -static const u8 sText_PkmnsXMadeYIneffective[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} ineffective!"); -static const u8 sText_PkmnsXCuredYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!"); -static const u8 sText_ItSuckedLiquidOoze[] = _("It sucked up the\nLIQUID OOZE!"); +static const u8 sText_PkmnTraced[] = _("It traced\n{B_BUFF1}'s {B_BUFF2}!"); +static const u8 sText_PkmnsXPreventsBurns[] = _("{B_EFF_NAME_WITH_PREFIX} cannot\nbe burned!"); +static const u8 sText_PkmnsXBlocksY[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nblocks {B_CURRENT_MOVE}!"); //not in gen 5+, instead "it does not affect the pokemon" +static const u8 sText_PkmnsXBlocksY2[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nblocks {B_CURRENT_MOVE}!"); //not in gen 5+, instead "it does not affect the pokemon" +static const u8 sText_PkmnsXRestoredHPALittle2[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nrestored its HP a little!"); //not in gen 5+, uses regular hp was restored text +static const u8 sText_PkmnsXWhippedUpSandstorm[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nwhipped up a sandstorm!"); //not in gen 5+, uses normal sandstorm start text +static const u8 sText_PkmnsXIntensifiedSun[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nintensified the sun's rays!"); //not in gen 5+, uses normal sun start text +static const u8 sText_PkmnsXPreventsYLoss[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents {B_BUFF1} loss!"); //not in gen 5+, instead "it does not affect the pokemon" +static const u8 sText_PkmnsXInfatuatedY[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\ninfatuated {B_ATK_NAME_WITH_PREFIX}!"); //not in gen 5+, uses regular infatuation text +static const u8 sText_PkmnsXMadeYIneffective[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} ineffective!"); //not in gen 5+, used for not being able to steal items +static const u8 sText_PkmnsXCuredYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!"); //not in gen 5+, uses regular status healed text +static const u8 sText_ItSuckedLiquidOoze[] = _("{B_DEF_NAME_WITH_PREFIX} sucked up the\nliquid ooze!"); static const u8 sText_PkmnTransformed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} transformed!"); -static const u8 sText_PkmnsXTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\ntook the attack!"); -const u8 gText_PkmnsXPreventsSwitching[] = _("{B_BUFF1}'s {B_LAST_ABILITY}\nprevents switching!\p"); -static const u8 sText_PreventedFromWorking[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevented {B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\l{B_BUFF1} from working!"); -static const u8 sText_PkmnsXMadeItIneffective[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade it ineffective!"); -static const u8 sText_PkmnsXPreventsFlinching[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY}\nprevents flinching!"); -static const u8 sText_PkmnsXPreventsYsZ[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX}'s\l{B_DEF_ABILITY} from working!"); -static const u8 sText_PkmnsAbilityPreventsAbility[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX}'s\l{B_DEF_ABILITY} from working!"); -static const u8 sText_PkmnsXCuredItsYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!"); -static const u8 sText_PkmnsXHadNoEffectOnY[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nhad no effect on {B_EFF_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnsXTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\ntook the attack!"); //not in gen 5+, uses normal took the attack text +const u8 gText_PkmnsXPreventsSwitching[] = _("{B_BUFF1}'s {B_LAST_ABILITY}\nprevents switching!\p"); //not in gen 5+ +static const u8 sText_PreventedFromWorking[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevented {B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\l{B_BUFF1} from working!"); //unused +static const u8 sText_PkmnsXMadeItIneffective[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade it ineffective!"); //not in gen 5+, instead "it does not affect the pokemon" +static const u8 sText_PkmnsXPreventsFlinching[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY}\nprevents flinching!"); //not in gen 5+, instead no text +static const u8 sText_PkmnsXPreventsYsZ[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX}'s\l{B_DEF_ABILITY} from working!"); +static const u8 sText_PkmnsAbilityPreventsAbility[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX}'s\l{B_DEF_ABILITY} from working!"); //not in gen 5+, instead "it does not affect the pokemon" +static const u8 sText_PkmnsXCuredItsYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!"); //not in gen 5+, uses regular status healed text +static const u8 sText_PkmnsXHadNoEffectOnY[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nhad no effect on {B_EFF_NAME_WITH_PREFIX}!"); //not in gen 5+, instead "it does not affect the pokemon" const u8 gText_StatSharply[] = _("sharply "); const u8 gText_StatRose[] = _("rose!"); static const u8 sText_StatHarshly[] = _("harshly "); @@ -327,7 +327,7 @@ static const u8 sText_StatsWontIncrease2[] = _("{B_ATK_NAME_WITH_PREFIX}'s stats static const u8 sText_StatsWontDecrease2[] = _("{B_DEF_NAME_WITH_PREFIX}'s stats won't\ngo any lower!"); static const u8 sText_CriticalHit[] = _("A critical hit!"); static const u8 sText_OneHitKO[] = _("It's a one-hit KO!"); -static const u8 sText_123Poof[] = _("{PAUSE 32}1, {PAUSE 15}2, and{PAUSE 15}… {PAUSE 15}… {PAUSE 15}… {PAUSE 15}{PLAY_SE SE_BALL_BOUNCE_1}Poof!\p"); +static const u8 sText_123Poof[] = _("One…{PAUSE 20}two…{PAUSE 20}and…{PAUSE 20}{PAUSE 20}{PLAY_SE SE_BALL_BOUNCE_1}ta-da!\p"); static const u8 sText_AndEllipsis[] = _("And…\p"); static const u8 sText_HMMovesCantBeForgotten[] = _("HM moves can't be\nforgotten now.\p"); static const u8 sText_NotVeryEffective[] = _("It's not very effective…"); @@ -335,58 +335,58 @@ static const u8 sText_SuperEffective[] = _("It's super effective!"); static const u8 sText_GotAwaySafely[] = _("{PLAY_SE SE_FLEE}Got away safely!\p"); static const u8 sText_PkmnFledUsingIts[] = _("{PLAY_SE SE_FLEE}{B_ATK_NAME_WITH_PREFIX} fled\nusing its {B_LAST_ITEM}!\p"); static const u8 sText_PkmnFledUsing[] = _("{PLAY_SE SE_FLEE}{B_ATK_NAME_WITH_PREFIX} fled\nusing {B_ATK_ABILITY}!\p"); -static const u8 sText_WildPkmnFled[] = _("{PLAY_SE SE_FLEE}Wild {B_BUFF1} fled!"); +static const u8 sText_WildPkmnFled[] = _("{PLAY_SE SE_FLEE}The wild {B_BUFF1} fled!"); static const u8 sText_PlayerDefeatedLinkTrainer[] = _("Player defeated\n{B_LINK_OPPONENT1_NAME}!"); -static const u8 sText_TwoLinkTrainersDefeated[] = _("Player beat {B_LINK_OPPONENT1_NAME}\nand {B_LINK_OPPONENT2_NAME}!"); +static const u8 sText_TwoLinkTrainersDefeated[] = _("Player defeated {B_LINK_OPPONENT1_NAME}\nand {B_LINK_OPPONENT2_NAME}!"); static const u8 sText_PlayerLostAgainstLinkTrainer[] = _("Player lost against\n{B_LINK_OPPONENT1_NAME}!"); static const u8 sText_PlayerLostToTwo[] = _("Player lost to {B_LINK_OPPONENT1_NAME}\nand {B_LINK_OPPONENT2_NAME}!"); static const u8 sText_PlayerBattledToDrawLinkTrainer[] = _("Player battled to a draw against\n{B_LINK_OPPONENT1_NAME}!"); static const u8 sText_PlayerBattledToDrawVsTwo[] = _("Player battled to a draw against\n{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}!"); -static const u8 sText_WildFled[] = _("{PLAY_SE SE_FLEE}{B_LINK_OPPONENT1_NAME} fled!"); -static const u8 sText_TwoWildFled[] = _("{PLAY_SE SE_FLEE}{B_LINK_OPPONENT1_NAME} and\n{B_LINK_OPPONENT2_NAME} fled!"); -static const u8 sText_NoRunningFromTrainers[] = _("No! There's no running\nfrom a TRAINER battle!\p"); +static const u8 sText_WildFled[] = _("{PLAY_SE SE_FLEE}{B_LINK_OPPONENT1_NAME} fled!"); //not in gen 5+, replaced with match was forfeited text +static const u8 sText_TwoWildFled[] = _("{PLAY_SE SE_FLEE}{B_LINK_OPPONENT1_NAME} and\n{B_LINK_OPPONENT2_NAME} fled!"); //not in gen 5+, replaced with match was forfeited text +static const u8 sText_NoRunningFromTrainers[] = _("No! There's no running\nfrom a Trainer battle!\p"); static const u8 sText_CantEscape[] = _("Can't escape!\p"); -static const u8 sText_DontLeaveBirch[] = _("PROF. BIRCH: Don't leave me like this!\p"); +static const u8 sText_DontLeaveBirch[] = _("PROF. BIRCH: Don't leave me like this!\p"); //no decapitalize until it is everywhere static const u8 sText_ButNothingHappened[] = _("But nothing happened!"); static const u8 sText_ButItFailed[] = _("But it failed!"); -static const u8 sText_ItHurtConfusion[] = _("It hurt itself in its\nconfusion!"); -static const u8 sText_MirrorMoveFailed[] = _("The Mirror Move failed!"); +static const u8 sText_ItHurtConfusion[] = _("It hurt itself in its confusion!"); +static const u8 sText_MirrorMoveFailed[] = _("The Mirror Move failed!"); //not in gen 5+, uses "but it failed" static const u8 sText_StartedToRain[] = _("It started to rain!"); static const u8 sText_DownpourStarted[] = _("A downpour started!"); // corresponds to DownpourText in pokegold and pokecrystal and is used by Rain Dance in GSC -static const u8 sText_RainContinues[] = _("Rain continues to fall."); +static const u8 sText_RainContinues[] = _("Rain continues to fall."); //not in gen 5+ static const u8 sText_DownpourContinues[] = _("The downpour continues."); // unused static const u8 sText_RainStopped[] = _("The rain stopped."); -static const u8 sText_SandstormBrewed[] = _("A sandstorm brewed!"); -static const u8 sText_SandstormRages[] = _("The sandstorm rages."); +static const u8 sText_SandstormBrewed[] = _("A sandstorm kicked up!"); +static const u8 sText_SandstormRages[] = _("The sandstorm rages."); //not in gen 5+ static const u8 sText_SandstormSubsided[] = _("The sandstorm subsided."); -static const u8 sText_SunlightGotBright[] = _("The sunlight got bright!"); -static const u8 sText_SunlightStrong[] = _("The sunlight is strong."); +static const u8 sText_SunlightGotBright[] = _("The sunlight turned harsh!"); +static const u8 sText_SunlightStrong[] = _("The sunlight is strong."); //not in gen 5+ static const u8 sText_SunlightFaded[] = _("The sunlight faded."); static const u8 sText_StartedHail[] = _("It started to hail!"); -static const u8 sText_HailContinues[] = _("Hail continues to fall."); +static const u8 sText_HailContinues[] = _("Hail continues to fall."); //not in gen 5+ static const u8 sText_HailStopped[] = _("The hail stopped."); static const u8 sText_StartedSnow[] = _("It started to snow!"); -static const u8 sText_SnowContinues[] = _("Snow continues to fall."); +static const u8 sText_SnowContinues[] = _("Snow continues to fall."); //not in gen 5+ (lol) static const u8 sText_SnowStopped[] = _("The snow stopped."); -static const u8 sText_FailedToSpitUp[] = _("But it failed to spit up\na thing!"); -static const u8 sText_FailedToSwallow[] = _("But it failed to swallow\na thing!"); -static const u8 sText_WindBecameHeatWave[] = _("The wind turned into a\nHEAT WAVE!"); -static const u8 sText_StatChangesGone[] = _("All stat changes were\neliminated!"); -static const u8 sText_CoinsScattered[] = _("Coins scattered everywhere!"); -static const u8 sText_TooWeakForSubstitute[] = _("It was too weak to make\na SUBSTITUTE!"); +static const u8 sText_FailedToSpitUp[] = _("But it failed to spit up\na thing!"); //not in gen 5+, uses "but it failed" +static const u8 sText_FailedToSwallow[] = _("But it failed to swallow\na thing!"); //not in gen 5+, uses "but it failed" +static const u8 sText_WindBecameHeatWave[] = _("The wind turned into a\nHeat Wave!"); //unused +static const u8 sText_StatChangesGone[] = _("All stat changes were eliminated!"); +static const u8 sText_CoinsScattered[] = _("Coins were scattered everywhere!"); +static const u8 sText_TooWeakForSubstitute[] = _("It was too weak to make\na substitute!"); static const u8 sText_SharedPain[] = _("The battlers shared\ntheir pain!"); static const u8 sText_BellChimed[] = _("A bell chimed!"); -static const u8 sText_FaintInThree[] = _("All affected POKéMON will\nfaint in three turns!"); -static const u8 sText_NoPPLeft[] = _("There's no PP left for\nthis move!\p"); +static const u8 sText_FaintInThree[] = _("All Pokémon that heard the song\nwill faint in three turns!"); +static const u8 sText_NoPPLeft[] = _("There's no PP left for\nthis move!\p"); //not in gen 5+ static const u8 sText_ButNoPPLeft[] = _("But there was no PP left\nfor the move!"); static const u8 sText_PkmnIgnoresAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} ignored\norders while asleep!"); -static const u8 sText_PkmnIgnoredOrders[] = _("{B_ATK_NAME_WITH_PREFIX} ignored\norders!"); +static const u8 sText_PkmnIgnoredOrders[] = _("{B_ATK_NAME_WITH_PREFIX} ignored orders!"); static const u8 sText_PkmnBeganToNap[] = _("{B_ATK_NAME_WITH_PREFIX} began to nap!"); static const u8 sText_PkmnLoafing[] = _("{B_ATK_NAME_WITH_PREFIX} is\nloafing around!"); -static const u8 sText_PkmnWontObey[] = _("{B_ATK_NAME_WITH_PREFIX} won't\nobey!"); +static const u8 sText_PkmnWontObey[] = _("{B_ATK_NAME_WITH_PREFIX} won't obey!"); static const u8 sText_PkmnTurnedAway[] = _("{B_ATK_NAME_WITH_PREFIX} turned away!"); static const u8 sText_PkmnPretendNotNotice[] = _("{B_ATK_NAME_WITH_PREFIX} pretended\nnot to notice!"); -static const u8 sText_EnemyAboutToSwitchPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} is\nabout to use {B_BUFF2}.\pWill {B_PLAYER_NAME} change\nPOKéMON?"); +static const u8 sText_EnemyAboutToSwitchPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} is\nabout to send in {B_BUFF2}.\p\nWill you switch your Pokémon?"); static const u8 sText_PkmnLearnedMove2[] = _("{B_ATK_NAME_WITH_PREFIX} learned\n{B_BUFF1}!"); static const u8 sText_PlayerDefeatedLinkTrainerTrainer1[] = _("Player defeated\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p"); static const u8 sText_CreptCloser[] = _("{B_PLAYER_NAME} crept closer to\n{B_OPPONENT_MON1_NAME}!"); @@ -396,15 +396,15 @@ static const u8 sText_PkmnCuriousAboutX[] = _("{B_OPPONENT_MON1_NAME} is curious static const u8 sText_PkmnEnthralledByX[] = _("{B_OPPONENT_MON1_NAME} is enthralled by\nthe {B_BUFF1}!"); static const u8 sText_PkmnIgnoredX[] = _("{B_OPPONENT_MON1_NAME} completely ignored\nthe {B_BUFF1}!"); static const u8 sText_ThrewPokeblockAtPkmn[] = _("{B_PLAYER_NAME} threw a {POKEBLOCK}\nat the {B_OPPONENT_MON1_NAME}!"); -static const u8 sText_OutOfSafariBalls[] = _("{PLAY_SE SE_DING_DONG}ANNOUNCER: You're out of\nSAFARI BALLS! Game over!\p"); +static const u8 sText_OutOfSafariBalls[] = _("{PLAY_SE SE_DING_DONG}ANNOUNCER: You're out of\nSafari Balls! Game over!\p"); static const u8 sText_OpponentMon1Appeared[] = _("{B_OPPONENT_MON1_NAME} appeared!\p"); -static const u8 sText_WildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p"); -static const u8 sText_LegendaryPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p"); -static const u8 sText_WildPkmnAppearedPause[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!{PAUSE 127}"); -static const u8 sText_TwoWildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} and\n{B_OPPONENT_MON2_NAME} appeared!\p"); -static const u8 sText_Trainer1WantsToBattle[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwould like to battle!\p"); -static const u8 sText_LinkTrainerWantsToBattle[] = _("{B_LINK_OPPONENT1_NAME}\nwants to battle!"); -static const u8 sText_TwoLinkTrainersWantToBattle[] = _("{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}\nwant to battle!"); +static const u8 sText_WildPkmnAppeared[] = _("A wild {B_OPPONENT_MON1_NAME} appeared!\p"); +static const u8 sText_LegendaryPkmnAppeared[] = _("A wild {B_OPPONENT_MON1_NAME} appeared!\p"); +static const u8 sText_WildPkmnAppearedPause[] = _("A wild {B_OPPONENT_MON1_NAME} appeared!{PAUSE 127}"); +static const u8 sText_TwoWildPkmnAppeared[] = _("Oh! A wild {B_OPPONENT_MON1_NAME} and\n{B_OPPONENT_MON2_NAME} appeared!\p"); +static const u8 sText_Trainer1WantsToBattle[] = _("You are challenged by\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p"); +static const u8 sText_LinkTrainerWantsToBattle[] = _("You are challenged by\n{B_LINK_OPPONENT1_NAME}!"); +static const u8 sText_TwoLinkTrainersWantToBattle[] = _("You are challenged by\n{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}!"); static const u8 sText_Trainer1SentOutPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME}!"); static const u8 sText_Trainer1SentOutTwoPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!"); static const u8 sText_Trainer1SentOutPkmn2[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_BUFF1}!"); @@ -415,15 +415,15 @@ static const u8 sText_LinkTrainerSentOutPkmn2[] = _("{B_LINK_OPPONENT1_NAME} sen static const u8 sText_LinkTrainerMultiSentOutPkmn[] = _("{B_LINK_SCR_TRAINER_NAME} sent out\n{B_BUFF1}!"); static const u8 sText_GoPkmn[] = _("Go! {B_PLAYER_MON1_NAME}!"); static const u8 sText_GoTwoPkmn[] = _("Go! {B_PLAYER_MON1_NAME} and\n{B_PLAYER_MON2_NAME}!"); -static const u8 sText_GoPkmn2[] = _("Go! {B_BUFF1}!"); -static const u8 sText_DoItPkmn[] = _("Do it! {B_BUFF1}!"); -static const u8 sText_GoForItPkmn[] = _("Go for it, {B_BUFF1}!"); -static const u8 sText_YourFoesWeakGetEmPkmn[] = _("Your foe's weak!\nGet 'em, {B_BUFF1}!"); +static const u8 sText_GoPkmn2[] = _("You're in charge, {B_BUFF1}!"); +static const u8 sText_DoItPkmn[] = _("Go for it, {B_BUFF1}!"); //rename variable, confusing +static const u8 sText_GoForItPkmn[] = _("Just a little more!\nHang in there, {B_BUFF1}!"); //rename variable, confusing +static const u8 sText_YourFoesWeakGetEmPkmn[] = _("Your opponent's weak!\nGet 'em, {B_BUFF1}!"); static const u8 sText_LinkPartnerSentOutPkmnGoPkmn[] = _("{B_LINK_PARTNER_NAME} sent out {B_LINK_PLAYER_MON2_NAME}!\nGo! {B_LINK_PLAYER_MON1_NAME}!"); -static const u8 sText_PkmnThatsEnough[] = _("{B_BUFF1}, that's enough!\nCome back!"); +static const u8 sText_PkmnThatsEnough[] = _("{B_BUFF1}, that's enough!\nCome back!"); //I think a later gen adds a new switch message for when you switch after fainting the opponent, need to implement separately static const u8 sText_PkmnComeBack[] = _("{B_BUFF1}, come back!"); -static const u8 sText_PkmnOkComeBack[] = _("{B_BUFF1}, OK!\nCome back!"); -static const u8 sText_PkmnGoodComeBack[] = _("{B_BUFF1}, good!\nCome back!"); +static const u8 sText_PkmnOkComeBack[] = _("OK, {B_BUFF1}!\nCome back!"); +static const u8 sText_PkmnGoodComeBack[] = _("Good job, {B_BUFF1}!\nCome back!"); static const u8 sText_Trainer1WithdrewPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwithdrew {B_BUFF1}!"); static const u8 sText_LinkTrainer1WithdrewPkmn[] = _("{B_LINK_OPPONENT1_NAME} withdrew\n{B_BUFF1}!"); static const u8 sText_LinkTrainer2WithdrewPkmn[] = _("{B_LINK_SCR_TRAINER_NAME} withdrew\n{B_BUFF1}!"); @@ -474,45 +474,45 @@ const u8 *const gPokeblockWasTooXStringTable[FLAVOR_COUNT] = }; static const u8 sText_PlayerUsedItem[] = _("You used\n{B_LAST_ITEM}!"); -static const u8 sText_WallyUsedItem[] = _("WALLY used\n{B_LAST_ITEM}!"); +static const u8 sText_WallyUsedItem[] = _("WALLY used\n{B_LAST_ITEM}!"); //no decapitalize until it is everywhere static const u8 sText_Trainer1UsedItem[] = _("{B_ATK_TRAINER_CLASS} {B_ATK_TRAINER_NAME}\nused {B_LAST_ITEM}!"); -static const u8 sText_TrainerBlockedBall[] = _("The TRAINER blocked the BALL!"); +static const u8 sText_TrainerBlockedBall[] = _("The Trainer blocked the Ball!"); static const u8 sText_DontBeAThief[] = _("Don't be a thief!"); -static const u8 sText_ItDodgedBall[] = _("It dodged the thrown BALL!\nThis POKéMON can't be caught!"); -static const u8 sText_YouMissedPkmn[] = _("You missed the POKéMON!"); -static const u8 sText_PkmnBrokeFree[] = _("Oh, no!\nThe POKéMON broke free!"); +static const u8 sText_ItDodgedBall[] = _("It dodged the thrown Ball!\nThis Pokémon can't be caught!"); +static const u8 sText_YouMissedPkmn[] = _("You missed the Pokémon!"); +static const u8 sText_PkmnBrokeFree[] = _("Oh, no!\nThe Pokémon broke free!"); static const u8 sText_ItAppearedCaught[] = _("Aww!\nIt appeared to be caught!"); static const u8 sText_AarghAlmostHadIt[] = _("Aargh!\nAlmost had it!"); -static const u8 sText_ShootSoClose[] = _("Shoot!\nIt was so close, too!"); +static const u8 sText_ShootSoClose[] = _("Gah!\nIt was so close, too!"); static const u8 sText_GotchaPkmnCaughtPlayer[] = _("Gotcha!\n{B_DEF_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}\p"); static const u8 sText_GotchaPkmnCaughtWally[] = _("Gotcha!\n{B_DEF_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}{PAUSE 127}"); -static const u8 sText_GiveNicknameCaptured[] = _("Give a nickname to the\ncaptured {B_DEF_NAME}?"); -static const u8 sText_PkmnSentToPC[] = _("{B_DEF_NAME} was sent to\n{B_PC_CREATOR_NAME} PC."); +static const u8 sText_GiveNicknameCaptured[] = _("Give a nickname to the\ncaught {B_DEF_NAME}?"); +static const u8 sText_PkmnSentToPC[] = _("{B_DEF_NAME} was sent to\n{B_PC_CREATOR_NAME} PC."); //not updating this since the terminology is different static const u8 sText_Someones[] = _("someone's"); -static const u8 sText_Lanettes[] = _("LANETTE's"); -static const u8 sText_PkmnDataAddedToDex[] = _("{B_DEF_NAME}'s data was\nadded to the POKéDEX.\p"); +static const u8 sText_Lanettes[] = _("LANETTE's"); //no decapitalize until it is everywhere +static const u8 sText_PkmnDataAddedToDex[] = _("{B_DEF_NAME}'s data was\nadded to the Pokédex.\p"); static const u8 sText_ItIsRaining[] = _("It is raining."); static const u8 sText_SandstormIsRaging[] = _("A sandstorm is raging."); -static const u8 sText_BoxIsFull[] = _("The BOX is full!\nYou can't catch any more!\p"); -static const u8 sText_EnigmaBerry[] = _("ENIGMA BERRY"); -static const u8 sText_BerrySuffix[] = _(" BERRY"); -static const u8 sText_PkmnsItemCuredParalysis[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ncured paralysis!"); -static const u8 sText_PkmnsItemCuredPoison[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ncured poison!"); +static const u8 sText_BoxIsFull[] = _("The Box is full!\nYou can't catch any more!\p"); +static const u8 sText_EnigmaBerry[] = _("ENIGMA BERRY"); //no decapitalize until it is everywhere +static const u8 sText_BerrySuffix[] = _(" BERRY"); //no decapitalize until it is everywhere +static const u8 sText_PkmnsItemCuredParalysis[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ncured its paralysis!"); +static const u8 sText_PkmnsItemCuredPoison[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ncured its poison!"); static const u8 sText_PkmnsItemHealedBurn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nhealed its burn!"); static const u8 sText_PkmnsItemHealedFrostbite[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nhealed its frostbite!"); static const u8 sText_PkmnsItemDefrostedIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ndefrosted it!"); -static const u8 sText_PkmnsItemWokeIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nwoke it from its sleep!"); -static const u8 sText_PkmnsItemSnappedOut[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nsnapped it out of confusion!"); +static const u8 sText_PkmnsItemWokeIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nwoke it up!"); +static const u8 sText_PkmnsItemSnappedOut[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nsnapped it out of its confusion!"); static const u8 sText_PkmnsItemCuredProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ncured its {B_BUFF1} problem!"); static const u8 sText_PkmnsItemNormalizedStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nnormalized its status!"); -static const u8 sText_PkmnsItemRestoredHealth[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nrestored health!"); -static const u8 sText_PkmnsItemRestoredPP[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nrestored {B_BUFF1}'s PP!"); -static const u8 sText_PkmnsItemRestoredStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nrestored its status!"); -static const u8 sText_PkmnsItemRestoredHPALittle[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nrestored its HP a little!"); +static const u8 sText_PkmnsItemRestoredHealth[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored its\nhealth using its {B_LAST_ITEM}!"); +static const u8 sText_PkmnsItemRestoredPP[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored\n[VAR MOVE(2)]'s PP using its\l{B_LAST_ITEM}!"); +static const u8 sText_PkmnsItemRestoredStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored its\nstatus using its {B_LAST_ITEM}!"); +static const u8 sText_PkmnsItemRestoredHPALittle[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored\na little HP using its {B_LAST_ITEM}!"); static const u8 sText_ItemAllowsOnlyYMove[] = _("{B_LAST_ITEM} allows the\nuse of only {B_CURRENT_MOVE}!\p"); static const u8 sText_PkmnHungOnWithX[] = _("{B_DEF_NAME_WITH_PREFIX} hung on\nusing its {B_LAST_ITEM}!"); const u8 gText_EmptyString3[] = _(""); -static const u8 sText_YouThrowABallNowRight[] = _("You throw a BALL now, right?\nI… I'll do my best!"); +static const u8 sText_YouThrowABallNowRight[] = _("You throw a Ball now, right?\nI… I'll do my best!"); // early declaration of strings static const u8 sText_PkmnIncapableOfPower[]; From 24e4206d3bd7d7c4e5989da3ee1c2b4341340db1 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Thu, 17 Aug 2023 21:40:15 -0500 Subject: [PATCH 02/68] Update battle_message.c --- src/battle_message.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index cb8f56c68160..3b99243068df 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -71,7 +71,7 @@ static const u8 sText_UseNextPkmn[] = _("Use next Pokémon?"); static const u8 sText_AttackMissed[] = _("{B_ATK_NAME_WITH_PREFIX}'s\nattack missed!"); static const u8 sText_PkmnProtectedItself[] = _("{B_DEF_NAME_WITH_PREFIX}\nprotected itself!"); static const u8 sText_AvoidedDamage[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\ndamage with {B_DEF_ABILITY}!"); //not in gen 5+ -static const u8 sText_PkmnMakesGroundMiss[] = _("{B_DEF_NAME_WITH_PREFIX} makes GROUND\nmoves miss with {B_DEF_ABILITY}!"); //not in gen 5+ +static const u8 sText_PkmnMakesGroundMiss[] = _("{B_DEF_NAME_WITH_PREFIX} makes Ground\nmoves miss with {B_DEF_ABILITY}!"); //not in gen 5+ static const u8 sText_PkmnAvoidedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\nthe attack!"); static const u8 sText_ItDoesntAffect[] = _("It doesn't affect\n{B_DEF_NAME_WITH_PREFIX}…"); static const u8 sText_AttackerFainted[] = _("{B_ATK_NAME_WITH_PREFIX} fainted!\p"); @@ -287,7 +287,7 @@ static const u8 sText_PkmnPreventsParalysisWith[] = _("{B_EFF_NAME_WITH_PREFIX} static const u8 sText_PkmnPreventsRomanceWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents romance!"); //not in gen 5+, instead "it does not affect the pokemon" static const u8 sText_PkmnPreventsPoisoningWith[] = _("{B_EFF_NAME_WITH_PREFIX} cannot\nbe poisoned!"); //unused static const u8 sText_PkmnPreventsConfusionWith[] = _("{B_DEF_NAME_WITH_PREFIX} doesn't\nbecome confused!"); -static const u8 sText_PkmnRaisedFirePowerWith[] = _("{The power of {B_DEF_NAME_WITH_PREFIX}'s\nFire-type moves rose!"); +static const u8 sText_PkmnRaisedFirePowerWith[] = _("The power of {B_DEF_NAME_WITH_PREFIX}'s\nFire-type moves rose!"); static const u8 sText_PkmnAnchorsItselfWith[] = _("{B_DEF_NAME_WITH_PREFIX} anchors itself!"); static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncuts {B_DEF_NAME_WITH_PREFIX}'s attack!"); //not in gen 5+, uses normal attack fell text static const u8 sText_PkmnPreventsStatLossWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents stat loss!"); //not in gen 5+ From a06ef789675d51e48cf44b796d91721498ded561 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Thu, 17 Aug 2023 21:42:43 -0500 Subject: [PATCH 03/68] Update battle_message.c --- src/battle_message.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_message.c b/src/battle_message.c index 3b99243068df..ca7fdce8e303 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -506,7 +506,7 @@ static const u8 sText_PkmnsItemSnappedOut[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} static const u8 sText_PkmnsItemCuredProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ncured its {B_BUFF1} problem!"); static const u8 sText_PkmnsItemNormalizedStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nnormalized its status!"); static const u8 sText_PkmnsItemRestoredHealth[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored its\nhealth using its {B_LAST_ITEM}!"); -static const u8 sText_PkmnsItemRestoredPP[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored\n[VAR MOVE(2)]'s PP using its\l{B_LAST_ITEM}!"); +static const u8 sText_PkmnsItemRestoredPP[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored\n{B_BUFF1}'s PP using its\l{B_LAST_ITEM}!"); static const u8 sText_PkmnsItemRestoredStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored its\nstatus using its {B_LAST_ITEM}!"); static const u8 sText_PkmnsItemRestoredHPALittle[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored\na little HP using its {B_LAST_ITEM}!"); static const u8 sText_ItemAllowsOnlyYMove[] = _("{B_LAST_ITEM} allows the\nuse of only {B_CURRENT_MOVE}!\p"); From 84d24414c94242e09c1730d86d9b966eaeeb4fd3 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Fri, 18 Aug 2023 20:30:14 -0500 Subject: [PATCH 04/68] Change some scripts to be accurate --- data/battle_scripts_1.s | 6 +-- src/battle_message.c | 117 ++++++++++++++++++++-------------------- 2 files changed, 60 insertions(+), 63 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index f24047f115ca..a5e6caeeacaa 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -3546,7 +3546,7 @@ BattleScript_DreamEaterWorked: healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER jumpifmovehadnoeffect BattleScript_DreamEaterTryFaintEnd - printstring STRINGID_PKMNDREAMEATEN + printstring STRINGID_PKMNENERGYDRAINED waitmessage B_WAIT_TIME_LONG BattleScript_DreamEaterTryFaintEnd: tryfaintmon BS_TARGET @@ -9689,8 +9689,6 @@ BattleScript_BerryConfuseHealEnd2_Anim: orword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_SCRIPTING datahpupdate BS_SCRIPTING - printstring STRINGID_FORXCOMMAYZ - waitmessage B_WAIT_TIME_LONG setmoveeffect MOVE_EFFECT_CONFUSION | MOVE_EFFECT_AFFECTS_USER seteffectprimary removeitem BS_SCRIPTING @@ -9708,8 +9706,6 @@ BattleScript_BerryConfuseHealRet_Anim: orword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_SCRIPTING datahpupdate BS_SCRIPTING - printstring STRINGID_FORXCOMMAYZ - waitmessage B_WAIT_TIME_LONG setmoveeffect MOVE_EFFECT_CONFUSION | MOVE_EFFECT_CERTAIN seteffectprimary removeitem BS_TARGET diff --git a/src/battle_message.c b/src/battle_message.c index ca7fdce8e303..bae164a04f68 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -70,8 +70,8 @@ static const u8 sText_DidNotLearnMove[] = _("{B_BUFF1} did not learn\n{B_BUFF2}. static const u8 sText_UseNextPkmn[] = _("Use next Pokémon?"); static const u8 sText_AttackMissed[] = _("{B_ATK_NAME_WITH_PREFIX}'s\nattack missed!"); static const u8 sText_PkmnProtectedItself[] = _("{B_DEF_NAME_WITH_PREFIX}\nprotected itself!"); -static const u8 sText_AvoidedDamage[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\ndamage with {B_DEF_ABILITY}!"); //not in gen 5+ -static const u8 sText_PkmnMakesGroundMiss[] = _("{B_DEF_NAME_WITH_PREFIX} makes Ground\nmoves miss with {B_DEF_ABILITY}!"); //not in gen 5+ +static const u8 sText_AvoidedDamage[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\ndamage with {B_DEF_ABILITY}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnMakesGroundMiss[] = _("{B_DEF_NAME_WITH_PREFIX} makes Ground\nmoves miss with {B_DEF_ABILITY}!"); //not in gen 5+, ability popup static const u8 sText_PkmnAvoidedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\nthe attack!"); static const u8 sText_ItDoesntAffect[] = _("It doesn't affect\n{B_DEF_NAME_WITH_PREFIX}…"); static const u8 sText_AttackerFainted[] = _("{B_ATK_NAME_WITH_PREFIX} fainted!\p"); @@ -85,29 +85,29 @@ static const u8 sText_PlayerWhiteout2[] = _("{B_PLAYER_NAME} dropped ¥{B_BUFF1} #else static const u8 sText_PlayerWhiteout2[] = _("{B_PLAYER_NAME} blacked out!{PAUSE_UNTIL_PRESS}"); #endif -static const u8 sText_PreventsEscape[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} prevents\nescape with {B_SCR_ACTIVE_ABILITY}!\p"); -static const u8 sText_CantEscape2[] = _("Can't escape!\p"); +static const u8 sText_PreventsEscape[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} prevents\nescape with {B_SCR_ACTIVE_ABILITY}!\p"); //not in gen 5+, ability popup +static const u8 sText_CantEscape2[] = _("You couldn’t get away!\p"); static const u8 sText_AttackerCantEscape[] = _("{B_ATK_NAME_WITH_PREFIX} can't escape!"); static const u8 sText_HitXTimes[] = _("Hit {B_BUFF1} time(s)!"); static const u8 sText_PkmnFellAsleep[] = _("{B_EFF_NAME_WITH_PREFIX}\nfell asleep!"); -static const u8 sText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade {B_EFF_NAME_WITH_PREFIX} sleep!"); //not in gen 5+ +static const u8 sText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade {B_EFF_NAME_WITH_PREFIX} sleep!"); //not in gen 5+, ability popup static const u8 sText_PkmnAlreadyAsleep[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready asleep!"); static const u8 sText_PkmnAlreadyAsleep2[] = _("{B_ATK_NAME_WITH_PREFIX} is\nalready asleep!"); -static const u8 sText_PkmnWasntAffected[] = _("{B_DEF_NAME_WITH_PREFIX}\nwasn't affected!"); //not in gen 5+ +static const u8 sText_PkmnWasntAffected[] = _("{B_DEF_NAME_WITH_PREFIX}\nwasn't affected!"); //not in gen 5+, ability popup static const u8 sText_PkmnWasPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX}\nwas poisoned!"); -static const u8 sText_PkmnPoisonedBy[] = _("{B_EFF_NAME_WITH_PREFIX} was poisoned by\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}!"); //not in gen 5+ +static const u8 sText_PkmnPoisonedBy[] = _("{B_EFF_NAME_WITH_PREFIX} was poisoned by\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}!"); //not in gen 5+, ability popup static const u8 sText_PkmnHurtByPoison[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby poison!"); static const u8 sText_PkmnAlreadyPoisoned[] = _("{B_DEF_NAME_WITH_PREFIX} is already\npoisoned."); static const u8 sText_PkmnBadlyPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX} was badly\npoisoned!"); static const u8 sText_PkmnEnergyDrained[] = _("{B_DEF_NAME_WITH_PREFIX} had its\nenergy drained!"); static const u8 sText_PkmnWasBurned[] = _("{B_EFF_NAME_WITH_PREFIX} was burned!"); static const u8 sText_PkmnGotFrostbite[] = _("{B_EFF_NAME_WITH_PREFIX} got frostbite!"); -static const u8 sText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nburned {B_EFF_NAME_WITH_PREFIX}!"); //not in gen 5+ +static const u8 sText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nburned {B_EFF_NAME_WITH_PREFIX}!"); //not in gen 5+, ability popup static const u8 sText_PkmnHurtByBurn[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby its burn!"); static const u8 sText_PkmnHurtByFrostbite[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby its frostbite!"); static const u8 sText_PkmnAlreadyHasBurn[] = _("{B_DEF_NAME_WITH_PREFIX} already\nhas a burn."); static const u8 sText_PkmnWasFrozen[] = _("{B_EFF_NAME_WITH_PREFIX} was\nfrozen solid!"); -static const u8 sText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nfroze {B_EFF_NAME_WITH_PREFIX} solid!"); //not in gen 5+ +static const u8 sText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nfroze {B_EFF_NAME_WITH_PREFIX} solid!"); //not in gen 5+, ability popup static const u8 sText_PkmnIsFrozen[] = _("{B_ATK_NAME_WITH_PREFIX} is\nfrozen solid!"); static const u8 sText_PkmnWasDefrosted[] = _("{B_DEF_NAME_WITH_PREFIX} thawed out!"); static const u8 sText_PkmnWasDefrosted2[] = _("{B_ATK_NAME_WITH_PREFIX} thawed out!"); @@ -116,11 +116,11 @@ static const u8 sText_PkmnFrostbiteHealed[] = _("{B_DEF_NAME_WITH_PREFIX}'s fros static const u8 sText_PkmnFrostbiteHealed2[] = _("{B_ATK_NAME_WITH_PREFIX}'s frostbite\nwas healed!"); static const u8 sText_PkmnFrostbiteHealedBy[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\nhealed its frostbite!"); static const u8 sText_PkmnWasParalyzed[] = _("{B_EFF_NAME_WITH_PREFIX} is paralyzed!\nIt may be unable to move!"); -static const u8 sText_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nparalyzed {B_EFF_NAME_WITH_PREFIX}!\lIt may be unable to move!"); //not in gen 5+ +static const u8 sText_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nparalyzed {B_EFF_NAME_WITH_PREFIX}!\lIt may be unable to move!"); //not in gen 5+, ability popup static const u8 sText_PkmnIsParalyzed[] = _("{B_ATK_NAME_WITH_PREFIX} is paralyzed!\nIt can't move!"); static const u8 sText_PkmnIsAlreadyParalyzed[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready paralyzed!"); static const u8 sText_PkmnHealedParalysis[] = _("{B_DEF_NAME_WITH_PREFIX} was cured of\nparalysis."); -static const u8 sText_PkmnDreamEaten[] = _("{B_DEF_NAME_WITH_PREFIX}'s\ndream was eaten!"); //not in gen 5+ +static const u8 sText_PkmnDreamEaten[] = _("{B_DEF_NAME_WITH_PREFIX}'s\ndream was eaten!"); //not in gen 5+, expansion doesn't use anymore static const u8 sText_StatsWontIncrease[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} won't\ngo any higher!"); static const u8 sText_StatsWontDecrease[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1} won't\ngo any lower!"); static const u8 sText_TeamStoppedWorking[] = _("Your team's {B_BUFF1}\nstopped working!"); //unused @@ -186,7 +186,7 @@ static const u8 sText_PkmnStockpiled[] = _("{B_ATK_NAME_WITH_PREFIX} stockpiled static const u8 sText_PkmnCantStockpile[] = _("{B_ATK_NAME_WITH_PREFIX} can't\nstockpile any more!"); static const u8 sText_PkmnCantSleepInUproar2[] = _("But {B_DEF_NAME_WITH_PREFIX} can't\nsleep in an uproar!"); static const u8 sText_UproarKeptPkmnAwake[] = _("But the uproar kept\n{B_DEF_NAME_WITH_PREFIX} awake!"); -static const u8 sText_PkmnStayedAwakeUsing[] = _("{B_DEF_NAME_WITH_PREFIX} stayed awake\nusing its {B_DEF_ABILITY}!"); //not in gen 5+ +static const u8 sText_PkmnStayedAwakeUsing[] = _("{B_DEF_NAME_WITH_PREFIX} stayed awake\nusing its {B_DEF_ABILITY}!"); //not in gen 5+, ability popup static const u8 sText_PkmnStoringEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} is storing\nenergy!"); static const u8 sText_PkmnUnleashedEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} unleashed\nenergy!"); static const u8 sText_PkmnFatigueConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} became\nconfused due to fatigue!"); @@ -230,7 +230,7 @@ static const u8 sText_PkmnFledFromBattle[] = _("{B_ATK_NAME_WITH_PREFIX} fled fr static const u8 sText_PkmnForesawAttack[] = _("{B_ATK_NAME_WITH_PREFIX} foresaw\nan attack!"); static const u8 sText_PkmnTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX} took the\n{B_BUFF1} attack!"); static const u8 sText_PkmnChoseXAsDestiny[] = _("{B_ATK_NAME_WITH_PREFIX} chose\nDoom Desire as its destiny!"); -static const u8 sText_PkmnAttack[] = _("{B_BUFF1}'s attack!"); //not in gen 5+, beat up rework +static const u8 sText_PkmnAttack[] = _("{B_BUFF1}'s attack!"); //not in gen 5+, expansion doesn't use anymore static const u8 sText_PkmnCenterAttention[] = _("{B_DEF_NAME_WITH_PREFIX} became\nthe center of attention!"); static const u8 sText_PkmnChargingPower[] = _("{B_ATK_NAME_WITH_PREFIX} began\ncharging power!"); static const u8 sText_NaturePowerTurnedInto[] = _("Nature Power turned into\n{B_CURRENT_MOVE}!"); @@ -244,7 +244,7 @@ static const u8 sText_PkmnObtainedX[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B static const u8 sText_PkmnObtainedX2[] = _("{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}."); static const u8 sText_PkmnObtainedXYObtainedZ[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}.\p{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}."); static const u8 sText_PkmnCopiedFoe[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}!"); -static const u8 sText_PkmnMadeWish[] = _("{B_ATK_NAME_WITH_PREFIX} made a wish!"); //not in gen 5+ +static const u8 sText_PkmnMadeWish[] = _("{B_ATK_NAME_WITH_PREFIX} made a wish!"); //unused static const u8 sText_PkmnWishCameTrue[] = _("{B_BUFF1}'s wish\ncame true!"); static const u8 sText_PkmnPlantedRoots[] = _("{B_ATK_NAME_WITH_PREFIX} planted its roots!"); static const u8 sText_PkmnAbsorbedNutrients[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed\nnutrients with its roots!"); @@ -264,7 +264,7 @@ static const u8 sText_FireWeakened[] = _("Fire's power was weakened!"); static const u8 sText_XFoundOneY[] = _("{B_ATK_NAME_WITH_PREFIX} found\none {B_LAST_ITEM}!"); static const u8 sText_SoothingAroma[] = _("A soothing aroma wafted\nthrough the area!"); static const u8 sText_ItemsCantBeUsedNow[] = _("Items can't be used now.{PAUSE 64}"); //not in gen 5+, i think -static const u8 sText_ForXCommaYZ[] = _("For {B_SCR_ACTIVE_NAME_WITH_PREFIX},\n{B_LAST_ITEM} {B_BUFF1}"); //not in gen 5+, goes straight to if mon liked berry or not +static const u8 sText_ForXCommaYZ[] = _("For {B_SCR_ACTIVE_NAME_WITH_PREFIX},\n{B_LAST_ITEM} {B_BUFF1}"); //not in gen 5+, expansion doesn't use anymore static const u8 sText_PkmnUsedXToGetPumped[] = _("{B_ACTIVE_NAME_WITH_PREFIX} used\nthe {B_LAST_ITEM} to get pumped!"); static const u8 sText_PkmnLostFocus[] = _("{B_ATK_NAME_WITH_PREFIX} lost its\nfocus and couldn't move!"); static const u8 sText_PkmnWasDraggedOut[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndragged out!\p"); @@ -276,44 +276,44 @@ static const u8 sText_PkmnCantUseMoveTorment[] = _("{B_ACTIVE_NAME_WITH_PREFIX} static const u8 sText_PkmnCantUseMoveTaunt[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use\n{B_CURRENT_MOVE} after the taunt!\p"); static const u8 sText_PkmnCantUseMoveSealed[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can't use\nthe sealed {B_CURRENT_MOVE}!\p"); static const u8 sText_PkmnCantUseMoveThroatChop[] = _("The effects of Throat Chop prevent\n{B_ACTIVE_NAME_WITH_PREFIX} from using certain moves!\p"); -static const u8 sText_PkmnMadeItRain[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade it rain!"); //not in gen 5+, uses normal rain start text -static const u8 sText_PkmnRaisedSpeed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nraised its Speed!"); //not in gen 5+, uses normal speed raise text -static const u8 sText_PkmnProtectedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was protected\nby {B_DEF_ABILITY}!"); //not in gen 5+, uses "endured the hit" text in all cases +static const u8 sText_PkmnMadeItRain[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade it rain!"); //not in gen 5+, ability popup +static const u8 sText_PkmnRaisedSpeed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nraised its Speed!"); //not in gen 5+, ability popup +static const u8 sText_PkmnProtectedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was protected\nby {B_DEF_ABILITY}!"); //not in gen 5+, ability popup static const u8 sText_PkmnPreventsUsage[] = _("{B_ATK_NAME_WITH_PREFIX}\ncannot use {B_CURRENT_MOVE}!"); -static const u8 sText_PkmnRestoredHPUsing[] = _("{B_DEF_NAME_WITH_PREFIX} restored HP\nusing its {B_DEF_ABILITY}!"); //not in gen 5+, uses regular hp was restored text -static const u8 sText_PkmnsXMadeYUseless[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} useless!"); //not in gen 5+, "cannot use move" -static const u8 sText_PkmnChangedTypeWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nmade it the {B_BUFF1} type!"); //not in gen 5+, "(mon)'s type changed to (type)" -static const u8 sText_PkmnPreventsParalysisWith[] = _("{B_EFF_NAME_WITH_PREFIX} cannot\nbe paralyzed!"); //unused -static const u8 sText_PkmnPreventsRomanceWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents romance!"); //not in gen 5+, instead "it does not affect the pokemon" -static const u8 sText_PkmnPreventsPoisoningWith[] = _("{B_EFF_NAME_WITH_PREFIX} cannot\nbe poisoned!"); //unused -static const u8 sText_PkmnPreventsConfusionWith[] = _("{B_DEF_NAME_WITH_PREFIX} doesn't\nbecome confused!"); -static const u8 sText_PkmnRaisedFirePowerWith[] = _("The power of {B_DEF_NAME_WITH_PREFIX}'s\nFire-type moves rose!"); -static const u8 sText_PkmnAnchorsItselfWith[] = _("{B_DEF_NAME_WITH_PREFIX} anchors itself!"); -static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncuts {B_DEF_NAME_WITH_PREFIX}'s attack!"); //not in gen 5+, uses normal attack fell text -static const u8 sText_PkmnPreventsStatLossWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents stat loss!"); //not in gen 5+ +static const u8 sText_PkmnRestoredHPUsing[] = _("{B_DEF_NAME_WITH_PREFIX} restored HP\nusing its {B_DEF_ABILITY}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXMadeYUseless[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} useless!"); //not in gen 5+, ability popup +static const u8 sText_PkmnChangedTypeWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nmade it the {B_BUFF1} type!"); //not in gen 5+, ability popup +static const u8 sText_PkmnPreventsParalysisWith[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents paralysis!"); //not in gen 5+, ability popup +static const u8 sText_PkmnPreventsRomanceWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents romance!"); //not in gen 5+, ability popup +static const u8 sText_PkmnPreventsPoisoningWith[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents poisoning!"); //not in gen 5+, ability popup +static const u8 sText_PkmnPreventsConfusionWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents confusion!"); //not in gen 5+, ability popup +static const u8 sText_PkmnRaisedFirePowerWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nraised the power of Fire-type moves!"); //not in gen 5+, ability popup +static const u8 sText_PkmnAnchorsItselfWith[] = _("{B_DEF_NAME_WITH_PREFIX} anchors\nitself with {B_DEF_ABILITY}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncuts {B_DEF_NAME_WITH_PREFIX}'s attack!"); //not in gen 5+, ability popup +static const u8 sText_PkmnPreventsStatLossWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents stat loss!"); //not in gen 5+, ability popup static const u8 sText_PkmnHurtsWith[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt by\n{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}!"); static const u8 sText_PkmnTraced[] = _("It traced\n{B_BUFF1}'s {B_BUFF2}!"); -static const u8 sText_PkmnsXPreventsBurns[] = _("{B_EFF_NAME_WITH_PREFIX} cannot\nbe burned!"); -static const u8 sText_PkmnsXBlocksY[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nblocks {B_CURRENT_MOVE}!"); //not in gen 5+, instead "it does not affect the pokemon" -static const u8 sText_PkmnsXBlocksY2[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nblocks {B_CURRENT_MOVE}!"); //not in gen 5+, instead "it does not affect the pokemon" -static const u8 sText_PkmnsXRestoredHPALittle2[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nrestored its HP a little!"); //not in gen 5+, uses regular hp was restored text -static const u8 sText_PkmnsXWhippedUpSandstorm[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nwhipped up a sandstorm!"); //not in gen 5+, uses normal sandstorm start text -static const u8 sText_PkmnsXIntensifiedSun[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nintensified the sun's rays!"); //not in gen 5+, uses normal sun start text -static const u8 sText_PkmnsXPreventsYLoss[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents {B_BUFF1} loss!"); //not in gen 5+, instead "it does not affect the pokemon" -static const u8 sText_PkmnsXInfatuatedY[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\ninfatuated {B_ATK_NAME_WITH_PREFIX}!"); //not in gen 5+, uses regular infatuation text -static const u8 sText_PkmnsXMadeYIneffective[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} ineffective!"); //not in gen 5+, used for not being able to steal items -static const u8 sText_PkmnsXCuredYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!"); //not in gen 5+, uses regular status healed text +static const u8 sText_PkmnsXPreventsBurns[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY}\nprevents burns!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXBlocksY[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nblocks {B_CURRENT_MOVE}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXBlocksY2[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nblocks {B_CURRENT_MOVE}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXRestoredHPALittle2[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nrestored its HP a little!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXWhippedUpSandstorm[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nwhipped up a sandstorm!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXIntensifiedSun[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nintensified the sun's rays!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXPreventsYLoss[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents {B_BUFF1} loss!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXInfatuatedY[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\ninfatuated {B_ATK_NAME_WITH_PREFIX}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXMadeYIneffective[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} ineffective!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXCuredYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!"); //not in gen 5+, ability popup static const u8 sText_ItSuckedLiquidOoze[] = _("{B_DEF_NAME_WITH_PREFIX} sucked up the\nliquid ooze!"); static const u8 sText_PkmnTransformed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} transformed!"); -static const u8 sText_PkmnsXTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\ntook the attack!"); //not in gen 5+, uses normal took the attack text -const u8 gText_PkmnsXPreventsSwitching[] = _("{B_BUFF1}'s {B_LAST_ABILITY}\nprevents switching!\p"); //not in gen 5+ +static const u8 sText_PkmnsXTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\ntook the attack!"); //not in gen 5+, ability popup +const u8 gText_PkmnsXPreventsSwitching[] = _("{B_BUFF1}'s {B_LAST_ABILITY}\nprevents switching!\p"); //not in gen 5+, ability popup static const u8 sText_PreventedFromWorking[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevented {B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\l{B_BUFF1} from working!"); //unused -static const u8 sText_PkmnsXMadeItIneffective[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade it ineffective!"); //not in gen 5+, instead "it does not affect the pokemon" -static const u8 sText_PkmnsXPreventsFlinching[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY}\nprevents flinching!"); //not in gen 5+, instead no text +static const u8 sText_PkmnsXMadeItIneffective[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade it ineffective!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXPreventsFlinching[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY}\nprevents flinching!"); //not in gen 5+, ability popup static const u8 sText_PkmnsXPreventsYsZ[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX}'s\l{B_DEF_ABILITY} from working!"); -static const u8 sText_PkmnsAbilityPreventsAbility[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX}'s\l{B_DEF_ABILITY} from working!"); //not in gen 5+, instead "it does not affect the pokemon" -static const u8 sText_PkmnsXCuredItsYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!"); //not in gen 5+, uses regular status healed text -static const u8 sText_PkmnsXHadNoEffectOnY[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nhad no effect on {B_EFF_NAME_WITH_PREFIX}!"); //not in gen 5+, instead "it does not affect the pokemon" +static const u8 sText_PkmnsAbilityPreventsAbility[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX}'s\l{B_DEF_ABILITY} from working!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXCuredItsYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXHadNoEffectOnY[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nhad no effect on {B_EFF_NAME_WITH_PREFIX}!"); //not in gen 5+, ability popup const u8 gText_StatSharply[] = _("sharply "); const u8 gText_StatRose[] = _("rose!"); static const u8 sText_StatHarshly[] = _("harshly "); @@ -332,7 +332,7 @@ static const u8 sText_AndEllipsis[] = _("And…\p"); static const u8 sText_HMMovesCantBeForgotten[] = _("HM moves can't be\nforgotten now.\p"); static const u8 sText_NotVeryEffective[] = _("It's not very effective…"); static const u8 sText_SuperEffective[] = _("It's super effective!"); -static const u8 sText_GotAwaySafely[] = _("{PLAY_SE SE_FLEE}Got away safely!\p"); +static const u8 sText_GotAwaySafely[] = _("{PLAY_SE SE_FLEE}You got away safely!!\p"); static const u8 sText_PkmnFledUsingIts[] = _("{PLAY_SE SE_FLEE}{B_ATK_NAME_WITH_PREFIX} fled\nusing its {B_LAST_ITEM}!\p"); static const u8 sText_PkmnFledUsing[] = _("{PLAY_SE SE_FLEE}{B_ATK_NAME_WITH_PREFIX} fled\nusing {B_ATK_ABILITY}!\p"); static const u8 sText_WildPkmnFled[] = _("{PLAY_SE SE_FLEE}The wild {B_BUFF1} fled!"); @@ -416,13 +416,14 @@ static const u8 sText_LinkTrainerMultiSentOutPkmn[] = _("{B_LINK_SCR_TRAINER_NAM static const u8 sText_GoPkmn[] = _("Go! {B_PLAYER_MON1_NAME}!"); static const u8 sText_GoTwoPkmn[] = _("Go! {B_PLAYER_MON1_NAME} and\n{B_PLAYER_MON2_NAME}!"); static const u8 sText_GoPkmn2[] = _("You're in charge, {B_BUFF1}!"); -static const u8 sText_DoItPkmn[] = _("Go for it, {B_BUFF1}!"); //rename variable, confusing -static const u8 sText_GoForItPkmn[] = _("Just a little more!\nHang in there, {B_BUFF1}!"); //rename variable, confusing +static const u8 sText_GoForItPkmn[] = _("Go for it, {B_BUFF1}!"); +static const u8 sText_JustALittleMorePkmn[] = _("Just a little more!\nHang in there, {B_BUFF1}!"); static const u8 sText_YourFoesWeakGetEmPkmn[] = _("Your opponent's weak!\nGet 'em, {B_BUFF1}!"); static const u8 sText_LinkPartnerSentOutPkmnGoPkmn[] = _("{B_LINK_PARTNER_NAME} sent out {B_LINK_PLAYER_MON2_NAME}!\nGo! {B_LINK_PLAYER_MON1_NAME}!"); -static const u8 sText_PkmnThatsEnough[] = _("{B_BUFF1}, that's enough!\nCome back!"); //I think a later gen adds a new switch message for when you switch after fainting the opponent, need to implement separately +static const u8 sText_PkmnSwitchOut[] = _("{B_BUFF1}, switch out!\nCome back!"); //Later gens use this message when switching out a pokemon during shift rules. static const u8 sText_PkmnComeBack[] = _("{B_BUFF1}, come back!"); -static const u8 sText_PkmnOkComeBack[] = _("OK, {B_BUFF1}!\nCome back!"); +static const u8 sText_PkmnThatsEnough[] = _("{B_BUFF1}, that's enough!\nCome back!"); +static const u8 sText_PkmnOkComeBack[] = _("OK, {B_BUFF1}!\nCome back!"); static const u8 sText_PkmnGoodComeBack[] = _("Good job, {B_BUFF1}!\nCome back!"); static const u8 sText_Trainer1WithdrewPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwithdrew {B_BUFF1}!"); static const u8 sText_LinkTrainer1WithdrewPkmn[] = _("{B_LINK_OPPONENT1_NAME} withdrew\n{B_BUFF1}!"); @@ -552,7 +553,7 @@ static const u8 sText_ShieldedFromCriticalHits[] = _("The {B_CURRENT_MOVE} shiel static const u8 sText_SwitchedAtkAndSpAtk[] = _("{B_ATK_NAME_WITH_PREFIX} switched all its\nchanges to its Attack and\pSp. Atk with the target!"); static const u8 sText_SwitchedDefAndSpDef[] = _("{B_ATK_NAME_WITH_PREFIX} switched all its\nchanges to its Defense and\pSp. Def with the target!"); static const u8 sText_PkmnAcquiredAbility[] = _("{B_DEF_NAME_WITH_PREFIX} acquired\n{B_DEF_ABILITY}!"); -static const u8 sText_PoisonSpikesScattered[] = _("Poison Spikes were scattered all\naround the opposing team's feet!"); +static const u8 sText_PoisonSpikesScattered[] = _("Poison spikes were scattered on the ground\nall around {B_DEF_TEAM2} team!"); static const u8 sText_PkmnSwitchedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} switched stat changes\nwith the target!"); static const u8 sText_PkmnSurroundedWithVeilOfWater[] = _("{B_ATK_NAME_WITH_PREFIX} surrounded itself\nwith a veil of water!"); static const u8 sText_PkmnLevitatedOnElectromagnetism[] = _("{B_ATK_NAME_WITH_PREFIX} levitated on\nelectromagnetism!"); @@ -626,7 +627,7 @@ static const u8 sText_MagicBounceActivates[] = _("The {B_DEF_NAME_WITH_PREFIX} b static const u8 sText_ProteanTypeChange[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} transformed\nit into the {B_BUFF1} type!"); static const u8 sText_SymbiosisItemPass[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} passed its {B_LAST_ITEM}\nto {B_ATK_NAME_WITH_PREFIX} through {B_LAST_ABILITY}!"); static const u8 sText_StealthRockDmg[] = _("Pointed stones dug into\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}!"); -static const u8 sText_ToxicSpikesAbsorbed[] = _("The poison spikes disappeared\nfrom around the opposing team's feet!"); +static const u8 sText_ToxicSpikesAbsorbed[] = _("The poison spikes disappeared from\nthe ground around {B_ATK_TEAM2} team!"); static const u8 sText_ToxicSpikesPoisoned[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was poisoned!"); static const u8 sText_StickyWebSwitchIn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was\ncaught in a Sticky Web!"); static const u8 sText_HealingWishCameTrue[] = _("The healing wish came true\nfor {B_ATK_NAME_WITH_PREFIX}!"); @@ -2754,14 +2755,14 @@ void BufferStringBattle(u16 stringID) stringPtr = sText_LinkTrainerSentOutPkmn; } } - break; + break; case STRINGID_RETURNMON: // sending poke to ball msg if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) { if (*(&gBattleStruct->hpScale) == 0) - stringPtr = sText_PkmnThatsEnough; - else if (*(&gBattleStruct->hpScale) == 1 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) stringPtr = sText_PkmnComeBack; + else if (*(&gBattleStruct->hpScale) == 1 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + stringPtr = sText_PkmnThatsEnough; else if (*(&gBattleStruct->hpScale) == 2) stringPtr = sText_PkmnOkComeBack; else @@ -2788,9 +2789,9 @@ void BufferStringBattle(u16 stringID) if (*(&gBattleStruct->hpScale) == 0 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) stringPtr = sText_GoPkmn2; else if (*(&gBattleStruct->hpScale) == 1) - stringPtr = sText_DoItPkmn; - else if (*(&gBattleStruct->hpScale) == 2) stringPtr = sText_GoForItPkmn; + else if (*(&gBattleStruct->hpScale) == 2) + stringPtr = sText_JustALittleMorePkmn; else stringPtr = sText_YourFoesWeakGetEmPkmn; } From b8060024e8bf17349d3e20124b0b8689abc95abe Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Fri, 18 Aug 2023 20:35:28 -0500 Subject: [PATCH 05/68] Update battle_message.c --- src/battle_message.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_message.c b/src/battle_message.c index bae164a04f68..8de8e61cd946 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -71,7 +71,7 @@ static const u8 sText_UseNextPkmn[] = _("Use next Pokémon?"); static const u8 sText_AttackMissed[] = _("{B_ATK_NAME_WITH_PREFIX}'s\nattack missed!"); static const u8 sText_PkmnProtectedItself[] = _("{B_DEF_NAME_WITH_PREFIX}\nprotected itself!"); static const u8 sText_AvoidedDamage[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\ndamage with {B_DEF_ABILITY}!"); //not in gen 5+, ability popup -static const u8 sText_PkmnMakesGroundMiss[] = _("{B_DEF_NAME_WITH_PREFIX} makes Ground\nmoves miss with {B_DEF_ABILITY}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnMakesGroundMiss[] = _("{B_DEF_NAME_WITH_PREFIX} makes Ground-type\nmoves miss with {B_DEF_ABILITY}!"); //not in gen 5+, ability popup static const u8 sText_PkmnAvoidedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\nthe attack!"); static const u8 sText_ItDoesntAffect[] = _("It doesn't affect\n{B_DEF_NAME_WITH_PREFIX}…"); static const u8 sText_AttackerFainted[] = _("{B_ATK_NAME_WITH_PREFIX} fainted!\p"); From b7a86baa228600b12b754426500ddb47fc71035b Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Fri, 18 Aug 2023 20:40:00 -0500 Subject: [PATCH 06/68] Update battle_message.c --- src/battle_message.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index 8de8e61cd946..157041053537 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -86,7 +86,7 @@ static const u8 sText_PlayerWhiteout2[] = _("{B_PLAYER_NAME} dropped ¥{B_BUFF1} static const u8 sText_PlayerWhiteout2[] = _("{B_PLAYER_NAME} blacked out!{PAUSE_UNTIL_PRESS}"); #endif static const u8 sText_PreventsEscape[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} prevents\nescape with {B_SCR_ACTIVE_ABILITY}!\p"); //not in gen 5+, ability popup -static const u8 sText_CantEscape2[] = _("You couldn’t get away!\p"); +static const u8 sText_CantEscape2[] = _("You couldn't get away!\p"); static const u8 sText_AttackerCantEscape[] = _("{B_ATK_NAME_WITH_PREFIX} can't escape!"); static const u8 sText_HitXTimes[] = _("Hit {B_BUFF1} time(s)!"); static const u8 sText_PkmnFellAsleep[] = _("{B_EFF_NAME_WITH_PREFIX}\nfell asleep!"); @@ -345,7 +345,7 @@ static const u8 sText_PlayerBattledToDrawVsTwo[] = _("Player battled to a draw a static const u8 sText_WildFled[] = _("{PLAY_SE SE_FLEE}{B_LINK_OPPONENT1_NAME} fled!"); //not in gen 5+, replaced with match was forfeited text static const u8 sText_TwoWildFled[] = _("{PLAY_SE SE_FLEE}{B_LINK_OPPONENT1_NAME} and\n{B_LINK_OPPONENT2_NAME} fled!"); //not in gen 5+, replaced with match was forfeited text static const u8 sText_NoRunningFromTrainers[] = _("No! There's no running\nfrom a Trainer battle!\p"); -static const u8 sText_CantEscape[] = _("Can't escape!\p"); +static const u8 sText_CantEscape[] = _("You can't escape!\p"); static const u8 sText_DontLeaveBirch[] = _("PROF. BIRCH: Don't leave me like this!\p"); //no decapitalize until it is everywhere static const u8 sText_ButNothingHappened[] = _("But nothing happened!"); static const u8 sText_ButItFailed[] = _("But it failed!"); From 3823d4fff9296d89ee2bb6c9fb4ff3334c4b8c6b Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Fri, 18 Aug 2023 21:26:14 -0500 Subject: [PATCH 07/68] fix some tests --- src/battle_message.c | 66 +++++++++---------- test/battle/form_change/primal_reversion.c | 2 +- test/battle/hold_effect/berserk_gene.c | 2 +- test/battle/move_effect/court_change.c | 12 ++-- test/battle/move_effect/defog.c | 4 +- .../move_effect/hit_set_entry_hazardss.c | 14 ++-- test/battle/move_effect/spikes.c | 16 ++--- 7 files changed, 58 insertions(+), 58 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index 157041053537..3875df4ddbe3 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -1950,8 +1950,8 @@ const u8 gText_WhatWillPkmnDo[] = _("What will\n{B_ACTIVE_NAME2} do?"); const u8 gText_WhatWillPkmnDo2[] = _("What will\n{B_PLAYER_NAME} do?"); const u8 gText_WhatWillWallyDo[] = _("What will\nWALLY do?"); const u8 gText_LinkStandby[] = _("{PAUSE 16}Link standby…"); -const u8 gText_BattleMenu[] = _("FIGHT{CLEAR_TO 56}BAG\nPOKéMON{CLEAR_TO 56}RUN"); -const u8 gText_SafariZoneMenu[] = _("BALL{CLEAR_TO 56}{POKEBLOCK}\nGO NEAR{CLEAR_TO 56}RUN"); +const u8 gText_BattleMenu[] = _("Battle{CLEAR_TO 56}Bag\nPokémon{CLEAR_TO 56}Run"); +const u8 gText_SafariZoneMenu[] = _("Ball{CLEAR_TO 56}{POKEBLOCK}\nGo Near{CLEAR_TO 56}Run"); const u8 gText_MoveInterfacePP[] = _("PP "); const u8 gText_MoveInterfaceType[] = _("TYPE/"); const u8 gText_MoveInterfacePpType[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW DYNAMIC_COLOR4 DYNAMIC_COLOR5 DYNAMIC_COLOR6}PP\nTYPE/"); @@ -1971,7 +1971,7 @@ static const u8 *const sStatNamesTable2[] = gText_SpDef, gText_Defense, gText_Speed }; -const u8 gText_SafariBalls[] = _("{HIGHLIGHT DARK_GRAY}SAFARI BALLS"); +const u8 gText_SafariBalls[] = _("{HIGHLIGHT DARK_GRAY}Safari Balls"); const u8 gText_SafariBallLeft[] = _("{HIGHLIGHT DARK_GRAY}Left: $" "{HIGHLIGHT DARK_GRAY}"); const u8 gText_Sleep[] = _("sleep"); const u8 gText_Poison[] = _("poison"); @@ -1987,8 +1987,8 @@ const u8 gText_LineBreak[] = _("\l"); const u8 gText_NewLine[] = _("\n"); const u8 gText_Are[] = _("are"); const u8 gText_Are2[] = _("are"); -const u8 gText_BadEgg[] = _("Bad EGG"); -const u8 gText_BattleWallyName[] = _("WALLY"); +const u8 gText_BadEgg[] = _("Bad Egg"); +const u8 gText_BattleWallyName[] = _("WALLY"); const u8 gText_Win[] = _("{HIGHLIGHT TRANSPARENT}Win"); const u8 gText_Loss[] = _("{HIGHLIGHT TRANSPARENT}Loss"); const u8 gText_Draw[] = _("{HIGHLIGHT TRANSPARENT}Draw"); @@ -1998,25 +1998,25 @@ static const u8 sText_ApostropheS[] = _("'s"); // For displaying names of invalid moves static const u8 sATypeMove_Table[NUMBER_OF_MON_TYPES][17] = { - [TYPE_NORMAL] = _("a NORMAL move"), - [TYPE_FIGHTING] = _("a FIGHTING move"), - [TYPE_FLYING] = _("a FLYING move"), - [TYPE_POISON] = _("a POISON move"), - [TYPE_GROUND] = _("a GROUND move"), - [TYPE_ROCK] = _("a ROCK move"), - [TYPE_BUG] = _("a BUG move"), - [TYPE_GHOST] = _("a GHOST move"), - [TYPE_STEEL] = _("a STEEL move"), + [TYPE_NORMAL] = _("a Normal move"), + [TYPE_FIGHTING] = _("a Fighting move"), + [TYPE_FLYING] = _("a Flying move"), + [TYPE_POISON] = _("a Poison move"), + [TYPE_GROUND] = _("a Ground move"), + [TYPE_ROCK] = _("a Rock move"), + [TYPE_BUG] = _("a Bug move"), + [TYPE_GHOST] = _("a Ghost move"), + [TYPE_STEEL] = _("a Steel move"), [TYPE_MYSTERY] = _("a ??? move"), - [TYPE_FIRE] = _("a FIRE move"), - [TYPE_WATER] = _("a WATER move"), - [TYPE_GRASS] = _("a GRASS move"), - [TYPE_ELECTRIC] = _("an ELECTRIC move"), - [TYPE_PSYCHIC] = _("a PSYCHIC move"), - [TYPE_ICE] = _("an ICE move"), - [TYPE_DRAGON] = _("a DRAGON move"), - [TYPE_DARK] = _("a DARK move"), - [TYPE_FAIRY] = _("a FAIRY move"), + [TYPE_FIRE] = _("a Fire move"), + [TYPE_WATER] = _("a Water move"), + [TYPE_GRASS] = _("a Grass move"), + [TYPE_ELECTRIC] = _("an Electric move"), + [TYPE_PSYCHIC] = _("a Psychic move"), + [TYPE_ICE] = _("an Ice move"), + [TYPE_DRAGON] = _("a Dragon move"), + [TYPE_DARK] = _("a Dark move"), + [TYPE_FAIRY] = _("a Fairy move"), }; const u8 gText_BattleTourney[] = _("BATTLE TOURNEY"); @@ -2035,9 +2035,9 @@ const u8 *const gRoundsStringTable[DOME_ROUNDS_COUNT] = const u8 gText_TheGreatNewHope[] = _("The great new hope!\p"); const u8 gText_WillChampionshipDreamComeTrue[] = _("Will the championship dream come true?!\p"); -const u8 gText_AFormerChampion[] = _("A former CHAMPION!\p"); -const u8 gText_ThePreviousChampion[] = _("The previous CHAMPION!\p"); -const u8 gText_TheUnbeatenChampion[] = _("The unbeaten CHAMPION!\p"); +const u8 gText_AFormerChampion[] = _("A former champion!\p"); +const u8 gText_ThePreviousChampion[] = _("The previous champion!\p"); +const u8 gText_TheUnbeatenChampion[] = _("The unbeaten champion!\p"); const u8 gText_PlayerMon1Name[] = _("{B_PLAYER_MON1_NAME}"); const u8 gText_Vs[] = _("VS"); const u8 gText_OpponentMon1Name[] = _("{B_OPPONENT_MON1_NAME}"); @@ -2047,9 +2047,9 @@ const u8 gText_Body[] = _("Body"); const u8 gText_Judgment[] = _("{B_BUFF1}{CLEAR 13}Judgment{CLEAR 13}{B_BUFF2}"); static const u8 sText_TwoTrainersSentPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME}!\p{B_TRAINER2_CLASS} {B_TRAINER2_NAME} sent\nout {B_OPPONENT_MON2_NAME}!"); static const u8 sText_Trainer2SentOutPkmn[] = _("{B_TRAINER2_CLASS} {B_TRAINER2_NAME} sent\nout {B_BUFF1}!"); -static const u8 sText_TwoTrainersWantToBattle[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} and\n{B_TRAINER2_CLASS} {B_TRAINER2_NAME}\lwant to battle!\p"); +static const u8 sText_TwoTrainersWantToBattle[] = _("You are challenged by\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME} and\l{B_TRAINER2_CLASS} {B_TRAINER2_NAME}!\p"); static const u8 sText_InGamePartnerSentOutZGoN[] = _("{B_PARTNER_CLASS} {B_PARTNER_NAME} sent\nout {B_PLAYER_MON2_NAME}!\lGo, {B_PLAYER_MON1_NAME}!"); -static const u8 sText_TwoInGameTrainersDefeated[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} and\n{B_TRAINER2_CLASS} {B_TRAINER2_NAME}\lwere defeated!\p"); +static const u8 sText_TwoInGameTrainersDefeated[] = _("Player beat\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\land {B_TRAINER2_CLASS} {B_TRAINER2_NAME}!\p"); static const u8 sText_Trainer2LoseText[] = _("{B_TRAINER2_LOSE_TEXT}"); static const u8 sText_PkmnIncapableOfPower[] = _("{B_ATK_NAME_WITH_PREFIX} appears incapable\nof using its power!"); static const u8 sText_GlintAppearsInEye[] = _("A glint appears in\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s eyes!"); @@ -2092,16 +2092,16 @@ const u8 *const gRefereeStringsTable[] = }; static const u8 sText_QuestionForfeitMatch[] = _("Would you like to forfeit the match\nand quit now?"); -static const u8 sText_ForfeitedMatch[] = _("{B_PLAYER_NAME} forfeited the match!"); +static const u8 sText_ForfeitedMatch[] = _("The match was forfeited."); static const u8 sText_Trainer1WinText[] = _("{B_TRAINER1_WIN_TEXT}"); static const u8 sText_Trainer2WinText[] = _("{B_TRAINER2_WIN_TEXT}"); static const u8 sText_Trainer1Fled[] = _( "{PLAY_SE SE_FLEE}{B_TRAINER1_CLASS} {B_TRAINER1_NAME} fled!"); static const u8 sText_PlayerLostAgainstTrainer1[] = _("Player lost against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!"); static const u8 sText_PlayerBattledToDrawTrainer1[] = _("Player battled to a draw against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!"); -const u8 gText_RecordBattleToPass[] = _("Would you like to record your battle\non your FRONTIER PASS?"); -const u8 gText_BattleRecordedOnPass[] = _("{B_PLAYER_NAME}'s battle result was recorded\non the FRONTIER PASS."); -static const u8 sText_LinkTrainerWantsToBattlePause[] = _("{B_LINK_OPPONENT1_NAME}\nwants to battle!{PAUSE 49}"); -static const u8 sText_TwoLinkTrainersWantToBattlePause[] = _("{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}\nwant to battle!{PAUSE 49}"); +const u8 gText_RecordBattleToPass[] = _("Would you like to record your battle\non your Frontier Pass?"); +const u8 gText_BattleRecordedOnPass[] = _("{B_PLAYER_NAME}'s battle result was recorded\non the Frontier Pass."); +static const u8 sText_LinkTrainerWantsToBattlePause[] = _("You are challenged by\n{B_LINK_OPPONENT1_NAME}\p"); +static const u8 sText_TwoLinkTrainersWantToBattlePause[] = _("You are challenged by\n{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}!\p"); static const u8 sText_Your1[] = _("Your"); static const u8 sText_Opposing1[] = _("The opposing"); static const u8 sText_Your2[] = _("your"); diff --git a/test/battle/form_change/primal_reversion.c b/test/battle/form_change/primal_reversion.c index 3e271f67c26a..067e1f215150 100644 --- a/test/battle/form_change/primal_reversion.c +++ b/test/battle/form_change/primal_reversion.c @@ -207,7 +207,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after the entry hazards damage") } SCENE { MESSAGE("Go! Groudon!"); HP_BAR(player); - MESSAGE("Groudon is hurt by spikes!"); + MESSAGE("Groudon was hurt by the spikes!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player); MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); } THEN { diff --git a/test/battle/hold_effect/berserk_gene.c b/test/battle/hold_effect/berserk_gene.c index 6fd0f8a855df..39db90baf02e 100644 --- a/test/battle/hold_effect/berserk_gene.c +++ b/test/battle/hold_effect/berserk_gene.c @@ -112,7 +112,7 @@ SINGLE_BATTLE_TEST("Berserk Gene does not confuse when Safeguard is active") } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Using Berserk Gene, the Attack of Wobbuffet sharply rose!"); - MESSAGE("Wobbuffet's party is protected by Safeguard!"); + MESSAGE("Wobbuffet's team is protected by Safeguard!"); NOT MESSAGE("Wobbuffet became confused!"); } } diff --git a/test/battle/move_effect/court_change.c b/test/battle/move_effect/court_change.c index 4aa2e9d365bb..05ef44bbfda5 100644 --- a/test/battle/move_effect/court_change.c +++ b/test/battle/move_effect/court_change.c @@ -29,13 +29,13 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the opponent") MESSAGE("Wynaut swapped the battle effects affecting each side!"); MESSAGE("Go! Wynaut!"); NONE_OF { - MESSAGE("Wynaut is hurt by spikes!"); + MESSAGE("Wynaut was hurt by the spikes!"); MESSAGE("Pointed stones dug into Wynaut!"); MESSAGE("Wynaut was poisoned!"); MESSAGE("Wynaut was caught in a Sticky Web!"); } MESSAGE("2 sent out Wobbuffet!"); - MESSAGE("Foe Wobbuffet is hurt by spikes!"); + MESSAGE("Foe Wobbuffet was hurt by the spikes!"); MESSAGE("Pointed stones dug into Foe Wobbuffet!"); MESSAGE("Foe Wobbuffet was poisoned!"); MESSAGE("Foe Wobbuffet was caught in a Sticky Web!"); @@ -64,13 +64,13 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the player") MESSAGE("Foe Wynaut used Court Change!"); MESSAGE("Foe Wynaut swapped the battle effects affecting each side!"); MESSAGE("Go! Wobbuffet!"); - MESSAGE("Wobbuffet is hurt by spikes!"); + MESSAGE("Wobbuffet was hurt by the spikes!"); MESSAGE("Pointed stones dug into Wobbuffet!"); MESSAGE("Wobbuffet was poisoned!"); MESSAGE("Wobbuffet was caught in a Sticky Web!"); MESSAGE("2 sent out Wynaut!"); NONE_OF { - MESSAGE("Foe Wynaut is hurt by spikes!"); + MESSAGE("Foe Wynaut was hurt by the spikes!"); MESSAGE("Pointed stones dug into Foe Wynaut!"); MESSAGE("Foe Wynaut was poisoned!"); MESSAGE("Foe Wynaut was caught in a Sticky Web!"); @@ -107,7 +107,7 @@ DOUBLE_BATTLE_TEST("Court Change used by the player swaps Mist, Safeguard, Lucky MESSAGE("Wynaut swapped the battle effects affecting each side!"); // The effects now end for the player side. MESSAGE("Ally's Mist wore off!"); - MESSAGE("Ally's party is no longer protected by Safeguard!"); + MESSAGE("Ally's team is no longer protected by Safeguard!"); MESSAGE("Ally's Reflect wore off!"); MESSAGE("Your team's Lucky Chant wore off!"); MESSAGE("Your team's tailwind petered out!"); @@ -144,7 +144,7 @@ DOUBLE_BATTLE_TEST("Court Change used by the opponent swaps Mist, Safeguard, Luc MESSAGE("Foe Wynaut swapped the battle effects affecting each side!"); // The effects now end for the player side. MESSAGE("Foe's Mist wore off!"); - MESSAGE("Foe's party is no longer protected by Safeguard!"); + MESSAGE("Foe's team is no longer protected by Safeguard!"); MESSAGE("Foe's Reflect wore off!"); MESSAGE("The opposing team's Lucky Chant wore off!"); MESSAGE("The opposing team's tailwind petered out!"); diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c index 1cd78fb50591..722de246d192 100644 --- a/test/battle/move_effect/defog.c +++ b/test/battle/move_effect/defog.c @@ -205,12 +205,12 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Spikes from player MESSAGE("Go! Wobbuffet!"); if (move != MOVE_DEFOG) { HP_BAR(player); - MESSAGE("Wobbuffet is hurt by spikes!"); + MESSAGE("Wobbuffet was hurt by the spikes!"); } else { NONE_OF { HP_BAR(player); - MESSAGE("Wobbuffet is hurt by spikes!"); + MESSAGE("Wobbuffet was hurt by the spikes!"); } } } diff --git a/test/battle/move_effect/hit_set_entry_hazardss.c b/test/battle/move_effect/hit_set_entry_hazardss.c index caf75ed49181..67bbce5f8740 100644 --- a/test/battle/move_effect/hit_set_entry_hazardss.c +++ b/test/battle/move_effect/hit_set_entry_hazardss.c @@ -24,7 +24,7 @@ SINGLE_BATTLE_TEST("Stone Axe / Ceaseless Edge set up hazards after hitting the ANIMATION(ANIM_TYPE_MOVE, move, player); HP_BAR(opponent); if (move == MOVE_CEASELESS_EDGE) { - MESSAGE("Spikes were scattered all around the opposing team!"); + MESSAGE("Spikes were scattered on the ground all around the opposing team!"); } else { MESSAGE("Pointed stones float in the air around the opposing team!"); @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Stone Axe / Ceaseless Edge set up hazards after hitting the MESSAGE("2 sent out Wobbuffet!"); if (move == MOVE_CEASELESS_EDGE) { HP_BAR(opponent, damage: maxHP / 8); - MESSAGE("Foe Wobbuffet is hurt by spikes!"); + MESSAGE("Foe Wobbuffet was hurt by the spikes!"); } else { HP_BAR(opponent, damage: maxHP / 8); @@ -58,23 +58,23 @@ SINGLE_BATTLE_TEST("Ceaseless Edge can set up to 3 layers of Spikes") ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); HP_BAR(opponent); - MESSAGE("Spikes were scattered all around the opposing team!"); + MESSAGE("Spikes were scattered on the ground all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); HP_BAR(opponent); - MESSAGE("Spikes were scattered all around the opposing team!"); + MESSAGE("Spikes were scattered on the ground all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); HP_BAR(opponent); - MESSAGE("Spikes were scattered all around the opposing team!"); + MESSAGE("Spikes were scattered on the ground all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); HP_BAR(opponent); - NOT MESSAGE("Spikes were scattered all around the opposing team!"); + NOT MESSAGE("Spikes were scattered on the ground all around the opposing team!"); MESSAGE("2 sent out Wynaut!"); HP_BAR(opponent, damage: maxHP / 4); - MESSAGE("Foe Wynaut is hurt by spikes!"); + MESSAGE("Foe Wynaut was hurt by the spikes!"); } } diff --git a/test/battle/move_effect/spikes.c b/test/battle/move_effect/spikes.c index bfc0f39b5a50..ce8498d0edbd 100644 --- a/test/battle/move_effect/spikes.c +++ b/test/battle/move_effect/spikes.c @@ -28,11 +28,11 @@ SINGLE_BATTLE_TEST("Spikes damage on switch in") s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); for (count = 0; count < layers; ++count) { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered all around the opposing team!"); + MESSAGE("Spikes were scattered on the ground all around the opposing team!"); } MESSAGE("2 sent out Wynaut!"); HP_BAR(opponent, damage: maxHP / divisor); - MESSAGE("Foe Wynaut is hurt by spikes!"); + MESSAGE("Foe Wynaut was hurt by the spikes!"); } } @@ -51,16 +51,16 @@ SINGLE_BATTLE_TEST("Spikes fails after 3 layers") } SCENE { s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered all around the opposing team!"); + MESSAGE("Spikes were scattered on the ground all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered all around the opposing team!"); + MESSAGE("Spikes were scattered on the ground all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered all around the opposing team!"); + MESSAGE("Spikes were scattered on the ground all around the opposing team!"); MESSAGE("Wobbuffet used Spikes!"); MESSAGE("But it failed!"); MESSAGE("2 sent out Wynaut!"); HP_BAR(opponent, damage: maxHP / 4); - MESSAGE("Foe Wynaut is hurt by spikes!"); + MESSAGE("Foe Wynaut was hurt by the spikes!"); } } @@ -79,10 +79,10 @@ SINGLE_BATTLE_TEST("Spikes damage on subsequent switch ins") s32 maxHP1 = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); MESSAGE("2 sent out Wynaut!"); HP_BAR(opponent, damage: maxHP1 / 8); - MESSAGE("Foe Wynaut is hurt by spikes!"); + MESSAGE("Foe Wynaut was hurt by the spikes!"); MESSAGE("2 sent out Wobbuffet!"); HP_BAR(opponent, damage: maxHP0 / 8); - MESSAGE("Foe Wobbuffet is hurt by spikes!"); + MESSAGE("Foe Wobbuffet was hurt by the spikes!"); } } From c7ac02480f5f1bd4d3a80c2c6b12b7ff3458fda2 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Fri, 18 Aug 2023 21:44:16 -0500 Subject: [PATCH 08/68] even more test fixes --- src/battle_message.c | 2 +- test/battle/ability/download.c | 2 +- test/battle/hold_effect/eject_button.c | 4 ++-- test/battle/item_effect/set_focus_energy.c | 2 +- test/battle/item_effect/set_mist.c | 2 +- test/battle/move_effect/defog.c | 8 ++++---- test/battle/status1/freeze.c | 2 +- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index 3875df4ddbe3..6a5aaed19fd5 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -142,7 +142,7 @@ static const u8 sText_PkmnRaisedSpDefALittle[] = _("{B_ATK_PREFIX1}'s {B_CURRENT static const u8 sText_PkmnRaisedDef[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE}\nraised DEFENSE!"); //reflect static const u8 sText_PkmnRaisedDefALittle[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE}\nraised DEFENSE a little!"); //reflect static const u8 sText_PkmnCoveredByVeil[] = _("{B_ATK_PREFIX1}'s team became cloaked in\na mystical veil!"); -static const u8 sText_PkmnUsedSafeguard[] = _("{B_DEF_NAME_WITH_PREFIX} is protected\nby Safeguard!"); +static const u8 sText_PkmnUsedSafeguard[] = _("{B_ATK_PREFIX1}'s team is protected\nby Safeguard!"); static const u8 sText_PkmnSafeguardExpired[] = _("{B_ATK_PREFIX1}'s team is no longer protected\nby Safeguard!"); static const u8 sText_PkmnWentToSleep[] = _("{B_ATK_NAME_WITH_PREFIX} went\nto sleep!"); //not in gen 5+ static const u8 sText_PkmnSleptHealthy[] = _("{B_ATK_NAME_WITH_PREFIX} slept and\nbecame healthy!"); diff --git a/test/battle/ability/download.c b/test/battle/ability/download.c index 5b59e37f00b5..f0949eded225 100644 --- a/test/battle/ability/download.c +++ b/test/battle/ability/download.c @@ -72,7 +72,7 @@ SINGLE_BATTLE_TEST("Download doesn't activate if target hasn't been sent out yet ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); // Everyone faints. - MESSAGE("Go! Porygon!"); + MESSAGE("You're in charge, Porygon!"); MESSAGE("2 sent out Porygon2!"); if (ability == ABILITY_DOWNLOAD) diff --git a/test/battle/hold_effect/eject_button.c b/test/battle/hold_effect/eject_button.c index 4409f5d5b678..36da40d318ef 100644 --- a/test/battle/hold_effect/eject_button.c +++ b/test/battle/hold_effect/eject_button.c @@ -61,9 +61,9 @@ SINGLE_BATTLE_TEST("Eject Button will not activate under Substitute") } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, opponent); - MESSAGE("Foe Raichu made a SUBSTITUTE!"); + MESSAGE("Foe Raichu put in a substitute!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); - MESSAGE("The SUBSTITUTE took damage for Foe Raichu!"); + MESSAGE("The substitute took damage for Foe Raichu!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); MESSAGE("Foe Raichu is switched out with the Eject Button!"); diff --git a/test/battle/item_effect/set_focus_energy.c b/test/battle/item_effect/set_focus_energy.c index da326bbe363a..123b414ee618 100644 --- a/test/battle/item_effect/set_focus_energy.c +++ b/test/battle/item_effect/set_focus_energy.c @@ -14,7 +14,7 @@ SINGLE_BATTLE_TEST("Dire Hit increases a battler's critical hit chance by 2 stag TURN { MOVE(player, MOVE_SCRATCH); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FOCUS_ENERGY, player); - MESSAGE("Wobbuffet used Dire Hit to get pumped!"); + MESSAGE("Wobbuffet used the Dire Hit to get pumped!"); MESSAGE("Wobbuffet used Scratch!"); MESSAGE("A critical hit!"); } diff --git a/test/battle/item_effect/set_mist.c b/test/battle/item_effect/set_mist.c index a369e70d92f7..7e7bf049e40d 100644 --- a/test/battle/item_effect/set_mist.c +++ b/test/battle/item_effect/set_mist.c @@ -14,6 +14,6 @@ SINGLE_BATTLE_TEST("Guard Spec. sets Mist effect on the battlers side") ANIMATION(ANIM_TYPE_MOVE, MOVE_MIST, player); MESSAGE("Ally became shrouded in MIST!"); MESSAGE("Foe Wobbuffet used Growl!"); - MESSAGE("Wobbuffet is protected by MIST!"); + MESSAGE("Wobbuffet is protected by the mist!"); } } diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c index 722de246d192..e53a9b14a3b7 100644 --- a/test/battle/move_effect/defog.c +++ b/test/battle/move_effect/defog.c @@ -105,7 +105,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard ANIMATION(ANIM_TYPE_MOVE, MOVE_MIST, opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_SAFEGUARD, opponentRight); if (move == MOVE_DEFOG) { - MESSAGE("Foe Wobbuffet is protected by MIST!"); + MESSAGE("Foe Wobbuffet is protected by the mist!"); ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); MESSAGE("Foe's Mist wore off!"); MESSAGE("Foe's Safeguard wore off!"); @@ -116,7 +116,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); } else { - MESSAGE("Foe Wobbuffet is protected by MIST!"); + MESSAGE("Foe Wobbuffet is protected by the mist!"); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); } MESSAGE("Wobbuffet used Toxic!"); @@ -158,7 +158,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and S MESSAGE("The sticky web has disappeared from the ground around your team!"); } // Switch happens - MESSAGE("Wobbuffet, that's enough! Come back!"); + MESSAGE("Wobbuffet, come back!"); MESSAGE("Go! Wobbuffet!"); if (move != MOVE_DEFOG) { HP_BAR(playerLeft); @@ -347,7 +347,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes everything it can" TURN { MOVE(playerLeft, MOVE_MIST); MOVE(playerRight, MOVE_SAFEGUARD); MOVE(opponentLeft, MOVE_MIST); MOVE(opponentRight, MOVE_DEFOG, target: playerLeft); } } SCENE { MESSAGE("Foe Glalie used Defog!"); - MESSAGE("Glalie is protected by MIST!"); + MESSAGE("Glalie is protected by the mist!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, opponentRight); // Player side MESSAGE("Ally's Reflect wore off!"); diff --git a/test/battle/status1/freeze.c b/test/battle/status1/freeze.c index 28a31efef617..0971336b06d6 100644 --- a/test/battle/status1/freeze.c +++ b/test/battle/status1/freeze.c @@ -24,7 +24,7 @@ SINGLE_BATTLE_TEST("Freeze is thawed by opponent's Fire-type attacks") TURN { MOVE(opponent, MOVE_EMBER); MOVE(player, MOVE_CELEBRATE); } } SCENE { MESSAGE("Foe Wobbuffet used Ember!"); - MESSAGE("Wobbuffet was defrosted!"); + MESSAGE("Wobbuffet was thawed out!"); STATUS_ICON(player, none: TRUE); } } From 3d81c9d4c3b3cd269344a53a0154558c034337e0 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Fri, 18 Aug 2023 22:38:28 -0500 Subject: [PATCH 09/68] lets see if this fixes all the tests --- src/battle_message.c | 6 +++--- test/battle/ability/inner_focus.c | 4 ++-- test/battle/ability/intimidate.c | 12 ++++++------ test/battle/ability/mirror_armor.c | 2 +- test/battle/ability/rattled.c | 2 +- test/battle/ability/speed_boost.c | 2 +- test/battle/ability/stench.c | 4 ++-- test/battle/form_change/primal_reversion.c | 4 ++-- test/battle/hold_effect/berserk_gene.c | 2 +- test/battle/hold_effect/leftovers.c | 6 +++--- test/battle/hold_effect/red_card.c | 2 +- test/battle/item_effect/set_mist.c | 2 +- test/battle/move_effect/court_change.c | 18 +++++++++--------- test/battle/move_effect/defog.c | 16 ++++++++-------- test/battle/move_effect/healing_wish.c | 2 +- test/battle/move_effect/hit_escape.c | 4 ++-- test/battle/move_effect/make_it_rain.c | 4 ++-- test/battle/move_effect/recoil_if_miss.c | 4 ++-- test/battle/move_effect/shell_trap.c | 2 +- test/battle/move_effect/sticky_web.c | 6 +++--- test/battle/move_effect/toxic_spikes.c | 14 +++++++------- test/battle/move_effect/triple_arrows.c | 6 +++--- test/battle/status1/freeze.c | 4 ++-- test/battle/status1/frostbite.c | 6 +++--- 24 files changed, 67 insertions(+), 67 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index 6a5aaed19fd5..d8af89fbf296 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -141,9 +141,9 @@ static const u8 sText_PkmnRaisedSpDef[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE}\ static const u8 sText_PkmnRaisedSpDefALittle[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE}\nraised SP. DEF a little!"); //light screen static const u8 sText_PkmnRaisedDef[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE}\nraised DEFENSE!"); //reflect static const u8 sText_PkmnRaisedDefALittle[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE}\nraised DEFENSE a little!"); //reflect -static const u8 sText_PkmnCoveredByVeil[] = _("{B_ATK_PREFIX1}'s team became cloaked in\na mystical veil!"); -static const u8 sText_PkmnUsedSafeguard[] = _("{B_ATK_PREFIX1}'s team is protected\nby Safeguard!"); -static const u8 sText_PkmnSafeguardExpired[] = _("{B_ATK_PREFIX1}'s team is no longer protected\nby Safeguard!"); +static const u8 sText_PkmnCoveredByVeil[] = _("{B_ATK_TEAM1} team became cloaked in\na mystical veil!"); +static const u8 sText_PkmnUsedSafeguard[] = _("{B_ATK_TEAM1} team is protected\nby Safeguard!"); +static const u8 sText_PkmnSafeguardExpired[] = _("{B_ATK_TEAM1} team is no longer protected\nby Safeguard!"); static const u8 sText_PkmnWentToSleep[] = _("{B_ATK_NAME_WITH_PREFIX} went\nto sleep!"); //not in gen 5+ static const u8 sText_PkmnSleptHealthy[] = _("{B_ATK_NAME_WITH_PREFIX} slept and\nbecame healthy!"); static const u8 sText_PkmnWhippedWhirlwind[] = _("{B_ATK_NAME_WITH_PREFIX} whipped\nup a whirlwind!"); diff --git a/test/battle/ability/inner_focus.c b/test/battle/ability/inner_focus.c index 574c860a74f6..191eb8054319 100644 --- a/test/battle/ability/inner_focus.c +++ b/test/battle/ability/inner_focus.c @@ -38,7 +38,7 @@ SINGLE_BATTLE_TEST("Inner Focus prevents flinching") } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, player); - NONE_OF { MESSAGE("Foe Zubat flinched!"); } + NONE_OF { MESSAGE("Foe Zubat flinched and couldn't move!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } } @@ -52,6 +52,6 @@ SINGLE_BATTLE_TEST("Inner Focus is ignored by Mold Breaker") TURN { MOVE(player, MOVE_FAKE_OUT); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, player); - MESSAGE("Foe Zubat flinched!"); + MESSAGE("Foe Zubat flinched and couldn't move!"); } } diff --git a/test/battle/ability/intimidate.c b/test/battle/ability/intimidate.c index a0a23cc1321a..aff3791b0189 100644 --- a/test/battle/ability/intimidate.c +++ b/test/battle/ability/intimidate.c @@ -77,9 +77,9 @@ DOUBLE_BATTLE_TEST("Intimidate doesn't activate on an empty field in a double ba ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, playerLeft); // Everyone faints. - MESSAGE("Go! Ekans!"); + MESSAGE("You're in charge, Ekans!"); MESSAGE("2 sent out Arbok!"); - MESSAGE("Go! Abra!"); + MESSAGE("You're in charge, Abra!"); MESSAGE("2 sent out Wynaut!"); ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); @@ -145,12 +145,12 @@ DOUBLE_BATTLE_TEST("Intimidate activates on an empty slot") } SCENE { - MESSAGE("Wobbuffet, that's enough! Come back!"); - MESSAGE("Go! Wynaut!"); + MESSAGE("Wobbuffet, come back!"); + MESSAGE("You're in charge, Wynaut!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_GUNK_SHOT, playerRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, opponentRight); - MESSAGE("Wynaut, that's enough! Come back!"); - MESSAGE("Go! Hitmontop!"); + MESSAGE("Wynaut, come back!"); + MESSAGE("You're in charge, Hitmontop!"); ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); NONE_OF { MESSAGE("Hitmontop's Intimidate cuts Foe Ralts's attack!"); diff --git a/test/battle/ability/mirror_armor.c b/test/battle/ability/mirror_armor.c index 2b0a59044c89..a7ea789dc12b 100644 --- a/test/battle/ability/mirror_armor.c +++ b/test/battle/ability/mirror_armor.c @@ -164,7 +164,7 @@ SINGLE_BATTLE_TEST("Mirror Armor doesn't lower the stat of the attacking Pokemon MESSAGE("Foe Wynaut used Leer!"); ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wynaut's Defense won't go lower!"); + MESSAGE("Foe Wynaut's Defense won't go any lower!"); } THEN { EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); EXPECT_EQ(opponent->statStages[STAT_DEF], MIN_STAT_STAGE); diff --git a/test/battle/ability/rattled.c b/test/battle/ability/rattled.c index e936ed7de869..be3c2cad3522 100644 --- a/test/battle/ability/rattled.c +++ b/test/battle/ability/rattled.c @@ -88,6 +88,6 @@ SINGLE_BATTLE_TEST("Rattled triggers correctly when hit by U-Turn") // Specific ABILITY_POPUP(opponent, ABILITY_RATTLED); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); MESSAGE("Foe Sudowoodo's Speed rose!"); - MESSAGE("Go! Wynaut!"); + MESSAGE("You're in charge, Wynaut!"); } } diff --git a/test/battle/ability/speed_boost.c b/test/battle/ability/speed_boost.c index 0cc82e80643f..d519cefacb11 100644 --- a/test/battle/ability/speed_boost.c +++ b/test/battle/ability/speed_boost.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Speed Boost gradually boosts Speed") MESSAGE("Foe Wobbuffet used Celebrate!"); MESSAGE("Torchic used Celebrate!"); ABILITY_POPUP(player, ABILITY_SPEED_BOOST); - MESSAGE("Torchic's Speed Boost raised its SPEED!"); + MESSAGE("Torchic's Speed Boost raised its Speed!"); MESSAGE("Torchic used Celebrate!"); MESSAGE("Foe Wobbuffet used Celebrate!"); } diff --git a/test/battle/ability/stench.c b/test/battle/ability/stench.c index 4153e6b15503..c357dffa21c4 100644 --- a/test/battle/ability/stench.c +++ b/test/battle/ability/stench.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Stench has a 10% chance to flinch") } WHEN { TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("Foe Wobbuffet flinched and couldn't move!"); } } @@ -27,7 +27,7 @@ SINGLE_BATTLE_TEST("Stench does not stack with King's Rock") } WHEN { TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("Foe Wobbuffet flinched and couldn't move!"); } } diff --git a/test/battle/form_change/primal_reversion.c b/test/battle/form_change/primal_reversion.c index 067e1f215150..74d4b6ace1b4 100644 --- a/test/battle/form_change/primal_reversion.c +++ b/test/battle/form_change/primal_reversion.c @@ -166,7 +166,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a switch-in caused by Eject B TURN { MOVE(opponent, MOVE_TACKLE); } } SCENE { MESSAGE("Wobbuffet is switched out with the Eject Button!"); - MESSAGE("Go! Groudon!"); + MESSAGE("You're in charge, Groudon!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player); MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); } THEN { @@ -205,7 +205,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after the entry hazards damage") TURN { MOVE(opponent, MOVE_SPIKES); } TURN { MOVE(opponent, MOVE_SPIKES); SWITCH(player, 1);} } SCENE { - MESSAGE("Go! Groudon!"); + MESSAGE("You're in charge, Groudon!"); HP_BAR(player); MESSAGE("Groudon was hurt by the spikes!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player); diff --git a/test/battle/hold_effect/berserk_gene.c b/test/battle/hold_effect/berserk_gene.c index 39db90baf02e..41a6f63f9ff7 100644 --- a/test/battle/hold_effect/berserk_gene.c +++ b/test/battle/hold_effect/berserk_gene.c @@ -112,7 +112,7 @@ SINGLE_BATTLE_TEST("Berserk Gene does not confuse when Safeguard is active") } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Using Berserk Gene, the Attack of Wobbuffet sharply rose!"); - MESSAGE("Wobbuffet's team is protected by Safeguard!"); + MESSAGE("Your team is protected by Safeguard!"); NOT MESSAGE("Wobbuffet became confused!"); } } diff --git a/test/battle/hold_effect/leftovers.c b/test/battle/hold_effect/leftovers.c index 7e51a3bd75dd..3d40494cd865 100644 --- a/test/battle/hold_effect/leftovers.c +++ b/test/battle/hold_effect/leftovers.c @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Leftovers recovers 1/16th HP at end of turn") } SCENE { s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet's Leftovers restored its HP a little!"); + MESSAGE("Wobbuffet's restored a little HP using its Leftovers!"); HP_BAR(player, damage: -maxHP / 16); } } @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Leftovers does nothing if max HP") } SCENE { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet's Leftovers restored its HP a little!"); + MESSAGE("Wobbuffet's restored a little HP using its Leftovers!"); HP_BAR(player); } } @@ -47,7 +47,7 @@ SINGLE_BATTLE_TEST("Leftovers does nothing if Heal Block applies") } SCENE { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet's Leftovers restored its HP a little!"); + MESSAGE("Wobbuffet's restored a little HP using its Leftovers!"); HP_BAR(player); } } diff --git a/test/battle/hold_effect/red_card.c b/test/battle/hold_effect/red_card.c index aad7fea64a0f..3ef44f14075a 100644 --- a/test/battle/hold_effect/red_card.c +++ b/test/battle/hold_effect/red_card.c @@ -373,7 +373,7 @@ SINGLE_BATTLE_TEST("Red Card activates before Emergency Exit") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); MESSAGE("Golisopod held up its Red Card against Foe Wobbuffet!"); ABILITY_POPUP(player, ABILITY_EMERGENCY_EXIT); - MESSAGE("Go! Wimpod!"); + MESSAGE("You're in charge, Wimpod!"); } } diff --git a/test/battle/item_effect/set_mist.c b/test/battle/item_effect/set_mist.c index 7e7bf049e40d..723b055554c4 100644 --- a/test/battle/item_effect/set_mist.c +++ b/test/battle/item_effect/set_mist.c @@ -12,7 +12,7 @@ SINGLE_BATTLE_TEST("Guard Spec. sets Mist effect on the battlers side") TURN { MOVE(opponent, MOVE_GROWL); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_MIST, player); - MESSAGE("Ally became shrouded in MIST!"); + MESSAGE("Your team became shrouded in mist!"); MESSAGE("Foe Wobbuffet used Growl!"); MESSAGE("Wobbuffet is protected by the mist!"); } diff --git a/test/battle/move_effect/court_change.c b/test/battle/move_effect/court_change.c index 05ef44bbfda5..6bac16bf44ad 100644 --- a/test/battle/move_effect/court_change.c +++ b/test/battle/move_effect/court_change.c @@ -27,7 +27,7 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the opponent") MESSAGE("Foe Wobbuffet used Toxic Spikes!"); MESSAGE("Wynaut used Court Change!"); MESSAGE("Wynaut swapped the battle effects affecting each side!"); - MESSAGE("Go! Wynaut!"); + MESSAGE("You're in charge, Wynaut!"); NONE_OF { MESSAGE("Wynaut was hurt by the spikes!"); MESSAGE("Pointed stones dug into Wynaut!"); @@ -63,7 +63,7 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the player") MESSAGE("Wobbuffet used Toxic Spikes!"); MESSAGE("Foe Wynaut used Court Change!"); MESSAGE("Foe Wynaut swapped the battle effects affecting each side!"); - MESSAGE("Go! Wobbuffet!"); + MESSAGE("You're in charge, Wobbuffet!"); MESSAGE("Wobbuffet was hurt by the spikes!"); MESSAGE("Pointed stones dug into Wobbuffet!"); MESSAGE("Wobbuffet was poisoned!"); @@ -106,12 +106,12 @@ DOUBLE_BATTLE_TEST("Court Change used by the player swaps Mist, Safeguard, Lucky MESSAGE("Wynaut used Court Change!"); MESSAGE("Wynaut swapped the battle effects affecting each side!"); // The effects now end for the player side. - MESSAGE("Ally's Mist wore off!"); - MESSAGE("Ally's team is no longer protected by Safeguard!"); + MESSAGE("Your team's Mist wore off!"); + MESSAGE("Your team is no longer protected by Safeguard!"); MESSAGE("Ally's Reflect wore off!"); MESSAGE("Your team's Lucky Chant wore off!"); MESSAGE("Your team's tailwind petered out!"); - MESSAGE("Ally's Light Screen wore off!"); + MESSAGE("Your team's Light Screen wore off!"); } } @@ -143,11 +143,11 @@ DOUBLE_BATTLE_TEST("Court Change used by the opponent swaps Mist, Safeguard, Luc MESSAGE("Foe Wynaut used Court Change!"); MESSAGE("Foe Wynaut swapped the battle effects affecting each side!"); // The effects now end for the player side. - MESSAGE("Foe's Mist wore off!"); - MESSAGE("Foe's team is no longer protected by Safeguard!"); - MESSAGE("Foe's Reflect wore off!"); + MESSAGE("The opposing team's Mist wore off!"); + MESSAGE("The opposing team is no longer protected by Safeguard!"); + MESSAGE("The opposing team's Reflect wore off!"); MESSAGE("The opposing team's Lucky Chant wore off!"); MESSAGE("The opposing team's tailwind petered out!"); - MESSAGE("Foe's Light Screen wore off!"); + MESSAGE("The opposing team's Light Screen wore off!"); } } diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c index e53a9b14a3b7..4801850af360 100644 --- a/test/battle/move_effect/defog.c +++ b/test/battle/move_effect/defog.c @@ -73,8 +73,8 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Reflect and Light if (move == MOVE_DEFOG) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); MESSAGE("Foe Wobbuffet's evasiveness fell!"); - MESSAGE("Foe's Reflect wore off!"); - MESSAGE("Foe's Light Screen wore off!"); + MESSAGE("The opposing team's Reflect wore off!"); + MESSAGE("The opposing team's Light Screen wore off!"); } MESSAGE("Wobbuffet used Tackle!"); HP_BAR(opponentLeft, captureDamage: &results[i].damagePhysical); @@ -107,8 +107,8 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard if (move == MOVE_DEFOG) { MESSAGE("Foe Wobbuffet is protected by the mist!"); ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); - MESSAGE("Foe's Mist wore off!"); - MESSAGE("Foe's Safeguard wore off!"); + MESSAGE("The opposing team's Mist wore off!"); + MESSAGE("The opposing team's Safeguard wore off!"); } MESSAGE("Wobbuffet used Screech!"); if (move == MOVE_DEFOG) { @@ -125,7 +125,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard STATUS_ICON(opponentRight, badPoison: TRUE); } else { - MESSAGE("Foe Wobbuffet's party is protected by Safeguard!"); + MESSAGE("The opposing team is protected by Safeguard!"); NOT STATUS_ICON(opponentRight, badPoison: TRUE); } } @@ -159,7 +159,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and S } // Switch happens MESSAGE("Wobbuffet, come back!"); - MESSAGE("Go! Wobbuffet!"); + MESSAGE("You're in charge, Wobbuffet!"); if (move != MOVE_DEFOG) { HP_BAR(playerLeft); MESSAGE("Pointed stones dug into Wobbuffet!"); @@ -202,7 +202,7 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Spikes from player } // Switch happens MESSAGE("Wobbuffet, that's enough! Come back!"); - MESSAGE("Go! Wobbuffet!"); + MESSAGE("You're in charge, Wobbuffet!"); if (move != MOVE_DEFOG) { HP_BAR(player); MESSAGE("Wobbuffet was hurt by the spikes!"); @@ -313,7 +313,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Aurora Veil from p if (move == MOVE_DEFOG) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Glalie's evasiveness fell!"); - MESSAGE("Ally's Aurora Veil wore off!"); + MESSAGE("Your team's Aurora Veil wore off!"); } MESSAGE("Foe Glalie used Tackle!"); HP_BAR(playerLeft, captureDamage: &results[i].damagePhysical); diff --git a/test/battle/move_effect/healing_wish.c b/test/battle/move_effect/healing_wish.c index fd25b848989c..b7f27b64e1ba 100644 --- a/test/battle/move_effect/healing_wish.c +++ b/test/battle/move_effect/healing_wish.c @@ -69,7 +69,7 @@ SINGLE_BATTLE_TEST("Healing Wish effect activates only if the switched pokemon c MESSAGE("Wynaut regained health!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player); - MESSAGE("Do it! Wynaut!"); + MESSAGE("Go for it, Wynaut!"); MESSAGE("The healing wish came true for Wynaut!"); HP_BAR(player, hp: 100); STATUS_ICON(player, none: TRUE); diff --git a/test/battle/move_effect/hit_escape.c b/test/battle/move_effect/hit_escape.c index f2d5130957fd..9d752155c0de 100644 --- a/test/battle/move_effect/hit_escape.c +++ b/test/battle/move_effect/hit_escape.c @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("U-turn switches the user out") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player); HP_BAR(opponent); - MESSAGE("Go! Wynaut!"); + MESSAGE("You're in charge, Wynaut!"); } } @@ -93,6 +93,6 @@ SINGLE_BATTLE_TEST("U-turn switches the user out if Wimp Out fails to activate") ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player); HP_BAR(opponent); NOT ABILITY_POPUP(opponent); - MESSAGE("Your foe's weak! Get 'em, Wynaut!"); + MESSAGE("Just a little more! Hang in there, Wynaut!"); } } diff --git a/test/battle/move_effect/make_it_rain.c b/test/battle/move_effect/make_it_rain.c index 42046c1457d8..510093f504d6 100644 --- a/test/battle/move_effect/make_it_rain.c +++ b/test/battle/move_effect/make_it_rain.c @@ -19,13 +19,13 @@ SINGLE_BATTLE_TEST("Make It Rain lowers special attack by one stage") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_MAKE_IT_RAIN, player); HP_BAR(opponent, captureDamage: &damage[0]); - MESSAGE("Coins scattered everywhere!"); + MESSAGE("Coins were scattered everywhere!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Wobbuffet's Sp. Atk fell!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_MAKE_IT_RAIN, player); HP_BAR(opponent, captureDamage: &damage[1]); - MESSAGE("Coins scattered everywhere!"); + MESSAGE("Coins were scattered everywhere!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Wobbuffet's Sp. Atk fell!"); } THEN { diff --git a/test/battle/move_effect/recoil_if_miss.c b/test/battle/move_effect/recoil_if_miss.c index f7d5cf24231c..54a6561fad25 100644 --- a/test/battle/move_effect/recoil_if_miss.c +++ b/test/battle/move_effect/recoil_if_miss.c @@ -83,7 +83,7 @@ SINGLE_BATTLE_TEST("Jump Kick's recoil happens after Spiky Shield damage and Pok MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Spiky Shield!"); if (faintOnSpiky){ MESSAGE("Wobbuffet fainted!"); - MESSAGE("Go! Wynaut!"); + MESSAGE("You're in charge, Wynaut!"); NONE_OF { MESSAGE("Wobbuffet kept going and crashed!"); HP_BAR(player); @@ -93,7 +93,7 @@ SINGLE_BATTLE_TEST("Jump Kick's recoil happens after Spiky Shield damage and Pok HP_BAR(player); if (faintOnJumpKick) { MESSAGE("Wobbuffet fainted!"); - MESSAGE("Go! Wynaut!"); + MESSAGE("You're in charge, Wynaut!"); } } } diff --git a/test/battle/move_effect/shell_trap.c b/test/battle/move_effect/shell_trap.c index 7fb80210ebf2..8262b07619db 100644 --- a/test/battle/move_effect/shell_trap.c +++ b/test/battle/move_effect/shell_trap.c @@ -86,7 +86,7 @@ SINGLE_BATTLE_TEST("Shell Trap does not activate if battler faints before being MESSAGE("Wobbuffet set a shell trap!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); MESSAGE("Wobbuffet fainted!"); - MESSAGE("Go! Wobbuffet!"); + MESSAGE("You're in charge, Wobbuffet!"); NONE_OF { MESSAGE("Wobbuffet used Shell Trap!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_TRAP, player); diff --git a/test/battle/move_effect/sticky_web.c b/test/battle/move_effect/sticky_web.c index e12cc8090500..d93837113cef 100644 --- a/test/battle/move_effect/sticky_web.c +++ b/test/battle/move_effect/sticky_web.c @@ -124,7 +124,7 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - the ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, BATTLER_PLAYER); MESSAGE("A sticky web spreads out on the ground around the opposing team!"); - MESSAGE("Go! Corviknigh!"); + MESSAGE("You're in charge, Corviknigh!"); MESSAGE("Corviknigh was caught in a Sticky Web!"); ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, BATTLER_OPPONENT); @@ -172,7 +172,7 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - no o MESSAGE("A sticky web spreads out on the ground around the opposing team!"); } - MESSAGE("Go! Corviknigh!"); + MESSAGE("You're in charge, Corviknigh!"); MESSAGE("Corviknigh was caught in a Sticky Web!"); ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); @@ -222,7 +222,7 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - no o MESSAGE("2 sent out Pidgey!"); } - MESSAGE("Go! Corviknigh!"); + MESSAGE("You're in charge, Corviknigh!"); MESSAGE("Corviknigh was caught in a Sticky Web!"); ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); diff --git a/test/battle/move_effect/toxic_spikes.c b/test/battle/move_effect/toxic_spikes.c index 3be2d1627f11..10ee80d64fd5 100644 --- a/test/battle/move_effect/toxic_spikes.c +++ b/test/battle/move_effect/toxic_spikes.c @@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Toxic Spikes inflicts poison on switch in") TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); MESSAGE("2 sent out Wynaut!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); STATUS_ICON(opponent, poison: TRUE); @@ -38,9 +38,9 @@ SINGLE_BATTLE_TEST("Toxic Spikes inflicts bad poison on switch in") TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); MESSAGE("2 sent out Wynaut!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); STATUS_ICON(opponent, badPoison: TRUE); @@ -61,9 +61,9 @@ SINGLE_BATTLE_TEST("Toxic Spikes fails after 2 layers") TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); MESSAGE("Wobbuffet used Toxic Spikes!"); MESSAGE("But it failed!"); MESSAGE("2 sent out Wynaut!"); @@ -176,7 +176,7 @@ SINGLE_BATTLE_TEST("Toxic Spikes are removed by grounded Poison-types") } SCENE { if (grounded) { NOT STATUS_ICON(opponent, poison: TRUE); - MESSAGE("The poison spikes disappeared from around the opposing team's feet!"); + MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); NOT STATUS_ICON(opponent, poison: TRUE); } else { NOT STATUS_ICON(opponent, poison: TRUE); @@ -204,7 +204,7 @@ SINGLE_BATTLE_TEST("Toxic Spikes are removed by Poison-types affected by Magnet TURN { SWITCH(opponent, 0); } } SCENE { NOT STATUS_ICON(opponent, poison: TRUE); - MESSAGE("The poison spikes disappeared from around the opposing team's feet!"); + MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); NOT STATUS_ICON(opponent, poison: TRUE); } } diff --git a/test/battle/move_effect/triple_arrows.c b/test/battle/move_effect/triple_arrows.c index eb8e1c666f4c..00c6f99ac914 100644 --- a/test/battle/move_effect/triple_arrows.c +++ b/test/battle/move_effect/triple_arrows.c @@ -39,7 +39,7 @@ SINGLE_BATTLE_TEST("Triple Arrows makes the foe flinch 30% of the time") TURN { MOVE(player, MOVE_TRIPLE_ARROWS); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_ARROWS, player); - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("Foe Wobbuffet flinched and couldn't move!"); } } @@ -70,7 +70,7 @@ SINGLE_BATTLE_TEST("Triple Arrows can lower Defense and cause flinch at the time ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_ARROWS, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); MESSAGE("Foe Wobbuffet's Defense fell!"); - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("Foe Wobbuffet flinched and couldn't move!"); } } @@ -85,7 +85,7 @@ SINGLE_BATTLE_TEST("Triple Arrows's flinching is prevented by Inner Focus") } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_ARROWS, player); - NONE_OF { MESSAGE("Foe Wobbuffet flinched!"); } + NONE_OF { MESSAGE("Foe Wobbuffet flinched and couldn't move!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } } diff --git a/test/battle/status1/freeze.c b/test/battle/status1/freeze.c index 0971336b06d6..664485fa0b7b 100644 --- a/test/battle/status1/freeze.c +++ b/test/battle/status1/freeze.c @@ -24,7 +24,7 @@ SINGLE_BATTLE_TEST("Freeze is thawed by opponent's Fire-type attacks") TURN { MOVE(opponent, MOVE_EMBER); MOVE(player, MOVE_CELEBRATE); } } SCENE { MESSAGE("Foe Wobbuffet used Ember!"); - MESSAGE("Wobbuffet was thawed out!"); + MESSAGE("Wobbuffet thawed out!"); STATUS_ICON(player, none: TRUE); } } @@ -38,7 +38,7 @@ SINGLE_BATTLE_TEST("Freeze is thawed by user's Flame Wheel") } WHEN { TURN { MOVE(player, MOVE_FLAME_WHEEL); } } SCENE { - MESSAGE("Wobbuffet was defrosted by Flame Wheel!"); + MESSAGE("Wobbuffet's Flame Wheel melted the ice!"); STATUS_ICON(player, none: TRUE); MESSAGE("Wobbuffet used Flame Wheel!"); } diff --git a/test/battle/status1/frostbite.c b/test/battle/status1/frostbite.c index 2b61c4d6521f..05a93172d1d7 100644 --- a/test/battle/status1/frostbite.c +++ b/test/battle/status1/frostbite.c @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Frostbite deals 1/16 damage to effected pokemon") } WHEN { TURN {} } SCENE { - MESSAGE("Foe Wobbuffet is hurt by its frostbite!"); + MESSAGE("Foe Wobbuffet was hurt by its frostbite!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent); HP_BAR(opponent, captureDamage: &frostbiteDamage); } THEN { EXPECT_EQ(frostbiteDamage, opponent->maxHP / 16); } @@ -84,11 +84,11 @@ SINGLE_BATTLE_TEST("Frostbite is healed when the user uses a thawing move") ANIMATION(ANIM_TYPE_MOVE, move, player); HP_BAR(opponent); if (move == MOVE_EMBER) { - MESSAGE("Wobbuffet is hurt by its frostbite!"); + MESSAGE("Wobbuffet was hurt by its frostbite!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, player); } else { NONE_OF { - MESSAGE("Wobbuffet is hurt by its frostbite!"); + MESSAGE("Wobbuffet was hurt by its frostbite!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, player); } } From 5493a8ac7fe550a3c1ed8a2f0ec27234f4541f67 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Fri, 18 Aug 2023 23:05:51 -0500 Subject: [PATCH 10/68] please fix the tests --- src/battle_message.c | 24 ++++++++++++------------ test/battle/hold_effect/leftovers.c | 6 +++--- test/battle/move_effect/court_change.c | 2 +- test/battle/move_effect/defog.c | 10 +++++----- test/battle/move_effect/hit_escape.c | 2 +- 5 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index d8af89fbf296..ee50c61ed5ef 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -170,7 +170,7 @@ static const u8 sText_PkmnHitWithRecoil[] = _("{B_ATK_NAME_WITH_PREFIX} was dama static const u8 sText_PkmnProtectedItself2[] = _("{B_ATK_NAME_WITH_PREFIX} protected\nitself!"); static const u8 sText_PkmnBuffetedBySandstorm[] = _("{B_ATK_NAME_WITH_PREFIX} is buffeted\nby the sandstorm!"); static const u8 sText_PkmnPeltedByHail[] = _("{B_ATK_NAME_WITH_PREFIX} is buffeted\nby the hail!"); -static const u8 sText_PkmnsXWoreOff[] = _("{B_ATK_PREFIX1} team's {B_BUFF1}\nwore off!"); +static const u8 sText_PkmnsXWoreOff[] = _("{B_ATK_TEAM1} team's {B_BUFF1}\nwore off!"); static const u8 sText_PkmnSeeded[] = _("{B_DEF_NAME_WITH_PREFIX} was seeded!"); static const u8 sText_PkmnEvadedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\nthe attack!"); static const u8 sText_PkmnSappedByLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX}'s health is\nsapped by Leech Seed!"); @@ -336,12 +336,12 @@ static const u8 sText_GotAwaySafely[] = _("{PLAY_SE SE_FLEE}You got away safely! static const u8 sText_PkmnFledUsingIts[] = _("{PLAY_SE SE_FLEE}{B_ATK_NAME_WITH_PREFIX} fled\nusing its {B_LAST_ITEM}!\p"); static const u8 sText_PkmnFledUsing[] = _("{PLAY_SE SE_FLEE}{B_ATK_NAME_WITH_PREFIX} fled\nusing {B_ATK_ABILITY}!\p"); static const u8 sText_WildPkmnFled[] = _("{PLAY_SE SE_FLEE}The wild {B_BUFF1} fled!"); -static const u8 sText_PlayerDefeatedLinkTrainer[] = _("Player defeated\n{B_LINK_OPPONENT1_NAME}!"); -static const u8 sText_TwoLinkTrainersDefeated[] = _("Player defeated {B_LINK_OPPONENT1_NAME}\nand {B_LINK_OPPONENT2_NAME}!"); -static const u8 sText_PlayerLostAgainstLinkTrainer[] = _("Player lost against\n{B_LINK_OPPONENT1_NAME}!"); -static const u8 sText_PlayerLostToTwo[] = _("Player lost to {B_LINK_OPPONENT1_NAME}\nand {B_LINK_OPPONENT2_NAME}!"); -static const u8 sText_PlayerBattledToDrawLinkTrainer[] = _("Player battled to a draw against\n{B_LINK_OPPONENT1_NAME}!"); -static const u8 sText_PlayerBattledToDrawVsTwo[] = _("Player battled to a draw against\n{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}!"); +static const u8 sText_PlayerDefeatedLinkTrainer[] = _("You defeated\n{B_LINK_OPPONENT1_NAME}!"); +static const u8 sText_TwoLinkTrainersDefeated[] = _("You defeated {B_LINK_OPPONENT1_NAME}\nand {B_LINK_OPPONENT2_NAME}!"); +static const u8 sText_PlayerLostAgainstLinkTrainer[] = _("You lost against\n{B_LINK_OPPONENT1_NAME}!"); +static const u8 sText_PlayerLostToTwo[] = _("You lost to {B_LINK_OPPONENT1_NAME}\nand {B_LINK_OPPONENT2_NAME}!"); +static const u8 sText_PlayerBattledToDrawLinkTrainer[] = _("You battled to a draw against\n{B_LINK_OPPONENT1_NAME}!"); +static const u8 sText_PlayerBattledToDrawVsTwo[] = _("You battled to a draw against\n{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}!"); static const u8 sText_WildFled[] = _("{PLAY_SE SE_FLEE}{B_LINK_OPPONENT1_NAME} fled!"); //not in gen 5+, replaced with match was forfeited text static const u8 sText_TwoWildFled[] = _("{PLAY_SE SE_FLEE}{B_LINK_OPPONENT1_NAME} and\n{B_LINK_OPPONENT2_NAME} fled!"); //not in gen 5+, replaced with match was forfeited text static const u8 sText_NoRunningFromTrainers[] = _("No! There's no running\nfrom a Trainer battle!\p"); @@ -357,13 +357,13 @@ static const u8 sText_RainContinues[] = _("Rain continues to fall."); //not in g static const u8 sText_DownpourContinues[] = _("The downpour continues."); // unused static const u8 sText_RainStopped[] = _("The rain stopped."); static const u8 sText_SandstormBrewed[] = _("A sandstorm kicked up!"); -static const u8 sText_SandstormRages[] = _("The sandstorm rages."); //not in gen 5+ +static const u8 sText_SandstormRages[] = _("The sandstorm is raging."); static const u8 sText_SandstormSubsided[] = _("The sandstorm subsided."); static const u8 sText_SunlightGotBright[] = _("The sunlight turned harsh!"); static const u8 sText_SunlightStrong[] = _("The sunlight is strong."); //not in gen 5+ static const u8 sText_SunlightFaded[] = _("The sunlight faded."); static const u8 sText_StartedHail[] = _("It started to hail!"); -static const u8 sText_HailContinues[] = _("Hail continues to fall."); //not in gen 5+ +static const u8 sText_HailContinues[] = _("The hail is crashing down."); static const u8 sText_HailStopped[] = _("The hail stopped."); static const u8 sText_StartedSnow[] = _("It started to snow!"); static const u8 sText_SnowContinues[] = _("Snow continues to fall."); //not in gen 5+ (lol) @@ -388,7 +388,7 @@ static const u8 sText_PkmnTurnedAway[] = _("{B_ATK_NAME_WITH_PREFIX} turned away static const u8 sText_PkmnPretendNotNotice[] = _("{B_ATK_NAME_WITH_PREFIX} pretended\nnot to notice!"); static const u8 sText_EnemyAboutToSwitchPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} is\nabout to send in {B_BUFF2}.\p\nWill you switch your Pokémon?"); static const u8 sText_PkmnLearnedMove2[] = _("{B_ATK_NAME_WITH_PREFIX} learned\n{B_BUFF1}!"); -static const u8 sText_PlayerDefeatedLinkTrainerTrainer1[] = _("Player defeated\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p"); +static const u8 sText_PlayerDefeatedLinkTrainerTrainer1[] = _("You defeated\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p"); static const u8 sText_CreptCloser[] = _("{B_PLAYER_NAME} crept closer to\n{B_OPPONENT_MON1_NAME}!"); static const u8 sText_CantGetCloser[] = _("{B_PLAYER_NAME} can't get any closer!"); static const u8 sText_PkmnWatchingCarefully[] = _("{B_OPPONENT_MON1_NAME} is watching\ncarefully!"); @@ -492,8 +492,8 @@ static const u8 sText_PkmnSentToPC[] = _("{B_DEF_NAME} was sent to\n{B_PC_CREATO static const u8 sText_Someones[] = _("someone's"); static const u8 sText_Lanettes[] = _("LANETTE's"); //no decapitalize until it is everywhere static const u8 sText_PkmnDataAddedToDex[] = _("{B_DEF_NAME}'s data was\nadded to the Pokédex.\p"); -static const u8 sText_ItIsRaining[] = _("It is raining."); -static const u8 sText_SandstormIsRaging[] = _("A sandstorm is raging."); +static const u8 sText_ItIsRaining[] = _("It's raining!"); +static const u8 sText_SandstormIsRaging[] = _("The sandstorm is raging!"); static const u8 sText_BoxIsFull[] = _("The Box is full!\nYou can't catch any more!\p"); static const u8 sText_EnigmaBerry[] = _("ENIGMA BERRY"); //no decapitalize until it is everywhere static const u8 sText_BerrySuffix[] = _(" BERRY"); //no decapitalize until it is everywhere diff --git a/test/battle/hold_effect/leftovers.c b/test/battle/hold_effect/leftovers.c index 3d40494cd865..c26bf6d3f461 100644 --- a/test/battle/hold_effect/leftovers.c +++ b/test/battle/hold_effect/leftovers.c @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Leftovers recovers 1/16th HP at end of turn") } SCENE { s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet's restored a little HP using its Leftovers!"); + MESSAGE("Wobbuffet restored a little HP using its Leftovers!"); HP_BAR(player, damage: -maxHP / 16); } } @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Leftovers does nothing if max HP") } SCENE { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet's restored a little HP using its Leftovers!"); + MESSAGE("Wobbuffet restored a little HP using its Leftovers!"); HP_BAR(player); } } @@ -47,7 +47,7 @@ SINGLE_BATTLE_TEST("Leftovers does nothing if Heal Block applies") } SCENE { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet's restored a little HP using its Leftovers!"); + MESSAGE("Wobbuffet restored a little HP using its Leftovers!"); HP_BAR(player); } } diff --git a/test/battle/move_effect/court_change.c b/test/battle/move_effect/court_change.c index 6bac16bf44ad..f7e089e7a2da 100644 --- a/test/battle/move_effect/court_change.c +++ b/test/battle/move_effect/court_change.c @@ -108,7 +108,7 @@ DOUBLE_BATTLE_TEST("Court Change used by the player swaps Mist, Safeguard, Lucky // The effects now end for the player side. MESSAGE("Your team's Mist wore off!"); MESSAGE("Your team is no longer protected by Safeguard!"); - MESSAGE("Ally's Reflect wore off!"); + MESSAGE("Your team's Reflect wore off!"); MESSAGE("Your team's Lucky Chant wore off!"); MESSAGE("Your team's tailwind petered out!"); MESSAGE("Your team's Light Screen wore off!"); diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c index 4801850af360..02e1d215971e 100644 --- a/test/battle/move_effect/defog.c +++ b/test/battle/move_effect/defog.c @@ -350,11 +350,11 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes everything it can" MESSAGE("Glalie is protected by the mist!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, opponentRight); // Player side - MESSAGE("Ally's Reflect wore off!"); - MESSAGE("Ally's Light Screen wore off!"); - MESSAGE("Ally's Mist wore off!"); - MESSAGE("Ally's Aurora Veil wore off!"); - MESSAGE("Ally's Safeguard wore off!"); + MESSAGE("Your team's Reflect wore off!"); + MESSAGE("Your team's Light Screen wore off!"); + MESSAGE("Your team's Mist wore off!"); + MESSAGE("Your team's Aurora Veil wore off!"); + MESSAGE("Your team's Safeguard wore off!"); MESSAGE("The spikes disappeared from the ground around your team!"); MESSAGE("The pointed stones disappeared from around your team!"); diff --git a/test/battle/move_effect/hit_escape.c b/test/battle/move_effect/hit_escape.c index 9d752155c0de..9efe5a83acb6 100644 --- a/test/battle/move_effect/hit_escape.c +++ b/test/battle/move_effect/hit_escape.c @@ -93,6 +93,6 @@ SINGLE_BATTLE_TEST("U-turn switches the user out if Wimp Out fails to activate") ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player); HP_BAR(opponent); NOT ABILITY_POPUP(opponent); - MESSAGE("Just a little more! Hang in there, Wynaut!"); + MESSAGE("Your opponent's weak! Get 'em, Wynaut!"); } } From b9c7a5a156eb160dfe35bac8f0c9a5fd0cdd467f Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Fri, 18 Aug 2023 23:30:30 -0500 Subject: [PATCH 11/68] Fix final test and light screen --- src/battle_message.c | 14 +++++++------- test/battle/move_effect/defog.c | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index ee50c61ed5ef..9bbf17a3b003 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -137,10 +137,10 @@ static const u8 sText_PkmnChangedType[] = _("{B_ATK_NAME_WITH_PREFIX} transforme static const u8 sText_PkmnFlinched[] = _("{B_ATK_NAME_WITH_PREFIX} flinched\nand couldn't move!"); static const u8 sText_PkmnRegainedHealth[] = _("{B_DEF_NAME_WITH_PREFIX}'s HP was restored."); static const u8 sText_PkmnHPFull[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nHP is full!"); -static const u8 sText_PkmnRaisedSpDef[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE}\nraised SP. DEF!"); //light screen -static const u8 sText_PkmnRaisedSpDefALittle[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE}\nraised SP. DEF a little!"); //light screen -static const u8 sText_PkmnRaisedDef[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE}\nraised DEFENSE!"); //reflect -static const u8 sText_PkmnRaisedDefALittle[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE}\nraised DEFENSE a little!"); //reflect +static const u8 sText_PkmnRaisedSpDef[] = _("Light Screen made {B_ATK_TEAM2} team\nstronger against special moves!"); +static const u8 sText_PkmnRaisedSpDefALittle[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE}\nraised SP. DEF a little!"); //expansion doesn't use anymore +static const u8 sText_PkmnRaisedDef[] = _("Reflect made {B_ATK_TEAM2} team\nstronger against physical moves!"); +static const u8 sText_PkmnRaisedDefALittle[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE}\nraised DEFENSE a little!"); //expansion doesn't use anymore static const u8 sText_PkmnCoveredByVeil[] = _("{B_ATK_TEAM1} team became cloaked in\na mystical veil!"); static const u8 sText_PkmnUsedSafeguard[] = _("{B_ATK_TEAM1} team is protected\nby Safeguard!"); static const u8 sText_PkmnSafeguardExpired[] = _("{B_ATK_TEAM1} team is no longer protected\nby Safeguard!"); @@ -1612,9 +1612,9 @@ const u16 gReflectLightScreenSafeguardStringIds[] = { [B_MSG_SIDE_STATUS_FAILED] = STRINGID_BUTITFAILED, [B_MSG_SET_REFLECT_SINGLE] = STRINGID_PKMNRAISEDDEF, - [B_MSG_SET_REFLECT_DOUBLE] = STRINGID_PKMNRAISEDDEFALITTLE, + [B_MSG_SET_REFLECT_DOUBLE] = STRINGID_PKMNRAISEDDEF, [B_MSG_SET_LIGHTSCREEN_SINGLE] = STRINGID_PKMNRAISEDSPDEF, - [B_MSG_SET_LIGHTSCREEN_DOUBLE] = STRINGID_PKMNRAISEDSPDEFALITTLE, + [B_MSG_SET_LIGHTSCREEN_DOUBLE] = STRINGID_PKMNRAISEDSPDEF, [B_MSG_SET_SAFEGUARD] = STRINGID_PKMNCOVEREDBYVEIL, }; @@ -1988,7 +1988,7 @@ const u8 gText_NewLine[] = _("\n"); const u8 gText_Are[] = _("are"); const u8 gText_Are2[] = _("are"); const u8 gText_BadEgg[] = _("Bad Egg"); -const u8 gText_BattleWallyName[] = _("WALLY"); +const u8 gText_BattleWallyName[] = _("WALLY"); const u8 gText_Win[] = _("{HIGHLIGHT TRANSPARENT}Win"); const u8 gText_Loss[] = _("{HIGHLIGHT TRANSPARENT}Loss"); const u8 gText_Draw[] = _("{HIGHLIGHT TRANSPARENT}Draw"); diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c index 02e1d215971e..79f0bf471ce0 100644 --- a/test/battle/move_effect/defog.c +++ b/test/battle/move_effect/defog.c @@ -116,7 +116,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); } else { - MESSAGE("Foe Wobbuffet is protected by the mist!"); + MESSAGE("Wobbuffet is protected by the mist!"); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); } MESSAGE("Wobbuffet used Toxic!"); @@ -201,7 +201,7 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Spikes from player MESSAGE("The spikes disappeared from the ground around your team!"); } // Switch happens - MESSAGE("Wobbuffet, that's enough! Come back!"); + MESSAGE("Wobbuffet, come back!"); MESSAGE("You're in charge, Wobbuffet!"); if (move != MOVE_DEFOG) { HP_BAR(player); From 77dfbf2f868f1d96482a91a6ada556bb51d2380e Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Fri, 18 Aug 2023 23:42:49 -0500 Subject: [PATCH 12/68] The sunlight is harsh! --- include/constants/battle_string_ids.h | 3 ++- src/battle_message.c | 4 +++- test/battle/move_effect/defog.c | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 97284d6fe443..5a4fdc4aec89 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -665,8 +665,9 @@ #define STRINGID_SNOWSTOPPED 663 #define STRINGID_SNOWWARNINGSNOW 664 #define STRINGID_PKMNITEMMELTED 665 +#define STRINGID_SUNLIGHTISHARSH 666 -#define BATTLESTRINGS_COUNT 666 +#define BATTLESTRINGS_COUNT 667 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, diff --git a/src/battle_message.c b/src/battle_message.c index 9bbf17a3b003..94b94d7beac2 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -494,6 +494,7 @@ static const u8 sText_Lanettes[] = _("LANETTE's"); //no decapitalize until it is static const u8 sText_PkmnDataAddedToDex[] = _("{B_DEF_NAME}'s data was\nadded to the Pokédex.\p"); static const u8 sText_ItIsRaining[] = _("It's raining!"); static const u8 sText_SandstormIsRaging[] = _("The sandstorm is raging!"); +static const u8 sText_SunlightIsHarsh[] = _("The sunlight is harsh!"); static const u8 sText_BoxIsFull[] = _("The Box is full!\nYou can't catch any more!\p"); static const u8 sText_EnigmaBerry[] = _("ENIGMA BERRY"); //no decapitalize until it is everywhere static const u8 sText_BerrySuffix[] = _(" BERRY"); //no decapitalize until it is everywhere @@ -1457,6 +1458,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_PKMNFROSTBITEHEALED - BATTLESTRINGS_TABLE_START] = sText_PkmnFrostbiteHealed, [STRINGID_PKMNFROSTBITEHEALED2 - BATTLESTRINGS_TABLE_START] = sText_PkmnFrostbiteHealed2, [STRINGID_PKMNFROSTBITEHEALEDBY - BATTLESTRINGS_TABLE_START] = sText_PkmnFrostbiteHealedBy, + [STRINGID_SUNLIGHTISHARSH - BATTLESTRINGS_TABLE_START] = sText_SunlightIsHarsh, }; const u16 gTrainerUsedItemStringIds[] = @@ -1847,7 +1849,7 @@ const u16 gWeatherStartsStringIds[] = [WEATHER_FOG_DIAGONAL] = STRINGID_ITISRAINING, [WEATHER_UNDERWATER] = STRINGID_ITISRAINING, [WEATHER_SHADE] = STRINGID_ITISRAINING, - [WEATHER_DROUGHT] = STRINGID_SUNLIGHTSTRONG, + [WEATHER_DROUGHT] = STRINGID_SUNLIGHTISHARSH, [WEATHER_DOWNPOUR] = STRINGID_ITISRAINING, [WEATHER_UNDERWATER_BUBBLES] = STRINGID_ITISRAINING, [WEATHER_ABNORMAL] = STRINGID_ITISRAINING diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c index 79f0bf471ce0..8086a9971a25 100644 --- a/test/battle/move_effect/defog.c +++ b/test/battle/move_effect/defog.c @@ -105,7 +105,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard ANIMATION(ANIM_TYPE_MOVE, MOVE_MIST, opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_SAFEGUARD, opponentRight); if (move == MOVE_DEFOG) { - MESSAGE("Foe Wobbuffet is protected by the mist!"); + MESSAGE("Wobbuffet is protected by the mist!"); ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); MESSAGE("The opposing team's Mist wore off!"); MESSAGE("The opposing team's Safeguard wore off!"); From bd18affb59eead56009d7ade994068c6d81bbf38 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Sat, 19 Aug 2023 00:05:47 -0500 Subject: [PATCH 13/68] More fixes --- src/battle_message.c | 14 +++++++------- test/battle/move_effect/defog.c | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index 94b94d7beac2..49e6f81e094e 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -76,14 +76,14 @@ static const u8 sText_PkmnAvoidedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\ static const u8 sText_ItDoesntAffect[] = _("It doesn't affect\n{B_DEF_NAME_WITH_PREFIX}…"); static const u8 sText_AttackerFainted[] = _("{B_ATK_NAME_WITH_PREFIX} fainted!\p"); static const u8 sText_TargetFainted[] = _("{B_DEF_NAME_WITH_PREFIX} fainted!\p"); -static const u8 sText_PlayerGotMoney[] = _("{B_PLAYER_NAME} got ¥{B_BUFF1}\nfor winning!\p"); -static const u8 sText_PlayerLostToEnemyTrainer[] = _("{B_PLAYER_NAME} is out of\nusable Pokémon!\pPlayer lost against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!{PAUSE_UNTIL_PRESS}"); -static const u8 sText_PlayerPaidPrizeMoney[] = _("{B_PLAYER_NAME} paid out ¥{B_BUFF1}\nto the winner…\p{B_PLAYER_NAME} blacked out!{PAUSE_UNTIL_PRESS}"); -static const u8 sText_PlayerWhiteout[] = _("{B_PLAYER_NAME} is out of\nusable Pokémon!\p"); +static const u8 sText_PlayerGotMoney[] = _("You got ¥{B_BUFF1}\nfor winning!\p"); +static const u8 sText_PlayerLostToEnemyTrainer[] = _("You have no more\nPokémon that can fight!\pYou lost to\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!{PAUSE_UNTIL_PRESS}"); +static const u8 sText_PlayerPaidPrizeMoney[] = _("You gave ¥{B_BUFF1}\nto the winner…\pYou were overwhelmed\nby your defeat!{PAUSE_UNTIL_PRESS}"); +static const u8 sText_PlayerWhiteout[] = _("You have no more\nPokémon that can fight!\p"); #if B_WHITEOUT_MONEY >= GEN_4 -static const u8 sText_PlayerWhiteout2[] = _("{B_PLAYER_NAME} dropped ¥{B_BUFF1}\nin panic…\p{B_PLAYER_NAME} blacked out!{PAUSE_UNTIL_PRESS}"); +static const u8 sText_PlayerWhiteout2[] = _("You panicked\nand dropped ¥{B_BUFF1}…\pYou were overwhelmed\nby your defeat!{PAUSE_UNTIL_PRESS}"); #else -static const u8 sText_PlayerWhiteout2[] = _("{B_PLAYER_NAME} blacked out!{PAUSE_UNTIL_PRESS}"); +static const u8 sText_PlayerWhiteout2[] = _("You were overwhelmed\nby your defeat!{PAUSE_UNTIL_PRESS}"); #endif static const u8 sText_PreventsEscape[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} prevents\nescape with {B_SCR_ACTIVE_ABILITY}!\p"); //not in gen 5+, ability popup static const u8 sText_CantEscape2[] = _("You couldn't get away!\p"); @@ -386,7 +386,7 @@ static const u8 sText_PkmnLoafing[] = _("{B_ATK_NAME_WITH_PREFIX} is\nloafing ar static const u8 sText_PkmnWontObey[] = _("{B_ATK_NAME_WITH_PREFIX} won't obey!"); static const u8 sText_PkmnTurnedAway[] = _("{B_ATK_NAME_WITH_PREFIX} turned away!"); static const u8 sText_PkmnPretendNotNotice[] = _("{B_ATK_NAME_WITH_PREFIX} pretended\nnot to notice!"); -static const u8 sText_EnemyAboutToSwitchPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} is\nabout to send in {B_BUFF2}.\p\nWill you switch your Pokémon?"); +static const u8 sText_EnemyAboutToSwitchPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} is\nabout to send out {B_BUFF2}.\pWill you switch your Pokémon?"); static const u8 sText_PkmnLearnedMove2[] = _("{B_ATK_NAME_WITH_PREFIX} learned\n{B_BUFF1}!"); static const u8 sText_PlayerDefeatedLinkTrainerTrainer1[] = _("You defeated\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p"); static const u8 sText_CreptCloser[] = _("{B_PLAYER_NAME} crept closer to\n{B_OPPONENT_MON1_NAME}!"); diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c index 8086a9971a25..e864d754f97d 100644 --- a/test/battle/move_effect/defog.c +++ b/test/battle/move_effect/defog.c @@ -105,7 +105,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard ANIMATION(ANIM_TYPE_MOVE, MOVE_MIST, opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_SAFEGUARD, opponentRight); if (move == MOVE_DEFOG) { - MESSAGE("Wobbuffet is protected by the mist!"); + MESSAGE("Foe Wobbuffet is protected by the mist!"); ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); MESSAGE("The opposing team's Mist wore off!"); MESSAGE("The opposing team's Safeguard wore off!"); @@ -116,7 +116,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); } else { - MESSAGE("Wobbuffet is protected by the mist!"); + MESSAGE("Foe Wobbuffet is protected by the mist!"); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); } MESSAGE("Wobbuffet used Toxic!"); From d50eb07900497e670b64cf07118357ff5da7ef14 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Sat, 19 Aug 2023 00:44:47 -0500 Subject: [PATCH 14/68] more accurate safeguard message --- src/battle_message.c | 6 +++--- test/battle/hold_effect/berserk_gene.c | 2 +- test/battle/move_effect/defog.c | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index 49e6f81e094e..0fad9212ffdc 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -142,7 +142,7 @@ static const u8 sText_PkmnRaisedSpDefALittle[] = _("{B_ATK_PREFIX1}'s {B_CURRENT static const u8 sText_PkmnRaisedDef[] = _("Reflect made {B_ATK_TEAM2} team\nstronger against physical moves!"); static const u8 sText_PkmnRaisedDefALittle[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE}\nraised DEFENSE a little!"); //expansion doesn't use anymore static const u8 sText_PkmnCoveredByVeil[] = _("{B_ATK_TEAM1} team became cloaked in\na mystical veil!"); -static const u8 sText_PkmnUsedSafeguard[] = _("{B_ATK_TEAM1} team is protected\nby Safeguard!"); +static const u8 sText_PkmnUsedSafeguard[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is protected\nby Safeguard!"); static const u8 sText_PkmnSafeguardExpired[] = _("{B_ATK_TEAM1} team is no longer protected\nby Safeguard!"); static const u8 sText_PkmnWentToSleep[] = _("{B_ATK_NAME_WITH_PREFIX} went\nto sleep!"); //not in gen 5+ static const u8 sText_PkmnSleptHealthy[] = _("{B_ATK_NAME_WITH_PREFIX} slept and\nbecame healthy!"); @@ -328,11 +328,11 @@ static const u8 sText_StatsWontDecrease2[] = _("{B_DEF_NAME_WITH_PREFIX}'s stats static const u8 sText_CriticalHit[] = _("A critical hit!"); static const u8 sText_OneHitKO[] = _("It's a one-hit KO!"); static const u8 sText_123Poof[] = _("One…{PAUSE 20}two…{PAUSE 20}and…{PAUSE 20}{PAUSE 20}{PLAY_SE SE_BALL_BOUNCE_1}ta-da!\p"); -static const u8 sText_AndEllipsis[] = _("And…\p"); +static const u8 sText_AndEllipsis[] = _("And…\p");~ static const u8 sText_HMMovesCantBeForgotten[] = _("HM moves can't be\nforgotten now.\p"); static const u8 sText_NotVeryEffective[] = _("It's not very effective…"); static const u8 sText_SuperEffective[] = _("It's super effective!"); -static const u8 sText_GotAwaySafely[] = _("{PLAY_SE SE_FLEE}You got away safely!!\p"); +static const u8 sText_GotAwaySafely[] = _("{PLAY_SE SE_FLEE}You got away safely!\p"); static const u8 sText_PkmnFledUsingIts[] = _("{PLAY_SE SE_FLEE}{B_ATK_NAME_WITH_PREFIX} fled\nusing its {B_LAST_ITEM}!\p"); static const u8 sText_PkmnFledUsing[] = _("{PLAY_SE SE_FLEE}{B_ATK_NAME_WITH_PREFIX} fled\nusing {B_ATK_ABILITY}!\p"); static const u8 sText_WildPkmnFled[] = _("{PLAY_SE SE_FLEE}The wild {B_BUFF1} fled!"); diff --git a/test/battle/hold_effect/berserk_gene.c b/test/battle/hold_effect/berserk_gene.c index 41a6f63f9ff7..8a5ea1e34b9d 100644 --- a/test/battle/hold_effect/berserk_gene.c +++ b/test/battle/hold_effect/berserk_gene.c @@ -112,7 +112,7 @@ SINGLE_BATTLE_TEST("Berserk Gene does not confuse when Safeguard is active") } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Using Berserk Gene, the Attack of Wobbuffet sharply rose!"); - MESSAGE("Your team is protected by Safeguard!"); + MESSAGE("Wobbuffet is protected by Safeguard!"); NOT MESSAGE("Wobbuffet became confused!"); } } diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c index e864d754f97d..ff98a0619df9 100644 --- a/test/battle/move_effect/defog.c +++ b/test/battle/move_effect/defog.c @@ -125,7 +125,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard STATUS_ICON(opponentRight, badPoison: TRUE); } else { - MESSAGE("The opposing team is protected by Safeguard!"); + MESSAGE("Foe Wobbuffet is protected by Safeguard!"); NOT STATUS_ICON(opponentRight, badPoison: TRUE); } } From ca1978a604fbafea5871b1afa25832bb33e10759 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Sat, 19 Aug 2023 00:48:59 -0500 Subject: [PATCH 15/68] Oops --- src/battle_message.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_message.c b/src/battle_message.c index 0fad9212ffdc..5d917a4197e0 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -328,7 +328,7 @@ static const u8 sText_StatsWontDecrease2[] = _("{B_DEF_NAME_WITH_PREFIX}'s stats static const u8 sText_CriticalHit[] = _("A critical hit!"); static const u8 sText_OneHitKO[] = _("It's a one-hit KO!"); static const u8 sText_123Poof[] = _("One…{PAUSE 20}two…{PAUSE 20}and…{PAUSE 20}{PAUSE 20}{PLAY_SE SE_BALL_BOUNCE_1}ta-da!\p"); -static const u8 sText_AndEllipsis[] = _("And…\p");~ +static const u8 sText_AndEllipsis[] = _("And…\p"); static const u8 sText_HMMovesCantBeForgotten[] = _("HM moves can't be\nforgotten now.\p"); static const u8 sText_NotVeryEffective[] = _("It's not very effective…"); static const u8 sText_SuperEffective[] = _("It's super effective!"); From f8fb8f454a53e759c2a282df9c6218f82ce577cf Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Sun, 20 Aug 2023 12:58:14 -0500 Subject: [PATCH 16/68] Update battle_message.c --- src/battle_message.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_message.c b/src/battle_message.c index 5d917a4197e0..1fcc8c500200 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -225,7 +225,7 @@ static const u8 sText_PkmnCutHPMaxedAttack[] = _("{B_ATK_NAME_WITH_PREFIX} cut i static const u8 sText_PkmnCopiedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX}'s stat changes!"); static const u8 sText_PkmnGotFree[] = _("{B_ATK_NAME_WITH_PREFIX} got free of\n{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}!"); //not in gen 5+, generic rapid spin? static const u8 sText_PkmnShedLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX} shed\nLeech Seed!"); //not in gen 5+, generic rapid spin? -static const u8 sText_PkmnBlewAwaySpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nspikes!"); //not in gen 5+, generic rapid spin? +static const u8 sText_PkmnBlewAwaySpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nSpikes!"); //not in gen 5+, generic rapid spin? static const u8 sText_PkmnFledFromBattle[] = _("{B_ATK_NAME_WITH_PREFIX} fled from\nbattle!"); static const u8 sText_PkmnForesawAttack[] = _("{B_ATK_NAME_WITH_PREFIX} foresaw\nan attack!"); static const u8 sText_PkmnTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX} took the\n{B_BUFF1} attack!"); From 878c3722ddd4cf936fb3dae063281586e0f04eee Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Mon, 11 Sep 2023 16:37:29 -0500 Subject: [PATCH 17/68] Weather and terrain starting text --- data/battle_scripts_1.s | 2 +- include/constants/battle_string_ids.h | 10 ++++++++-- src/battle_message.c | 25 +++++++++++++++++++++---- 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index ff041acda956..a0eb40167364 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -6735,7 +6735,7 @@ BattleScript_OverworldWeatherStarts:: end3 BattleScript_OverworldTerrain:: - printfromtable gTerrainStringIds + printfromtable gTerrainStartsStringIds waitmessage B_WAIT_TIME_LONG playanimation BS_BATTLER_0, B_ANIM_RESTORE_BG call BattleScript_ActivateTerrainEffects diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 8daaf879566c..456c50bcdd95 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -669,8 +669,14 @@ #define STRINGID_ULTRABURSTCOMPLETED 667 #define STRINGID_TEAMGAINEDEXP 668 #define STRINGID_SUNLIGHTISHARSH 669 - -#define BATTLESTRINGS_COUNT 670 +#define STRINGID_ITISHAILING 670 +#define STRINGID_ITISSNOWING 671 +#define STRINGID_ISCOVEREDWITHGRASS 672 +#define STRINGID_MISTSWIRLSAROUND 673 +#define STRINGID_ELECTRICCURRENTISRUNNING 674 +#define STRINGID_SEEMSWEIRD 675 + +#define BATTLESTRINGS_COUNT 676 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, diff --git a/src/battle_message.c b/src/battle_message.c index 6393440fc397..ea663058ad6a 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -496,6 +496,12 @@ static const u8 sText_PkmnDataAddedToDex[] = _("{B_DEF_NAME}'s data was\nadded t static const u8 sText_ItIsRaining[] = _("It's raining!"); static const u8 sText_SandstormIsRaging[] = _("The sandstorm is raging!"); static const u8 sText_SunlightIsHarsh[] = _("The sunlight is harsh!"); +static const u8 sText_ItIsHailing[] = _("It's hailing!"); +static const u8 sText_ItIsSnowing[] = _("It's snowing!"); +static const u8 sText_IsCoveredWithGrass[] = _("The battlefield\nis covered with grass!"); +static const u8 sText_MistSwirlsAround[] = _("Mist swirls around\nthe battlefield!"); +static const u8 sText_ElectricCurrentIsRunning[] = _("An electric current is running\nacross the battlefield!"); +static const u8 sText_SeemsWeird[] = _("The battlefield seems weird!"); static const u8 sText_BoxIsFull[] = _("The Box is full!\nYou can't catch any more!\p"); static const u8 sText_EnigmaBerry[] = _("ENIGMA BERRY"); //no decapitalize until it is everywhere static const u8 sText_BerrySuffix[] = _(" BERRY"); //no decapitalize until it is everywhere @@ -1466,6 +1472,12 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_ULTRABURSTCOMPLETED - BATTLESTRINGS_TABLE_START] = sText_UltraBurstCompleted, [STRINGID_TEAMGAINEDEXP - BATTLESTRINGS_TABLE_START] = sText_TeamGainedEXP, [STRINGID_SUNLIGHTISHARSH - BATTLESTRINGS_TABLE_START] = sText_SunlightIsHarsh, + [STRINGID_ITISHAILING - BATTLESTRINGS_TABLE_START] = sText_ItIsHailing, + [STRINGID_ITISSNOWING - BATTLESTRINGS_TABLE_START] = sText_ItIsSnowing, + [STRINGID_ISCOVEREDWITHGRASS - BATTLESTRINGS_TABLE_START] = sText_IsCoveredWithGrass, + [STRINGID_MISTSWIRLSAROUND - BATTLESTRINGS_TABLE_START] = sText_MistSwirlsAround, + [STRINGID_ELECTRICCURRENTISRUNNING - BATTLESTRINGS_TABLE_START] = sText_ElectricCurrentIsRunning, + [STRINGID_SEEMSWEIRD - BATTLESTRINGS_TABLE_START] = sText_SeemsWeird, }; const u16 gTrainerUsedItemStringIds[] = @@ -1849,15 +1861,15 @@ const u16 gWeatherStartsStringIds[] = [WEATHER_SUNNY] = STRINGID_ITISRAINING, [WEATHER_RAIN] = STRINGID_ITISRAINING, #if B_OVERWORLD_SNOW >= GEN_9 - [WEATHER_SNOW] = STRINGID_STARTEDSNOW, + [WEATHER_SNOW] = STRINGID_ITISSNOWING, #else - [WEATHER_SNOW] = STRINGID_STARTEDHAIL, + [WEATHER_SNOW] = STRINGID_ITISHAILING, #endif [WEATHER_RAIN_THUNDERSTORM] = STRINGID_ITISRAINING, - [WEATHER_FOG_HORIZONTAL] = STRINGID_ITISRAINING, + [WEATHER_FOG_HORIZONTAL] = STRINGID_MISTSWIRLSAROUND, [WEATHER_VOLCANIC_ASH] = STRINGID_ITISRAINING, [WEATHER_SANDSTORM] = STRINGID_SANDSTORMISRAGING, - [WEATHER_FOG_DIAGONAL] = STRINGID_ITISRAINING, + [WEATHER_FOG_DIAGONAL] = STRINGID_MISTSWIRLSAROUND, [WEATHER_UNDERWATER] = STRINGID_ITISRAINING, [WEATHER_SHADE] = STRINGID_ITISRAINING, [WEATHER_DROUGHT] = STRINGID_SUNLIGHTISHARSH, @@ -1866,6 +1878,11 @@ const u16 gWeatherStartsStringIds[] = [WEATHER_ABNORMAL] = STRINGID_ITISRAINING }; +const u16 gTerrainStartsStringIds[] = +{ + STRINGID_MISTSWIRLSAROUND, STRINGID_ISCOVEREDWITHGRASS, STRINGID_ELECTRICCURRENTISRUNNING, STRINGID_SEEMSWEIRD, STRINGID_TERRAINREMOVED, +}; + const u16 gPrimalWeatherBlocksStringIds[] = { [B_MSG_PRIMAL_WEATHER_FIZZLED_BY_RAIN] = STRINGID_MOVEFIZZLEDOUTINTHEHEAVYRAIN, From 51c71ee2a91b3e5e14a132020699c9f74cf236b3 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Mon, 11 Sep 2023 16:59:50 -0500 Subject: [PATCH 18/68] Fix tests --- test/battle/move_effect/fling.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/test/battle/move_effect/fling.c b/test/battle/move_effect/fling.c index 8016b2f22493..b264457e3750 100644 --- a/test/battle/move_effect/fling.c +++ b/test/battle/move_effect/fling.c @@ -180,7 +180,7 @@ SINGLE_BATTLE_TEST("Fling doesn't consume the item if pokemon is asleep/frozen/p } SCENE { if (status == STATUS1_FREEZE) { MESSAGE("Wobbuffet is frozen solid!"); - MESSAGE("Wobbuffet was defrosted!"); + MESSAGE("Wobbuffet thawed out!"); } else if (status == STATUS1_PARALYSIS) { MESSAGE("Wobbuffet is paralyzed! It can't move!"); @@ -237,11 +237,11 @@ SINGLE_BATTLE_TEST("Fling applies special effects when throwing specific Items") STATUS_ICON(opponent, STATUS1_POISON); break; case EFFECT_TOXIC: - MESSAGE("Foe Wobbuffet is badly poisoned!"); + MESSAGE("Foe Wobbuffet was badly poisoned!"); STATUS_ICON(opponent, STATUS1_TOXIC_POISON); break; case EFFECT_FLINCH_HIT: - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("Foe Wobbuffet flinched and couldn't move!"); break; } } @@ -280,9 +280,9 @@ SINGLE_BATTLE_TEST("Fling - thrown berry's effect activates for the target even HP_BAR(opponent); if (effect == HOLD_EFFECT_RESTORE_HP) { if (item == ITEM_ORAN_BERRY) { - MESSAGE("Foe Wobbuffet's Oran Berry restored health!"); + MESSAGE("Foe Wobbuffet restored its health using its Oran Berry!"); } else { - MESSAGE("Foe Wobbuffet's Sitrus Berry restored health!"); + MESSAGE("Foe Wobbuffet restored its health using its Sitrus Berry!"); } HP_BAR(opponent); } @@ -290,13 +290,13 @@ SINGLE_BATTLE_TEST("Fling - thrown berry's effect activates for the target even if (status1 == STATUS1_BURN) { MESSAGE("Foe Wobbuffet's Rawst Berry healed its burn!"); } else if (status1 == STATUS1_SLEEP) { - MESSAGE("Foe Wobbuffet's Chesto Berry woke it from its sleep!"); + MESSAGE("Foe Wobbuffet's Chesto Berry woke it up!"); } else if (status1 == STATUS1_FREEZE) { MESSAGE("Foe Wobbuffet's Aspear Berry defrosted it!"); } else if (status1 == STATUS1_PARALYSIS) { - MESSAGE("Foe Wobbuffet's Cheri Berry cured paralysis!"); + MESSAGE("Foe Wobbuffet's Cheri Berry cured its paralysis!"); } else if (status1 == STATUS1_TOXIC_POISON || status1 == STATUS1_POISON) { - MESSAGE("Foe Wobbuffet's Pecha Berry cured poison!"); + MESSAGE("Foe Wobbuffet's Pecha Berry cured its poison!"); } NOT STATUS_ICON(opponent, status1); } From 4527ec11cb05b502f7407eee48242d0265f68d1d Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Mon, 25 Sep 2023 12:55:46 -0500 Subject: [PATCH 19/68] Update battle_string_ids.h --- include/constants/battle_string_ids.h | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 03bf6df8e6cc..c85280e721f6 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -667,15 +667,18 @@ #define STRINGID_ULTRABURSTREACTING 665 #define STRINGID_ULTRABURSTCOMPLETED 666 #define STRINGID_TEAMGAINEDEXP 667 -#define STRINGID_SUNLIGHTISHARSH 668 -#define STRINGID_ITISHAILING 669 -#define STRINGID_ITISSNOWING 670 -#define STRINGID_ISCOVEREDWITHGRASS 671 -#define STRINGID_MISTSWIRLSAROUND 672 -#define STRINGID_ELECTRICCURRENTISRUNNING 673 -#define STRINGID_SEEMSWEIRD 674 - -#define BATTLESTRINGS_COUNT 676 +#define STRINGID_CURRENTMOVECANTSELECT 668 +#define STRINGID_TARGETISBEINGSALTCURED 669 +#define STRINGID_TARGETISHURTBYSALTCURE 670 +#define STRINGID_SUNLIGHTISHARSH 671 +#define STRINGID_ITISHAILING 672 +#define STRINGID_ITISSNOWING 673 +#define STRINGID_ISCOVEREDWITHGRASS 674 +#define STRINGID_MISTSWIRLSAROUND 675 +#define STRINGID_ELECTRICCURRENTISRUNNING 676 +#define STRINGID_SEEMSWEIRD 677 + +#define BATTLESTRINGS_COUNT 678 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, From d661ea1db25fcd7beee8315d878dca8a475e60f6 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Mon, 25 Sep 2023 13:04:48 -0500 Subject: [PATCH 20/68] Update battle_message.c --- src/battle_message.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index b7b474129b66..cd9ef43ffa7a 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -311,7 +311,7 @@ const u8 gText_PkmnsXPreventsSwitching[] = _("{B_BUFF1}'s {B_LAST_ABILITY}\nprev static const u8 sText_PreventedFromWorking[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevented {B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\l{B_BUFF1} from working!"); //unused static const u8 sText_PkmnsXMadeItIneffective[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade it ineffective!"); //not in gen 5+, ability popup static const u8 sText_PkmnsXPreventsFlinching[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY}\nprevents flinching!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXPreventsYsZ[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX}'s\l{B_DEF_ABILITY} from working!"); +static const u8 sText_PkmnsXPreventsYsZ[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX}'s\l{B_DEF_ABILITY} from working!"); static const u8 sText_PkmnsAbilityPreventsAbility[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX}'s\l{B_DEF_ABILITY} from working!"); //not in gen 5+, ability popup static const u8 sText_PkmnsXCuredItsYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!"); //not in gen 5+, ability popup static const u8 sText_PkmnsXHadNoEffectOnY[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nhad no effect on {B_EFF_NAME_WITH_PREFIX}!"); //not in gen 5+, ability popup @@ -364,7 +364,7 @@ static const u8 sText_SunlightGotBright[] = _("The sunlight turned harsh!"); static const u8 sText_SunlightStrong[] = _("The sunlight is strong."); //not in gen 5+ static const u8 sText_SunlightFaded[] = _("The sunlight faded."); static const u8 sText_StartedHail[] = _("It started to hail!"); -static const u8 sText_HailContinues[] = _("The hail is crashing down."); +static const u8 sText_HailContinues[] = _("The hail is crashing down."); static const u8 sText_HailStopped[] = _("The hail stopped."); static const u8 sText_StartedSnow[] = _("It started to snow!"); static const u8 sText_SnowContinues[] = _("Snow continues to fall."); //not in gen 5+ (lol) @@ -424,7 +424,7 @@ static const u8 sText_LinkPartnerSentOutPkmnGoPkmn[] = _("{B_LINK_PARTNER_NAME} static const u8 sText_PkmnSwitchOut[] = _("{B_BUFF1}, switch out!\nCome back!"); //Later gens use this message when switching out a pokemon during shift rules. static const u8 sText_PkmnComeBack[] = _("{B_BUFF1}, come back!"); static const u8 sText_PkmnThatsEnough[] = _("{B_BUFF1}, that's enough!\nCome back!"); -static const u8 sText_PkmnOkComeBack[] = _("OK, {B_BUFF1}!\nCome back!"); +static const u8 sText_PkmnOkComeBack[] = _("OK, {B_BUFF1}!\nCome back!"); static const u8 sText_PkmnGoodComeBack[] = _("Good job, {B_BUFF1}!\nCome back!"); static const u8 sText_Trainer1WithdrewPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwithdrew {B_BUFF1}!"); static const u8 sText_LinkTrainer1WithdrewPkmn[] = _("{B_LINK_OPPONENT1_NAME} withdrew\n{B_BUFF1}!"); @@ -1885,7 +1885,7 @@ const u16 gWeatherStartsStringIds[] = const u16 gTerrainStartsStringIds[] = { - STRINGID_MISTSWIRLSAROUND, STRINGID_ISCOVEREDWITHGRASS, STRINGID_ELECTRICCURRENTISRUNNING, STRINGID_SEEMSWEIRD, STRINGID_TERRAINREMOVED, + STRINGID_MISTSWIRLSAROUND, STRINGID_ISCOVEREDWITHGRASS, STRINGID_ELECTRICCURRENTISRUNNING, STRINGID_SEEMSWEIRD, }; const u16 gPrimalWeatherBlocksStringIds[] = @@ -2791,7 +2791,7 @@ void BufferStringBattle(u16 stringID, u32 battler) stringPtr = sText_LinkTrainerSentOutPkmn; } } - break; + break; case STRINGID_RETURNMON: // sending poke to ball msg if (GetBattlerSide(battler) == B_SIDE_PLAYER) { From d83ea6d3eec72cfec50f23fcd2b3620ff18f7035 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Sun, 25 Feb 2024 18:06:28 -0600 Subject: [PATCH 21/68] Revert all test changes for now so I can redo them --- test/battle/ability/download.c | 2 +- test/battle/ability/inner_focus.c | 4 +- test/battle/ability/intimidate.c | 12 +++--- test/battle/ability/mirror_armor.c | 2 +- test/battle/ability/rattled.c | 2 +- test/battle/ability/speed_boost.c | 2 +- test/battle/ability/stench.c | 4 +- test/battle/form_change/primal_reversion.c | 6 +-- test/battle/hold_effect/berserk_gene.c | 2 +- test/battle/hold_effect/eject_button.c | 4 +- test/battle/hold_effect/leftovers.c | 6 +-- test/battle/hold_effect/red_card.c | 2 +- test/battle/item_effect/set_mist.c | 4 +- test/battle/move_effect/court_change.c | 28 ++++++------- test/battle/move_effect/defog.c | 40 +++++++++---------- test/battle/move_effect/fling.c | 14 +++---- test/battle/move_effect/hit_escape.c | 2 +- .../move_effect/hit_set_entry_hazardss.c | 14 +++---- test/battle/move_effect/make_it_rain.c | 4 +- test/battle/move_effect/recoil_if_miss.c | 4 +- test/battle/move_effect/shell_trap.c | 2 +- test/battle/move_effect/spikes.c | 16 ++++---- test/battle/move_effect/sticky_web.c | 6 +-- test/battle/move_effect/toxic_spikes.c | 14 +++---- test/battle/move_effect/triple_arrows.c | 6 +-- test/battle/status1/freeze.c | 4 +- test/battle/status1/frostbite.c | 6 +-- 27 files changed, 106 insertions(+), 106 deletions(-) diff --git a/test/battle/ability/download.c b/test/battle/ability/download.c index 34b0fc261191..d0e896fd7adb 100644 --- a/test/battle/ability/download.c +++ b/test/battle/ability/download.c @@ -72,7 +72,7 @@ SINGLE_BATTLE_TEST("Download doesn't activate if target hasn't been sent out yet ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); // Everyone faints. - MESSAGE("You're in charge, Porygon!"); + MESSAGE("Go! Porygon!"); MESSAGE("2 sent out Porygon2!"); NONE_OF { diff --git a/test/battle/ability/inner_focus.c b/test/battle/ability/inner_focus.c index 94b31feeed25..ecd71272cb9a 100644 --- a/test/battle/ability/inner_focus.c +++ b/test/battle/ability/inner_focus.c @@ -38,7 +38,7 @@ SINGLE_BATTLE_TEST("Inner Focus prevents flinching") } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, player); - NONE_OF { MESSAGE("Foe Zubat flinched and couldn't move!"); } + NONE_OF { MESSAGE("Foe Zubat flinched!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } } @@ -52,6 +52,6 @@ SINGLE_BATTLE_TEST("Inner Focus is ignored by Mold Breaker") TURN { MOVE(player, MOVE_FAKE_OUT); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, player); - MESSAGE("Foe Zubat flinched and couldn't move!"); + MESSAGE("Foe Zubat flinched!"); } } diff --git a/test/battle/ability/intimidate.c b/test/battle/ability/intimidate.c index 7d17e3900aef..298e02173287 100644 --- a/test/battle/ability/intimidate.c +++ b/test/battle/ability/intimidate.c @@ -77,9 +77,9 @@ DOUBLE_BATTLE_TEST("Intimidate doesn't activate on an empty field in a double ba ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, playerLeft); // Everyone faints. - MESSAGE("You're in charge, Ekans!"); + MESSAGE("Go! Ekans!"); MESSAGE("2 sent out Arbok!"); - MESSAGE("You're in charge, Abra!"); + MESSAGE("Go! Abra!"); MESSAGE("2 sent out Wynaut!"); NONE_OF { @@ -147,12 +147,12 @@ DOUBLE_BATTLE_TEST("Intimidate activates on an empty slot") } SCENE { - MESSAGE("Wobbuffet, come back!"); - MESSAGE("You're in charge, Wynaut!"); + MESSAGE("Wobbuffet, that's enough! Come back!"); + MESSAGE("Go! Wynaut!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_GUNK_SHOT, playerRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, opponentRight); - MESSAGE("Wynaut, come back!"); - MESSAGE("You're in charge, Hitmontop!"); + MESSAGE("Wynaut, that's enough! Come back!"); + MESSAGE("Go! Hitmontop!"); ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); NONE_OF { MESSAGE("Hitmontop's Intimidate cuts Foe Ralts's attack!"); diff --git a/test/battle/ability/mirror_armor.c b/test/battle/ability/mirror_armor.c index 4459bb88d56e..c8c3c512ba59 100644 --- a/test/battle/ability/mirror_armor.c +++ b/test/battle/ability/mirror_armor.c @@ -159,7 +159,7 @@ SINGLE_BATTLE_TEST("Mirror Armor doesn't lower the stat of the attacking Pokemon MESSAGE("Foe Wynaut used Leer!"); ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wynaut's Defense won't go any lower!"); + MESSAGE("Foe Wynaut's Defense won't go lower!"); } THEN { EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); EXPECT_EQ(opponent->statStages[STAT_DEF], MIN_STAT_STAGE); diff --git a/test/battle/ability/rattled.c b/test/battle/ability/rattled.c index bb16041ed760..c63e24557564 100644 --- a/test/battle/ability/rattled.c +++ b/test/battle/ability/rattled.c @@ -88,6 +88,6 @@ SINGLE_BATTLE_TEST("Rattled triggers correctly when hit by U-Turn") // Specific ABILITY_POPUP(opponent, ABILITY_RATTLED); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); MESSAGE("Foe Sudowoodo's Speed rose!"); - MESSAGE("You're in charge, Wynaut!"); + MESSAGE("Go! Wynaut!"); } } diff --git a/test/battle/ability/speed_boost.c b/test/battle/ability/speed_boost.c index d519cefacb11..0cc82e80643f 100644 --- a/test/battle/ability/speed_boost.c +++ b/test/battle/ability/speed_boost.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Speed Boost gradually boosts Speed") MESSAGE("Foe Wobbuffet used Celebrate!"); MESSAGE("Torchic used Celebrate!"); ABILITY_POPUP(player, ABILITY_SPEED_BOOST); - MESSAGE("Torchic's Speed Boost raised its Speed!"); + MESSAGE("Torchic's Speed Boost raised its SPEED!"); MESSAGE("Torchic used Celebrate!"); MESSAGE("Foe Wobbuffet used Celebrate!"); } diff --git a/test/battle/ability/stench.c b/test/battle/ability/stench.c index 803a031f9948..e65b2a2632a7 100644 --- a/test/battle/ability/stench.c +++ b/test/battle/ability/stench.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Stench has a 10% chance to flinch") } WHEN { TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { - MESSAGE("Foe Wobbuffet flinched and couldn't move!"); + MESSAGE("Foe Wobbuffet flinched!"); } } @@ -27,7 +27,7 @@ SINGLE_BATTLE_TEST("Stench does not stack with King's Rock") } WHEN { TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { - MESSAGE("Foe Wobbuffet flinched and couldn't move!"); + MESSAGE("Foe Wobbuffet flinched!"); } } diff --git a/test/battle/form_change/primal_reversion.c b/test/battle/form_change/primal_reversion.c index 0edf072ad26b..f978d13b2869 100644 --- a/test/battle/form_change/primal_reversion.c +++ b/test/battle/form_change/primal_reversion.c @@ -166,7 +166,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a switch-in caused by Eject B TURN { MOVE(opponent, MOVE_TACKLE); } } SCENE { MESSAGE("Wobbuffet is switched out with the Eject Button!"); - MESSAGE("You're in charge, Groudon!"); + MESSAGE("Go! Groudon!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player); MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); } THEN { @@ -205,9 +205,9 @@ SINGLE_BATTLE_TEST("Primal reversion happens after the entry hazards damage") TURN { MOVE(opponent, MOVE_SPIKES); } TURN { MOVE(opponent, MOVE_SPIKES); SWITCH(player, 1);} } SCENE { - MESSAGE("You're in charge, Groudon!"); + MESSAGE("Go! Groudon!"); HP_BAR(player); - MESSAGE("Groudon was hurt by the spikes!"); + MESSAGE("Groudon is hurt by spikes!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player); MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); } THEN { diff --git a/test/battle/hold_effect/berserk_gene.c b/test/battle/hold_effect/berserk_gene.c index 59f78c1a12f8..cda82ebb60e7 100644 --- a/test/battle/hold_effect/berserk_gene.c +++ b/test/battle/hold_effect/berserk_gene.c @@ -182,7 +182,7 @@ SINGLE_BATTLE_TEST("Berserk Gene does not confuse when Safeguard is active") } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Using Berserk Gene, the Attack of Wobbuffet sharply rose!"); - MESSAGE("Wobbuffet is protected by Safeguard!"); + MESSAGE("Wobbuffet's party is protected by Safeguard!"); NOT MESSAGE("Wobbuffet became confused!"); } } diff --git a/test/battle/hold_effect/eject_button.c b/test/battle/hold_effect/eject_button.c index e74760a16863..da358c2aa949 100644 --- a/test/battle/hold_effect/eject_button.c +++ b/test/battle/hold_effect/eject_button.c @@ -61,9 +61,9 @@ SINGLE_BATTLE_TEST("Eject Button will not activate under Substitute") } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, opponent); - MESSAGE("Foe Raichu put in a substitute!"); + MESSAGE("Foe Raichu made a SUBSTITUTE!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); - MESSAGE("The substitute took damage for Foe Raichu!"); + MESSAGE("The SUBSTITUTE took damage for Foe Raichu!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); MESSAGE("Foe Raichu is switched out with the Eject Button!"); diff --git a/test/battle/hold_effect/leftovers.c b/test/battle/hold_effect/leftovers.c index 4ba6d7b97b71..2151d43ff94f 100644 --- a/test/battle/hold_effect/leftovers.c +++ b/test/battle/hold_effect/leftovers.c @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Leftovers recovers 1/16th HP at end of turn") } SCENE { s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet restored a little HP using its Leftovers!"); + MESSAGE("Wobbuffet's Leftovers restored its HP a little!"); HP_BAR(player, damage: -maxHP / 16); } } @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Leftovers does nothing if max HP") } SCENE { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet restored a little HP using its Leftovers!"); + MESSAGE("Wobbuffet's Leftovers restored its HP a little!"); HP_BAR(player); } } @@ -47,7 +47,7 @@ SINGLE_BATTLE_TEST("Leftovers does nothing if Heal Block applies") } SCENE { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet restored a little HP using its Leftovers!"); + MESSAGE("Wobbuffet's Leftovers restored its HP a little!"); HP_BAR(player); } } diff --git a/test/battle/hold_effect/red_card.c b/test/battle/hold_effect/red_card.c index 81011efd305f..9298ce642929 100644 --- a/test/battle/hold_effect/red_card.c +++ b/test/battle/hold_effect/red_card.c @@ -394,7 +394,7 @@ SINGLE_BATTLE_TEST("Red Card activates before Emergency Exit") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); MESSAGE("Golisopod held up its Red Card against Foe Wobbuffet!"); ABILITY_POPUP(player, ABILITY_EMERGENCY_EXIT); - MESSAGE("You're in charge, Wimpod!"); + MESSAGE("Go! Wimpod!"); } } diff --git a/test/battle/item_effect/set_mist.c b/test/battle/item_effect/set_mist.c index ca66b03eb7a0..a4225646aa29 100644 --- a/test/battle/item_effect/set_mist.c +++ b/test/battle/item_effect/set_mist.c @@ -12,8 +12,8 @@ SINGLE_BATTLE_TEST("Guard Spec. sets Mist effect on the battlers side") TURN { MOVE(opponent, MOVE_GROWL); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_MIST, player); - MESSAGE("Your team became shrouded in mist!"); + MESSAGE("Ally became shrouded in MIST!"); MESSAGE("Foe Wobbuffet used Growl!"); - MESSAGE("Wobbuffet is protected by the mist!"); + MESSAGE("Wobbuffet is protected by MIST!"); } } diff --git a/test/battle/move_effect/court_change.c b/test/battle/move_effect/court_change.c index 354b083f66ca..2986a3ec6eea 100644 --- a/test/battle/move_effect/court_change.c +++ b/test/battle/move_effect/court_change.c @@ -27,15 +27,15 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the opponent") MESSAGE("Foe Wobbuffet used Toxic Spikes!"); MESSAGE("Wynaut used Court Change!"); MESSAGE("Wynaut swapped the battle effects affecting each side!"); - MESSAGE("You're in charge, Wynaut!"); + MESSAGE("Go! Wynaut!"); NONE_OF { - MESSAGE("Wynaut was hurt by the spikes!"); + MESSAGE("Wynaut is hurt by spikes!"); MESSAGE("Pointed stones dug into Wynaut!"); MESSAGE("Wynaut was poisoned!"); MESSAGE("Wynaut was caught in a Sticky Web!"); } MESSAGE("2 sent out Wobbuffet!"); - MESSAGE("Foe Wobbuffet was hurt by the spikes!"); + MESSAGE("Foe Wobbuffet is hurt by spikes!"); MESSAGE("Pointed stones dug into Foe Wobbuffet!"); MESSAGE("Foe Wobbuffet was poisoned!"); MESSAGE("Foe Wobbuffet was caught in a Sticky Web!"); @@ -63,14 +63,14 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the player") MESSAGE("Wobbuffet used Toxic Spikes!"); MESSAGE("Foe Wynaut used Court Change!"); MESSAGE("Foe Wynaut swapped the battle effects affecting each side!"); - MESSAGE("You're in charge, Wobbuffet!"); - MESSAGE("Wobbuffet was hurt by the spikes!"); + MESSAGE("Go! Wobbuffet!"); + MESSAGE("Wobbuffet is hurt by spikes!"); MESSAGE("Pointed stones dug into Wobbuffet!"); MESSAGE("Wobbuffet was poisoned!"); MESSAGE("Wobbuffet was caught in a Sticky Web!"); MESSAGE("2 sent out Wynaut!"); NONE_OF { - MESSAGE("Foe Wynaut was hurt by the spikes!"); + MESSAGE("Foe Wynaut is hurt by spikes!"); MESSAGE("Pointed stones dug into Foe Wynaut!"); MESSAGE("Foe Wynaut was poisoned!"); MESSAGE("Foe Wynaut was caught in a Sticky Web!"); @@ -106,12 +106,12 @@ DOUBLE_BATTLE_TEST("Court Change used by the player swaps Mist, Safeguard, Lucky MESSAGE("Wynaut used Court Change!"); MESSAGE("Wynaut swapped the battle effects affecting each side!"); // The effects now end for the player side. - MESSAGE("Your team's Mist wore off!"); - MESSAGE("Your team is no longer protected by Safeguard!"); - MESSAGE("Your team's Reflect wore off!"); + MESSAGE("Ally's Mist wore off!"); + MESSAGE("Ally's party is no longer protected by Safeguard!"); + MESSAGE("Ally's Reflect wore off!"); MESSAGE("Your team's Lucky Chant wore off!"); MESSAGE("Your team's tailwind petered out!"); - MESSAGE("Your team's Light Screen wore off!"); + MESSAGE("Ally's Light Screen wore off!"); } } @@ -143,11 +143,11 @@ DOUBLE_BATTLE_TEST("Court Change used by the opponent swaps Mist, Safeguard, Luc MESSAGE("Foe Wynaut used Court Change!"); MESSAGE("Foe Wynaut swapped the battle effects affecting each side!"); // The effects now end for the player side. - MESSAGE("The opposing team's Mist wore off!"); - MESSAGE("The opposing team is no longer protected by Safeguard!"); - MESSAGE("The opposing team's Reflect wore off!"); + MESSAGE("Foe's Mist wore off!"); + MESSAGE("Foe's party is no longer protected by Safeguard!"); + MESSAGE("Foe's Reflect wore off!"); MESSAGE("The opposing team's Lucky Chant wore off!"); MESSAGE("The opposing team's tailwind petered out!"); - MESSAGE("The opposing team's Light Screen wore off!"); + MESSAGE("Foe's Light Screen wore off!"); } } diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c index 43a6e7986aaa..2fe20405f645 100644 --- a/test/battle/move_effect/defog.c +++ b/test/battle/move_effect/defog.c @@ -73,8 +73,8 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Reflect and Light if (move == MOVE_DEFOG) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); MESSAGE("Foe Wobbuffet's evasiveness fell!"); - MESSAGE("The opposing team's Reflect wore off!"); - MESSAGE("The opposing team's Light Screen wore off!"); + MESSAGE("Foe's Reflect wore off!"); + MESSAGE("Foe's Light Screen wore off!"); } MESSAGE("Wobbuffet used Tackle!"); HP_BAR(opponentLeft, captureDamage: &results[i].damagePhysical); @@ -105,10 +105,10 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard ANIMATION(ANIM_TYPE_MOVE, MOVE_MIST, opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_SAFEGUARD, opponentRight); if (move == MOVE_DEFOG) { - MESSAGE("Foe Wobbuffet is protected by the mist!"); + MESSAGE("Foe Wobbuffet is protected by MIST!"); ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); - MESSAGE("The opposing team's Mist wore off!"); - MESSAGE("The opposing team's Safeguard wore off!"); + MESSAGE("Foe's Mist wore off!"); + MESSAGE("Foe's Safeguard wore off!"); } MESSAGE("Wobbuffet used Screech!"); if (move == MOVE_DEFOG) { @@ -116,7 +116,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); } else { - MESSAGE("Foe Wobbuffet is protected by the mist!"); + MESSAGE("Foe Wobbuffet is protected by MIST!"); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); } MESSAGE("Wobbuffet used Toxic!"); @@ -125,7 +125,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard STATUS_ICON(opponentRight, badPoison: TRUE); } else { - MESSAGE("Foe Wobbuffet is protected by Safeguard!"); + MESSAGE("Foe Wobbuffet's party is protected by Safeguard!"); NOT STATUS_ICON(opponentRight, badPoison: TRUE); } } @@ -158,8 +158,8 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and S MESSAGE("The sticky web has disappeared from the ground around your team!"); } // Switch happens - MESSAGE("Wobbuffet, come back!"); - MESSAGE("You're in charge, Wobbuffet!"); + MESSAGE("Wobbuffet, that's enough! Come back!"); + MESSAGE("Go! Wobbuffet!"); if (move != MOVE_DEFOG) { HP_BAR(playerLeft); MESSAGE("Pointed stones dug into Wobbuffet!"); @@ -201,16 +201,16 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Spikes from player MESSAGE("The spikes disappeared from the ground around your team!"); } // Switch happens - MESSAGE("Wobbuffet, come back!"); - MESSAGE("You're in charge, Wobbuffet!"); + MESSAGE("Wobbuffet, that's enough! Come back!"); + MESSAGE("Go! Wobbuffet!"); if (move != MOVE_DEFOG) { HP_BAR(player); - MESSAGE("Wobbuffet was hurt by the spikes!"); + MESSAGE("Wobbuffet is hurt by spikes!"); } else { NONE_OF { HP_BAR(player); - MESSAGE("Wobbuffet was hurt by the spikes!"); + MESSAGE("Wobbuffet is hurt by spikes!"); } } } @@ -313,7 +313,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Aurora Veil from p if (move == MOVE_DEFOG) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Glalie's evasiveness fell!"); - MESSAGE("Your team's Aurora Veil wore off!"); + MESSAGE("Ally's Aurora Veil wore off!"); } MESSAGE("Foe Glalie used Tackle!"); HP_BAR(playerLeft, captureDamage: &results[i].damagePhysical); @@ -347,14 +347,14 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes everything it can" TURN { MOVE(playerLeft, MOVE_MIST); MOVE(playerRight, MOVE_SAFEGUARD); MOVE(opponentLeft, MOVE_MIST); MOVE(opponentRight, MOVE_DEFOG, target: playerLeft); } } SCENE { MESSAGE("Foe Glalie used Defog!"); - MESSAGE("Glalie is protected by the mist!"); + MESSAGE("Glalie is protected by MIST!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, opponentRight); // Player side - MESSAGE("Your team's Reflect wore off!"); - MESSAGE("Your team's Light Screen wore off!"); - MESSAGE("Your team's Mist wore off!"); - MESSAGE("Your team's Aurora Veil wore off!"); - MESSAGE("Your team's Safeguard wore off!"); + MESSAGE("Ally's Reflect wore off!"); + MESSAGE("Ally's Light Screen wore off!"); + MESSAGE("Ally's Mist wore off!"); + MESSAGE("Ally's Aurora Veil wore off!"); + MESSAGE("Ally's Safeguard wore off!"); MESSAGE("The spikes disappeared from the ground around your team!"); MESSAGE("The pointed stones disappeared from around your team!"); diff --git a/test/battle/move_effect/fling.c b/test/battle/move_effect/fling.c index fb5c432d6f7e..f6b83215a1c5 100644 --- a/test/battle/move_effect/fling.c +++ b/test/battle/move_effect/fling.c @@ -179,7 +179,7 @@ SINGLE_BATTLE_TEST("Fling doesn't consume the item if pokemon is asleep/frozen/p } SCENE { if (status == STATUS1_FREEZE) { MESSAGE("Wobbuffet is frozen solid!"); - MESSAGE("Wobbuffet thawed out!"); + MESSAGE("Wobbuffet was defrosted!"); } else if (status == STATUS1_PARALYSIS) { MESSAGE("Wobbuffet is paralyzed! It can't move!"); @@ -373,11 +373,11 @@ SINGLE_BATTLE_TEST("Fling - thrown berry's effect activates for the target even HP_BAR(opponent); if (effect == HOLD_EFFECT_RESTORE_HP) { if (item == ITEM_ORAN_BERRY) { - MESSAGE("Foe Wobbuffet restored its health using its Oran Berry!"); + MESSAGE("Foe Wobbuffet's Oran Berry restored health!"); } else if (item == ITEM_SITRUS_BERRY) { - MESSAGE("Foe Wobbuffet restored its health using its Sitrus Berry!"); + MESSAGE("Foe Wobbuffet's Sitrus Berry restored health!"); } else { - MESSAGE("Foe Wobbuffet restored its health using its Enigma Berry!"); + MESSAGE("Wobbuffet's Enigma Berry restored health!"); } HP_BAR(opponent); } @@ -388,15 +388,15 @@ SINGLE_BATTLE_TEST("Fling - thrown berry's effect activates for the target even if (status1 == STATUS1_BURN) { MESSAGE("Foe Wobbuffet's Rawst Berry healed its burn!"); } else if (status1 == STATUS1_SLEEP) { - MESSAGE("Foe Wobbuffet's Chesto Berry woke it up!"); + MESSAGE("Foe Wobbuffet's Chesto Berry woke it from its sleep!"); } else if (status1 == STATUS1_FREEZE) { MESSAGE("Foe Wobbuffet's Aspear Berry defrosted it!"); } else if (status1 == STATUS1_FROSTBITE) { MESSAGE("Foe Wobbuffet's Aspear Berry healed its frostbite!"); } else if (status1 == STATUS1_PARALYSIS) { - MESSAGE("Foe Wobbuffet's Cheri Berry cured its paralysis!"); + MESSAGE("Foe Wobbuffet's Cheri Berry cured paralysis!"); } else if (status1 == STATUS1_TOXIC_POISON || status1 == STATUS1_POISON) { - MESSAGE("Foe Wobbuffet's Pecha Berry cured its poison!"); + MESSAGE("Foe Wobbuffet's Pecha Berry cured poison!"); } NOT STATUS_ICON(opponent, status1); } diff --git a/test/battle/move_effect/hit_escape.c b/test/battle/move_effect/hit_escape.c index 42e52bdd964f..f4bfc42cc8e5 100644 --- a/test/battle/move_effect/hit_escape.c +++ b/test/battle/move_effect/hit_escape.c @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("U-turn switches the user out") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player); HP_BAR(opponent); - MESSAGE("You're in charge, Wynaut!"); + MESSAGE("Go! Wynaut!"); } } diff --git a/test/battle/move_effect/hit_set_entry_hazardss.c b/test/battle/move_effect/hit_set_entry_hazardss.c index 0017db2f082d..063adbb6e69d 100644 --- a/test/battle/move_effect/hit_set_entry_hazardss.c +++ b/test/battle/move_effect/hit_set_entry_hazardss.c @@ -24,7 +24,7 @@ SINGLE_BATTLE_TEST("Stone Axe / Ceaseless Edge set up hazards after hitting the ANIMATION(ANIM_TYPE_MOVE, move, player); HP_BAR(opponent); if (move == MOVE_CEASELESS_EDGE) { - MESSAGE("Spikes were scattered on the ground all around the opposing team!"); + MESSAGE("Spikes were scattered all around the opposing team!"); } else { MESSAGE("Pointed stones float in the air around the opposing team!"); @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Stone Axe / Ceaseless Edge set up hazards after hitting the MESSAGE("2 sent out Wobbuffet!"); if (move == MOVE_CEASELESS_EDGE) { HP_BAR(opponent, damage: maxHP / 8); - MESSAGE("Foe Wobbuffet was hurt by the spikes!"); + MESSAGE("Foe Wobbuffet is hurt by spikes!"); } else { HP_BAR(opponent, damage: maxHP / 8); @@ -58,23 +58,23 @@ SINGLE_BATTLE_TEST("Ceaseless Edge can set up to 3 layers of Spikes") ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); HP_BAR(opponent); - MESSAGE("Spikes were scattered on the ground all around the opposing team!"); + MESSAGE("Spikes were scattered all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); HP_BAR(opponent); - MESSAGE("Spikes were scattered on the ground all around the opposing team!"); + MESSAGE("Spikes were scattered all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); HP_BAR(opponent); - MESSAGE("Spikes were scattered on the ground all around the opposing team!"); + MESSAGE("Spikes were scattered all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); HP_BAR(opponent); - NOT MESSAGE("Spikes were scattered on the ground all around the opposing team!"); + NOT MESSAGE("Spikes were scattered all around the opposing team!"); MESSAGE("2 sent out Wynaut!"); HP_BAR(opponent, damage: maxHP / 4); - MESSAGE("Foe Wynaut was hurt by the spikes!"); + MESSAGE("Foe Wynaut is hurt by spikes!"); } } diff --git a/test/battle/move_effect/make_it_rain.c b/test/battle/move_effect/make_it_rain.c index 1a35b4ed1aed..93fbeb1119fa 100644 --- a/test/battle/move_effect/make_it_rain.c +++ b/test/battle/move_effect/make_it_rain.c @@ -21,13 +21,13 @@ SINGLE_BATTLE_TEST("Make It Rain lowers special attack by one stage") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_MAKE_IT_RAIN, player); HP_BAR(opponent, captureDamage: &damage[0]); - MESSAGE("Coins were scattered everywhere!"); + MESSAGE("Coins scattered everywhere!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Wobbuffet's Sp. Atk fell!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_MAKE_IT_RAIN, player); HP_BAR(opponent, captureDamage: &damage[1]); - MESSAGE("Coins were scattered everywhere!"); + MESSAGE("Coins scattered everywhere!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Wobbuffet's Sp. Atk fell!"); } THEN { diff --git a/test/battle/move_effect/recoil_if_miss.c b/test/battle/move_effect/recoil_if_miss.c index 79e46f974283..49c78a229e2d 100644 --- a/test/battle/move_effect/recoil_if_miss.c +++ b/test/battle/move_effect/recoil_if_miss.c @@ -83,7 +83,7 @@ SINGLE_BATTLE_TEST("Jump Kick's recoil happens after Spiky Shield damage and Pok MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Spiky Shield!"); if (faintOnSpiky){ MESSAGE("Wobbuffet fainted!"); - MESSAGE("You're in charge, Wynaut!"); + MESSAGE("Go! Wynaut!"); NONE_OF { MESSAGE("Wobbuffet kept going and crashed!"); HP_BAR(player); @@ -93,7 +93,7 @@ SINGLE_BATTLE_TEST("Jump Kick's recoil happens after Spiky Shield damage and Pok HP_BAR(player); if (faintOnJumpKick) { MESSAGE("Wobbuffet fainted!"); - MESSAGE("You're in charge, Wynaut!"); + MESSAGE("Go! Wynaut!"); } } } diff --git a/test/battle/move_effect/shell_trap.c b/test/battle/move_effect/shell_trap.c index a78fb9c5f5e3..15b3f41e5ec5 100644 --- a/test/battle/move_effect/shell_trap.c +++ b/test/battle/move_effect/shell_trap.c @@ -86,7 +86,7 @@ SINGLE_BATTLE_TEST("Shell Trap does not activate if battler faints before being MESSAGE("Wobbuffet set a shell trap!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); MESSAGE("Wobbuffet fainted!"); - MESSAGE("You're in charge, Wobbuffet!"); + MESSAGE("Go! Wobbuffet!"); NONE_OF { MESSAGE("Wobbuffet used Shell Trap!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_TRAP, player); diff --git a/test/battle/move_effect/spikes.c b/test/battle/move_effect/spikes.c index 778545239ecd..97207297f92e 100644 --- a/test/battle/move_effect/spikes.c +++ b/test/battle/move_effect/spikes.c @@ -28,11 +28,11 @@ SINGLE_BATTLE_TEST("Spikes damage on switch in") s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); for (count = 0; count < layers; ++count) { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered on the ground all around the opposing team!"); + MESSAGE("Spikes were scattered all around the opposing team!"); } MESSAGE("2 sent out Wynaut!"); HP_BAR(opponent, damage: maxHP / divisor); - MESSAGE("Foe Wynaut was hurt by the spikes!"); + MESSAGE("Foe Wynaut is hurt by spikes!"); } } @@ -51,16 +51,16 @@ SINGLE_BATTLE_TEST("Spikes fails after 3 layers") } SCENE { s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered on the ground all around the opposing team!"); + MESSAGE("Spikes were scattered all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered on the ground all around the opposing team!"); + MESSAGE("Spikes were scattered all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered on the ground all around the opposing team!"); + MESSAGE("Spikes were scattered all around the opposing team!"); MESSAGE("Wobbuffet used Spikes!"); MESSAGE("But it failed!"); MESSAGE("2 sent out Wynaut!"); HP_BAR(opponent, damage: maxHP / 4); - MESSAGE("Foe Wynaut was hurt by the spikes!"); + MESSAGE("Foe Wynaut is hurt by spikes!"); } } @@ -79,10 +79,10 @@ SINGLE_BATTLE_TEST("Spikes damage on subsequent switch ins") s32 maxHP1 = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); MESSAGE("2 sent out Wynaut!"); HP_BAR(opponent, damage: maxHP1 / 8); - MESSAGE("Foe Wynaut was hurt by the spikes!"); + MESSAGE("Foe Wynaut is hurt by spikes!"); MESSAGE("2 sent out Wobbuffet!"); HP_BAR(opponent, damage: maxHP0 / 8); - MESSAGE("Foe Wobbuffet was hurt by the spikes!"); + MESSAGE("Foe Wobbuffet is hurt by spikes!"); } } diff --git a/test/battle/move_effect/sticky_web.c b/test/battle/move_effect/sticky_web.c index ef2c26bc94a3..6c6f8f156cb2 100644 --- a/test/battle/move_effect/sticky_web.c +++ b/test/battle/move_effect/sticky_web.c @@ -123,7 +123,7 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - the ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, BATTLER_PLAYER); MESSAGE("A sticky web spreads out on the ground around the opposing team!"); - MESSAGE("You're in charge, Corviknigh!"); + MESSAGE("Go! Corviknigh!"); MESSAGE("Corviknigh was caught in a Sticky Web!"); ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, BATTLER_OPPONENT); @@ -170,7 +170,7 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - no o MESSAGE("A sticky web spreads out on the ground around the opposing team!"); } - MESSAGE("You're in charge, Corviknigh!"); + MESSAGE("Go! Corviknigh!"); MESSAGE("Corviknigh was caught in a Sticky Web!"); ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); @@ -219,7 +219,7 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - no o MESSAGE("2 sent out Pidgey!"); } - MESSAGE("You're in charge, Corviknigh!"); + MESSAGE("Go! Corviknigh!"); MESSAGE("Corviknigh was caught in a Sticky Web!"); ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); diff --git a/test/battle/move_effect/toxic_spikes.c b/test/battle/move_effect/toxic_spikes.c index b9b00b9b7b1a..517a1b261e29 100644 --- a/test/battle/move_effect/toxic_spikes.c +++ b/test/battle/move_effect/toxic_spikes.c @@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Toxic Spikes inflicts poison on switch in") TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); - MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); + MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); MESSAGE("2 sent out Wynaut!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); STATUS_ICON(opponent, poison: TRUE); @@ -38,9 +38,9 @@ SINGLE_BATTLE_TEST("Toxic Spikes inflicts bad poison on switch in") TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); - MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); + MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); - MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); + MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); MESSAGE("2 sent out Wynaut!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); STATUS_ICON(opponent, badPoison: TRUE); @@ -61,9 +61,9 @@ SINGLE_BATTLE_TEST("Toxic Spikes fails after 2 layers") TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); - MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); + MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); - MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); + MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); MESSAGE("Wobbuffet used Toxic Spikes!"); MESSAGE("But it failed!"); MESSAGE("2 sent out Wynaut!"); @@ -176,7 +176,7 @@ SINGLE_BATTLE_TEST("Toxic Spikes are removed by grounded Poison-type Pokémon on } SCENE { if (grounded) { NOT STATUS_ICON(opponent, poison: TRUE); - MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); + MESSAGE("The poison spikes disappeared from around the opposing team's feet!"); NOT STATUS_ICON(opponent, poison: TRUE); } else { NOT STATUS_ICON(opponent, poison: TRUE); @@ -204,7 +204,7 @@ SINGLE_BATTLE_TEST("Toxic Spikes are removed by Poison-type Pokémon affected by TURN { SWITCH(opponent, 0); } } SCENE { NOT STATUS_ICON(opponent, poison: TRUE); - MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); + MESSAGE("The poison spikes disappeared from around the opposing team's feet!"); NOT STATUS_ICON(opponent, poison: TRUE); } } diff --git a/test/battle/move_effect/triple_arrows.c b/test/battle/move_effect/triple_arrows.c index a14d0747c3d4..73a82fbee453 100644 --- a/test/battle/move_effect/triple_arrows.c +++ b/test/battle/move_effect/triple_arrows.c @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Triple Arrows makes the foe flinch 30% of the time") TURN { MOVE(player, MOVE_TRIPLE_ARROWS); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_ARROWS, player); - MESSAGE("Foe Wobbuffet flinched and couldn't move!"); + MESSAGE("Foe Wobbuffet flinched!"); } } @@ -71,7 +71,7 @@ SINGLE_BATTLE_TEST("Triple Arrows can lower Defense and cause flinch at the time ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_ARROWS, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); MESSAGE("Foe Wobbuffet's Defense fell!"); - MESSAGE("Foe Wobbuffet flinched and couldn't move!"); + MESSAGE("Foe Wobbuffet flinched!"); } } @@ -86,7 +86,7 @@ SINGLE_BATTLE_TEST("Triple Arrows's flinching is prevented by Inner Focus") } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_ARROWS, player); - NONE_OF { MESSAGE("Foe Wobbuffet flinched and couldn't move!"); } + NONE_OF { MESSAGE("Foe Wobbuffet flinched!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } } diff --git a/test/battle/status1/freeze.c b/test/battle/status1/freeze.c index 36bad79e83e6..c89bda337fe2 100644 --- a/test/battle/status1/freeze.c +++ b/test/battle/status1/freeze.c @@ -24,7 +24,7 @@ SINGLE_BATTLE_TEST("Freeze is thawed by opponent's Fire-type attacks") TURN { MOVE(opponent, MOVE_EMBER); MOVE(player, MOVE_CELEBRATE); } } SCENE { MESSAGE("Foe Wobbuffet used Ember!"); - MESSAGE("Wobbuffet thawed out!"); + MESSAGE("Wobbuffet was defrosted!"); STATUS_ICON(player, none: TRUE); } } @@ -38,7 +38,7 @@ SINGLE_BATTLE_TEST("Freeze is thawed by user's Flame Wheel") } WHEN { TURN { MOVE(player, MOVE_FLAME_WHEEL); } } SCENE { - MESSAGE("Wobbuffet's Flame Wheel melted the ice!"); + MESSAGE("Wobbuffet was defrosted by Flame Wheel!"); STATUS_ICON(player, none: TRUE); MESSAGE("Wobbuffet used Flame Wheel!"); } diff --git a/test/battle/status1/frostbite.c b/test/battle/status1/frostbite.c index 989e2e7b07a7..bf4b1f7fcdd7 100644 --- a/test/battle/status1/frostbite.c +++ b/test/battle/status1/frostbite.c @@ -33,7 +33,7 @@ SINGLE_BATTLE_TEST("Frostbite deals 1/16 damage to effected pokemon") } WHEN { TURN {} } SCENE { - MESSAGE("Foe Wobbuffet was hurt by its frostbite!"); + MESSAGE("Foe Wobbuffet is hurt by its frostbite!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent); HP_BAR(opponent, captureDamage: &frostbiteDamage); } THEN { EXPECT_EQ(frostbiteDamage, opponent->maxHP / 16); } @@ -85,11 +85,11 @@ SINGLE_BATTLE_TEST("Frostbite is healed when the user uses a thawing move") ANIMATION(ANIM_TYPE_MOVE, move, player); HP_BAR(opponent); if (move == MOVE_EMBER) { - MESSAGE("Wobbuffet was hurt by its frostbite!"); + MESSAGE("Wobbuffet is hurt by its frostbite!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, player); } else { NONE_OF { - MESSAGE("Wobbuffet was hurt by its frostbite!"); + MESSAGE("Wobbuffet is hurt by its frostbite!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, player); } } From 858dc543b089fef0d5421694f5066548470b8a85 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Mon, 26 Feb 2024 00:52:11 -0600 Subject: [PATCH 22/68] Tons and tons of changes --- charmap.txt | 4 + include/battle_message.h | 6 +- src/battle_message.c | 534 +++++++++++++++++++++------------------ 3 files changed, 291 insertions(+), 253 deletions(-) diff --git a/charmap.txt b/charmap.txt index 7271c621ca70..e924d5dd11b9 100644 --- a/charmap.txt +++ b/charmap.txt @@ -423,6 +423,10 @@ B_DEF_TEAM1 = FD 3A B_DEF_TEAM2 = FD 3B @ FD 3C - preiously gActiveBattler @ FD 3D - preiously gActiveBattler without Illusion Check +B_ATK_NAME_WITH_PREFIX2 = FD 3E +B_DEF_NAME_WITH_PREFIX2 = FD 3F +B_EFF_NAME_WITH_PREFIX2 = FD 40 +B_SCR_ACTIVE_NAME_WITH_PREFIX2 = FD 41 @ indicates the end of a town/city name (before " TOWN" or " CITY") NAME_END = FC 00 diff --git a/include/battle_message.h b/include/battle_message.h index 338712606a90..c0e9353e777f 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -71,8 +71,10 @@ #define B_TXT_DEF_TEAM2 0x3B // your/the opposing // #define B_TXT_SELECTION_NAME 0x3C - removed // #define B_TXT_SELECTION_NAME2 0x3D no Illusion check - removed - -// for B_TXT_BUFF1, B_TXT_BUFF2 and B_TXT_BUFF3 +#define B_TXT_ATK_NAME_WITH_PREFIX2 0x3E //lowercase +#define B_TXT_DEF_NAME_WITH_PREFIX2 0x3F //lowercase +#define B_TXT_EFF_NAME_WITH_PREFIX2 0x40 //lowercase +#define B_TXT_SCR_ACTIVE_NAME_WITH_PREFIX2 0x41 //lowercase #define B_BUFF_STRING 0 #define B_BUFF_NUMBER 1 diff --git a/src/battle_message.c b/src/battle_message.c index ce1c6447a1c0..369567d35daa 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -64,12 +64,12 @@ static const u8 sText_PkmnGrewToLv[] = _("{B_BUFF1} grew to\nLv. {B_BUFF2}!{WAIT static const u8 sText_PkmnLearnedMove[] = _("{B_BUFF1} learned\n{B_BUFF2}!{WAIT_SE}\p"); static const u8 sText_TryToLearnMove1[] = _("{B_BUFF1} wants to learn the\nmove {B_BUFF2}.\p"); static const u8 sText_TryToLearnMove2[] = _("However, {B_BUFF1} already\nknows four moves.\p"); -static const u8 sText_TryToLearnMove3[] = _("Should a move be deleted and\nreplaced with {B_BUFF2}?"); -static const u8 sText_PkmnForgotMove[] = _("{B_BUFF1} forgot\n{B_BUFF2}.\p"); -static const u8 sText_StopLearningMove[] = _("{PAUSE 32}Give up on learning the move\n{B_BUFF2}?"); +static const u8 sText_TryToLearnMove3[] = _("Should another move be forgotten\nand replaced with {B_BUFF2}?"); +static const u8 sText_PkmnForgotMove[] = _("{B_BUFF1} forgot\n{B_BUFF2}...\p"); +static const u8 sText_StopLearningMove[] = _("{PAUSE 32}Do you want to give up\non having {B_BUFF1}\nlearn {B_BUFF2}?"); static const u8 sText_DidNotLearnMove[] = _("{B_BUFF1} did not learn\n{B_BUFF2}.\p"); static const u8 sText_UseNextPkmn[] = _("Use next Pokémon?"); -static const u8 sText_AttackMissed[] = _("{B_ATK_NAME_WITH_PREFIX}'s\nattack missed!"); +static const u8 sText_AttackMissed[] = _("{B_ATK_NAME_WITH_PREFIX}'s\nattack missed!"); //this is not in SV for some reason? static const u8 sText_PkmnProtectedItself[] = _("{B_DEF_NAME_WITH_PREFIX}\nprotected itself!"); static const u8 sText_AvoidedDamage[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\ndamage with {B_DEF_ABILITY}!"); //not in gen 5+, ability popup static const u8 sText_PkmnMakesGroundMiss[] = _("{B_DEF_NAME_WITH_PREFIX} makes Ground-type\nmoves miss with {B_DEF_ABILITY}!"); //not in gen 5+, ability popup @@ -86,52 +86,52 @@ static const u8 sText_PlayerWhiteout2[] = _("You panicked\nand dropped ¥{B_BUFF #else static const u8 sText_PlayerWhiteout2[] = _("You were overwhelmed\nby your defeat!{PAUSE_UNTIL_PRESS}"); #endif -static const u8 sText_PreventsEscape[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} prevents\nescape with {B_SCR_ACTIVE_ABILITY}!\p"); //not in gen 5+, ability popup +static const u8 sText_PreventsEscape[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} prevents\nescape with {B_SCR_ACTIVE_ABILITY}!\p"); static const u8 sText_CantEscape2[] = _("You couldn't get away!\p"); static const u8 sText_AttackerCantEscape[] = _("{B_ATK_NAME_WITH_PREFIX} can't escape!"); -static const u8 sText_HitXTimes[] = _("Hit {B_BUFF1} time(s)!"); +static const u8 sText_HitXTimes[] = _("The Pokémon was\nhit {B_BUFF1} time(s)!"); //SV has dynamic plural here static const u8 sText_PkmnFellAsleep[] = _("{B_EFF_NAME_WITH_PREFIX}\nfell asleep!"); -static const u8 sText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade {B_EFF_NAME_WITH_PREFIX} sleep!"); //not in gen 5+, ability popup +static const u8 sText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade {B_EFF_NAME_WITH_PREFIX2} sleep!"); //not in gen 5+, ability popup static const u8 sText_PkmnAlreadyAsleep[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready asleep!"); static const u8 sText_PkmnAlreadyAsleep2[] = _("{B_ATK_NAME_WITH_PREFIX} is\nalready asleep!"); static const u8 sText_PkmnWasntAffected[] = _("{B_DEF_NAME_WITH_PREFIX}\nwasn't affected!"); //not in gen 5+, ability popup static const u8 sText_PkmnWasPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX}\nwas poisoned!"); -static const u8 sText_PkmnPoisonedBy[] = _("{B_EFF_NAME_WITH_PREFIX} was poisoned by\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}!"); //not in gen 5+, ability popup -static const u8 sText_PkmnHurtByPoison[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby poison!"); -static const u8 sText_PkmnAlreadyPoisoned[] = _("{B_DEF_NAME_WITH_PREFIX} is already\npoisoned."); +static const u8 sText_PkmnPoisonedBy[] = _("{B_EFF_NAME_WITH_PREFIX} was poisoned by\n{B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s {B_BUFF1}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnHurtByPoison[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby its poisoning!"); +static const u8 sText_PkmnAlreadyPoisoned[] = _("{B_DEF_NAME_WITH_PREFIX} is already\npoisoned!"); static const u8 sText_PkmnBadlyPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX} was badly\npoisoned!"); static const u8 sText_PkmnEnergyDrained[] = _("{B_DEF_NAME_WITH_PREFIX} had its\nenergy drained!"); static const u8 sText_PkmnWasBurned[] = _("{B_EFF_NAME_WITH_PREFIX} was burned!"); static const u8 sText_PkmnGotFrostbite[] = _("{B_EFF_NAME_WITH_PREFIX} got frostbite!"); -static const u8 sText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nburned {B_EFF_NAME_WITH_PREFIX}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nburned {B_EFF_NAME_WITH_PREFIX2}!"); //not in gen 5+, ability popup static const u8 sText_PkmnHurtByBurn[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby its burn!"); static const u8 sText_PkmnHurtByFrostbite[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby its frostbite!"); -static const u8 sText_PkmnAlreadyHasBurn[] = _("{B_DEF_NAME_WITH_PREFIX} already\nhas a burn."); +static const u8 sText_PkmnAlreadyHasBurn[] = _("{B_DEF_NAME_WITH_PREFIX} is already\nburned!"); static const u8 sText_PkmnWasFrozen[] = _("{B_EFF_NAME_WITH_PREFIX} was\nfrozen solid!"); -static const u8 sText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nfroze {B_EFF_NAME_WITH_PREFIX} solid!"); //not in gen 5+, ability popup +static const u8 sText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nfroze {B_EFF_NAME_WITH_PREFIX2} solid!"); //not in gen 5+, ability popup static const u8 sText_PkmnIsFrozen[] = _("{B_ATK_NAME_WITH_PREFIX} is\nfrozen solid!"); static const u8 sText_PkmnWasDefrosted[] = _("{B_DEF_NAME_WITH_PREFIX} thawed out!"); static const u8 sText_PkmnWasDefrosted2[] = _("{B_ATK_NAME_WITH_PREFIX} thawed out!"); static const u8 sText_PkmnWasDefrostedBy[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\nmelted the ice!"); -static const u8 sText_PkmnFrostbiteHealed[] = _("{B_DEF_NAME_WITH_PREFIX}'s frostbite\nwas healed!"); -static const u8 sText_PkmnFrostbiteHealed2[] = _("{B_ATK_NAME_WITH_PREFIX}'s frostbite\nwas healed!"); -static const u8 sText_PkmnFrostbiteHealedBy[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\nhealed its frostbite!"); -static const u8 sText_PkmnWasParalyzed[] = _("{B_EFF_NAME_WITH_PREFIX} is paralyzed!\nIt may be unable to move!"); -static const u8 sText_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nparalyzed {B_EFF_NAME_WITH_PREFIX}!\lIt may be unable to move!"); //not in gen 5+, ability popup -static const u8 sText_PkmnIsParalyzed[] = _("{B_ATK_NAME_WITH_PREFIX} is paralyzed!\nIt can't move!"); +static const u8 sText_PkmnFrostbiteHealed[] = _("{B_DEF_NAME_WITH_PREFIX}'s frostbite\nwas cured!"); +static const u8 sText_PkmnFrostbiteHealed2[] = _("{B_ATK_NAME_WITH_PREFIX}'s frostbite\nwas cured!"); +static const u8 sText_PkmnFrostbiteHealedBy[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\ncured its frostbite!"); +static const u8 sText_PkmnWasParalyzed[] = _("{B_EFF_NAME_WITH_PREFIX} is paralyzed,\nso it may be unable to move!"); +static const u8 sText_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nparalyzed {B_EFF_NAME_WITH_PREFIX2},\lso it may be unable to move!"); //not in gen 5+, ability popup +static const u8 sText_PkmnIsParalyzed[] = _("{B_ATK_NAME_WITH_PREFIX} couldn't move\nbecause it's paralyzed!"); static const u8 sText_PkmnIsAlreadyParalyzed[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready paralyzed!"); -static const u8 sText_PkmnHealedParalysis[] = _("{B_DEF_NAME_WITH_PREFIX} was cured of\nparalysis."); +static const u8 sText_PkmnHealedParalysis[] = _("{B_DEF_NAME_WITH_PREFIX} was cured of\nparalysis!"); static const u8 sText_PkmnDreamEaten[] = _("{B_DEF_NAME_WITH_PREFIX}'s\ndream was eaten!"); //not in gen 5+, expansion doesn't use anymore static const u8 sText_StatsWontIncrease[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} won't\ngo any higher!"); static const u8 sText_StatsWontDecrease[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1} won't\ngo any lower!"); static const u8 sText_TeamStoppedWorking[] = _("Your team's {B_BUFF1}\nstopped working!"); //unused static const u8 sText_FoeStoppedWorking[] = _("The foe's {B_BUFF1}\nstopped working!"); //unused static const u8 sText_PkmnIsConfused[] = _("{B_ATK_NAME_WITH_PREFIX} is\nconfused!"); -static const u8 sText_PkmnHealedConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} snapped out of its\nconfusion."); +static const u8 sText_PkmnHealedConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} snapped out of its\nconfusion!"); static const u8 sText_PkmnWasConfused[] = _("{B_EFF_NAME_WITH_PREFIX} became\nconfused!"); static const u8 sText_PkmnAlreadyConfused[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready confused!"); static const u8 sText_PkmnFellInLove[] = _("{B_DEF_NAME_WITH_PREFIX}\nfell in love!"); -static const u8 sText_PkmnInLove[] = _("{B_ATK_NAME_WITH_PREFIX} is in love\nwith {B_SCR_ACTIVE_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnInLove[] = _("{B_ATK_NAME_WITH_PREFIX} is in love\nwith {B_SCR_ACTIVE_NAME_WITH_PREFIX2}!"); static const u8 sText_PkmnImmobilizedByLove[] = _("{B_ATK_NAME_WITH_PREFIX} is\nimmobilized by love!"); static const u8 sText_PkmnBlownAway[] = _("{B_DEF_NAME_WITH_PREFIX} was\nblown away!"); //unused static const u8 sText_PkmnChangedType[] = _("{B_ATK_NAME_WITH_PREFIX} transformed\ninto the {B_BUFF1} type!"); @@ -142,11 +142,11 @@ static const u8 sText_PkmnRaisedSpDef[] = _("Light Screen made {B_ATK_TEAM2} tea static const u8 sText_PkmnRaisedSpDefALittle[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE}\nraised SP. DEF a little!"); //expansion doesn't use anymore static const u8 sText_PkmnRaisedDef[] = _("Reflect made {B_ATK_TEAM2} team\nstronger against physical moves!"); static const u8 sText_PkmnRaisedDefALittle[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE}\nraised DEFENSE a little!"); //expansion doesn't use anymore -static const u8 sText_PkmnCoveredByVeil[] = _("{B_ATK_TEAM1} team became cloaked in\na mystical veil!"); +static const u8 sText_PkmnCoveredByVeil[] = _("{B_ATK_TEAM1} team cloaked itself \nin a mystical veil!"); static const u8 sText_PkmnUsedSafeguard[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is protected\nby Safeguard!"); static const u8 sText_PkmnSafeguardExpired[] = _("{B_ATK_TEAM1} team is no longer protected\nby Safeguard!"); static const u8 sText_PkmnWentToSleep[] = _("{B_ATK_NAME_WITH_PREFIX} went\nto sleep!"); //not in gen 5+ -static const u8 sText_PkmnSleptHealthy[] = _("{B_ATK_NAME_WITH_PREFIX} slept and\nbecame healthy!"); +static const u8 sText_PkmnSleptHealthy[] = _("{B_ATK_NAME_WITH_PREFIX} slept and\nrestored its HP!"); static const u8 sText_PkmnWhippedWhirlwind[] = _("{B_ATK_NAME_WITH_PREFIX} whipped\nup a whirlwind!"); static const u8 sText_PkmnTookSunlight[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed\nlight!"); static const u8 sText_PkmnLoweredHead[] = _("{B_ATK_NAME_WITH_PREFIX} tucked in\nits head!"); @@ -156,12 +156,12 @@ static const u8 sText_PkmnFlewHigh[] = _("{B_ATK_NAME_WITH_PREFIX} flew\nup high static const u8 sText_PkmnDugHole[] = _("{B_ATK_NAME_WITH_PREFIX} burrowed\nits way under the ground!"); static const u8 sText_PkmnHidUnderwater[] = _("{B_ATK_NAME_WITH_PREFIX} hid\nunderwater!"); static const u8 sText_PkmnSprangUp[] = _("{B_ATK_NAME_WITH_PREFIX} sprang up!"); -static const u8 sText_PkmnSqueezedByBind[] = _("{B_DEF_NAME_WITH_PREFIX} was squeezed\nby {B_ATK_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnSqueezedByBind[] = _("{B_DEF_NAME_WITH_PREFIX} was squeezed\nby {B_ATK_NAME_WITH_PREFIX2}!"); static const u8 sText_PkmnInSnapTrap[] = _("{B_DEF_NAME_WITH_PREFIX} got trapped\nby a snap trap!"); static const u8 sText_PkmnTrappedInVortex[] = _("{B_DEF_NAME_WITH_PREFIX} became trapped\nin the vortex!"); -static const u8 sText_PkmnTrappedBySandTomb[] = _("{B_DEF_NAME_WITH_PREFIX} became trapped\nby Sand Tomb!"); -static const u8 sText_PkmnWrappedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was wrapped by\n{B_ATK_NAME_WITH_PREFIX}!"); -static const u8 sText_PkmnClamped[] = _("{B_ATK_NAME_WITH_PREFIX} clamped\n{B_DEF_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnTrappedBySandTomb[] = _("{B_DEF_NAME_WITH_PREFIX} became trapped\nby the quicksand!"); +static const u8 sText_PkmnWrappedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was wrapped by\n{B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnClamped[] = _("{B_ATK_NAME_WITH_PREFIX} clamped down\non {B_DEF_NAME_WITH_PREFIX2}!"); static const u8 sText_PkmnHurtBy[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby {B_BUFF1}!"); static const u8 sText_PkmnFreedFrom[] = _("{B_ATK_NAME_WITH_PREFIX} was freed\nfrom {B_BUFF1}!"); static const u8 sText_PkmnCrashed[] = _("{B_ATK_NAME_WITH_PREFIX} kept going\nand crashed!"); @@ -178,54 +178,54 @@ static const u8 sText_PkmnEvadedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\n static const u8 sText_PkmnSappedByLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX}'s health is\nsapped by Leech Seed!"); static const u8 sText_PkmnFastAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} is fast\nasleep."); static const u8 sText_PkmnWokeUp[] = _("{B_ATK_NAME_WITH_PREFIX} woke up!"); -static const u8 sText_PkmnUproarKeptAwake[] = _("But the uproar kept\n{B_SCR_ACTIVE_NAME_WITH_PREFIX} awake!"); -static const u8 sText_PkmnWokeUpInUproar[] = _("The uproar woke up\nthe {B_ATK_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnUproarKeptAwake[] = _("But the uproar kept\n{B_SCR_ACTIVE_NAME_WITH_PREFIX2} awake!"); +static const u8 sText_PkmnWokeUpInUproar[] = _("The uproar woke {B_ATK_NAME_WITH_PREFIX2}!"); static const u8 sText_PkmnCausedUproar[] = _("{B_ATK_NAME_WITH_PREFIX} caused\nan uproar!"); static const u8 sText_PkmnMakingUproar[] = _("{B_ATK_NAME_WITH_PREFIX} is making\nan uproar!"); static const u8 sText_PkmnCalmedDown[] = _("{B_ATK_NAME_WITH_PREFIX}\ncalmed down."); -static const u8 sText_PkmnCantSleepInUproar[] = _("But {B_DEF_NAME_WITH_PREFIX} can't\nsleep in an uproar!"); +static const u8 sText_PkmnCantSleepInUproar[] = _("But {B_DEF_NAME_WITH_PREFIX2} can't\nsleep in an uproar!"); static const u8 sText_PkmnStockpiled[] = _("{B_ATK_NAME_WITH_PREFIX} stockpiled {B_BUFF1}!"); -static const u8 sText_PkmnCantStockpile[] = _("{B_ATK_NAME_WITH_PREFIX} can't\nstockpile any more!"); -static const u8 sText_PkmnCantSleepInUproar2[] = _("But {B_DEF_NAME_WITH_PREFIX} can't\nsleep in an uproar!"); -static const u8 sText_UproarKeptPkmnAwake[] = _("But the uproar kept\n{B_DEF_NAME_WITH_PREFIX} awake!"); +static const u8 sText_PkmnCantStockpile[] = _("{B_ATK_NAME_WITH_PREFIX} can't\nstockpile any more!"); //I think this was replaced with just "But it failed!" +static const u8 sText_PkmnCantSleepInUproar2[] = _("But {B_DEF_NAME_WITH_PREFIX2} can't\nsleep in an uproar!"); +static const u8 sText_UproarKeptPkmnAwake[] = _("But the uproar kept\n{B_DEF_NAME_WITH_PREFIX2} awake!"); static const u8 sText_PkmnStayedAwakeUsing[] = _("{B_DEF_NAME_WITH_PREFIX} stayed awake\nusing its {B_DEF_ABILITY}!"); //not in gen 5+, ability popup static const u8 sText_PkmnStoringEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} is storing\nenergy!"); -static const u8 sText_PkmnUnleashedEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} unleashed\nenergy!"); +static const u8 sText_PkmnUnleashedEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} unleashed\nits energy!"); static const u8 sText_PkmnFatigueConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} became\nconfused due to fatigue!"); -static const u8 sText_PlayerPickedUpMoney[] = _("{B_PLAYER_NAME} picked up\n¥{B_BUFF1}!\p"); +static const u8 sText_PlayerPickedUpMoney[] = _("You picked up\n¥{B_BUFF1}!\p"); static const u8 sText_PkmnUnaffected[] = _("{B_DEF_NAME_WITH_PREFIX} is\nunaffected!"); static const u8 sText_PkmnTransformedInto[] = _("{B_ATK_NAME_WITH_PREFIX} transformed\ninto {B_BUFF1}!"); static const u8 sText_PkmnMadeSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} put in\na substitute!"); static const u8 sText_PkmnHasSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} already\nhas a substitute!"); -static const u8 sText_SubstituteDamaged[] = _("The substitute took damage\nfor {B_DEF_NAME_WITH_PREFIX}!\p"); +static const u8 sText_SubstituteDamaged[] = _("The substitute took damage\nfor {B_DEF_NAME_WITH_PREFIX2}!\p"); static const u8 sText_PkmnSubstituteFaded[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nsubstitute faded!\p"); static const u8 sText_PkmnMustRecharge[] = _("{B_ATK_NAME_WITH_PREFIX} must\nrecharge!"); static const u8 sText_PkmnRageBuilding[] = _("{B_DEF_NAME_WITH_PREFIX}'s rage\nis building!"); static const u8 sText_PkmnMoveWasDisabled[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\nwas disabled!"); -static const u8 sText_PkmnMoveDisabledNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is no\nlonger disabled!"); -static const u8 sText_PkmnGotEncore[] = _("{B_DEF_NAME_WITH_PREFIX} received\nan encore!"); -static const u8 sText_PkmnEncoreEnded[] = _("{B_ATK_NAME_WITH_PREFIX}'s encore\nended!"); -static const u8 sText_PkmnTookAim[] = _("{B_ATK_NAME_WITH_PREFIX} took aim at\n{B_DEF_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnMoveDisabledNoMore[] = _("{B_ATK_NAME_WITH_PREFIX}'s move is\nno longer disabled!"); +static const u8 sText_PkmnGotEncore[] = _("{B_DEF_NAME_WITH_PREFIX} must do\nan encore!"); +static const u8 sText_PkmnEncoreEnded[] = _("{B_ATK_NAME_WITH_PREFIX} ended its\nencore!"); +static const u8 sText_PkmnTookAim[] = _("{B_ATK_NAME_WITH_PREFIX} took aim at\n{B_DEF_NAME_WITH_PREFIX2}!"); static const u8 sText_PkmnSketchedMove[] = _("{B_ATK_NAME_WITH_PREFIX} sketched\n{B_BUFF1}!"); -static const u8 sText_PkmnTryingToTakeFoe[] = _("{B_ATK_NAME_WITH_PREFIX} is trying\nto take its foe down with it!"); +static const u8 sText_PkmnTryingToTakeFoe[] = _("{B_ATK_NAME_WITH_PREFIX} is hoping to\ntake its attacker down with it!"); static const u8 sText_PkmnTookFoe[] = _("{B_DEF_NAME_WITH_PREFIX} took its attacker\ndown with it!"); -static const u8 sText_PkmnReducedPP[] = _("It reduced the PP of {B_DEF_NAME_WITH_PREFIX}'s\n{B_BUFF1} by {B_BUFF2}!"); -static const u8 sText_PkmnStoleItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole\n{B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}!"); +static const u8 sText_PkmnReducedPP[] = _("{B_DEF_NAME_WITH_PREFIX}'s PP\nwas reduced!"); +static const u8 sText_PkmnStoleItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole\n{B_DEF_NAME_WITH_PREFIX2}'s {B_LAST_ITEM}!"); static const u8 sText_TargetCantEscapeNow[] = _("{B_DEF_NAME_WITH_PREFIX} can no\nlonger escape!"); static const u8 sText_PkmnFellIntoNightmare[] = _("{B_DEF_NAME_WITH_PREFIX} began having\na nightmare!"); static const u8 sText_PkmnLockedInNightmare[] = _("{B_ATK_NAME_WITH_PREFIX} is locked\nin a nightmare!"); -static const u8 sText_PkmnLaidCurse[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP\nand put a curse on {B_DEF_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnLaidCurse[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP\nand put a curse on {B_DEF_NAME_WITH_PREFIX2}!"); static const u8 sText_PkmnAfflictedByCurse[] = _("{B_ATK_NAME_WITH_PREFIX} is afflicted\nby the curse!"); static const u8 sText_SpikesScattered[] = _("Spikes were scattered on the ground\nall around {B_DEF_TEAM2} team!"); static const u8 sText_PkmnHurtBySpikes[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was hurt\nby the spikes!"); -static const u8 sText_PkmnIdentified[] = _("{B_DEF_NAME_WITH_PREFIX} was indentified!"); +static const u8 sText_PkmnIdentified[] = _("{B_DEF_NAME_WITH_PREFIX} was identified!"); static const u8 sText_PkmnPerishCountFell[] = _("{B_ATK_NAME_WITH_PREFIX}'s perish count\nfell to {B_BUFF1}!"); static const u8 sText_PkmnBracedItself[] = _("{B_ATK_NAME_WITH_PREFIX} braced\nitself!"); static const u8 sText_PkmnEnduredHit[] = _("{B_DEF_NAME_WITH_PREFIX} endured\nthe hit!"); static const u8 sText_MagnitudeStrength[] = _("Magnitude {B_BUFF1}!"); static const u8 sText_PkmnCutHPMaxedAttack[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP\nand maximized its Attack!"); -static const u8 sText_PkmnCopiedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX}'s stat changes!"); -static const u8 sText_PkmnGotFree[] = _("{B_ATK_NAME_WITH_PREFIX} got free of\n{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}!"); //not in gen 5+, generic rapid spin? +static const u8 sText_PkmnCopiedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX2}'s stat changes!"); +static const u8 sText_PkmnGotFree[] = _("{B_ATK_NAME_WITH_PREFIX} got free of\n{B_DEF_NAME_WITH_PREFIX2}'s {B_BUFF1}!"); //not in gen 5+, generic rapid spin? static const u8 sText_PkmnShedLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX} shed\nLeech Seed!"); //not in gen 5+, generic rapid spin? static const u8 sText_PkmnBlewAwaySpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nSpikes!"); //not in gen 5+, generic rapid spin? static const u8 sText_PkmnFledFromBattle[] = _("{B_ATK_NAME_WITH_PREFIX} fled from\nbattle!"); @@ -240,19 +240,19 @@ static const u8 sText_PkmnStatusNormal[] = _("{B_ATK_NAME_WITH_PREFIX}'s status\ static const u8 sText_PkmnSubjectedToTorment[] = _("{B_DEF_NAME_WITH_PREFIX} was subjected\nto torment!"); static const u8 sText_PkmnTighteningFocus[] = _("{B_ATK_NAME_WITH_PREFIX} is tightening\nits focus!"); static const u8 sText_PkmnFellForTaunt[] = _("{B_DEF_NAME_WITH_PREFIX} fell for\nthe taunt!"); -static const u8 sText_PkmnReadyToHelp[] = _("{B_ATK_NAME_WITH_PREFIX} is ready to\nhelp {B_DEF_NAME_WITH_PREFIX}!"); +static const u8 sText_PkmnReadyToHelp[] = _("{B_ATK_NAME_WITH_PREFIX} is ready to\nhelp {B_DEF_NAME_WITH_PREFIX2}!"); static const u8 sText_PkmnSwitchedItems[] = _("{B_ATK_NAME_WITH_PREFIX} switched\nitems with its target!"); static const u8 sText_PkmnObtainedX[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}."); static const u8 sText_PkmnObtainedX2[] = _("{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}."); -static const u8 sText_PkmnObtainedXYObtainedZ[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}.\p{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}."); -static const u8 sText_PkmnCopiedFoe[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}!"); +static const u8 sText_PkmnObtainedXYObtainedZ[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}.\p{B_DEF_NAME_WITH_PREFIX2} obtained\n{B_BUFF2}."); +static const u8 sText_PkmnCopiedFoe[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX2}'s Ability!"); static const u8 sText_PkmnMadeWish[] = _("{B_ATK_NAME_WITH_PREFIX} made a wish!"); //unused static const u8 sText_PkmnWishCameTrue[] = _("{B_BUFF1}'s wish\ncame true!"); static const u8 sText_PkmnPlantedRoots[] = _("{B_ATK_NAME_WITH_PREFIX} planted its roots!"); static const u8 sText_PkmnAbsorbedNutrients[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed\nnutrients with its roots!"); static const u8 sText_PkmnAnchoredItself[] = _("{B_DEF_NAME_WITH_PREFIX} anchored\nitself with its roots!"); static const u8 sText_PkmnWasMadeDrowsy[] = _("{B_DEF_NAME_WITH_PREFIX} grew drowsy!"); -static const u8 sText_PkmnKnockedOff[] = _("{B_ATK_NAME_WITH_PREFIX} knocked off\n{B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}!"); +static const u8 sText_PkmnKnockedOff[] = _("{B_ATK_NAME_WITH_PREFIX} knocked off\n{B_DEF_NAME_WITH_PREFIX2}'s {B_LAST_ITEM}!"); static const u8 sText_PkmnSwappedAbilities[] = _("{B_ATK_NAME_WITH_PREFIX} swapped\nAbilities with its target!"); static const u8 sText_PkmnSealedOpponentMove[] = _("{B_ATK_NAME_WITH_PREFIX} sealed any moves\nits target shares with it!"); static const u8 sText_PkmnWantsGrudge[] = _("{B_ATK_NAME_WITH_PREFIX} wants its target\nto bear a grudge!"); @@ -260,28 +260,28 @@ static const u8 sText_PkmnLostPPGrudge[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF static const u8 sText_PkmnShroudedItself[] = _("{B_ATK_NAME_WITH_PREFIX} shrouded\nitself with Magic Coat!"); static const u8 sText_PkmnMoveBounced[] = _("{B_ATK_NAME_WITH_PREFIX}\nbounced the {B_CURRENT_MOVE} back!"); static const u8 sText_PkmnWaitsForTarget[] = _("{B_ATK_NAME_WITH_PREFIX} waits for a target\nto make a move!"); -static const u8 sText_PkmnSnatchedMove[] = _("{B_DEF_NAME_WITH_PREFIX} snatched\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s move!"); +static const u8 sText_PkmnSnatchedMove[] = _("{B_DEF_NAME_WITH_PREFIX} snatched\n{B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s move!"); static const u8 sText_ElectricityWeakened[] = _("Electricity's power was weakened!"); static const u8 sText_FireWeakened[] = _("Fire's power was weakened!"); static const u8 sText_XFoundOneY[] = _("{B_ATK_NAME_WITH_PREFIX} found\none {B_LAST_ITEM}!"); static const u8 sText_SoothingAroma[] = _("A soothing aroma wafted\nthrough the area!"); static const u8 sText_ItemsCantBeUsedNow[] = _("Items can't be used now.{PAUSE 64}"); //not in gen 5+, i think -static const u8 sText_ForXCommaYZ[] = _("For {B_SCR_ACTIVE_NAME_WITH_PREFIX},\n{B_LAST_ITEM} {B_BUFF1}"); //not in gen 5+, expansion doesn't use anymore +static const u8 sText_ForXCommaYZ[] = _("For {B_SCR_ACTIVE_NAME_WITH_PREFIX2},\n{B_LAST_ITEM} {B_BUFF1}"); //not in gen 5+, expansion doesn't use anymore static const u8 sText_PkmnUsedXToGetPumped[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used\nthe {B_LAST_ITEM} to get pumped!"); static const u8 sText_PkmnLostFocus[] = _("{B_ATK_NAME_WITH_PREFIX} lost its\nfocus and couldn't move!"); static const u8 sText_PkmnWasDraggedOut[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndragged out!\p"); static const u8 sText_TheWallShattered[] = _("The wall shattered!"); //not in gen5+, uses "your teams light screen wore off!" etc instead static const u8 sText_ButNoEffect[] = _("But it had no effect!"); -static const u8 sText_PkmnHasNoMovesLeft[] = _("{B_ATK_NAME_WITH_PREFIX} has no\nmoves left!\p"); +static const u8 sText_PkmnHasNoMovesLeft[] = _("{B_ATK_NAME_WITH_PREFIX} has no moves left\nthat it can use!\p"); static const u8 sText_PkmnMoveIsDisabled[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\nis disabled!\p"); static const u8 sText_PkmnCantUseMoveTorment[] = _("{B_ATK_NAME_WITH_PREFIX} can't use the same move\ntwice in a row due to the torment!\p"); static const u8 sText_PkmnCantUseMoveTaunt[] = _("{B_ATK_NAME_WITH_PREFIX} can't use\n{B_CURRENT_MOVE} after the taunt!\p"); -static const u8 sText_PkmnCantUseMoveSealed[] = _("{B_ATK_NAME_WITH_PREFIX} can't use\nthe sealed {B_CURRENT_MOVE}!\p"); -static const u8 sText_PkmnCantUseMoveThroatChop[] = _("The effects of Throat Chop prevent\n{B_ATK_NAME_WITH_PREFIX} from using certain moves!\p"); +static const u8 sText_PkmnCantUseMoveSealed[] = _("{B_ATK_NAME_WITH_PREFIX} can't use\nits sealed {B_CURRENT_MOVE}!\p"); +static const u8 sText_PkmnCantUseMoveThroatChop[] = _("The effects of Throat Chop prevent\n{B_ATK_NAME_WITH_PREFIX2} from using certain moves!\p"); static const u8 sText_PkmnMadeItRain[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade it rain!"); //not in gen 5+, ability popup static const u8 sText_PkmnRaisedSpeed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nraised its Speed!"); //not in gen 5+, ability popup static const u8 sText_PkmnProtectedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was protected\nby {B_DEF_ABILITY}!"); //not in gen 5+, ability popup -static const u8 sText_PkmnPreventsUsage[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents {B_ATK_NAME_WITH_PREFIX}\lfrom using {B_CURRENT_MOVE}!"); +static const u8 sText_PkmnPreventsUsage[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents {B_ATK_NAME_WITH_PREFIX2}\lfrom using {B_CURRENT_MOVE}!"); //I don't see this in SV text static const u8 sText_PkmnRestoredHPUsing[] = _("{B_DEF_NAME_WITH_PREFIX} restored HP\nusing its {B_DEF_ABILITY}!"); //not in gen 5+, ability popup static const u8 sText_PkmnsXMadeYUseless[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} useless!"); //not in gen 5+, ability popup static const u8 sText_PkmnChangedTypeWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nmade it the {B_BUFF1} type!"); //not in gen 5+, ability popup @@ -291,9 +291,9 @@ static const u8 sText_PkmnPreventsPoisoningWith[] = _("{B_EFF_NAME_WITH_PREFIX}' static const u8 sText_PkmnPreventsConfusionWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents confusion!"); //not in gen 5+, ability popup static const u8 sText_PkmnRaisedFirePowerWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nraised the power of Fire-type moves!"); //not in gen 5+, ability popup static const u8 sText_PkmnAnchorsItselfWith[] = _("{B_DEF_NAME_WITH_PREFIX} anchors\nitself with {B_DEF_ABILITY}!"); //not in gen 5+, ability popup -static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncuts {B_DEF_NAME_WITH_PREFIX}'s attack!"); //not in gen 5+, ability popup +static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncuts {B_DEF_NAME_WITH_PREFIX2}'s attack!"); //not in gen 5+, ability popup static const u8 sText_PkmnPreventsStatLossWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents stat loss!"); //not in gen 5+, ability popup -static const u8 sText_PkmnHurtsWith[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt by\n{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}!"); +static const u8 sText_PkmnHurtsWith[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt by\n{B_DEF_NAME_WITH_PREFIX2}'s {B_BUFF1}!"); static const u8 sText_PkmnTraced[] = _("It traced\n{B_BUFF1}'s {B_BUFF2}!"); static const u8 sText_PkmnsXPreventsBurns[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY}\nprevents burns!"); //not in gen 5+, ability popup static const u8 sText_PkmnsXBlocksY[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nblocks {B_CURRENT_MOVE}!"); //not in gen 5+, ability popup @@ -302,41 +302,41 @@ static const u8 sText_PkmnsXRestoredHPALittle2[] = _("{B_ATK_NAME_WITH_PREFIX}'s static const u8 sText_PkmnsXWhippedUpSandstorm[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nwhipped up a sandstorm!"); //not in gen 5+, ability popup static const u8 sText_PkmnsXIntensifiedSun[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nintensified the sun's rays!"); //not in gen 5+, ability popup static const u8 sText_PkmnsXPreventsYLoss[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents {B_BUFF1} loss!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXInfatuatedY[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\ninfatuated {B_ATK_NAME_WITH_PREFIX}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXInfatuatedY[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\ninfatuated {B_ATK_NAME_WITH_PREFIX2}!"); //not in gen 5+, ability popup static const u8 sText_PkmnsXMadeYIneffective[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} ineffective!"); //not in gen 5+, ability popup static const u8 sText_PkmnsXCuredYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!"); //not in gen 5+, ability popup -static const u8 sText_ItSuckedLiquidOoze[] = _("{B_DEF_NAME_WITH_PREFIX} sucked up the\nliquid ooze!"); +static const u8 sText_ItSuckedLiquidOoze[] = _("{B_DEF_NAME_WITH_PREFIX} sucked up\nthe liquid ooze!"); static const u8 sText_PkmnTransformed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} transformed!"); -static const u8 sText_PkmnsXTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\ntook the attack!"); //not in gen 5+, ability popup -const u8 gText_PkmnsXPreventsSwitching[] = _("{B_BUFF1}'s {B_LAST_ABILITY}\nprevents switching!\p"); //not in gen 5+, ability popup -static const u8 sText_PreventedFromWorking[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevented {B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\l{B_BUFF1} from working!"); //unused +static const u8 sText_PkmnsXTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\ntook the attack!"); //In gen 5+ but without naming the ability +const u8 gText_PkmnsXPreventsSwitching[] = _("{B_BUFF1} is preventing switching out\nwith its {B_LAST_ABILITY} Ability!\p"); +static const u8 sText_PreventedFromWorking[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevented {B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s\l{B_BUFF1} from working!"); //unused static const u8 sText_PkmnsXMadeItIneffective[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade it ineffective!"); //not in gen 5+, ability popup static const u8 sText_PkmnsXPreventsFlinching[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY}\nprevents flinching!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXPreventsYsZ[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX}'s\l{B_DEF_ABILITY} from working!"); -static const u8 sText_PkmnsAbilityPreventsAbility[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX}'s\l{B_DEF_ABILITY} from working!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXPreventsYsZ[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX2}'s\l{B_DEF_ABILITY} from working!"); +static const u8 sText_PkmnsAbilityPreventsAbility[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX2}'s\l{B_DEF_ABILITY} from working!"); //not in gen 5+, ability popup static const u8 sText_PkmnsXCuredItsYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXHadNoEffectOnY[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nhad no effect on {B_EFF_NAME_WITH_PREFIX}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXHadNoEffectOnY[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nhad no effect on {B_EFF_NAME_WITH_PREFIX2}!"); //not in gen 5+, ability popup const u8 gText_StatSharply[] = _("sharply "); const u8 gText_StatRose[] = _("rose!"); static const u8 sText_StatHarshly[] = _("harshly "); static const u8 sText_StatFell[] = _("fell!"); static const u8 sText_AttackersStatRose[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1}\n{B_BUFF2}"); const u8 gText_DefendersStatRose[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\n{B_BUFF2}"); -static const u8 sText_UsingItemTheStatOfPkmnRose[] = _("Using {B_LAST_ITEM}, the {B_BUFF1}\nof {B_SCR_ACTIVE_NAME_WITH_PREFIX} {B_BUFF2}"); +static const u8 sText_UsingItemTheStatOfPkmnRose[] = _("Using {B_LAST_ITEM}, the {B_BUFF1}\nof {B_SCR_ACTIVE_NAME_WITH_PREFIX2} {B_BUFF2}"); //todo: update this, will require code changes static const u8 sText_AttackersStatFell[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1}\n{B_BUFF2}"); static const u8 sText_DefendersStatFell[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\n{B_BUFF2}"); static const u8 sText_StatsWontIncrease2[] = _("{B_ATK_NAME_WITH_PREFIX}'s stats won't\ngo any higher!"); static const u8 sText_StatsWontDecrease2[] = _("{B_DEF_NAME_WITH_PREFIX}'s stats won't\ngo any lower!"); static const u8 sText_CriticalHit[] = _("A critical hit!"); static const u8 sText_OneHitKO[] = _("It's a one-hit KO!"); -static const u8 sText_123Poof[] = _("One…{PAUSE 20}two…{PAUSE 20}and…{PAUSE 20}{PAUSE 20}{PLAY_SE SE_BALL_BOUNCE_1}ta-da!\p"); +static const u8 sText_123Poof[] = _("One…{PAUSE 10}two…{PAUSE 10}and…{PAUSE 10}{PAUSE 20}{PLAY_SE SE_BALL_BOUNCE_1}ta-da!\p"); static const u8 sText_AndEllipsis[] = _("And…\p"); static const u8 sText_HMMovesCantBeForgotten[] = _("HM moves can't be\nforgotten now.\p"); static const u8 sText_NotVeryEffective[] = _("It's not very effective…"); static const u8 sText_SuperEffective[] = _("It's super effective!"); static const u8 sText_GotAwaySafely[] = _("{PLAY_SE SE_FLEE}You got away safely!\p"); static const u8 sText_PkmnFledUsingIts[] = _("{PLAY_SE SE_FLEE}{B_ATK_NAME_WITH_PREFIX} fled\nusing its {B_LAST_ITEM}!\p"); -static const u8 sText_PkmnFledUsing[] = _("{PLAY_SE SE_FLEE}{B_ATK_NAME_WITH_PREFIX} fled\nusing {B_ATK_ABILITY}!\p"); +static const u8 sText_PkmnFledUsing[] = _("{PLAY_SE SE_FLEE}{B_ATK_NAME_WITH_PREFIX} fled\nusing {B_ATK_ABILITY}!\p"); //not in gen 5+ static const u8 sText_WildPkmnFled[] = _("{PLAY_SE SE_FLEE}The wild {B_BUFF1} fled!"); static const u8 sText_PlayerDefeatedLinkTrainer[] = _("You defeated\n{B_LINK_OPPONENT1_NAME}!"); static const u8 sText_TwoLinkTrainersDefeated[] = _("You defeated {B_LINK_OPPONENT1_NAME}\nand {B_LINK_OPPONENT2_NAME}!"); @@ -375,13 +375,13 @@ static const u8 sText_FailedToSwallow[] = _("But it failed to swallow\na thing!" static const u8 sText_WindBecameHeatWave[] = _("The wind turned into a\nHeat Wave!"); //unused static const u8 sText_StatChangesGone[] = _("All stat changes were eliminated!"); static const u8 sText_CoinsScattered[] = _("Coins were scattered everywhere!"); -static const u8 sText_TooWeakForSubstitute[] = _("It was too weak to make\na substitute!"); +static const u8 sText_TooWeakForSubstitute[] = _("But it does not have enough\nHP left to make a substitute!"); static const u8 sText_SharedPain[] = _("The battlers shared\ntheir pain!"); static const u8 sText_BellChimed[] = _("A bell chimed!"); static const u8 sText_FaintInThree[] = _("All Pokémon that heard the song\nwill faint in three turns!"); static const u8 sText_NoPPLeft[] = _("There's no PP left for\nthis move!\p"); //not in gen 5+ static const u8 sText_ButNoPPLeft[] = _("But there was no PP left\nfor the move!"); -static const u8 sText_PkmnIgnoresAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} ignored\norders while asleep!"); +static const u8 sText_PkmnIgnoresAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} ignored orders\nand kept sleeping!"); static const u8 sText_PkmnIgnoredOrders[] = _("{B_ATK_NAME_WITH_PREFIX} ignored orders!"); static const u8 sText_PkmnBeganToNap[] = _("{B_ATK_NAME_WITH_PREFIX} began to nap!"); static const u8 sText_PkmnLoafing[] = _("{B_ATK_NAME_WITH_PREFIX} is\nloafing around!"); @@ -391,18 +391,18 @@ static const u8 sText_PkmnPretendNotNotice[] = _("{B_ATK_NAME_WITH_PREFIX} prete static const u8 sText_EnemyAboutToSwitchPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} is\nabout to send out {B_BUFF2}.\pWill you switch your Pokémon?"); static const u8 sText_PkmnLearnedMove2[] = _("{B_ATK_NAME_WITH_PREFIX} learned\n{B_BUFF1}!"); static const u8 sText_PlayerDefeatedLinkTrainerTrainer1[] = _("You defeated\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p"); -static const u8 sText_CreptCloser[] = _("{B_PLAYER_NAME} crept closer to\n{B_OPPONENT_MON1_NAME}!"); -static const u8 sText_CantGetCloser[] = _("{B_PLAYER_NAME} can't get any closer!"); -static const u8 sText_PkmnWatchingCarefully[] = _("{B_OPPONENT_MON1_NAME} is watching\ncarefully!"); -static const u8 sText_PkmnCuriousAboutX[] = _("{B_OPPONENT_MON1_NAME} is curious about\nthe {B_BUFF1}!"); -static const u8 sText_PkmnEnthralledByX[] = _("{B_OPPONENT_MON1_NAME} is enthralled by\nthe {B_BUFF1}!"); -static const u8 sText_PkmnIgnoredX[] = _("{B_OPPONENT_MON1_NAME} completely ignored\nthe {B_BUFF1}!"); -static const u8 sText_ThrewPokeblockAtPkmn[] = _("{B_PLAYER_NAME} threw a {POKEBLOCK}\nat the {B_OPPONENT_MON1_NAME}!"); -static const u8 sText_OutOfSafariBalls[] = _("{PLAY_SE SE_DING_DONG}ANNOUNCER: You're out of\nSafari Balls! Game over!\p"); +static const u8 sText_CreptCloser[] = _("{B_PLAYER_NAME} crept closer to\n{B_OPPONENT_MON1_NAME}!"); //safari +static const u8 sText_CantGetCloser[] = _("{B_PLAYER_NAME} can't get any closer!"); //safari +static const u8 sText_PkmnWatchingCarefully[] = _("{B_OPPONENT_MON1_NAME} is watching\ncarefully!"); //safari +static const u8 sText_PkmnCuriousAboutX[] = _("{B_OPPONENT_MON1_NAME} is curious about\nthe {B_BUFF1}!"); //safari +static const u8 sText_PkmnEnthralledByX[] = _("{B_OPPONENT_MON1_NAME} is enthralled by\nthe {B_BUFF1}!"); //safari +static const u8 sText_PkmnIgnoredX[] = _("{B_OPPONENT_MON1_NAME} completely ignored\nthe {B_BUFF1}!"); //safari +static const u8 sText_ThrewPokeblockAtPkmn[] = _("{B_PLAYER_NAME} threw a {POKEBLOCK}\nat the {B_OPPONENT_MON1_NAME}!"); //safari +static const u8 sText_OutOfSafariBalls[] = _("{PLAY_SE SE_DING_DONG}ANNOUNCER: You're out of\nSafari Balls! Game over!\p"); //safari static const u8 sText_OpponentMon1Appeared[] = _("{B_OPPONENT_MON1_NAME} appeared!\p"); -static const u8 sText_WildPkmnAppeared[] = _("A wild {B_OPPONENT_MON1_NAME} appeared!\p"); -static const u8 sText_LegendaryPkmnAppeared[] = _("A wild {B_OPPONENT_MON1_NAME} appeared!\p"); -static const u8 sText_WildPkmnAppearedPause[] = _("A wild {B_OPPONENT_MON1_NAME} appeared!{PAUSE 127}"); +static const u8 sText_WildPkmnAppeared[] = _("You encountered a wild {B_OPPONENT_MON1_NAME}!\p"); +static const u8 sText_LegendaryPkmnAppeared[] = _("You encountered a wild {B_OPPONENT_MON1_NAME}!\p"); +static const u8 sText_WildPkmnAppearedPause[] = _("You encountered a wild {B_OPPONENT_MON1_NAME}!{PAUSE 127}"); static const u8 sText_TwoWildPkmnAppeared[] = _("Oh! A wild {B_OPPONENT_MON1_NAME} and\n{B_OPPONENT_MON2_NAME} appeared!\p"); static const u8 sText_Trainer1WantsToBattle[] = _("You are challenged by\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p"); static const u8 sText_LinkTrainerWantsToBattle[] = _("You are challenged by\n{B_LINK_OPPONENT1_NAME}!"); @@ -417,27 +417,30 @@ static const u8 sText_LinkTrainerSentOutPkmn2[] = _("{B_LINK_OPPONENT1_NAME} sen static const u8 sText_LinkTrainerMultiSentOutPkmn[] = _("{B_LINK_SCR_TRAINER_NAME} sent out\n{B_BUFF1}!"); static const u8 sText_GoPkmn[] = _("Go! {B_PLAYER_MON1_NAME}!"); static const u8 sText_GoTwoPkmn[] = _("Go! {B_PLAYER_MON1_NAME} and\n{B_PLAYER_MON2_NAME}!"); -static const u8 sText_GoPkmn2[] = _("You're in charge, {B_BUFF1}!"); +static const u8 sText_GoPkmn2[] = _("Go! {B_BUFF1}!"); +static const u8 sText_DoItPkmn[] = _("You're in charge, {B_BUFF1}!"); static const u8 sText_GoForItPkmn[] = _("Go for it, {B_BUFF1}!"); -static const u8 sText_JustALittleMorePkmn[] = _("Just a little more!\nHang in there, {B_BUFF1}!"); +static const u8 sText_JustALittleMorePkmn[] = _("Just a little more!\nHang in there, {B_BUFF1}!"); //currently unused, will require code changes static const u8 sText_YourFoesWeakGetEmPkmn[] = _("Your opponent's weak!\nGet 'em, {B_BUFF1}!"); static const u8 sText_LinkPartnerSentOutPkmnGoPkmn[] = _("{B_LINK_PARTNER_NAME} sent out {B_LINK_PLAYER_MON2_NAME}!\nGo! {B_LINK_PLAYER_MON1_NAME}!"); -static const u8 sText_PkmnSwitchOut[] = _("{B_BUFF1}, switch out!\nCome back!"); //Later gens use this message when switching out a pokemon during shift rules. -static const u8 sText_PkmnComeBack[] = _("{B_BUFF1}, come back!"); +static const u8 sText_PkmnSwitchOut[] = _("{B_BUFF1}, switch out!\nCome back!"); //currently unused, I believe its used for when you switch on a pokemon in shift mode static const u8 sText_PkmnThatsEnough[] = _("{B_BUFF1}, that's enough!\nCome back!"); +static const u8 sText_PkmnComeBack[] = _("{B_BUFF1}, come back!"); static const u8 sText_PkmnOkComeBack[] = _("OK, {B_BUFF1}!\nCome back!"); static const u8 sText_PkmnGoodComeBack[] = _("Good job, {B_BUFF1}!\nCome back!"); static const u8 sText_Trainer1WithdrewPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwithdrew {B_BUFF1}!"); static const u8 sText_LinkTrainer1WithdrewPkmn[] = _("{B_LINK_OPPONENT1_NAME} withdrew\n{B_BUFF1}!"); static const u8 sText_LinkTrainer2WithdrewPkmn[] = _("{B_LINK_SCR_TRAINER_NAME} withdrew\n{B_BUFF1}!"); -static const u8 sText_WildPkmnPrefix[] = _("Wild "); -static const u8 sText_FoePkmnPrefix[] = _("Foe "); +static const u8 sText_WildPkmnPrefix[] = _("The wild "); +static const u8 sText_FoePkmnPrefix[] = _("The opposing "); +static const u8 sText_WildPkmnPrefixLower[] = _("the wild "); +static const u8 sText_FoePkmnPrefixLower[] = _("the opposing "); static const u8 sText_EmptyString8[] = _(""); -static const u8 sText_FoePkmnPrefix2[] = _("Foe"); +static const u8 sText_FoePkmnPrefix2[] = _("Opposing"); static const u8 sText_AllyPkmnPrefix[] = _("Ally"); -static const u8 sText_FoePkmnPrefix3[] = _("Foe"); +static const u8 sText_FoePkmnPrefix3[] = _("Opposing"); static const u8 sText_AllyPkmnPrefix2[] = _("Ally"); -static const u8 sText_FoePkmnPrefix4[] = _("Foe"); +static const u8 sText_FoePkmnPrefix4[] = _("Opposing"); static const u8 sText_AllyPkmnPrefix3[] = _("Ally"); static const u8 sText_AttackerUsedX[] = _("{B_ATK_NAME_WITH_PREFIX} used\n{B_BUFF3}!"); static const u8 sText_ExclamationMark[] = _("!"); @@ -479,21 +482,21 @@ const u8 *const gPokeblockWasTooXStringTable[FLAVOR_COUNT] = static const u8 sText_PlayerUsedItem[] = _("You used\n{B_LAST_ITEM}!"); static const u8 sText_WallyUsedItem[] = _("WALLY used\n{B_LAST_ITEM}!"); //no decapitalize until it is everywhere static const u8 sText_Trainer1UsedItem[] = _("{B_ATK_TRAINER_CLASS} {B_ATK_TRAINER_NAME}\nused {B_LAST_ITEM}!"); -static const u8 sText_TrainerBlockedBall[] = _("The Trainer blocked the Ball!"); +static const u8 sText_TrainerBlockedBall[] = _("The Trainer blocked\nyour Poké Ball!"); static const u8 sText_DontBeAThief[] = _("Don't be a thief!"); -static const u8 sText_ItDodgedBall[] = _("It dodged the thrown Ball!\nThis Pokémon can't be caught!"); +static const u8 sText_ItDodgedBall[] = _("It dodged your thrown Poké Ball!\nThis Pokémon can't be caught!"); static const u8 sText_YouMissedPkmn[] = _("You missed the Pokémon!"); -static const u8 sText_PkmnBrokeFree[] = _("Oh, no!\nThe Pokémon broke free!"); +static const u8 sText_PkmnBrokeFree[] = _("Oh no!\nThe Pokémon broke free!"); static const u8 sText_ItAppearedCaught[] = _("Aww!\nIt appeared to be caught!"); static const u8 sText_AarghAlmostHadIt[] = _("Aargh!\nAlmost had it!"); static const u8 sText_ShootSoClose[] = _("Gah!\nIt was so close, too!"); static const u8 sText_GotchaPkmnCaughtPlayer[] = _("Gotcha!\n{B_DEF_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}\p"); static const u8 sText_GotchaPkmnCaughtWally[] = _("Gotcha!\n{B_DEF_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}{PAUSE 127}"); -static const u8 sText_GiveNicknameCaptured[] = _("Give a nickname to the\ncaught {B_DEF_NAME}?"); -static const u8 sText_PkmnSentToPC[] = _("{B_DEF_NAME} was sent to\n{B_PC_CREATOR_NAME} PC."); //not updating this since the terminology is different +static const u8 sText_GiveNicknameCaptured[] = _("Would you like to give\n{B_DEF_NAME} a nickname?"); +static const u8 sText_PkmnSentToPC[] = _("{B_DEF_NAME} has been sent\nto {B_PC_CREATOR_NAME} PC!"); //Still used lanette's pc since terminology is different static const u8 sText_Someones[] = _("someone's"); static const u8 sText_Lanettes[] = _("LANETTE's"); //no decapitalize until it is everywhere -static const u8 sText_PkmnDataAddedToDex[] = _("{B_DEF_NAME}'s data was\nadded to the Pokédex.\p"); +static const u8 sText_PkmnDataAddedToDex[] = _("{B_DEF_NAME}'s data has\nbeen added to the Pokédex!\p"); static const u8 sText_ItIsRaining[] = _("It's raining!"); static const u8 sText_SandstormIsRaging[] = _("The sandstorm is raging!"); static const u8 sText_SunlightIsHarsh[] = _("The sunlight is harsh!"); @@ -508,18 +511,18 @@ static const u8 sText_EnigmaBerry[] = _("ENIGMA BERRY"); //no decapitalize until static const u8 sText_BerrySuffix[] = _(" BERRY"); //no decapitalize until it is everywhere static const u8 sText_PkmnsItemCuredParalysis[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ncured its paralysis!"); static const u8 sText_PkmnsItemCuredPoison[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ncured its poison!"); -static const u8 sText_PkmnsItemHealedBurn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nhealed its burn!"); -static const u8 sText_PkmnsItemHealedFrostbite[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nhealed its frostbite!"); +static const u8 sText_PkmnsItemHealedBurn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ncured its burn!"); +static const u8 sText_PkmnsItemHealedFrostbite[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ncured its frostbite!"); static const u8 sText_PkmnsItemDefrostedIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ndefrosted it!"); static const u8 sText_PkmnsItemWokeIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nwoke it up!"); static const u8 sText_PkmnsItemSnappedOut[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nsnapped it out of its confusion!"); static const u8 sText_PkmnsItemCuredProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ncured its {B_BUFF1} problem!"); static const u8 sText_PkmnsItemNormalizedStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nnormalized its status!"); static const u8 sText_PkmnsItemRestoredHealth[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored its\nhealth using its {B_LAST_ITEM}!"); -static const u8 sText_PkmnsItemRestoredPP[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored\n{B_BUFF1}'s PP using its\l{B_LAST_ITEM}!"); -static const u8 sText_PkmnsItemRestoredStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored its\nstatus using its {B_LAST_ITEM}!"); +static const u8 sText_PkmnsItemRestoredPP[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored PP to\nits move {B_BUFF1} using its\l{B_LAST_ITEM}!"); +static const u8 sText_PkmnsItemRestoredStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} returned its stats\nto normal using its {B_LAST_ITEM}!"); static const u8 sText_PkmnsItemRestoredHPALittle[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored\na little HP using its {B_LAST_ITEM}!"); -static const u8 sText_ItemAllowsOnlyYMove[] = _("{B_LAST_ITEM} allows the\nuse of only {B_CURRENT_MOVE}!\p"); +static const u8 sText_ItemAllowsOnlyYMove[] = _("{B_LAST_ITEM} only allows\nthe use of {B_CURRENT_MOVE}!\p"); static const u8 sText_PkmnHungOnWithX[] = _("{B_DEF_NAME_WITH_PREFIX} hung on\nusing its {B_LAST_ITEM}!"); const u8 gText_EmptyString3[] = _(""); static const u8 sText_YouThrowABallNowRight[] = _("You throw a Ball now, right?\nI… I'll do my best!"); @@ -550,106 +553,106 @@ static const u8 sText_TargetAbilityActivates[] = _("{B_DEF_NAME_WITH_PREFIX}'s { static const u8 sText_GravityIntensified[] = _("Gravity intensified!"); static const u8 sText_TargetIdentified[] = _("{B_DEF_NAME_WITH_PREFIX} was\nidentified!"); static const u8 sText_TargetWokeUp[] = _("{B_DEF_NAME_WITH_PREFIX} woke up!"); -static const u8 sText_PkmnStoleAndAteItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole and\nate {B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}!"); -static const u8 sText_TailWindBlew[] = _("The tailwind blew from\nbehind {B_ATK_TEAM2} team!"); +static const u8 sText_PkmnStoleAndAteItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole and\nate its target's {B_LAST_ITEM}!"); +static const u8 sText_TailWindBlew[] = _("The Tailwind blew from\nbehind {B_ATK_TEAM2} team!"); static const u8 sText_PkmnWentBack[] = _("{B_ATK_NAME_WITH_PREFIX} went back\nto {B_ATK_TRAINER_CLASS} {B_ATK_TRAINER_NAME}"); static const u8 sText_PkmnCantUseItemsAnymore[] = _("{B_DEF_NAME_WITH_PREFIX} can't use\nitems anymore!"); static const u8 sText_PkmnFlung[] = _("{B_ATK_NAME_WITH_PREFIX} flung its\n{B_LAST_ITEM}!"); static const u8 sText_PkmnPreventedFromHealing[] = _("{B_DEF_NAME_WITH_PREFIX} was prevented\nfrom healing!"); static const u8 sText_PkmnSwitchedAtkAndDef[] = _("{B_ATK_NAME_WITH_PREFIX} switched its\nAttack and Defense!"); -static const u8 sText_PkmnsAbilitySuppressed[] = _("{B_DEF_NAME_WITH_PREFIX}'s ability\nwas suppressed!"); -static const u8 sText_ShieldedFromCriticalHits[] = _("The {B_CURRENT_MOVE} shielded {B_ATK_TEAM2}\nteam from critical hits!"); -static const u8 sText_SwitchedAtkAndSpAtk[] = _("{B_ATK_NAME_WITH_PREFIX} switched all its\nchanges to its Attack and\pSp. Atk with the target!"); -static const u8 sText_SwitchedDefAndSpDef[] = _("{B_ATK_NAME_WITH_PREFIX} switched all its\nchanges to its Defense and\pSp. Def with the target!"); +static const u8 sText_PkmnsAbilitySuppressed[] = _("{B_DEF_NAME_WITH_PREFIX}'s Ability\nwas suppressed!"); +static const u8 sText_ShieldedFromCriticalHits[] = _("Lucky Chant shielded {B_ATK_TEAM2} team from critical hits!"); +static const u8 sText_SwitchedAtkAndSpAtk[] = _("{B_ATK_NAME_WITH_PREFIX} switched all changes\nto its Attack and Sp. Atk\pwith its target!"); +static const u8 sText_SwitchedDefAndSpDef[] = _("{B_ATK_NAME_WITH_PREFIX} switched all changes\nto its Defense andSp. Def\pwith its target!"); static const u8 sText_PkmnAcquiredAbility[] = _("{B_DEF_NAME_WITH_PREFIX} acquired\n{B_DEF_ABILITY}!"); static const u8 sText_PoisonSpikesScattered[] = _("Poison spikes were scattered on the ground\nall around {B_DEF_TEAM2} team!"); -static const u8 sText_PkmnSwitchedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} switched stat changes\nwith the target!"); +static const u8 sText_PkmnSwitchedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} switched stat changes\nwith its target!"); static const u8 sText_PkmnSurroundedWithVeilOfWater[] = _("{B_ATK_NAME_WITH_PREFIX} surrounded itself\nwith a veil of water!"); -static const u8 sText_PkmnLevitatedOnElectromagnetism[] = _("{B_ATK_NAME_WITH_PREFIX} levitated on\nelectromagnetism!"); +static const u8 sText_PkmnLevitatedOnElectromagnetism[] = _("{B_ATK_NAME_WITH_PREFIX} levitated\nwith electromagnetism!"); static const u8 sText_PkmnTwistedDimensions[] = _("{B_ATK_NAME_WITH_PREFIX} twisted\nthe dimensions!"); static const u8 sText_DimensionsWereTwisted[] = _("The dimensions were\ntwisted!"); static const u8 sText_PointedStonesFloat[] =_("Pointed stones float in the air\naround {B_DEF_TEAM2} team!"); -static const u8 sText_CloakedInMysticalMoonlight[] =_("It became cloaked in mystical\nmoonlight!"); +static const u8 sText_CloakedInMysticalMoonlight[] =_("{B_ATK_NAME_WITH_PREFIX} became cloaked\nin mystical moonlight!"); static const u8 sText_TrappedBySwirlingMagma[] =_("{B_DEF_NAME_WITH_PREFIX} became\ntrapped by swirling magma!"); static const u8 sText_VanishedInstantly[] =_("{B_ATK_NAME_WITH_PREFIX} vanished\ninstantly!"); static const u8 sText_ProtectedTeam[] =_("{B_CURRENT_MOVE} protected\n{B_ATK_TEAM2} team!"); static const u8 sText_SharedItsGuard[] =_("{B_ATK_NAME_WITH_PREFIX} shared its\nguard with the target!"); static const u8 sText_SharedItsPower[] =_("{B_ATK_NAME_WITH_PREFIX} shared its\npower with the target!"); -static const u8 sText_SwapsDefAndSpDefOfAllPkmn[] =_("It created a bizarre area in which the\nDefense and Sp. Def stats are swapped!"); -static const u8 sText_BizzareAreaCreated[] =_("A bizarre area was created in which the\nDefense and Sp. Def stats are swapped!"); +static const u8 sText_SwapsDefAndSpDefOfAllPkmn[] =_("It created a bizarre area in which\nDefense and Sp. Def stats are swapped!"); +static const u8 sText_BizzareAreaCreated[] =_("A bizarre area was created in which\nDefense and Sp. Def stats are swapped!"); static const u8 sText_BecameNimble[] =_("{B_ATK_NAME_WITH_PREFIX} became nimble!"); static const u8 sText_HurledIntoTheAir[] =_("{B_DEF_NAME_WITH_PREFIX} was hurled\ninto the air!"); static const u8 sText_HeldItemsLoseEffects[] =_("It created a bizarre area in which\nPokémon's held items lose their effects!"); -static const u8 sText_BizarreArenaCreated[] =_("A bizarre area was created!\nHold items lost their effects!"); +static const u8 sText_BizarreArenaCreated[] =_("A bizarre area was created in which\nPokémon's held items lose their effects!"); static const u8 sText_FellStraightDown[] =_("{B_DEF_NAME_WITH_PREFIX} fell\nstraight down!"); static const u8 sText_TargetChangedType[] =_("{B_DEF_NAME_WITH_PREFIX} transformed\ninto the {B_BUFF1} type!"); -static const u8 sText_PkmnAcquiredSimple[] =_("{B_DEF_NAME_WITH_PREFIX} acquired\nSimple!"); +static const u8 sText_PkmnAcquiredSimple[] =_("{B_DEF_NAME_WITH_PREFIX} acquired\nSimple!"); //shouldn't directly use the name static const u8 sText_KindOffer[] =_("{B_DEF_NAME_WITH_PREFIX}\ntook the kind offer!"); static const u8 sText_ResetsTargetsStatLevels[] =_("{B_DEF_NAME_WITH_PREFIX}'s stat changes\nwere removed!"); -static const u8 sText_AllySwitchPosition[] =_("{B_ATK_NAME_WITH_PREFIX} and\n{B_SCR_ACTIVE_NAME_WITH_PREFIX} switched places!"); +static const u8 sText_AllySwitchPosition[] =_("{B_ATK_NAME_WITH_PREFIX} and\n{B_SCR_ACTIVE_NAME_WITH_PREFIX2} switched places!"); static const u8 sText_RestoreTargetsHealth[] =_("{B_DEF_NAME_WITH_PREFIX}'s HP was restored!"); static const u8 sText_TookPkmnIntoTheSky[] =_("{B_ATK_NAME_WITH_PREFIX} took\n{B_DEF_NAME_WITH_PREFIX} into the sky!"); static const u8 sText_FreedFromSkyDrop[] =_("{B_DEF_NAME_WITH_PREFIX} was freed\nfrom the Sky Drop!"); static const u8 sText_PostponeTargetMove[] =_("{B_DEF_NAME_WITH_PREFIX}'s move\nwas postponed!"); -static const u8 sText_ReflectTargetsType[] =_("{B_ATK_NAME_WITH_PREFIX}'s type\nchanged to match the {B_DEF_NAME_WITH_PREFIX}'s!"); -static const u8 sText_TransferHeldItem[] =_("{B_DEF_NAME_WITH_PREFIX} received {B_LAST_ITEM}\nfrom {B_ATK_NAME_WITH_PREFIX}"); +static const u8 sText_ReflectTargetsType[] =_("{B_ATK_NAME_WITH_PREFIX} became the\nsame type as {B_DEF_NAME_WITH_PREFIX2}!"); +static const u8 sText_TransferHeldItem[] =_("{B_DEF_NAME_WITH_PREFIX} received {B_LAST_ITEM}\nfrom {B_ATK_NAME_WITH_PREFIX2}"); static const u8 sText_EmbargoEnds[] = _("{B_ATK_NAME_WITH_PREFIX} can\nuse items again!"); static const u8 sText_Electromagnetism[] = _("electromagnetism"); static const u8 sText_BufferEnds[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1}\nwore off!"); static const u8 sText_ThroatChopEnds[] = _("{B_ATK_NAME_WITH_PREFIX} can\nuse sound-based moves again!"); static const u8 sText_TelekinesisEnds[] = _("{B_ATK_NAME_WITH_PREFIX} was freed\nfrom the telekinesis!"); -static const u8 sText_TailwindEnds[] = _("{B_ATK_TEAM1} team's tailwind\npetered out!"); +static const u8 sText_TailwindEnds[] = _("{B_ATK_TEAM1} team's Tailwind\npetered out!"); static const u8 sText_LuckyChantEnds[] = _("{B_ATK_TEAM1} team's Lucky Chant\nwore off!"); static const u8 sText_TrickRoomEnds[] = _("The twisted dimensions returned to\nnormal!"); -static const u8 sText_WonderRoomEnds[] = _("Wonder Room wore off, and Defense\nand Sp. Def stats returned to normal!"); +static const u8 sText_WonderRoomEnds[] = _("Wonder Room wore off, and\nDefense and Sp. Def stats returned to normal!"); static const u8 sText_MagicRoomEnds[] = _("Magic Room wore off, and held items'\neffects returned to normal!"); static const u8 sText_MudSportEnds[] = _("The effects of Mud Sport have faded."); static const u8 sText_WaterSportEnds[] = _("The effects of Water Sport have faded."); static const u8 sText_GravityEnds[] = _("Gravity returned to normal!"); -static const u8 sText_AquaRingHeal[] = _("Aqua Ring restored\n{B_ATK_NAME_WITH_PREFIX}'s HP!"); +static const u8 sText_AquaRingHeal[] = _("A veil of water restored\n{B_ATK_NAME_WITH_PREFIX2}'s HP!"); static const u8 sText_TargetAbilityRaisedStat[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nraised its {B_BUFF1}!"); static const u8 sText_TargetAbilityLoweredStat[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nlowered its {B_BUFF1}!"); static const u8 sText_AttackerAbilityRaisedStat[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nraised its {B_BUFF1}!"); static const u8 sText_ScriptingAbilityRaisedStat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nraised its {B_BUFF1}!"); -static const u8 sText_AuroraVeilEnds[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nwore off!"); +static const u8 sText_AuroraVeilEnds[] = _("{B_ATK_TEAM1} team's Aurora Veil wore off!"); static const u8 sText_ElectricTerrainEnds[] = _("The electricity disappeared\nfrom the battlefield."); static const u8 sText_MistyTerrainEnds[] = _("The mist disappeared\nfrom the battlefield."); -static const u8 sText_PsychicTerrainEnds[] = _("The weirdness disappeared\nfrom the battlefield."); +static const u8 sText_PsychicTerrainEnds[] = _("The weirdness disappeared\nfrom the battlefield!"); static const u8 sText_GrassyTerrainEnds[] = _("The grass disappeared\nfrom the battlefield."); static const u8 sText_TargetsStatWasMaxedOut[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} maxed\nits {B_BUFF1}!"); -static const u8 sText_PoisonHealHpUp[] = _("The poisoning healed {B_ATK_NAME_WITH_PREFIX}\na little bit!"); +static const u8 sText_PoisonHealHpUp[] = _("The poisoning healed {B_ATK_NAME_WITH_PREFIX2}\na little bit!"); //don't think this message is displayed anymore static const u8 sText_BadDreamsDmg[] = _("{B_DEF_NAME_WITH_PREFIX} is tormented!"); static const u8 sText_MoldBreakerEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} breaks the mold!"); static const u8 sText_TeravoltEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating\na bursting aura!"); static const u8 sText_TurboblazeEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating\na blazing aura!"); -static const u8 sText_SlowStartEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} can't get it going!"); +static const u8 sText_SlowStartEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is slow\nto get going!"); static const u8 sText_SlowStartEnd[] = _("{B_ATK_NAME_WITH_PREFIX} finally got\nits act together!"); -static const u8 sText_SolarPowerHpDrop[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\ntakes its toll!"); -static const u8 sText_AftermathDmg[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt!"); -static const u8 sText_AnticipationActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} shuddered\nin anticipation!"); -static const u8 sText_ForewarnActivates[] = _("{B_SCR_ACTIVE_ABILITY} alerted {B_SCR_ACTIVE_NAME_WITH_PREFIX}\nto {B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}!"); -static const u8 sText_IceBodyHpGain[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nhealed it a little bit!"); +static const u8 sText_SolarPowerHpDrop[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\ntakes its toll!"); //don't think this message is displayed anymore +static const u8 sText_AftermathDmg[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt!"); +static const u8 sText_AnticipationActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} shuddered\nin anticipation!"); //don't think this message is displayed anymore +static const u8 sText_ForewarnActivates[] = _("{B_SCR_ACTIVE_ABILITY} alerted {B_SCR_ACTIVE_NAME_WITH_PREFIX2}\nto {B_DEF_NAME_WITH_PREFIX2}'s {B_BUFF1}!"); //don't think this message is displayed anymore +static const u8 sText_IceBodyHpGain[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nhealed it a little bit!"); //don't think this message is displayed anymore static const u8 sText_SnowWarningHail[] = _("It started to hail!"); static const u8 sText_SnowWarningSnow[] = _("It started to snow!"); -static const u8 sText_FriskActivates[] = _("{B_ATK_NAME_WITH_PREFIX} frisked {B_DEF_NAME_WITH_PREFIX} and\nfound its {B_LAST_ITEM}!"); -static const u8 sText_UnnerveEnters[] = _("The opposing team is too nervous\nto eat Berries!"); +static const u8 sText_FriskActivates[] = _("{B_ATK_NAME_WITH_PREFIX} frisked {B_DEF_NAME_WITH_PREFIX2} and\nfound its {B_LAST_ITEM}!"); +static const u8 sText_UnnerveEnters[] = _("{B_DEF_TEAM1} team is too nervous\nto eat Berries!"); static const u8 sText_HarvestBerry[] = _("{B_ATK_NAME_WITH_PREFIX} harvested\nits {B_LAST_ITEM}!"); static const u8 sText_LastAbilityRaisedBuff1[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ABILITY}\nraised its {B_BUFF1}!"); -static const u8 sText_MagicBounceActivates[] = _("The {B_DEF_NAME_WITH_PREFIX} bounced the\n{B_ATK_NAME_WITH_PREFIX} back!"); +static const u8 sText_MagicBounceActivates[] = _("{B_DEF_NAME_WITH_PREFIX} bounced the\n{B_ATK_NAME_WITH_PREFIX2} back!"); static const u8 sText_ProteanTypeChange[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} transformed\nit into the {B_BUFF1} type!"); -static const u8 sText_SymbiosisItemPass[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} passed its {B_LAST_ITEM}\nto {B_ATK_NAME_WITH_PREFIX} through {B_LAST_ABILITY}!"); +static const u8 sText_SymbiosisItemPass[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} passed its {B_LAST_ITEM}\nto {B_ATK_NAME_WITH_PREFIX2} through {B_LAST_ABILITY}!"); static const u8 sText_StealthRockDmg[] = _("Pointed stones dug into\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}!"); static const u8 sText_ToxicSpikesAbsorbed[] = _("The poison spikes disappeared from\nthe ground around {B_ATK_TEAM2} team!"); static const u8 sText_ToxicSpikesPoisoned[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was poisoned!"); -static const u8 sText_StickyWebSwitchIn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was\ncaught in a Sticky Web!"); -static const u8 sText_HealingWishCameTrue[] = _("The healing wish came true\nfor {B_ATK_NAME_WITH_PREFIX}!"); +static const u8 sText_StickyWebSwitchIn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was\ncaught in a sticky web!"); +static const u8 sText_HealingWishCameTrue[] = _("The healing wish came true\nfor {B_ATK_NAME_WITH_PREFIX2}!"); static const u8 sText_HealingWishHealed[] = _("{B_ATK_NAME_WITH_PREFIX} regained health!"); static const u8 sText_LunarDanceCameTrue[] = _("{B_ATK_NAME_WITH_PREFIX} became cloaked\nin mystical moonlight!"); -static const u8 sText_CursedBodyDisabled[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} was disabled\nby {B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}!"); +static const u8 sText_CursedBodyDisabled[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} was disabled\nby {B_DEF_NAME_WITH_PREFIX2}'s {B_DEF_ABILITY}!"); static const u8 sText_AttackerAquiredAbility[] = _("{B_ATK_NAME_WITH_PREFIX} acquired\n{B_LAST_ABILITY}!"); -static const u8 sText_TargetStatWontGoHigher[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\nwon't go higher!"); -static const u8 sText_PkmnMoveBouncedViaAbility[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE} was\nbounced back by {B_DEF_NAME_WITH_PREFIX}'s\l{B_DEF_ABILITY}!"); -static const u8 sText_ImposterTransform[] = _("{B_ATK_NAME_WITH_PREFIX} transformed into\n{B_DEF_NAME_WITH_PREFIX} using {B_LAST_ABILITY}!"); +static const u8 sText_TargetStatWontGoHigher[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\nwon't go any higher!"); +static const u8 sText_PkmnMoveBouncedViaAbility[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE} was\nbounced back by {B_DEF_NAME_WITH_PREFIX2}'s\l{B_DEF_ABILITY}!"); +static const u8 sText_ImposterTransform[] = _("{B_ATK_NAME_WITH_PREFIX} transformed into\n{B_DEF_NAME_WITH_PREFIX2} using {B_LAST_ABILITY}!"); static const u8 sText_NotDoneYet[] = _("This move effect is not done yet!\p"); static const u8 sText_PkmnBlewAwayToxicSpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nToxic Spikes!"); static const u8 sText_PkmnBlewAwayStickyWeb[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nSticky Web!"); @@ -658,65 +661,65 @@ static const u8 sText_SpikesDisappearedFromTeam[] = _("The spikes disappeared fr static const u8 sText_ToxicSpikesDisappearedFromTeam[] = _("The poison spikes disappeared from\nthe ground around {B_ATK_TEAM2} team!"); static const u8 sText_StealthRockDisappearedFromTeam[] = _("The pointed stones disappeared\nfrom around {B_ATK_TEAM2} team!"); static const u8 sText_StickyWebDisappearedFromTeam[] = _("The sticky web has disappeared from\nthe ground around {B_ATK_TEAM2} team!"); -static const u8 sText_StickyWebUsed[] = _("A sticky web spreads out on the\nground around {B_DEF_TEAM2} team!"); +static const u8 sText_StickyWebUsed[] = _("A sticky web has been laid out\non the ground around {B_DEF_TEAM2} team!"); static const u8 sText_QuashSuccess[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nmove was postponed!"); static const u8 sText_IonDelugeOn[] = _("A deluge of ions showers\nthe battlefield!"); -static const u8 sText_TopsyTurvySwitchedStats[] = _("{B_DEF_NAME_WITH_PREFIX}'s stat changes were\nall reversed!"); -static const u8 sText_TerrainBecomesMisty[] = _("Mist swirled about\nthe battlefield!"); +static const u8 sText_TopsyTurvySwitchedStats[] = _("All stat changes on\n{B_DEF_NAME_WITH_PREFIX} were inverted!"); +static const u8 sText_TerrainBecomesMisty[] = _("Mist swirled around\nthe battlefield!"); static const u8 sText_TerrainBecomesGrassy[] = _("Grass grew to cover\nthe battlefield!"); -static const u8 sText_TerrainBecomesElectric[] = _("An electric current runs across\nthe battlefield!"); +static const u8 sText_TerrainBecomesElectric[] = _("An electric current ran across\nthe battlefield!"); static const u8 sText_TerrainBecomesPsychic[] = _("The battlefield got weird!"); static const u8 sText_TargetElectrified[] = _("{B_DEF_NAME_WITH_PREFIX}'s moves\nhave been electrified!"); -static const u8 sText_AssaultVestDoesntAllow[] = _("{B_LAST_ITEM}'s effects prevent\nstatus moves from being used!\p"); +static const u8 sText_AssaultVestDoesntAllow[] = _("The effects of the {B_LAST_ITEM}\nprevent status moves from being used!\p"); static const u8 sText_GravityPreventsUsage[] = _("{B_ATK_NAME_WITH_PREFIX} can't use {B_CURRENT_MOVE}\nbecause of gravity!\p"); static const u8 sText_HealBlockPreventsUsage[] = _("{B_ATK_NAME_WITH_PREFIX} was\nprevented from healing!\p"); -static const u8 sText_MegaEvoReacting[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ITEM} is\nreacting to {B_ATK_TRAINER_NAME}'s Mega Ring!"); -static const u8 sText_FerventWishReached[] = _("{B_ATK_TRAINER_NAME}'s fervent wish\nhas reached {B_ATK_NAME_WITH_PREFIX}!"); +static const u8 sText_MegaEvoReacting[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ITEM} is\nreacting to {B_ATK_TRAINER_NAME}'s Mega Ring!"); //actually displays the type of mega ring in inventory, but we didnt implement them :( +static const u8 sText_FerventWishReached[] = _("{B_ATK_TRAINER_NAME}'s fervent wish\nhas reached {B_ATK_NAME_WITH_PREFIX2}!"); static const u8 sText_MegaEvoEvolved[] = _("{B_ATK_NAME_WITH_PREFIX} has Mega Evolved into\nMega {B_BUFF1}!"); static const u8 sText_drastically[] = _("drastically "); static const u8 sText_severely[] = _("severely "); -static const u8 sText_Infestation[] = _("{B_DEF_NAME_WITH_PREFIX} has been afflicted\nwith an infestation by {B_ATK_NAME_WITH_PREFIX}!"); -static const u8 sText_NoEffectOnTarget[] = _("It had no effect\non {B_DEF_NAME_WITH_PREFIX}!"); -static const u8 sText_BurstingFlames[] = _("The bursting flames\nhit {B_SCR_ACTIVE_NAME_WITH_PREFIX}!"); -static const u8 sText_BestowItemGiving[] = _("{B_DEF_NAME_WITH_PREFIX} received {B_LAST_ITEM}\nfrom {B_ATK_NAME_WITH_PREFIX}!"); -static const u8 sText_ThirdTypeAdded[] = _("{B_BUFF1} type was added to\n{B_DEF_NAME_WITH_PREFIX}!"); +static const u8 sText_Infestation[] = _("{B_DEF_NAME_WITH_PREFIX} has been afflicted\nwith an infestation by {B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_NoEffectOnTarget[] = _("It won't have any effect\non {B_DEF_NAME_WITH_PREFIX2}!"); +static const u8 sText_BurstingFlames[] = _("The bursting flames\nhit {B_SCR_ACTIVE_NAME_WITH_PREFIX2}!"); +static const u8 sText_BestowItemGiving[] = _("{B_DEF_NAME_WITH_PREFIX} received {B_LAST_ITEM}\nfrom {B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_ThirdTypeAdded[] = _("{B_BUFF1} type was added to\n{B_DEF_NAME_WITH_PREFIX2}!"); static const u8 sText_FellForFeint[] = _("{B_DEF_NAME_WITH_PREFIX} fell for\nthe feint!"); static const u8 sText_PokemonCannotUseMove[] = _("{B_ATK_NAME_WITH_PREFIX} cannot\nuse {B_CURRENT_MOVE}!"); static const u8 sText_CoveredInPowder[] = _("{B_DEF_NAME_WITH_PREFIX} is covered in powder!"); static const u8 sText_PowderExplodes[] = _("When the flame touched the powder\non the Pokémon, it exploded!"); -static const u8 sText_BelchCantUse[] = _("Belch cannot be used!\p"); +static const u8 sText_BelchCantUse[] = _("{B_ATK_NAME_WITH_PREFIX} hasn't eaten\nany held Berries, so it can't possibly belch!\p"); static const u8 sText_SpectralThiefSteal[] = _("{B_ATK_NAME_WITH_PREFIX} stole the target's\nboosted stats!"); -static const u8 sText_GravityGrounding[] = _("{B_DEF_NAME_WITH_PREFIX} can't stay airborne\nbecause of gravity!"); +static const u8 sText_GravityGrounding[] = _("{B_DEF_NAME_WITH_PREFIX} fell from the sky\ndue to the gravity!"); static const u8 sText_MistyTerrainPreventsStatus[] = _("{B_DEF_NAME_WITH_PREFIX} surrounds itself\nwith a protective mist!"); static const u8 sText_GrassyTerrainHeals[] = _("{B_ATK_NAME_WITH_PREFIX} is healed\nby the grassy terrain!"); static const u8 sText_ElectricTerrainPreventsSleep[] = _("{B_DEF_NAME_WITH_PREFIX} surrounds itself\nwith electrified terrain!"); static const u8 sText_PsychicTerrainPreventsPriority[] = _("{B_DEF_NAME_WITH_PREFIX} surrounds itself\nwith psychic terrain!"); static const u8 sText_SafetyGogglesProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is not affected\nthanks to its {B_LAST_ITEM}!"); static const u8 sText_FlowerVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} surrounded itself\nwith a veil of petals!"); -static const u8 sText_SweetVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} surrounded itself\nwith a veil of sweetness!"); +static const u8 sText_SweetVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} can't fall asleep\ndue to a veil of sweetness!"); static const u8 sText_AromaVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is protected\nby an aromatic veil!"); static const u8 sText_CelebrateMessage[] = _("Congratulations, {B_PLAYER_NAME}!"); -static const u8 sText_UsedInstructedMove[] = _("{B_ATK_NAME_WITH_PREFIX} used the move\ninstructed by {B_BUFF1}!"); +static const u8 sText_UsedInstructedMove[] = _("{B_ATK_NAME_WITH_PREFIX} followed\n {B_BUFF1}'s instructions!"); static const u8 sText_LaserFocusMessage[] = _("{B_ATK_NAME_WITH_PREFIX}\nconcentrated intensely!"); -static const u8 sText_GemActivates[] = _("{B_LAST_ITEM} strengthened\n{B_ATK_NAME_WITH_PREFIX}'s power!"); -static const u8 sText_BerryDmgReducing[] = _("{B_LAST_ITEM} weakened the damage\nto {B_DEF_NAME_WITH_PREFIX}!"); +static const u8 sText_GemActivates[] = _("The {B_LAST_ITEM} strengthened\n{B_ATK_NAME_WITH_PREFIX2}'s power!"); +static const u8 sText_BerryDmgReducing[] = _("The {B_LAST_ITEM} weakened the damage\nto {B_DEF_NAME_WITH_PREFIX2}!"); static const u8 sText_TargetAteItem[] = _("{B_DEF_NAME_WITH_PREFIX} ate its {B_LAST_ITEM}!"); -static const u8 sText_AirBalloonFloat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} floats in the air\nwith its {B_LAST_ITEM}!"); -static const u8 sText_AirBalloonPop[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ITEM} popped!"); +static const u8 sText_AirBalloonFloat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} floats in the air\nwith its Air Balloon!"); +static const u8 sText_AirBalloonPop[] = _("{B_DEF_NAME_WITH_PREFIX}'s Air Balloon popped!"); static const u8 sText_IncinerateBurn[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nwas burnt up!"); -static const u8 sText_BugBite[] = _("{B_ATK_NAME_WITH_PREFIX} stole and ate\n{B_EFF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}!"); -static const u8 sText_IllusionWoreOff[] = _("{B_DEF_NAME_WITH_PREFIX}'s Illusion wore off!"); -static const u8 sText_AttackerCuredTargetStatus[] = _("{B_ATK_NAME_WITH_PREFIX} cured\n{B_DEF_NAME_WITH_PREFIX}'s problem!"); +static const u8 sText_BugBite[] = _("{B_ATK_NAME_WITH_PREFIX} stole and ate\nits target's {B_LAST_ITEM}!"); +static const u8 sText_IllusionWoreOff[] = _("{B_DEF_NAME_WITH_PREFIX}'s illusion wore off!"); +static const u8 sText_AttackerCuredTargetStatus[] = _("{B_ATK_NAME_WITH_PREFIX} cured\n{B_DEF_NAME_WITH_PREFIX2}'s problem!"); static const u8 sText_AttackerLostFireType[] = _("{B_ATK_NAME_WITH_PREFIX} burned itself out!"); -static const u8 sText_HealerCure[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ABILITY}\ncured {B_SCR_ACTIVE_NAME_WITH_PREFIX}'s problem!"); +static const u8 sText_HealerCure[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ABILITY}\ncured {B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s problem!"); static const u8 sText_ReceiverAbilityTakeOver[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nwas taken over!"); static const u8 sText_PkmnAbsorbingPower[] = _("{B_ATK_NAME_WITH_PREFIX} is absorbing power!"); static const u8 sText_NoOneWillBeAbleToRun[] = _("No one will be able to run away\nduring the next turn!"); -static const u8 sText_DestinyKnotActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} fell in love\nfrom the {B_LAST_ITEM}!"); +static const u8 sText_DestinyKnotActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} fell in love\nbecause of the {B_LAST_ITEM}!"); static const u8 sText_CloakedInAFreezingLight[] = _("{B_ATK_NAME_WITH_PREFIX} became cloaked\nin a freezing light!"); -static const u8 sText_ClearAmuletWontLowerStats[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ITEM} prevents\nits stats from being lowered!"); +static const u8 sText_ClearAmuletWontLowerStats[] = _("The effects of the {B_LAST_ITEM}\nheld by {B_DEF_NAME_WITH_PREFIX} prevents\lits stats from being lowered!"); static const u8 sText_AuraFlaredToLife[] = _("{B_DEF_NAME_WITH_PREFIX}'s aura flared to life!"); -static const u8 sText_AirLockActivates[] = _("The effects of weather\ndisappeared."); +static const u8 sText_AirLockActivates[] = _("The effects of the weather\ndisappeared."); static const u8 sText_PressureActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is exerting its\npressure!"); static const u8 sText_DarkAuraActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating\na dark aura!"); static const u8 sText_FairyAuraActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating\na fairy aura!"); @@ -726,131 +729,131 @@ static const u8 sText_ScreenCleanerActivates[] = _("All screens on the field wer static const u8 sText_FetchedPokeBall[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} found\na {B_LAST_ITEM}!"); static const u8 sText_BattlerAbilityRaisedStat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nraised its {B_BUFF1}!"); static const u8 sText_ASandstormKickedUp[] = _("A sandstorm kicked up!"); -static const u8 sText_PkmnsWillPerishIn3Turns[] = _("Both Pokémon will perish\nin three turns!"); -static const u8 sText_AbilityRaisedStatDrastically[] = _("{B_DEF_ABILITY} raised {B_DEF_NAME_WITH_PREFIX}'s\n{B_BUFF1} drastically!"); +static const u8 sText_PkmnsWillPerishIn3Turns[] = _("Both Pokémon will perish\nin three turns!"); //don't think this message is displayed anymore +static const u8 sText_AbilityRaisedStatDrastically[] = _("{B_DEF_ABILITY} raised {B_DEF_NAME_WITH_PREFIX2}'s\n{B_BUFF1} drastically!"); static const u8 sText_AsOneEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} has two Abilities!"); -static const u8 sText_CuriousMedicineEnters[] = _("{B_EFF_NAME_WITH_PREFIX}'s\nstat changes were reset!"); -static const u8 sText_CanActFaster[] = _("{B_ATK_NAME_WITH_PREFIX} can act faster,\nthanks to {B_BUFF1}!"); -static const u8 sText_MicleBerryActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted the accuracy of its\nnext move using {B_LAST_ITEM}!"); +static const u8 sText_CuriousMedicineEnters[] = _("{B_EFF_NAME_WITH_PREFIX}'s\nstat changes were removed!"); +static const u8 sText_CanActFaster[] = _("{B_ATK_NAME_WITH_PREFIX} can act faster\nthan normal, thanks to its {B_BUFF1}!"); +static const u8 sText_MicleBerryActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted the accuracy of\nits next move using {B_LAST_ITEM}!"); static const u8 sText_PkmnShookOffTheTaunt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} shook off\nthe taunt!"); static const u8 sText_PkmnGotOverItsInfatuation[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} got over\nits infatuation!"); -static const u8 sText_ZPowerSurrounds[] = _("{B_ATK_NAME_WITH_PREFIX} surrounds\nitself with its Z-Power!"); +static const u8 sText_ZPowerSurrounds[] = _("{B_ATK_NAME_WITH_PREFIX} surrounded\nitself with its Z-Power!"); static const u8 sText_ZPowerUnleashed[] = _("{B_ATK_NAME_WITH_PREFIX} unleashes\nits full-force Z-Move!"); -static const u8 sText_ZMoveResetsStats[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} returned its\ndecreased stats to normal using\lits Z-Power!"); -static const u8 sText_ZMoveAllStatsUp[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted all\nof its stats using its Z-Power!"); -static const u8 sText_ZMoveBoostCrit[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted its\ncritical-hit ratio using its Z-Power!"); -static const u8 sText_ZMoveRestoreHp[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored its\nHP using its Z-Power!"); +static const u8 sText_ZMoveResetsStats[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} returned\nits decreased stats to normal\lusing its Z-Power!"); +static const u8 sText_ZMoveAllStatsUp[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted\nits stats using its Z-Power!"); +static const u8 sText_ZMoveBoostCrit[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted\nits critical-hit ratio using its Z-Power!"); +static const u8 sText_ZMoveRestoreHp[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored\nits HP using its Z-Power!"); static const u8 sText_ZMoveStatUp[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted\nits stats using its Z-Power!"); -static const u8 sText_ZMoveHpSwitchInTrap[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s HP was restored by the Z-Power!"); +static const u8 sText_ZMoveHpSwitchInTrap[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s HP\nwas restored by the Z-Power!"); static const u8 sText_TerrainReturnedToNormal[] = _("The terrain returned to\nnormal!"); static const u8 sText_ItemCannotBeRemoved[] = _("{B_ATK_NAME_WITH_PREFIX}'s item cannot be removed!"); -static const u8 sText_StickyBarbTransfer[] = _("The {B_LAST_ITEM} attached itself to\n{B_ATK_NAME_WITH_PREFIX}!"); -static const u8 sText_PkmnBurnHealed[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nburn was healed."); -static const u8 sText_RedCardActivate[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} held up its {B_LAST_ITEM}\nagainst {B_ATK_NAME_WITH_PREFIX}!"); -static const u8 sText_EjectButtonActivate[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is switched\nout with the {B_LAST_ITEM}!"); +static const u8 sText_StickyBarbTransfer[] = _("The {B_LAST_ITEM} attached itself to\n{B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnBurnHealed[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nburn was cured!"); +static const u8 sText_RedCardActivate[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} held up its Red Card\nagainst {B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_EjectButtonActivate[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is switched\nout with the Eject Button!"); static const u8 sText_AttackerGotOverInfatuation[] =_("{B_ATK_NAME_WITH_PREFIX} got over\nits infatuation!"); -static const u8 sText_TormentedNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is\ntormented no more!"); +static const u8 sText_TormentedNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is\nno longer tormented!"); static const u8 sText_HealBlockedNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is cured of\nits heal block!"); static const u8 sText_AttackerBecameFullyCharged[] = _("{B_ATK_NAME_WITH_PREFIX} became fully charged\ndue to its bond with its trainer!\p"); -static const u8 sText_AttackerBecameAshSpecies[] = _("{B_ATK_NAME_WITH_PREFIX} became Ash-{B_BUFF1}!\p"); -static const u8 sText_ExtremelyHarshSunlight[] = _("The sunlight turned\nextremely harsh!"); -static const u8 sText_ExtremeSunlightFaded[] = _("The extreme sunlight faded.{PAUSE 64}"); -static const u8 sText_MoveEvaporatedInTheHarshSunlight[] = _("The Water-type attack evaporated\nin the harsh sunlight!"); +static const u8 sText_AttackerBecameAshSpecies[] = _("{B_ATK_NAME_WITH_PREFIX} became Ash-Greninja!\p"); +static const u8 sText_ExtremelyHarshSunlight[] = _("The sunlight turned extremely harsh!"); +static const u8 sText_ExtremeSunlightFaded[] = _("The extremely harsh sunlight faded!{PAUSE 64}"); +static const u8 sText_MoveEvaporatedInTheHarshSunlight[] = _("The Water-type attack evaporated\nin the extremely harsh sunlight!"); static const u8 sText_ExtremelyHarshSunlightWasNotLessened[] = _("The extremely harsh sunlight\nwas not lessened at all!"); static const u8 sText_HeavyRain[] = _("A heavy rain began to fall!"); static const u8 sText_HeavyRainLifted[] = _("The heavy rain has lifted!{PAUSE 64}"); static const u8 sText_MoveFizzledOutInTheHeavyRain[] = _("The Fire-type attack fizzled out\nin the heavy rain!"); static const u8 sText_NoReliefFromHeavyRain[] = _("There is no relief from\nthis heavy rain!"); -static const u8 sText_MysteriousAirCurrent[] = _("A mysterious air current is\nprotecting Flying-type Pokémon!"); +static const u8 sText_MysteriousAirCurrent[] = _("Mysterious strong winds are\nprotecting Flying-type Pokémon!"); static const u8 sText_StrongWindsDissipated[] = _("The mysterious strong winds\nhave dissipated!{PAUSE 64}"); -static const u8 sText_MysteriousAirCurrentBlowsOn[] = _("The mysterious air current\nblows on regardless!"); -static const u8 sText_AttackWeakenedByStrongWinds[] = _("The mysterious strong winds\nweakened the attack!"); -static const u8 sText_StuffCheeksCantSelect[] = _("Stuff Cheeks cannot be\nselected without a Berry!\p"); -static const u8 sText_PkmnRevertedToPrimal[] = _("{B_ATK_NAME_WITH_PREFIX}'s Primal Reversion!\nIt reverted to its primal form!"); -static const u8 sText_ButPokemonCantUseTheMove[] = _("But {B_ATK_NAME_WITH_PREFIX} can't\nuse the move!"); -static const u8 sText_ButHoopaCantUseIt[] = _("But Hoopa can't use it\nthe way it is now!"); -static const u8 sText_BrokeThroughProtection[] = _("It broke through\n{B_DEF_NAME_WITH_PREFIX}'s protection!"); -static const u8 sText_AbilityAllowsOnlyMove[] = _("{B_ATK_ABILITY} allows the\nuse of only {B_CURRENT_MOVE}!\p"); +static const u8 sText_MysteriousAirCurrentBlowsOn[] = _("The mysterious strong winds\nblow on regardless!"); +static const u8 sText_AttackWeakenedByStrongWinds[] = _("The mysterious strong winds\nweakened the attack!!"); +static const u8 sText_StuffCheeksCantSelect[] = _("It can't use the move\nbecause it doesn't have a Berry!\p"); +static const u8 sText_PkmnRevertedToPrimal[] = _("{B_ATK_NAME_WITH_PREFIX}’s Primal Reversion!\nIt reverted to its primal state!"); +static const u8 sText_ButPokemonCantUseTheMove[] = _("But {B_ATK_NAME_WITH_PREFIX2} can't\nuse the move!"); +static const u8 sText_ButHoopaCantUseIt[] = _("But {B_ATK_NAME_WITH_PREFIX2} can't use it\nthe way it is now!"); +static const u8 sText_BrokeThroughProtection[] = _("It broke through\n{B_DEF_NAME_WITH_PREFIX2}'s protection!"); +static const u8 sText_AbilityAllowsOnlyMove[] = _("{B_ATK_ABILITY} only allows\nthe use of {B_CURRENT_MOVE}!\p"); static const u8 sText_SwappedAbilities[] = _("{B_DEF_NAME_WITH_PREFIX} swapped Abilities\nwith its target!"); static const u8 sText_PastelVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is protected\nby a pastel veil!"); static const u8 sText_PastelVeilEnters[] = _("{B_DEF_NAME_WITH_PREFIX} was cured\nof its poisoning!"); static const u8 sText_BattlerTypeChangedTo[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s type\nchanged to {B_BUFF1}!"); static const u8 sText_BothCanNoLongerEscape[] = _("Neither Pokémon can run away!"); -static const u8 sText_CantEscapeDueToUsedMove[] = _("{B_ATK_NAME_WITH_PREFIX} can no longer escape\nbecause it used {B_CURRENT_MOVE}!"); +static const u8 sText_CantEscapeDueToUsedMove[] = _("{B_ATK_NAME_WITH_PREFIX} can no longer escape\nbecause it used No Retreat!"); static const u8 sText_PkmnBecameWeakerToFire[] = _("{B_DEF_NAME_WITH_PREFIX} became\nweaker to fire!"); static const u8 sText_PkmnAboutToBeAttackedByItsItem[] = _("{B_DEF_NAME_WITH_PREFIX} is about\nto be attacked by its {B_BUFF1}!"); -static const u8 sText_CantEscapeBecauseOfCurrentMove[] = _("{B_DEF_NAME_WITH_PREFIX} can no longer escape\nbecause of {B_CURRENT_MOVE}!"); -static const u8 sText_NeutralizingGasEnters[] = _("Neutralizing Gas filled the area!"); -static const u8 sText_NeutralizingGasOver[] = _("The effects of Neutralizing\nGas wore off!"); -static const u8 sText_PkmnTookTargetHigh[] = _("{B_ATK_NAME_WITH_PREFIX} took {B_DEF_NAME_WITH_PREFIX}\ninto the air!"); -static const u8 sText_TargetTooHeavy[] = _("But the target\nwas too heavy!"); -static const u8 sText_MeteorBeamCharging[] = _("{B_ATK_NAME_WITH_PREFIX} is overflowing\nwith space energy!"); +static const u8 sText_CantEscapeBecauseOfCurrentMove[] = _("{B_DEF_NAME_WITH_PREFIX} can no longer escape\nbecause of Octolock!"); +static const u8 sText_NeutralizingGasEnters[] = _("Neutralizing gas filled the area!"); +static const u8 sText_NeutralizingGasOver[] = _("The effects of the\nneutralizing gas wore off!"); +static const u8 sText_PkmnTookTargetHigh[] = _("{B_ATK_NAME_WITH_PREFIX} took {B_DEF_NAME_WITH_PREFIX2}\ninto the sky!"); +static const u8 sText_TargetTooHeavy[] = _("{B_DEF_NAME_WITH_PREFIX} is too heavy to be lifted!"); +static const u8 sText_MeteorBeamCharging[] = _("{B_ATK_NAME_WITH_PREFIX} is overflowing\nwith space power!"); static const u8 sText_HeatingUpBeak[] = _("{B_ATK_NAME_WITH_PREFIX} started\nheating up its beak!"); -static const u8 sText_CourtChange[] = _("{B_ATK_NAME_WITH_PREFIX} swapped the battle\neffects affecting each side!"); -static const u8 sText_AttackerExpelledThePoison[] = _("{B_ATK_NAME_WITH_PREFIX} managed to\nexpel the poison!"); -static const u8 sText_AttackerShookItselfAwake[] = _("{B_ATK_NAME_WITH_PREFIX} shook itself awake!"); -static const u8 sText_AttackerBrokeThroughParalysis[] = _("{B_ATK_NAME_WITH_PREFIX} gathered all its energy\nto overcome its paralysis!"); -static const u8 sText_AttackerHealedItsBurn[] = _("{B_ATK_NAME_WITH_PREFIX} healed its burn with\nits sheer determination!"); -static const u8 sText_AttackerHealedItsFrostbite[] = _("{B_ATK_NAME_WITH_PREFIX} healed its frostbite with\nits sheer determination!"); -static const u8 sText_AttackerMeltedTheIce[] = _("{B_ATK_NAME_WITH_PREFIX} melted the ice with\nits fiery determination!"); -static const u8 sText_TargetToughedItOut[] = _("{B_DEF_NAME_WITH_PREFIX} toughed it out\nto show you its best side!"); -static const u8 sText_AttackerLostElectricType[] = _("{B_ATK_NAME_WITH_PREFIX} used up all\nof its electricity!"); +static const u8 sText_CourtChange[] = _("{B_ATK_NAME_WITH_PREFIX} swapped the battle effects\naffecting each side of the field!"); +static const u8 sText_AttackerExpelledThePoison[] = _("{B_ATK_NAME_WITH_PREFIX} managed to\nexpel the poison so you\lwouldn't worry!"); +static const u8 sText_AttackerShookItselfAwake[] = _("{B_ATK_NAME_WITH_PREFIX} shook itself awake\nso you wouldn't worry!"); +static const u8 sText_AttackerBrokeThroughParalysis[] = _("{B_ATK_NAME_WITH_PREFIX} gathered all its energy\nto break through its paralysis\lso you wouldn't worry!"); +static const u8 sText_AttackerHealedItsBurn[] = _("{B_ATK_NAME_WITH_PREFIX} cured its burn\nthrough sheer determination so you\lwouldn't worry!"); +static const u8 sText_AttackerHealedItsFrostbite[] = _("{B_ATK_NAME_WITH_PREFIX} cured its frostbite\nthrough sheer determination so you\lwouldn't worry!"); +static const u8 sText_AttackerMeltedTheIce[] = _("{B_ATK_NAME_WITH_PREFIX} melted the ice\nwith its fiery determination so you\lwouldn't worry!"); +static const u8 sText_TargetToughedItOut[] = _("{B_DEF_NAME_WITH_PREFIX} toughed it out\nso you wouldn't feel sad!"); +static const u8 sText_AttackerLostElectricType[] = _("{B_ATK_NAME_WITH_PREFIX} used up\nall its electricity!"); static const u8 sText_AttackerSwitchedStatWithTarget[] = _("{B_ATK_NAME_WITH_PREFIX} switched {B_BUFF1}\nwith its target!"); -static const u8 sText_BeingHitChargedPkmnWithPower[] = _("Being hit by {B_CURRENT_MOVE}\ncharged {B_DEF_NAME_WITH_PREFIX} with power!"); -static const u8 sText_SunlightActivatedAbility[] = _("The harsh sunlight activated\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ABILITY}!"); +static const u8 sText_BeingHitChargedPkmnWithPower[] = _("Being hit by {B_CURRENT_MOVE}\ncharged {B_DEF_NAME_WITH_PREFIX2} with power!"); +static const u8 sText_SunlightActivatedAbility[] = _("The harsh sunlight activated\n{B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s Protosynthesis!"); static const u8 sText_StatWasHeightened[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1} was heightened!"); -static const u8 sText_ElectricTerrainActivatedAbility[] = _("The Electric Terrain activated\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ABILITY}!"); +static const u8 sText_ElectricTerrainActivatedAbility[] = _("The Electric Terrain activated\n{B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s Quark Drive!"); static const u8 sText_AbilityWeakenedSurroundingMonsStat[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nweakened the {B_BUFF1} of\lall surrounding Pokémon!\p"); static const u8 sText_AttackerGainedStrengthFromTheFallen[] = _("{B_ATK_NAME_WITH_PREFIX} gained strength\nfrom the fallen!"); static const u8 sText_PrepareShellTrap[] = _("{B_ATK_NAME_WITH_PREFIX} set a shell trap!"); static const u8 sText_ShellTrapDidntWork[] = _("{B_ATK_NAME_WITH_PREFIX}'s shell trap didn't work!"); -static const u8 sText_SharpSteelFloats[] = _("Sharp-pointed steel floats\naround {B_DEF_TEAM2} team!"); -static const u8 sText_SharpSteelDmg[] = _("Sharp steel bit into {B_DEF_NAME_WITH_PREFIX}!"); +static const u8 sText_SharpSteelFloats[] = _("Sharp-pointed pieces of steel started\nfloating around your {B_DEF_TEAM2} Pokémon!"); +static const u8 sText_SharpSteelDmg[] = _("The sharp steel bit into\n{B_DEF_NAME_WITH_PREFIX2}!"); static const u8 sText_PkmnBlewAwaySharpSteel[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nsharp steel!"); -static const u8 sText_SharpSteelDisappearedFromTeam[] = _("The sharp steel disappeared from\nthe ground around {B_ATK_TEAM2} team!"); -static const u8 sText_TeamTrappedWithVines[] = _("{B_DEF_TEAM1} team got trapped\nwith vines!"); +static const u8 sText_SharpSteelDisappearedFromTeam[] = _("The pieces of steel surrounding\n{B_ATK_TEAM2} Pokémon disappeared!"); +static const u8 sText_TeamTrappedWithVines[] = _("{B_DEF_TEAM1} Pokémon got trapped\nwith vines!"); static const u8 sText_PkmnHurtByVines[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt by\nG-Max Vine Lash's ferocious beating!"); -static const u8 sText_TeamCaughtInVortex[] = _("{B_DEF_TEAM1} team got caught\nin a vortex of water!"); +static const u8 sText_TeamCaughtInVortex[] = _("{B_DEF_TEAM1} Pokémon got caught\nin a vortex of water!"); static const u8 sText_PkmnHurtByVortex[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt by\nG-Max Cannonade's vortex!"); -static const u8 sText_TeamSurroundedByFire[] = _("{B_DEF_TEAM1} team was surrounded\nby flames!"); +static const u8 sText_TeamSurroundedByFire[] = _("{B_DEF_TEAM1} Pokémon were\nsurrounded by fire!"); static const u8 sText_PkmnBurningUp[] = _("{B_ATK_NAME_WITH_PREFIX} is burning up\nwithin G-Max Wildfire's flames!"); -static const u8 sText_TeamSurroundedByRocks[] = _("{B_DEF_TEAM1} team was surrounded\nby rocks!"); +static const u8 sText_TeamSurroundedByRocks[] = _("{B_DEF_TEAM1} Pokémon became\nsurrounded by rocks!"); static const u8 sText_PkmnHurtByRocksThrown[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt by\nrocks thrown out by G-Max Volcalith!"); static const u8 sText_CouldntFullyProtect[] = _("{B_DEF_NAME_WITH_PREFIX} couldn't fully protect\nitself and got hurt!"); static const u8 sText_StockpiledEffectWoreOff[] = _("{B_ATK_NAME_WITH_PREFIX}'s stockpiled\neffect wore off!"); static const u8 sText_MoveBlockedByDynamax[] = _("The move was blocked by\nthe power of Dynamax!"); -static const u8 sText_PkmnRevivedReadyToFight[] = _("{B_BUFF1} was revived and\nis ready to fight again!"); -static const u8 sText_ItemRestoredSpeciesHealth[] = _("{B_BUFF1} had its\nHP restored!"); +static const u8 sText_PkmnRevivedReadyToFight[] = _("{B_BUFF1} was revived\nand is ready to fight again!"); +static const u8 sText_ItemRestoredSpeciesHealth[] = _("{B_BUFF1} had its\nHP restored."); static const u8 sText_ItemCuredSpeciesStatus[] = _("{B_BUFF1} had\nits status healed!"); static const u8 sText_ItemRestoredSpeciesPP[] = _("{B_BUFF1} had its\nPP restored!"); -static const u8 sText_AtkTrappedDef[] = _("{B_ATK_NAME_WITH_PREFIX} trapped\nthe {B_DEF_NAME_WITH_PREFIX}!"); -static const u8 sText_MirrorHerbCopied[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used its {B_LAST_ITEM}\nto mirror its opponent's stat changes!"); -static const u8 sText_PkmnItemMelted[] = _("{B_ATK_NAME_WITH_PREFIX} corroded\n{B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}!"); -static const u8 sText_UltraBurstReacting[] = _("Bright light is about to\nburst out of {B_ATK_NAME_WITH_PREFIX}!"); +static const u8 sText_AtkTrappedDef[] = _("{B_ATK_NAME_WITH_PREFIX} trapped\n{B_DEF_NAME_WITH_PREFIX2}!"); +static const u8 sText_MirrorHerbCopied[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used its Mirror Herb\nto mirror its opponent's stat changes!"); +static const u8 sText_PkmnItemMelted[] = _("{B_ATK_NAME_WITH_PREFIX} corroded\n{B_DEF_NAME_WITH_PREFIX2}'s {B_LAST_ITEM}!"); +static const u8 sText_UltraBurstReacting[] = _("Bright light is about to\nburst out of {B_ATK_NAME_WITH_PREFIX2}!"); static const u8 sText_UltraBurstCompleted[] = _("{B_ATK_NAME_WITH_PREFIX} regained its\ntrue power through Ultra Burst!"); -static const u8 sText_TeamGainedEXP[] = _("The rest of your team gained EXP.\nPoints thanks to the {B_LAST_ITEM}!\p"); +static const u8 sText_TeamGainedEXP[] = _("The rest of your team gained Exp.\nPoints thanks to the Exp. Share!\p"); static const u8 sText_CurrentMoveCantSelect[] = _("{B_BUFF1} cannot be used!\p"); static const u8 sText_TargetIsBeingSaltCured[] = _("{B_DEF_NAME_WITH_PREFIX} is being salt cured!"); static const u8 sText_TargetIsHurtBySaltCure[] = _("{B_DEF_NAME_WITH_PREFIX} is hurt by {B_BUFF1}!"); static const u8 sText_OpportunistCopied[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} copied its\nopponent's stat changes!"); -static const u8 sText_TargetCoveredInStickyCandySyrup[] = _("{B_DEF_NAME_WITH_PREFIX} got covered\nin sticky syrup!"); -static const u8 sText_PkmnTellChillingReceptionJoke[] = _("{B_ATK_NAME_WITH_PREFIX} is preparing to tell a\nchillingly bad joke!"); -static const u8 sText_ZeroToHeroTransformation[] = _("{B_ATK_NAME_WITH_PREFIX} underwent a heroic\ntransformation!"); -static const u8 sText_TheTwoMovesBecomeOne[] = _("The two moves become one!\nIt's a combined move!{PAUSE 16}"); +static const u8 sText_TargetCoveredInStickyCandySyrup[] = _("{B_DEF_NAME_WITH_PREFIX} got covered\nin sticky candy syrup!"); +static const u8 sText_PkmnTellChillingReceptionJoke[] = _("{B_ATK_NAME_WITH_PREFIX} is preparing\nto tell a chillingly bad joke!"); +static const u8 sText_ZeroToHeroTransformation[] = _("{B_ATK_NAME_WITH_PREFIX} underwent\na heroic transformation!"); +static const u8 sText_TheTwoMovesBecomeOne[] = _("The two moves have become one!\nIt's a combined move!{PAUSE 16}"); static const u8 sText_ARainbowAppearedOnSide[] = _("A rainbow appeared in the sky\non {B_ATK_TEAM2} team's side!"); -static const u8 sText_TheRainbowDisappeared[] = _("The rainbow on {B_ATK_TEAM2}\nside disappeared!"); +static const u8 sText_TheRainbowDisappeared[] = _("The rainbow on {B_ATK_TEAM2} team's\nside disappeared!"); static const u8 sText_WaitingForPartnersMove[] = _("{B_ATK_NAME_WITH_PREFIX} is waiting\nfor {B_ATK_PARTNER_NAME}'s move…{PAUSE 16}"); static const u8 sText_SeaOfFireEnvelopedSide[] = _("A sea of fire enveloped\n{B_DEF_TEAM2} team!"); -static const u8 sText_HurtByTheSeaOfFire[] = _("{B_ATK_TEAM1} {B_ATK_NAME_WITH_PREFIX} was hurt\nby the sea of fire!"); +static const u8 sText_HurtByTheSeaOfFire[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby the sea of fire!"); static const u8 sText_TheSeaOfFireDisappeared[] = _("The sea of fire around {B_ATK_TEAM2}\nteam disappeared!"); static const u8 sText_SwampEnvelopedSide[] = _("A swamp enveloped\n{B_DEF_TEAM2} team!"); static const u8 sText_TheSwampDisappeared[] = _("The swamp around {B_ATK_TEAM2}\nteam disappeared!"); -static const u8 sText_HospitalityRestoration[] = _("{B_ATK_PARTNER_NAME} drank down all the\nmatcha that {B_ATK_NAME_WITH_PREFIX} made!"); +static const u8 sText_HospitalityRestoration[] = _("{B_ATK_PARTNER_NAME} drank down all the\nmatcha that {B_ATK_NAME_WITH_PREFIX2} made!"); static const u8 sText_ElectroShotCharging[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed\nelectricity!"); static const u8 sText_ItemWasUsedUp[] = _("The {B_LAST_ITEM}\nwas used up..."); static const u8 sText_AttackerLostItsType[] = _("{B_ATK_NAME_WITH_PREFIX} lost\nits {B_BUFF1} type!"); static const u8 sText_ShedItsTail[] = _("{B_ATK_NAME_WITH_PREFIX} shed its tail\nto create a decoy!"); -static const u8 sText_SupersweetAromaWafts[] = _("A supersweet aroma is wafting from\nthe syrup covering {B_ATK_NAME_WITH_PREFIX}!"); +static const u8 sText_SupersweetAromaWafts[] = _("A supersweet aroma is wafting from\nthe syrup covering {B_ATK_NAME_WITH_PREFIX2}!"); static const u8 sText_TidyingUpComplete[] = _("Tidying up complete!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = @@ -1586,7 +1589,7 @@ const u16 gMentalHerbCureStringIds[] = [B_MSG_MENTALHERBCURE_DISABLE] = STRINGID_PKMNMOVEDISABLEDNOMORE, }; -const u16 gStartingStatusStringIds[B_MSG_STARTING_STATUS_COUNT] = +const u16 gStartingStatusStringIds[B_MSG_STARTING_STATUS_COUNT] = { [B_MSG_TERRAIN_SET_MISTY] = STRINGID_TERRAINBECOMESMISTY, [B_MSG_TERRAIN_SET_ELECTRIC] = STRINGID_TERRAINBECOMESELECTRIC, @@ -2173,7 +2176,7 @@ static const u8 sText_TwoTrainersSentPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_ static const u8 sText_Trainer2SentOutPkmn[] = _("{B_TRAINER2_CLASS} {B_TRAINER2_NAME} sent\nout {B_BUFF1}!"); static const u8 sText_TwoTrainersWantToBattle[] = _("You are challenged by\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME} and\l{B_TRAINER2_CLASS} {B_TRAINER2_NAME}!\p"); static const u8 sText_InGamePartnerSentOutZGoN[] = _("{B_PARTNER_CLASS} {B_PARTNER_NAME} sent\nout {B_PLAYER_MON2_NAME}!\lGo, {B_PLAYER_MON1_NAME}!"); -static const u8 sText_TwoInGameTrainersDefeated[] = _("Player beat\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\land {B_TRAINER2_CLASS} {B_TRAINER2_NAME}!\p"); +static const u8 sText_TwoInGameTrainersDefeated[] = _("You defeated\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\land {B_TRAINER2_CLASS} {B_TRAINER2_NAME}!\p"); static const u8 sText_Trainer2LoseText[] = _("{B_TRAINER2_LOSE_TEXT}"); static const u8 sText_PkmnIncapableOfPower[] = _("{B_ATK_NAME_WITH_PREFIX} appears incapable\nof using its power!"); static const u8 sText_GlintAppearsInEye[] = _("A glint appears in\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s eyes!"); @@ -2220,11 +2223,11 @@ static const u8 sText_ForfeitedMatch[] = _("The match was forfeited."); static const u8 sText_Trainer1WinText[] = _("{B_TRAINER1_WIN_TEXT}"); static const u8 sText_Trainer2WinText[] = _("{B_TRAINER2_WIN_TEXT}"); static const u8 sText_Trainer1Fled[] = _( "{PLAY_SE SE_FLEE}{B_TRAINER1_CLASS} {B_TRAINER1_NAME} fled!"); -static const u8 sText_PlayerLostAgainstTrainer1[] = _("Player lost against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!"); -static const u8 sText_PlayerBattledToDrawTrainer1[] = _("Player battled to a draw against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!"); +static const u8 sText_PlayerLostAgainstTrainer1[] = _("You lost to\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!"); +static const u8 sText_PlayerBattledToDrawTrainer1[] = _("You battled to a draw against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!"); const u8 gText_RecordBattleToPass[] = _("Would you like to record your battle\non your Frontier Pass?"); const u8 gText_BattleRecordedOnPass[] = _("{B_PLAYER_NAME}'s battle result was recorded\non the Frontier Pass."); -static const u8 sText_LinkTrainerWantsToBattlePause[] = _("You are challenged by\n{B_LINK_OPPONENT1_NAME}\p"); +static const u8 sText_LinkTrainerWantsToBattlePause[] = _("You are challenged by\n{B_LINK_OPPONENT1_NAME}!\p"); static const u8 sText_TwoLinkTrainersWantToBattlePause[] = _("You are challenged by\n{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}!\p"); static const u8 sText_Your1[] = _("Your"); static const u8 sText_Opposing1[] = _("The opposing"); @@ -2884,9 +2887,9 @@ void BufferStringBattle(u16 stringID, u32 battler) if (GetBattlerSide(battler) == B_SIDE_PLAYER) { if (*(&gBattleStruct->hpScale) == 0) - stringPtr = sText_PkmnComeBack; - else if (*(&gBattleStruct->hpScale) == 1 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) stringPtr = sText_PkmnThatsEnough; + else if (*(&gBattleStruct->hpScale) == 1 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + stringPtr = sText_PkmnComeBack; else if (*(&gBattleStruct->hpScale) == 2) stringPtr = sText_PkmnOkComeBack; else @@ -2913,9 +2916,9 @@ void BufferStringBattle(u16 stringID, u32 battler) if (*(&gBattleStruct->hpScale) == 0 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) stringPtr = sText_GoPkmn2; else if (*(&gBattleStruct->hpScale) == 1) - stringPtr = sText_GoForItPkmn; + stringPtr = sText_DoItPkmn; else if (*(&gBattleStruct->hpScale) == 2) - stringPtr = sText_JustALittleMorePkmn; + stringPtr = sText_GoForItPkmn; else stringPtr = sText_YourFoesWeakGetEmPkmn; } @@ -3104,8 +3107,8 @@ static void GetBattlerNick(u32 battler, u8 *dst) StringGet_Nickname(dst); } -#define HANDLE_NICKNAME_STRING_CASE(battler) \ - if (GetBattlerSide(battler) != B_SIDE_PLAYER) \ +#define HANDLE_NICKNAME_STRING_CASE(battler) \ + if (GetBattlerSide(battler) != B_SIDE_PLAYER) \ { \ if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) \ toCpy = sText_FoePkmnPrefix; \ @@ -3118,7 +3121,24 @@ static void GetBattlerNick(u32 battler, u8 *dst) toCpy++; \ } \ } \ - GetBattlerNick(battler, text); \ + GetBattlerNick(battler, text); \ + toCpy = text; + +#define HANDLE_NICKNAME_STRING_LOWERCASE(battler) \ + if (GetBattlerSide(battler) != B_SIDE_PLAYER) \ + { \ + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) \ + toCpy = sText_FoePkmnPrefixLower; \ + else \ + toCpy = sText_WildPkmnPrefixLower; \ + while (*toCpy != EOS) \ + { \ + dst[dstID] = *toCpy; \ + dstID++; \ + toCpy++; \ + } \ + } \ + GetBattlerNick(battler, text); \ toCpy = text; static const u8 *BattleStringGetOpponentNameByTrainerId(u16 trainerId, u8 *text, u8 multiplayerId, u8 battler) @@ -3661,6 +3681,18 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) else toCpy = sText_Opposing2; break; + case B_TXT_ATK_NAME_WITH_PREFIX2: + HANDLE_NICKNAME_STRING_LOWERCASE(gBattlerAttacker) + break; + case B_TXT_DEF_NAME_WITH_PREFIX2: + HANDLE_NICKNAME_STRING_LOWERCASE(gBattlerTarget) + break; + case B_TXT_EFF_NAME_WITH_PREFIX2: + HANDLE_NICKNAME_STRING_LOWERCASE(gEffectBattler) + break; + case B_TXT_SCR_ACTIVE_NAME_WITH_PREFIX2: + HANDLE_NICKNAME_STRING_LOWERCASE(gBattleScripting.battler) + break; } if (toCpy != NULL) From dbaf1b4b5f0de7cf465144f7e30925b365bb7ed4 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Tue, 27 Feb 2024 11:09:32 -0600 Subject: [PATCH 23/68] Fix a lot of the tests --- include/test/battle.h | 14 +- test/battle/ability/bad_dreams.c | 12 +- test/battle/ability/battle_bond.c | 10 +- test/battle/ability/clear_body.c | 2 +- test/battle/ability/contrary.c | 40 ++-- test/battle/ability/cotton_down.c | 2 +- test/battle/ability/cute_charm.c | 4 +- test/battle/ability/dauntless_shield.c | 8 +- test/battle/ability/defiant.c | 18 +- test/battle/ability/desolate_land.c | 8 +- test/battle/ability/download.c | 4 +- test/battle/ability/embody_aspect.c | 10 +- test/battle/ability/flame_body.c | 4 +- test/battle/ability/forecast.c | 4 +- test/battle/ability/frisk.c | 8 +- test/battle/ability/full_metal_body.c | 2 +- test/battle/ability/gale_wings.c | 8 +- test/battle/ability/hunger_switch.c | 2 +- test/battle/ability/hyper_cutter.c | 20 +- test/battle/ability/immunity.c | 2 +- test/battle/ability/innards_out.c | 8 +- test/battle/ability/inner_focus.c | 6 +- test/battle/ability/intimidate.c | 14 +- test/battle/ability/intrepid_sword.c | 12 +- test/battle/ability/keen_eye.c | 32 +-- test/battle/ability/magic_bounce.c | 2 +- test/battle/ability/minds_eye.c | 2 +- test/battle/ability/mirror_armor.c | 38 ++-- test/battle/ability/opportunist.c | 4 +- test/battle/ability/own_tempo.c | 14 +- test/battle/ability/pastel_veil.c | 10 +- test/battle/ability/prankster.c | 20 +- test/battle/ability/primordial_sea.c | 8 +- test/battle/ability/protean.c | 6 +- test/battle/ability/quick_draw.c | 4 +- test/battle/ability/rattled.c | 14 +- test/battle/ability/sap_sipper.c | 2 +- test/battle/ability/schooling.c | 6 +- test/battle/ability/scrappy.c | 4 +- test/battle/ability/seed_sower.c | 2 +- test/battle/ability/shield_dust.c | 18 +- test/battle/ability/speed_boost.c | 4 +- test/battle/ability/stamina.c | 4 +- test/battle/ability/static.c | 4 +- test/battle/ability/stench.c | 6 +- test/battle/ability/sturdy.c | 2 +- test/battle/ability/tangling_hair.c | 10 +- test/battle/ability/white_smoke.c | 2 +- test/battle/ability/zen_mode.c | 6 +- test/battle/ability/zero_to_hero.c | 10 +- test/battle/ai.c | 6 +- test/battle/ai_check_viability.c | 2 +- test/battle/ai_trytofaint.c | 2 +- test/battle/exp.c | 10 +- test/battle/form_change/battle_switch.c | 2 +- test/battle/form_change/faint.c | 2 +- test/battle/form_change/mega_evolution.c | 16 +- test/battle/form_change/primal_reversion.c | 14 +- test/battle/form_change/ultra_burst.c | 10 +- test/battle/hold_effect/air_balloon.c | 12 +- test/battle/hold_effect/clear_amulet.c | 6 +- test/battle/hold_effect/cure_status.c | 6 +- test/battle/hold_effect/eject_button.c | 26 +-- test/battle/hold_effect/metronome.c | 2 +- test/battle/hold_effect/quick_claw.c | 2 +- test/battle/hold_effect/red_card.c | 18 +- test/battle/hold_effect/safety_goggles.c | 6 +- test/battle/hold_effect/white_herb.c | 8 +- test/battle/item_effect/cure_status.c | 2 +- test/battle/item_effect/escape.c | 2 +- .../battle/item_effect/heal_and_cure_status.c | 2 +- test/battle/item_effect/increase_stat.c | 18 +- test/battle/item_effect/set_mist.c | 2 +- test/battle/move_effect/accuracy_down.c | 2 +- test/battle/move_effect/after_you.c | 2 +- test/battle/move_effect/ally_switch.c | 8 +- test/battle/move_effect/attack_down.c | 2 +- test/battle/move_effect/axe_kick.c | 6 +- test/battle/move_effect/beak_blast.c | 16 +- test/battle/move_effect/bug_bite.c | 2 +- test/battle/move_effect/confuse.c | 8 +- test/battle/move_effect/confusion_hit.c | 6 +- test/battle/move_effect/corrosive_gas.c | 4 +- test/battle/move_effect/court_change.c | 48 ++-- test/battle/move_effect/defense_down.c | 2 +- test/battle/move_effect/defog.c | 36 +-- test/battle/move_effect/dream_eater.c | 2 +- test/battle/move_effect/embargo.c | 58 ++--- test/battle/move_effect/encore.c | 2 +- test/battle/move_effect/explosion.c | 6 +- test/battle/move_effect/flinch_hit.c | 8 +- test/battle/move_effect/flinch_status.c | 2 +- test/battle/move_effect/fling.c | 48 ++-- test/battle/move_effect/focus_punch.c | 8 +- test/battle/move_effect/hit_escape.c | 2 +- .../move_effect/hit_set_entry_hazardss.c | 4 +- test/battle/move_effect/hit_switch_target.c | 4 +- test/battle/move_effect/ion_deluge.c | 12 +- test/battle/move_effect/knock_off.c | 2 +- test/battle/move_effect/make_it_rain.c | 8 +- test/battle/move_effect/mind_blown.c | 6 +- test/battle/move_effect/mirror_move.c | 8 +- test/battle/move_effect/octolock.c | 58 ++--- test/battle/move_effect/pay_day.c | 4 +- test/battle/move_effect/plasma_fists.c | 10 +- test/battle/move_effect/pledge.c | 4 +- test/battle/move_effect/protect.c | 62 ++--- test/battle/move_effect/psychic_noise.c | 12 +- test/battle/move_effect/pursuit.c | 2 +- test/battle/move_effect/rage_fist.c | 2 +- test/battle/move_effect/rapid_spin.c | 2 +- test/battle/move_effect/recoil_if_miss.c | 2 +- test/battle/move_effect/reflect_type.c | 6 +- test/battle/move_effect/relic_song.c | 4 +- test/battle/move_effect/revival_blessing.c | 10 +- test/battle/move_effect/roar.c | 4 +- test/battle/move_effect/roost.c | 32 +-- test/battle/move_effect/salt_cure.c | 14 +- .../move_effect/semi_invulnerable_moves.c | 4 +- test/battle/move_effect/shell_trap.c | 12 +- test/battle/move_effect/sleep.c | 6 +- test/battle/move_effect/special_attack_down.c | 2 +- test/battle/move_effect/spikes.c | 8 +- test/battle/move_effect/sticky_web.c | 22 +- test/battle/move_effect/strength_sap.c | 24 +- test/battle/move_effect/syrup_bomb.c | 58 ++--- test/battle/move_effect/tailwind.c | 14 +- test/battle/move_effect/teatime.c | 12 +- test/battle/move_effect/telekinesis.c | 10 +- test/battle/move_effect/throat_chop.c | 4 +- test/battle/move_effect/tidy_up.c | 6 +- test/battle/move_effect/torment.c | 2 +- test/battle/move_effect/toxic_spikes.c | 2 +- test/battle/move_effect/triple_arrows.c | 10 +- test/battle/move_effect/upper_hand.c | 4 +- test/battle/move_effect/uproar.c | 4 +- test/battle/status1/freeze.c | 2 +- test/battle/status1/frostbite.c | 6 +- test/battle/status1/paralysis.c | 10 +- test/battle/terrain/electric.c | 14 +- test/battle/terrain/grassy.c | 10 +- test/battle/terrain/misty.c | 12 +- test/battle/terrain/psychic.c | 12 +- test/battle/weather/hail.c | 4 +- test/battle/weather/sandstorm.c | 8 +- test/dynamax.c | 212 +++++++++--------- 146 files changed, 838 insertions(+), 838 deletions(-) diff --git a/include/test/battle.h b/include/test/battle.h index b44186ed3d0c..e6bb6e391347 100644 --- a/include/test/battle.h +++ b/include/test/battle.h @@ -41,7 +41,7 @@ * TURN { MOVE(player, MOVE_STUN_SPORE); } // 3. * } SCENE { * ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); - * MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); // 4 + * MESSAGE("The opposing Wobbuffet is paralyzed, so it may be unable to move!"); // 4 * STATUS_ICON(opponent, paralysis: TRUE); // 4. * } * } @@ -256,7 +256,7 @@ * } WHEN { * TURN { MOVE(player, MOVE_CELEBRATE); } * } SCENE { - * MESSAGE("Wobbuffet is paralyzed! It can't move!"); + * MESSAGE("Wobbuffet is paralyzed, so it may be unable to move!"); * } * } * All BattleRandom calls involving tag will return the same number, so @@ -413,7 +413,7 @@ * Spaces in pattern match newlines (\n, \l, and \p) in the message. * Often used to check that a battler took its turn but it failed, e.g.: * MESSAGE("Wobbuffet used Dream Eater!"); - * MESSAGE("Foe Wobbuffet wasn't affected!"); + * MESSAGE("The opposing Wobbuffet wasn't affected!"); * * STATUS_ICON(battler, status1 | none: | sleep: | poison: | burn: | freeze: | paralysis:, badPoison:) * Causes the test to fail if the battler's status is not changed to the @@ -432,7 +432,7 @@ * following command succeeds. * // Our Wobbuffet does not Celebrate before the foe's. * NOT MESSAGE("Wobbuffet used Celebrate!"); - * MESSAGE("Foe Wobbuffet used Celebrate!"); + * MESSAGE("The opposing Wobbuffet used Celebrate!"); * WARNING: NOT is an alias of NONE_OF, so it behaves surprisingly when * applied to multiple commands wrapped in braces. * @@ -440,7 +440,7 @@ * Causes the test to fail unless one of the SCENE commands succeeds. * ONE_OF { * MESSAGE("Wobbuffet used Celebrate!"); - * MESSAGE("Wobbuffet is paralyzed! It can't move!"); + * MESSAGE("Wobbuffet is paralyzed, so it may be unable to move!"); * } * * NONE_OF @@ -449,9 +449,9 @@ * // Our Wobbuffet does not move before the foe's. * NONE_OF { * MESSAGE("Wobbuffet used Celebrate!"); - * MESSAGE("Wobbuffet is paralyzed! It can't move!"); + * MESSAGE("Wobbuffet is paralyzed, so it may be unable to move!"); * } - * MESSAGE("Foe Wobbuffet used Celebrate!"); + * MESSAGE("The opposing Wobbuffet used Celebrate!"); * * PLAYER_PARTY and OPPONENT_PARTY * Refer to the party members defined in GIVEN, e.g.: diff --git a/test/battle/ability/bad_dreams.c b/test/battle/ability/bad_dreams.c index 312b9dc695e8..8a1d3669a2c8 100644 --- a/test/battle/ability/bad_dreams.c +++ b/test/battle/ability/bad_dreams.c @@ -15,13 +15,13 @@ SINGLE_BATTLE_TEST("Bad Dreams causes the sleeping enemy Pokemon to lose 1/8 of } SCENE { if (status == STATUS1_SLEEP) { ABILITY_POPUP(player, ABILITY_BAD_DREAMS); - MESSAGE("Foe Wobbuffet is tormented!"); + MESSAGE("The opposing Wobbuffet is tormented!"); HP_BAR(opponent); } else { NONE_OF { ABILITY_POPUP(player, ABILITY_BAD_DREAMS); - MESSAGE("Foe Wobbuffet is tormented!"); + MESSAGE("The opposing Wobbuffet is tormented!"); HP_BAR(opponent); }; } @@ -115,11 +115,11 @@ DOUBLE_BATTLE_TEST("Bad Dreams faints both sleeping Pokemon on opponent side") TURN {SEND_OUT(opponentLeft, 2); SEND_OUT(opponentRight, 3);} } SCENE { ABILITY_POPUP(playerLeft, ABILITY_BAD_DREAMS); - MESSAGE("Foe Wobbuffet is tormented!"); + MESSAGE("The opposing Wobbuffet is tormented!"); HP_BAR(opponentLeft); - MESSAGE("Foe Wobbuffet fainted!"); - MESSAGE("Foe Wobbuffet is tormented!"); + MESSAGE("The opposing Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet is tormented!"); HP_BAR(opponentRight); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); } } diff --git a/test/battle/ability/battle_bond.c b/test/battle/ability/battle_bond.c index 5f2b66593af1..f61a6d171c44 100644 --- a/test/battle/ability/battle_bond.c +++ b/test/battle/ability/battle_bond.c @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Battle Bond does not transform species other than Greninja") TURN { MOVE(player, MOVE_WATER_GUN); SEND_OUT(opponent, 1); } } SCENE { HP_BAR(opponent); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); NONE_OF { ABILITY_POPUP(player, ABILITY_BATTLE_BOND); MESSAGE("Wobbuffet became fully charged due to its bond with its trainer!"); @@ -54,7 +54,7 @@ SINGLE_BATTLE_TEST("Battle Bond transforms player's Greninja - Singles") } SCENE { HP_BAR(opponent); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); if (monsCountOpponent != 1) { ABILITY_POPUP(player, ABILITY_BATTLE_BOND); MESSAGE("Greninja became fully charged due to its bond with its trainer!"); @@ -104,12 +104,12 @@ SINGLE_BATTLE_TEST("Battle Bond transforms opponent's Greninja - Singles") MESSAGE("Wobbuffet fainted!"); if (monsCountPlayer != 1) { ABILITY_POPUP(opponent, ABILITY_BATTLE_BOND); - MESSAGE("Foe Greninja became fully charged due to its bond with its trainer!"); - MESSAGE("Foe Greninja became Ash-Greninja!"); + MESSAGE("The opposing Greninja became fully charged due to its bond with its trainer!"); + MESSAGE("The opposing Greninja became Ash-Greninja!"); } else { NONE_OF { ABILITY_POPUP(opponent, ABILITY_BATTLE_BOND); - MESSAGE("Foe Greninja became fully charged due to its bond with its trainer!"); + MESSAGE("The opposing Greninja became fully charged due to its bond with its trainer!"); } } } FINALLY { diff --git a/test/battle/ability/clear_body.c b/test/battle/ability/clear_body.c index 7f167c9fe7a2..9f3d53fc8691 100644 --- a/test/battle/ability/clear_body.c +++ b/test/battle/ability/clear_body.c @@ -19,7 +19,7 @@ SINGLE_BATTLE_TEST("Clear Body prevents intimidate") ABILITY_POPUP(player, ABILITY_INTIMIDATE); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); - MESSAGE("Foe Beldum's Clear Body prevents stat loss!"); + MESSAGE("The opposing Beldum's Clear Body prevents stat loss!"); HP_BAR(player, captureDamage: &turnTwoHit); } THEN { EXPECT_EQ(turnOneHit, turnTwoHit); diff --git a/test/battle/ability/contrary.c b/test/battle/ability/contrary.c index 4df0bc39ed0e..931783c8d3a4 100644 --- a/test/battle/ability/contrary.c +++ b/test/battle/ability/contrary.c @@ -21,7 +21,7 @@ SINGLE_BATTLE_TEST("Contrary raises Attack when Intimidated in a single battle", if (ability == ABILITY_CONTRARY) { ABILITY_POPUP(opponent, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's Attack rose!"); + MESSAGE("The opposing Spinda's Attack rose!"); } HP_BAR(player, captureDamage: &results[i].damage); } @@ -51,7 +51,7 @@ DOUBLE_BATTLE_TEST("Contrary raises Attack when Intimidated in a double battle", if (abilityLeft == ABILITY_CONTRARY) { ABILITY_POPUP(opponentLeft, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Spinda's Attack rose!"); + MESSAGE("The opposing Spinda's Attack rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); MESSAGE("Mightyena's Intimidate cuts Foe Spinda's attack!"); @@ -59,7 +59,7 @@ DOUBLE_BATTLE_TEST("Contrary raises Attack when Intimidated in a double battle", if (abilityRight == ABILITY_CONTRARY) { ABILITY_POPUP(opponentRight, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Spinda's Attack rose!"); + MESSAGE("The opposing Spinda's Attack rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); MESSAGE("Mightyena's Intimidate cuts Foe Spinda's attack!"); @@ -90,28 +90,28 @@ SINGLE_BATTLE_TEST("Contrary raises stats after using a move which would normall TURN { MOVE(opponent, MOVE_OVERHEAT); } TURN { MOVE(opponent, MOVE_OVERHEAT); } } SCENE { - MESSAGE("Foe Spinda used Overheat!"); + MESSAGE("The opposing Spinda used Overheat!"); HP_BAR(player, captureDamage: &results[i].damageBefore); if (ability == ABILITY_CONTRARY) { // ABILITY_POPUP(opponent, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's Sp. Atk sharply rose!"); + MESSAGE("The opposing Spinda's Sp. Atk sharply rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's Sp. Atk harshly fell!"); + MESSAGE("The opposing Spinda's Sp. Atk harshly fell!"); } - // MESSAGE("Foe Spinda used Overheat!"); + // MESSAGE("The opposing Spinda used Overheat!"); HP_BAR(player, captureDamage: &results[i].damageAfter); if (ability == ABILITY_CONTRARY) { // ABILITY_POPUP(opponent, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's Sp. Atk sharply rose!"); + MESSAGE("The opposing Spinda's Sp. Atk sharply rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's Sp. Atk harshly fell!"); + MESSAGE("The opposing Spinda's Sp. Atk harshly fell!"); } } FINALLY { @@ -134,21 +134,21 @@ SINGLE_BATTLE_TEST("Contrary lowers a stat after using a move which would normal TURN { MOVE(opponent, MOVE_SWORDS_DANCE); } TURN { MOVE(opponent, MOVE_TACKLE); } } SCENE { - MESSAGE("Foe Spinda used Tackle!"); + MESSAGE("The opposing Spinda used Tackle!"); HP_BAR(player, captureDamage: &results[i].damageBefore); - //MESSAGE("Foe Spinda used Swords Dance!"); + //MESSAGE("The opposing Spinda used Swords Dance!"); if (ability == ABILITY_CONTRARY) { // ABILITY_POPUP(opponent, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's Attack harshly fell!"); + MESSAGE("The opposing Spinda's Attack harshly fell!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's Attack sharply rose!"); + MESSAGE("The opposing Spinda's Attack sharply rose!"); } - // MESSAGE("Foe Spinda used Tackle!"); + // MESSAGE("The opposing Spinda used Tackle!"); HP_BAR(player, captureDamage: &results[i].damageAfter); } FINALLY { @@ -173,14 +173,14 @@ SINGLE_BATTLE_TEST("Contrary raises a stat after using a move which would normal if (ability == ABILITY_CONTRARY) { // ABILITY_POPUP(opponent, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's Attack rose!"); + MESSAGE("The opposing Spinda's Attack rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda's Attack fell!"); + MESSAGE("The opposing Spinda's Attack fell!"); } - MESSAGE("Foe Spinda used Tackle!"); + MESSAGE("The opposing Spinda used Tackle!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { @@ -202,16 +202,16 @@ SINGLE_BATTLE_TEST("Contrary lowers a stat after using a move which would normal TURN { MOVE(opponent, MOVE_BELLY_DRUM); } TURN { MOVE(opponent, MOVE_TACKLE); } } SCENE { - MESSAGE("Foe Spinda used Tackle!"); + MESSAGE("The opposing Spinda used Tackle!"); HP_BAR(player, captureDamage: &results[i].damageBefore); if (ability == ABILITY_CONTRARY) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda cut its own HP and maximized ATTACK!"); //Message stays the same + MESSAGE("The opposing Spinda cut its own HP and maximized ATTACK!"); //Message stays the same } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Spinda cut its own HP and maximized ATTACK!"); + MESSAGE("The opposing Spinda cut its own HP and maximized ATTACK!"); } HP_BAR(player, captureDamage: &results[i].damageAfter); diff --git a/test/battle/ability/cotton_down.c b/test/battle/ability/cotton_down.c index 8e15283926a1..4d0dab9dccbe 100644 --- a/test/battle/ability/cotton_down.c +++ b/test/battle/ability/cotton_down.c @@ -55,7 +55,7 @@ DOUBLE_BATTLE_TEST("Cotton Down drops speed by one of all other battlers on the ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); MESSAGE("Wynaut's Speed fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); } THEN { EXPECT_EQ(playerLeft->statStages[STAT_SPEED], DEFAULT_STAT_STAGE - 1); EXPECT_EQ(playerRight->statStages[STAT_SPEED], DEFAULT_STAT_STAGE - 1); diff --git a/test/battle/ability/cute_charm.c b/test/battle/ability/cute_charm.c index af9815e75081..3fc3423bef3b 100644 --- a/test/battle/ability/cute_charm.c +++ b/test/battle/ability/cute_charm.c @@ -18,13 +18,13 @@ SINGLE_BATTLE_TEST("Cute Charm inflicts infatuation on contact") if (gMovesInfo[move].makesContact) { ABILITY_POPUP(opponent, ABILITY_CUTE_CHARM); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_INFATUATION, player); - MESSAGE("Foe Clefairy's Cute Charm infatuated Wobbuffet!"); + MESSAGE("The opposing Clefairy's Cute Charm infatuated Wobbuffet!"); MESSAGE("Wobbuffet is in love with Foe Clefairy!"); } else { NONE_OF { ABILITY_POPUP(opponent, ABILITY_CUTE_CHARM); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_INFATUATION, player); - MESSAGE("Foe Clefairy's Cute Charm infatuated Wobbuffet!"); + MESSAGE("The opposing Clefairy's Cute Charm infatuated Wobbuffet!"); MESSAGE("Wobbuffet is in love with Foe Clefairy!"); } } diff --git a/test/battle/ability/dauntless_shield.c b/test/battle/ability/dauntless_shield.c index b646d00b0de1..ea9c2083e1d5 100644 --- a/test/battle/ability/dauntless_shield.c +++ b/test/battle/ability/dauntless_shield.c @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Dauntless Shield raises Attack by one stage") } SCENE { ABILITY_POPUP(opponent, ABILITY_DAUNTLESS_SHIELD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Zamazenta's Dauntless Shield raised its Defense!"); + MESSAGE("The opposing Zamazenta's Dauntless Shield raised its Defense!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 1); } @@ -34,11 +34,11 @@ SINGLE_BATTLE_TEST("Dauntless Shield raises Attack by one stage only once per ba } SCENE { ABILITY_POPUP(opponent, ABILITY_DAUNTLESS_SHIELD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Zamazenta's Dauntless Shield raised its Defense!"); + MESSAGE("The opposing Zamazenta's Dauntless Shield raised its Defense!"); NONE_OF { ABILITY_POPUP(opponent, ABILITY_DAUNTLESS_SHIELD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Zamazenta's Dauntless Shield raised its Defense!"); + MESSAGE("The opposing Zamazenta's Dauntless Shield raised its Defense!"); } } THEN { EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE); @@ -60,7 +60,7 @@ SINGLE_BATTLE_TEST("Dauntless Shield activates when it's no longer effected by N MESSAGE("The effects of Neutralizing Gas wore off!"); ABILITY_POPUP(opponent, ABILITY_DAUNTLESS_SHIELD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Zamazenta's Dauntless Shield raised its Defense!"); + MESSAGE("The opposing Zamazenta's Dauntless Shield raised its Defense!"); } } diff --git a/test/battle/ability/defiant.c b/test/battle/ability/defiant.c index 3463cad18d9a..bcd71d8ac73d 100644 --- a/test/battle/ability/defiant.c +++ b/test/battle/ability/defiant.c @@ -21,14 +21,14 @@ DOUBLE_BATTLE_TEST("Defiant sharply raises player's Attack after Intimidate") //1st mon Intimidate ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); - MESSAGE("Foe Gyarados's Intimidate cuts Mankey's attack!"); + MESSAGE("The opposing Gyarados's Intimidate cuts Mankey's attack!"); if (abilityLeft == ABILITY_DEFIANT) { ABILITY_POPUP(playerLeft, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Mankey's Attack sharply rose!"); } ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); - MESSAGE("Foe Gyarados's Intimidate cuts Primeape's attack!"); + MESSAGE("The opposing Gyarados's Intimidate cuts Primeape's attack!"); if (abilityRight == ABILITY_DEFIANT) { ABILITY_POPUP(playerRight, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); @@ -38,14 +38,14 @@ DOUBLE_BATTLE_TEST("Defiant sharply raises player's Attack after Intimidate") //2nd mon Intimidate ABILITY_POPUP(opponentRight, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); - MESSAGE("Foe Arbok's Intimidate cuts Mankey's attack!"); + MESSAGE("The opposing Arbok's Intimidate cuts Mankey's attack!"); if (abilityLeft == ABILITY_DEFIANT) { ABILITY_POPUP(playerLeft, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Mankey's Attack sharply rose!"); } ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); - MESSAGE("Foe Arbok's Intimidate cuts Primeape's attack!"); + MESSAGE("The opposing Arbok's Intimidate cuts Primeape's attack!"); if (abilityRight == ABILITY_DEFIANT) { ABILITY_POPUP(playerRight, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); @@ -83,14 +83,14 @@ DOUBLE_BATTLE_TEST("Defiant sharply raises opponent's Attack after Intimidate") if (abilityLeft == ABILITY_DEFIANT) { ABILITY_POPUP(opponentLeft, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Mankey's Attack sharply rose!"); + MESSAGE("The opposing Mankey's Attack sharply rose!"); } ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); MESSAGE("Gyarados's Intimidate cuts Foe Primeape's attack!"); if (abilityRight == ABILITY_DEFIANT) { ABILITY_POPUP(opponentRight, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Primeape's Attack sharply rose!"); + MESSAGE("The opposing Primeape's Attack sharply rose!"); } //2nd mon Intimidate @@ -100,14 +100,14 @@ DOUBLE_BATTLE_TEST("Defiant sharply raises opponent's Attack after Intimidate") if (abilityLeft == ABILITY_DEFIANT) { ABILITY_POPUP(opponentLeft, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Mankey's Attack sharply rose!"); + MESSAGE("The opposing Mankey's Attack sharply rose!"); } ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); MESSAGE("Arbok's Intimidate cuts Foe Primeape's attack!"); if (abilityRight == ABILITY_DEFIANT) { ABILITY_POPUP(opponentRight, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Primeape's Attack sharply rose!"); + MESSAGE("The opposing Primeape's Attack sharply rose!"); } } FINALLY { // -2 from Intimidates and +4 from Defiants gets +2 total @@ -166,7 +166,7 @@ DOUBLE_BATTLE_TEST("Defiant is activated by Cotton Down for non-ally pokemon") MESSAGE("Mankey's Attack sharply rose!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Mankey's Speed fell!"); + MESSAGE("The opposing Mankey's Speed fell!"); } THEN { EXPECT_EQ(playerLeft->statStages[STAT_SPEED], DEFAULT_STAT_STAGE - 1); EXPECT_EQ(playerRight->statStages[STAT_SPEED], DEFAULT_STAT_STAGE - 1); diff --git a/test/battle/ability/desolate_land.c b/test/battle/ability/desolate_land.c index a8c9f7749c46..1ab6e7a44825 100644 --- a/test/battle/ability/desolate_land.c +++ b/test/battle/ability/desolate_land.c @@ -16,11 +16,11 @@ SINGLE_BATTLE_TEST("Desolate Land blocks damaging Water-type moves") TURN { MOVE(opponent, MOVE_WATER_GUN); } TURN { MOVE(opponent, MOVE_WATER_GUN); } } SCENE { - MESSAGE("Foe Wobbuffet used Water Gun!"); + MESSAGE("The opposing Wobbuffet used Water Gun!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_GUN, opponent); MESSAGE("The Water-type attack evaporated in the harsh sunlight!"); NOT HP_BAR(player); - MESSAGE("Foe Wobbuffet used Water Gun!"); + MESSAGE("The opposing Wobbuffet used Water Gun!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_GUN, opponent); MESSAGE("The Water-type attack evaporated in the harsh sunlight!"); NOT HP_BAR(player); @@ -42,7 +42,7 @@ DOUBLE_BATTLE_TEST("Desolate Land blocks damaging Water-type moves and prints th } WHEN { TURN { MOVE(opponentLeft, MOVE_SURF); } } SCENE { - MESSAGE("Foe Wobbuffet used Surf!"); + MESSAGE("The opposing Wobbuffet used Surf!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SURF, opponentLeft); MESSAGE("The Water-type attack evaporated in the harsh sunlight!"); NOT MESSAGE("The Water-type attack evaporated in the harsh sunlight!"); @@ -62,6 +62,6 @@ SINGLE_BATTLE_TEST("Desolate Land does not block a move if pokemon is asleep and TURN { MOVE(opponent, MOVE_WATER_GUN); } } SCENE { NOT MESSAGE("The Water-type attack evaporated in the harsh sunlight!"); - MESSAGE("Foe Wobbuffet is fast asleep."); + MESSAGE("The opposing Wobbuffet is fast asleep."); } } diff --git a/test/battle/ability/download.c b/test/battle/ability/download.c index d0e896fd7adb..2b1e26497cea 100644 --- a/test/battle/ability/download.c +++ b/test/battle/ability/download.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Download raises Attack if player has lower Def than Sp. Def" { ABILITY_POPUP(opponent, ABILITY_DOWNLOAD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Porygon's Download raised its Attack!"); + MESSAGE("The opposing Porygon's Download raised its Attack!"); } HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { @@ -84,7 +84,7 @@ SINGLE_BATTLE_TEST("Download doesn't activate if target hasn't been sent out yet { ABILITY_POPUP(opponent, ABILITY_DOWNLOAD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Porygon2's Download raised its Sp. Atk!"); + MESSAGE("The opposing Porygon2's Download raised its Sp. Atk!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, opponent); diff --git a/test/battle/ability/embody_aspect.c b/test/battle/ability/embody_aspect.c index 8b37dd1a7477..0c6a5a251237 100644 --- a/test/battle/ability/embody_aspect.c +++ b/test/battle/ability/embody_aspect.c @@ -20,13 +20,13 @@ SINGLE_BATTLE_TEST("Embodoy Aspect raises a stat depending on the users form by ABILITY_POPUP(opponent, ability); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); if (ability == ABILITY_EMBODY_ASPECT_TEAL) - MESSAGE("Foe Ogerpon's Embody Aspect raised its Sp. Atk!"); + MESSAGE("The opposing Ogerpon's Embody Aspect raised its Sp. Atk!"); else if (ability == ABILITY_EMBODY_ASPECT_HEARTHFLAME) - MESSAGE("Foe Ogerpon's Embody Aspect raised its Attack!"); + MESSAGE("The opposing Ogerpon's Embody Aspect raised its Attack!"); else if (ability == ABILITY_EMBODY_ASPECT_WELLSPRING) - MESSAGE("Foe Ogerpon's Embody Aspect raised its Sp. Def!"); + MESSAGE("The opposing Ogerpon's Embody Aspect raised its Sp. Def!"); else if (ability == ABILITY_EMBODY_ASPECT_CORNERSTONE) - MESSAGE("Foe Ogerpon's Embody Aspect raised its Defense!"); + MESSAGE("The opposing Ogerpon's Embody Aspect raised its Defense!"); } THEN { if (ability == ABILITY_EMBODY_ASPECT_TEAL) EXPECT_EQ(opponent->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 1); @@ -54,6 +54,6 @@ SINGLE_BATTLE_TEST("Embodoy Aspect activates when it's no longer effected by Neu MESSAGE("The effects of Neutralizing Gas wore off!"); ABILITY_POPUP(opponent, ABILITY_EMBODY_ASPECT_TEAL); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Ogerpon's Embody Aspect raised its Sp. Atk!"); + MESSAGE("The opposing Ogerpon's Embody Aspect raised its Sp. Atk!"); } } diff --git a/test/battle/ability/flame_body.c b/test/battle/ability/flame_body.c index 84d2cd48f254..0fdeb200bfb5 100644 --- a/test/battle/ability/flame_body.c +++ b/test/battle/ability/flame_body.c @@ -17,13 +17,13 @@ SINGLE_BATTLE_TEST("Flame Body inflicts burn on contact") if (gMovesInfo[move].makesContact) { ABILITY_POPUP(opponent, ABILITY_FLAME_BODY); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, player); - MESSAGE("Foe Magmar's Flame Body burned Wobbuffet!"); + MESSAGE("The opposing Magmar's Flame Body burned Wobbuffet!"); STATUS_ICON(player, burn: TRUE); } else { NONE_OF { ABILITY_POPUP(opponent, ABILITY_FLAME_BODY); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, player); - MESSAGE("Foe Magmar's Flame Body burned Wobbuffet!"); + MESSAGE("The opposing Magmar's Flame Body burned Wobbuffet!"); STATUS_ICON(player, burn: TRUE); } } diff --git a/test/battle/ability/forecast.c b/test/battle/ability/forecast.c index df7ecd00a46c..0e1e31638c99 100644 --- a/test/battle/ability/forecast.c +++ b/test/battle/ability/forecast.c @@ -122,13 +122,13 @@ DOUBLE_BATTLE_TEST("Forecast transforms all Castforms present in weather") MESSAGE("Castform transformed!"); ABILITY_POPUP(opponentLeft, ABILITY_FORECAST); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, opponentLeft); - MESSAGE("Foe Castform transformed!"); + MESSAGE("The opposing Castform transformed!"); ABILITY_POPUP(playerRight, ABILITY_FORECAST); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, playerRight); MESSAGE("Castform transformed!"); ABILITY_POPUP(opponentRight, ABILITY_FORECAST); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, opponentRight); - MESSAGE("Foe Castform transformed!"); + MESSAGE("The opposing Castform transformed!"); } THEN { switch (move) { diff --git a/test/battle/ability/frisk.c b/test/battle/ability/frisk.c index dd6d0f691f64..77481d12a264 100644 --- a/test/battle/ability/frisk.c +++ b/test/battle/ability/frisk.c @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Frisk triggers in a Single Battle") ABILITY_POPUP(player, ABILITY_FRISK); MESSAGE("Furret frisked Foe Sentret and found its Potion!"); ABILITY_POPUP(opponent, ABILITY_FRISK); - MESSAGE("Foe Sentret frisked Furret and found its Potion!"); + MESSAGE("The opposing Sentret frisked Furret and found its Potion!"); } } @@ -51,7 +51,7 @@ DOUBLE_BATTLE_TEST("Frisk triggers for player in a Double Battle after switching } WHEN { TURN { MOVE(opponentLeft, MOVE_POUND, target: targetLeft ? playerLeft : playerRight); SEND_OUT(targetLeft ? playerLeft : playerRight, 2); } } SCENE { - MESSAGE("Foe Wynaut used Pound!"); + MESSAGE("The opposing Wynaut used Pound!"); MESSAGE("Wobbuffet fainted!"); ABILITY_POPUP(targetLeft ? playerLeft : playerRight, ABILITY_FRISK); MESSAGE("Furret frisked Foe Wynaut and found its Potion!"); @@ -75,8 +75,8 @@ DOUBLE_BATTLE_TEST("Frisk triggers for opponent in a Double Battle after switchi TURN { MOVE(playerLeft, MOVE_POUND, target: targetLeft ? opponentLeft : opponentRight); SEND_OUT(targetLeft ? opponentLeft : opponentRight, 2); } } SCENE { MESSAGE("Wynaut used Pound!"); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); ABILITY_POPUP(targetLeft ? opponentLeft : opponentRight, ABILITY_FRISK); - MESSAGE("Foe Furret frisked Wynaut and found its Potion!"); + MESSAGE("The opposing Furret frisked Wynaut and found its Potion!"); } } diff --git a/test/battle/ability/full_metal_body.c b/test/battle/ability/full_metal_body.c index d00714d524a1..f7a07081cd4f 100644 --- a/test/battle/ability/full_metal_body.c +++ b/test/battle/ability/full_metal_body.c @@ -19,7 +19,7 @@ SINGLE_BATTLE_TEST("Full Metal Body prevents intimidate") ABILITY_POPUP(player, ABILITY_INTIMIDATE); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } ABILITY_POPUP(opponent, ABILITY_FULL_METAL_BODY); - MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); + MESSAGE("The opposing Solgaleo's Full Metal Body prevents stat loss!"); HP_BAR(player, captureDamage: &turnTwoHit); } THEN { EXPECT_EQ(turnOneHit, turnTwoHit); diff --git a/test/battle/ability/gale_wings.c b/test/battle/ability/gale_wings.c index d8a3873be81c..cd25fd19730d 100644 --- a/test/battle/ability/gale_wings.c +++ b/test/battle/ability/gale_wings.c @@ -16,10 +16,10 @@ SINGLE_BATTLE_TEST("Gale Wings only grants priority at full HP") } SCENE { if (hp == 100) { MESSAGE("Talonflame used Aerial Ace!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } else { - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Talonflame used Aerial Ace!"); } } @@ -41,10 +41,10 @@ SINGLE_BATTLE_TEST("Gale Wings only grants priority to Flying-type moves") } SCENE { if (move == MOVE_AERIAL_ACE) { MESSAGE("Talonflame used Aerial Ace!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } else { - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Talonflame used Flare Blitz!"); } } diff --git a/test/battle/ability/hunger_switch.c b/test/battle/ability/hunger_switch.c index e4fbda82d140..38c3d2527d14 100644 --- a/test/battle/ability/hunger_switch.c +++ b/test/battle/ability/hunger_switch.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Hunger Switch switches Morpeko's forms at the end of the tur TURN { MOVE(player, MOVE_CELEBRATE); } } SCENE { MESSAGE("Morpeko used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); } THEN { if (species == SPECIES_MORPEKO_FULL_BELLY) diff --git a/test/battle/ability/hyper_cutter.c b/test/battle/ability/hyper_cutter.c index 0d1306f11865..943fbba88a9b 100644 --- a/test/battle/ability/hyper_cutter.c +++ b/test/battle/ability/hyper_cutter.c @@ -19,7 +19,7 @@ SINGLE_BATTLE_TEST("Hyper Cutter prevents intimidate") ABILITY_POPUP(player, ABILITY_INTIMIDATE); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } ABILITY_POPUP(opponent, ABILITY_HYPER_CUTTER); - MESSAGE("Foe Krabby's Hyper Cutter prevents Attack loss!"); + MESSAGE("The opposing Krabby's Hyper Cutter prevents Attack loss!"); HP_BAR(player, captureDamage: &turnTwoHit); } THEN { EXPECT_EQ(turnOneHit, turnTwoHit); @@ -36,7 +36,7 @@ SINGLE_BATTLE_TEST("Hyper Cutter prevents Attack stage reduction from moves") TURN { MOVE(player, MOVE_GROWL); } } SCENE { ABILITY_POPUP(opponent, ABILITY_HYPER_CUTTER); - MESSAGE("Foe Krabby's Hyper Cutter prevents Attack loss!"); + MESSAGE("The opposing Krabby's Hyper Cutter prevents Attack loss!"); } } @@ -50,7 +50,7 @@ SINGLE_BATTLE_TEST("Hyper Cutter doesn't prevent Attack reduction from burn") TURN { MOVE(player, MOVE_WILL_O_WISP); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_WILL_O_WISP, player); - MESSAGE("Foe Krabby was burned!"); + MESSAGE("The opposing Krabby was burned!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE); } @@ -68,10 +68,10 @@ SINGLE_BATTLE_TEST("Hyper Cutter is ignored by Mold Breaker") ABILITY_POPUP(player, ABILITY_MOLD_BREAKER); MESSAGE("Pinsir breaks the mold!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_GROWL, player); - MESSAGE("Foe Krabby's Attack fell!"); + MESSAGE("The opposing Krabby's Attack fell!"); NONE_OF { ABILITY_POPUP(opponent, ABILITY_HYPER_CUTTER); - MESSAGE("Foe Krabby's Hyper Cutter prevents Attack loss!"); + MESSAGE("The opposing Krabby's Hyper Cutter prevents Attack loss!"); } } } @@ -87,8 +87,8 @@ SINGLE_BATTLE_TEST("Hyper Cutter doesn't prevent Attack stage reduction from mov TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SUPERPOWER, opponent); - MESSAGE("Foe Krabby's Attack fell!"); - MESSAGE("Foe Krabby's Defense fell!"); + MESSAGE("The opposing Krabby's Attack fell!"); + MESSAGE("The opposing Krabby's Defense fell!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE - 1); } @@ -105,9 +105,9 @@ SINGLE_BATTLE_TEST("Hyper Cutter doesn't prevent Topsy-Turvy") TURN { MOVE(opponent, MOVE_SWORDS_DANCE); MOVE(player, MOVE_TOPSY_TURVY); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, opponent); - MESSAGE("Foe Krabby's Attack sharply rose!"); + MESSAGE("The opposing Krabby's Attack sharply rose!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOPSY_TURVY, player); - MESSAGE("Foe Krabby's stat changes were all reversed!"); + MESSAGE("The opposing Krabby's stat changes were all reversed!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE - 2); } @@ -124,7 +124,7 @@ SINGLE_BATTLE_TEST("Hyper Cutter doesn't prevent Spectral Thief from resetting p TURN { MOVE(opponent, MOVE_SWORDS_DANCE); MOVE(player, MOVE_SPECTRAL_THIEF); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, opponent); - MESSAGE("Foe Krabby's Attack sharply rose!"); + MESSAGE("The opposing Krabby's Attack sharply rose!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPECTRAL_THIEF, player); MESSAGE("Wobbuffet stole the target's boosted stats!"); } THEN { diff --git a/test/battle/ability/immunity.c b/test/battle/ability/immunity.c index df5d1518e83a..2fa90686c53a 100644 --- a/test/battle/ability/immunity.c +++ b/test/battle/ability/immunity.c @@ -26,7 +26,7 @@ SINGLE_BATTLE_TEST("Immunity prevents Toxic bad poison") } SCENE { MESSAGE("Wobbuffet used Toxic!"); ABILITY_POPUP(opponent, ABILITY_IMMUNITY); - MESSAGE("Foe Snorlax's Immunity prevents poisoning!"); + MESSAGE("The opposing Snorlax's Immunity prevents poisoning!"); NOT STATUS_ICON(opponent, poison: TRUE); } } diff --git a/test/battle/ability/innards_out.c b/test/battle/ability/innards_out.c index a8d5c7ee3f31..bc59bcfa0bb0 100644 --- a/test/battle/ability/innards_out.c +++ b/test/battle/ability/innards_out.c @@ -19,7 +19,7 @@ SINGLE_BATTLE_TEST("Innards Out deal dmg on fainting equal to the amount of dmg } WHEN { TURN { MOVE(opponent, MOVE_PSYCHIC); SEND_OUT(player, 1); if (hp == 100) { SEND_OUT(opponent, 1); } } } SCENE { - MESSAGE("Foe Wobbuffet used Psychic!"); + MESSAGE("The opposing Wobbuffet used Psychic!"); HP_BAR(player, hp); ABILITY_POPUP(player, ABILITY_INNARDS_OUT); HP_BAR(opponent, hp); @@ -38,8 +38,8 @@ SINGLE_BATTLE_TEST("Innards Out does not trigger after Gastro Acid has been used TURN { MOVE(opponent, MOVE_GASTRO_ACID); } TURN { MOVE(opponent, MOVE_PSYCHIC); SEND_OUT(player, 1); } } SCENE { - MESSAGE("Foe Wobbuffet used Gastro Acid!"); - MESSAGE("Foe Wobbuffet used Psychic!"); + MESSAGE("The opposing Wobbuffet used Gastro Acid!"); + MESSAGE("The opposing Wobbuffet used Psychic!"); HP_BAR(player); NONE_OF { ABILITY_POPUP(player, ABILITY_INNARDS_OUT); @@ -59,7 +59,7 @@ SINGLE_BATTLE_TEST("Innards Out does not damage Magic Guard Pokemon") } WHEN { TURN { MOVE(opponent, MOVE_PSYCHIC); SEND_OUT(player, 1); } } SCENE { - MESSAGE("Foe Clefable used Psychic!"); + MESSAGE("The opposing Clefable used Psychic!"); HP_BAR(player); ABILITY_POPUP(player, ABILITY_INNARDS_OUT); NOT HP_BAR(opponent); diff --git a/test/battle/ability/inner_focus.c b/test/battle/ability/inner_focus.c index ecd71272cb9a..8d83f1ab8436 100644 --- a/test/battle/ability/inner_focus.c +++ b/test/battle/ability/inner_focus.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Inner Focus prevents intimidate") ABILITY_POPUP(player, ABILITY_INTIMIDATE); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } ABILITY_POPUP(opponent, ABILITY_INNER_FOCUS); - MESSAGE("Foe Zubat's Inner Focus prevents stat loss!"); + MESSAGE("The opposing Zubat's Inner Focus prevents stat loss!"); HP_BAR(player, captureDamage: &turnTwoHit); } THEN { EXPECT_EQ(turnOneHit, turnTwoHit); @@ -38,7 +38,7 @@ SINGLE_BATTLE_TEST("Inner Focus prevents flinching") } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, player); - NONE_OF { MESSAGE("Foe Zubat flinched!"); } + NONE_OF { MESSAGE("The opposing Zubat flinched!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } } @@ -52,6 +52,6 @@ SINGLE_BATTLE_TEST("Inner Focus is ignored by Mold Breaker") TURN { MOVE(player, MOVE_FAKE_OUT); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, player); - MESSAGE("Foe Zubat flinched!"); + MESSAGE("The opposing Zubat flinched!"); } } diff --git a/test/battle/ability/intimidate.c b/test/battle/ability/intimidate.c index 298e02173287..6b3daace29b9 100644 --- a/test/battle/ability/intimidate.c +++ b/test/battle/ability/intimidate.c @@ -23,7 +23,7 @@ SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after switch ou { ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Foe Arbok's Intimidate cuts Wobbuffet's attack!"); + MESSAGE("The opposing Arbok's Intimidate cuts Wobbuffet's attack!"); } HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { @@ -49,7 +49,7 @@ SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after KO", s16 { ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Foe Arbok's Intimidate cuts Wobbuffet's attack!"); + MESSAGE("The opposing Arbok's Intimidate cuts Wobbuffet's attack!"); } HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { @@ -91,9 +91,9 @@ DOUBLE_BATTLE_TEST("Intimidate doesn't activate on an empty field in a double ba ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); - MESSAGE("Foe Arbok's Intimidate cuts Ekans's attack!"); + MESSAGE("The opposing Arbok's Intimidate cuts Ekans's attack!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); - MESSAGE("Foe Arbok's Intimidate cuts Abra's attack!"); + MESSAGE("The opposing Arbok's Intimidate cuts Abra's attack!"); } } } @@ -114,13 +114,13 @@ SINGLE_BATTLE_TEST("Intimidate and Eject Button force the opponent to Attack") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + MESSAGE("The opposing Wobbuffet is switched out with the Eject Button!"); MESSAGE("2 sent out Hitmontop!"); ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); - MESSAGE("Foe Hitmontop's Intimidate cuts Wobbuffet's attack!"); + MESSAGE("The opposing Hitmontop's Intimidate cuts Wobbuffet's attack!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); - MESSAGE("Foe Hitmontop used Tackle!"); + MESSAGE("The opposing Hitmontop used Tackle!"); } } } diff --git a/test/battle/ability/intrepid_sword.c b/test/battle/ability/intrepid_sword.c index 0194a9be5b76..8fc16cc653a5 100644 --- a/test/battle/ability/intrepid_sword.c +++ b/test/battle/ability/intrepid_sword.c @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Intrepid Sword raises Attack by one stage") } SCENE { ABILITY_POPUP(opponent, ABILITY_INTREPID_SWORD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Zacian's Intrepid Sword raised its Attack!"); + MESSAGE("The opposing Zacian's Intrepid Sword raised its Attack!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); } @@ -34,11 +34,11 @@ SINGLE_BATTLE_TEST("Intrepid Sword raises Attack by one stage only once per batt } SCENE { ABILITY_POPUP(opponent, ABILITY_INTREPID_SWORD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Zacian's Intrepid Sword raised its Attack!"); + MESSAGE("The opposing Zacian's Intrepid Sword raised its Attack!"); NONE_OF { ABILITY_POPUP(opponent, ABILITY_INTREPID_SWORD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Zacian's Intrepid Sword raised its Attack!"); + MESSAGE("The opposing Zacian's Intrepid Sword raised its Attack!"); } } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE); @@ -60,7 +60,7 @@ SINGLE_BATTLE_TEST("Intrepid Sword activates when it's no longer effected by Neu MESSAGE("The effects of Neutralizing Gas wore off!"); ABILITY_POPUP(opponent, ABILITY_INTREPID_SWORD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Zacian's Intrepid Sword raised its Attack!"); + MESSAGE("The opposing Zacian's Intrepid Sword raised its Attack!"); } } @@ -77,7 +77,7 @@ SINGLE_BATTLE_TEST("Intrepid Sword and Dauntless Shield both can be Skill Swappe } SCENE { ABILITY_POPUP(opponent, ABILITY_INTREPID_SWORD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Zacian's Intrepid Sword raised its Attack!"); + MESSAGE("The opposing Zacian's Intrepid Sword raised its Attack!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SKILL_SWAP, player); ABILITY_POPUP(player, ABILITY_INTREPID_SWORD); @@ -86,7 +86,7 @@ SINGLE_BATTLE_TEST("Intrepid Sword and Dauntless Shield both can be Skill Swappe ABILITY_POPUP(opponent, ABILITY_DAUNTLESS_SHIELD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Zamazenta's Dauntless Shield raised its Defense!"); + MESSAGE("The opposing Zamazenta's Dauntless Shield raised its Defense!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SKILL_SWAP, player); ABILITY_POPUP(player, ABILITY_DAUNTLESS_SHIELD); diff --git a/test/battle/ability/keen_eye.c b/test/battle/ability/keen_eye.c index 29797ef7cdee..5c0b09628216 100644 --- a/test/battle/ability/keen_eye.c +++ b/test/battle/ability/keen_eye.c @@ -27,11 +27,11 @@ SINGLE_BATTLE_TEST("Keen Eye, Gen9+ Illuminate & Minds Eye prevent accuracy stag ABILITY_POPUP(opponent, ability); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); if (species == SPECIES_HITMONCHAN) - MESSAGE("Foe Hitmonchan's Keen Eye prevents accuracy loss!"); + MESSAGE("The opposing Hitmonchan's Keen Eye prevents accuracy loss!"); else if (species == SPECIES_STARYU) - MESSAGE("Foe Staryu's Illuminate prevents accuracy loss!"); + MESSAGE("The opposing Staryu's Illuminate prevents accuracy loss!"); else - MESSAGE("Foe Ursaluna's Mind's Eye prevents accuracy loss!"); + MESSAGE("The opposing Ursaluna's Mind's Eye prevents accuracy loss!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } } @@ -111,22 +111,22 @@ SINGLE_BATTLE_TEST("Keen Eye, Gen9+ Illuminate & Minds Eye don't prevent Topsy-T } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_HONE_CLAWS, opponent); if (species == SPECIES_HITMONCHAN) { - MESSAGE("Foe Hitmonchan's Attack rose!"); - MESSAGE("Foe Hitmonchan's accuracy rose!"); + MESSAGE("The opposing Hitmonchan's Attack rose!"); + MESSAGE("The opposing Hitmonchan's accuracy rose!"); } else if (species == SPECIES_STARYU) { - MESSAGE("Foe Staryu's Attack rose!"); - MESSAGE("Foe Staryu's accuracy rose!"); + MESSAGE("The opposing Staryu's Attack rose!"); + MESSAGE("The opposing Staryu's accuracy rose!"); } else { - MESSAGE("Foe Ursaluna's Attack rose!"); - MESSAGE("Foe Ursaluna's accuracy rose!"); + MESSAGE("The opposing Ursaluna's Attack rose!"); + MESSAGE("The opposing Ursaluna's accuracy rose!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TOPSY_TURVY, player); if (species == SPECIES_HITMONCHAN) - MESSAGE("Foe Hitmonchan's stat changes were all reversed!"); + MESSAGE("The opposing Hitmonchan's stat changes were all reversed!"); else if (species == SPECIES_STARYU) - MESSAGE("Foe Staryu's stat changes were all reversed!"); + MESSAGE("The opposing Staryu's stat changes were all reversed!"); else - MESSAGE("Foe Ursaluna's stat changes were all reversed!"); + MESSAGE("The opposing Ursaluna's stat changes were all reversed!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_ACC], DEFAULT_STAT_STAGE - 1); } @@ -183,13 +183,13 @@ SINGLE_BATTLE_TEST("Keen Eye & Gen9+ Illuminate don't prevent Spectral Thief fro ANIMATION(ANIM_TYPE_MOVE, MOVE_HONE_CLAWS, opponent); if (species == SPECIES_HITMONCHAN) { - MESSAGE("Foe Hitmonchan's Attack rose!"); - MESSAGE("Foe Hitmonchan's accuracy rose!"); + MESSAGE("The opposing Hitmonchan's Attack rose!"); + MESSAGE("The opposing Hitmonchan's accuracy rose!"); } else { - MESSAGE("Foe Staryu's Attack rose!"); - MESSAGE("Foe Staryu's accuracy rose!"); + MESSAGE("The opposing Staryu's Attack rose!"); + MESSAGE("The opposing Staryu's accuracy rose!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_SPECTRAL_THIEF, player); MESSAGE("Wobbuffet stole the target's boosted stats!"); diff --git a/test/battle/ability/magic_bounce.c b/test/battle/ability/magic_bounce.c index 95eaf382e678..c4f96c07d61a 100644 --- a/test/battle/ability/magic_bounce.c +++ b/test/battle/ability/magic_bounce.c @@ -78,6 +78,6 @@ DOUBLE_BATTLE_TEST("Magic Bounce bounces back moves hitting both foes at two foe MESSAGE("Kadabra's Defense fell!"); // Also check if second original target gets hit by Leer as this was once bugged ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Wynaut's Defense fell!"); + MESSAGE("The opposing Wynaut's Defense fell!"); } } diff --git a/test/battle/ability/minds_eye.c b/test/battle/ability/minds_eye.c index 6498f9f098dc..d33da3ac7abc 100644 --- a/test/battle/ability/minds_eye.c +++ b/test/battle/ability/minds_eye.c @@ -36,7 +36,7 @@ SINGLE_BATTLE_TEST("Mind's Eye doesn't bypass a Ghost-type's Wonder Guard") HP_BAR(opponent); } ABILITY_POPUP(opponent, ABILITY_WONDER_GUARD); - MESSAGE("Foe Shedinja avoided damage with Wonder Guard!"); + MESSAGE("The opposing Shedinja avoided damage with Wonder Guard!"); } } diff --git a/test/battle/ability/mirror_armor.c b/test/battle/ability/mirror_armor.c index 38ee8dab91e8..ddeb60e9d00c 100644 --- a/test/battle/ability/mirror_armor.c +++ b/test/battle/ability/mirror_armor.c @@ -23,22 +23,22 @@ SINGLE_BATTLE_TEST("Mirror Armor lowers a stat of the attacking pokemon") switch (statId) { case STAT_DEF: - MESSAGE("Foe Wynaut's Defense fell!"); + MESSAGE("The opposing Wynaut's Defense fell!"); break; case STAT_ATK: - MESSAGE("Foe Wynaut's Attack fell!"); + MESSAGE("The opposing Wynaut's Attack fell!"); break; case STAT_EVASION: - MESSAGE("Foe Wynaut's evasiveness harshly fell!"); + MESSAGE("The opposing Wynaut's evasiveness harshly fell!"); break; case STAT_ACC: - MESSAGE("Foe Wynaut's accuracy fell!"); + MESSAGE("The opposing Wynaut's accuracy fell!"); break; case STAT_SPATK: - MESSAGE("Foe Wynaut's Sp. Atk fell!"); + MESSAGE("The opposing Wynaut's Sp. Atk fell!"); break; case STAT_SPDEF: - MESSAGE("Foe Wynaut's Sp. Def harshly fell!"); + MESSAGE("The opposing Wynaut's Sp. Def harshly fell!"); break; } } THEN { @@ -55,11 +55,11 @@ SINGLE_BATTLE_TEST("Mirror Armor triggers even if the attacking Pokemon also has } WHEN { TURN { MOVE(opponent, MOVE_LEER); } } SCENE { - MESSAGE("Foe Corviknigh used Leer!"); + MESSAGE("The opposing Corviknigh used Leer!"); ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Corviknigh's Defense fell!"); + MESSAGE("The opposing Corviknigh's Defense fell!"); } THEN { EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 1); @@ -74,10 +74,10 @@ SINGLE_BATTLE_TEST("Mirror Armor doesn't lower the stats of an attacking Pokemon } WHEN { TURN { MOVE(opponent, MOVE_LEER); } } SCENE { - MESSAGE("Foe Wynaut used Leer!"); + MESSAGE("The opposing Wynaut used Leer!"); ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); - MESSAGE("Foe Wynaut's Clear Body prevents stat loss!"); + MESSAGE("The opposing Wynaut's Clear Body prevents stat loss!"); } THEN { EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE); @@ -95,7 +95,7 @@ SINGLE_BATTLE_TEST("Mirror Armor lowers the Attack of Pokemon with Intimidate") ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Gyarados's Attack fell!"); + MESSAGE("The opposing Gyarados's Attack fell!"); } THEN { EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE); EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE - 1); @@ -113,9 +113,9 @@ SINGLE_BATTLE_TEST("Mirror Armor doesn't lower the stats of an attacking Pokemon TURN { MOVE(opponent, MOVE_SUBSTITUTE); } TURN { MOVE(opponent, MOVE_LEER); } } SCENE { - MESSAGE("Foe Wynaut used Substitute!"); + MESSAGE("The opposing Wynaut used Substitute!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, opponent); - MESSAGE("Foe Wynaut used Leer!"); + MESSAGE("The opposing Wynaut used Leer!"); ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); } THEN { @@ -132,10 +132,10 @@ SINGLE_BATTLE_TEST("Mirror Armor raises the stat of an attacking Pokemon with Co } WHEN { TURN { MOVE(opponent, MOVE_LEER); } } SCENE { - MESSAGE("Foe Shuckle used Leer!"); + MESSAGE("The opposing Shuckle used Leer!"); ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Shuckle's Defense rose!"); + MESSAGE("The opposing Shuckle's Defense rose!"); } THEN { EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 1); @@ -156,10 +156,10 @@ SINGLE_BATTLE_TEST("Mirror Armor doesn't lower the stat of the attacking Pokemon MESSAGE("Corviknigh used Screech!"); MESSAGE("Corviknigh used Screech!"); MESSAGE("Corviknigh used Screech!"); - MESSAGE("Foe Wynaut used Leer!"); + MESSAGE("The opposing Wynaut used Leer!"); ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wynaut's Defense won't go lower!"); + MESSAGE("The opposing Wynaut's Defense won't go lower!"); } THEN { EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); EXPECT_EQ(opponent->statStages[STAT_DEF], MIN_STAT_STAGE); @@ -186,8 +186,8 @@ DOUBLE_BATTLE_TEST("Mirror Armor lowers Speed of the partner Pokemon after Court TURN { } } SCENE { MESSAGE("Wobbuffet used Sticky Web!"); - MESSAGE("Foe Wynaut used Court Change!"); - MESSAGE("Foe Wynaut swapped the battle effects affecting each side!"); + MESSAGE("The opposing Wynaut used Court Change!"); + MESSAGE("The opposing Wynaut swapped the battle effects affecting each side!"); MESSAGE("Go! Corviknigh!"); MESSAGE("Corviknigh was caught in a Sticky Web!"); ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR); diff --git a/test/battle/ability/opportunist.c b/test/battle/ability/opportunist.c index f2a9f5a37a90..1198cde07e5d 100644 --- a/test/battle/ability/opportunist.c +++ b/test/battle/ability/opportunist.c @@ -61,7 +61,7 @@ DOUBLE_BATTLE_TEST("Opportunist raises Attack only once when partner has Intimid if (abilityLeft == ABILITY_CONTRARY) { ABILITY_POPUP(opponentLeft, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Spinda's Attack rose!"); + MESSAGE("The opposing Spinda's Attack rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); MESSAGE("Mightyena's Intimidate cuts Foe Spinda's attack!"); @@ -69,7 +69,7 @@ DOUBLE_BATTLE_TEST("Opportunist raises Attack only once when partner has Intimid if (abilityRight == ABILITY_CONTRARY) { ABILITY_POPUP(opponentRight, ABILITY_CONTRARY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Spinda's Attack rose!"); + MESSAGE("The opposing Spinda's Attack rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); MESSAGE("Mightyena's Intimidate cuts Foe Spinda's attack!"); diff --git a/test/battle/ability/own_tempo.c b/test/battle/ability/own_tempo.c index 04697aad32c4..d2c2dd6c321c 100644 --- a/test/battle/ability/own_tempo.c +++ b/test/battle/ability/own_tempo.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Own Tempo prevents intimidate") ABILITY_POPUP(player, ABILITY_INTIMIDATE); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } ABILITY_POPUP(opponent, ABILITY_OWN_TEMPO); - MESSAGE("Foe Slowpoke's Own Tempo prevents stat loss!"); + MESSAGE("The opposing Slowpoke's Own Tempo prevents stat loss!"); HP_BAR(player, captureDamage: &turnTwoHit); } THEN { EXPECT_EQ(turnOneHit, turnTwoHit); @@ -37,7 +37,7 @@ SINGLE_BATTLE_TEST("Own Tempo prevents confusion from moves by the opponent") TURN { MOVE(player, MOVE_CONFUSE_RAY); } } SCENE { ABILITY_POPUP(opponent, ABILITY_OWN_TEMPO); - MESSAGE("Foe Slowpoke's Own Tempo prevents confusion!"); + MESSAGE("The opposing Slowpoke's Own Tempo prevents confusion!"); } } @@ -57,7 +57,7 @@ SINGLE_BATTLE_TEST("Own Tempo prevents confusion from moves by the user") ANIMATION(ANIM_TYPE_MOVE, MOVE_PETAL_DANCE, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_PETAL_DANCE, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_PETAL_DANCE, opponent); - NONE_OF { MESSAGE("Foe Slowpoke became confused due to fatigue!"); } + NONE_OF { MESSAGE("The opposing Slowpoke became confused due to fatigue!"); } } } @@ -72,12 +72,12 @@ SINGLE_BATTLE_TEST("Own Tempo cures confusion obtained from an opponent with Mol TURN { MOVE(player, MOVE_CONFUSE_RAY); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player); - MESSAGE("Foe Slowpoke became confused!"); + MESSAGE("The opposing Slowpoke became confused!"); NONE_OF { ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponent); } ABILITY_POPUP(opponent, ABILITY_OWN_TEMPO); - MESSAGE("Foe Slowpoke's Own Tempo cured its confusion problem!"); + MESSAGE("The opposing Slowpoke's Own Tempo cured its confusion problem!"); } } @@ -95,10 +95,10 @@ SINGLE_BATTLE_TEST("Own Tempo cures confusion if it's obtained via Skill Swap") } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SKILL_SWAP, player); ABILITY_POPUP(opponent, ABILITY_OWN_TEMPO); - MESSAGE("Foe Wobbuffet's Own Tempo cured its confusion problem!"); + MESSAGE("The opposing Wobbuffet's Own Tempo cured its confusion problem!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } } diff --git a/test/battle/ability/pastel_veil.c b/test/battle/ability/pastel_veil.c index ebf9d74645f0..9e2b19296c89 100644 --- a/test/battle/ability/pastel_veil.c +++ b/test/battle/ability/pastel_veil.c @@ -44,7 +44,7 @@ SINGLE_BATTLE_TEST("Pastel Veil immediately cures Mold Breaker poison") ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, player); STATUS_ICON(opponent, badPoison: TRUE); ABILITY_POPUP(opponent, ABILITY_PASTEL_VEIL); - MESSAGE("Foe Ponyta's Pastel Veil cured its poison problem!"); + MESSAGE("The opposing Ponyta's Pastel Veil cured its poison problem!"); STATUS_ICON(opponent, none: TRUE); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } @@ -78,7 +78,7 @@ SINGLE_BATTLE_TEST("Pastel Veil prevents Toxic bad poison") } SCENE { MESSAGE("Wobbuffet used Toxic!"); ABILITY_POPUP(opponent, ABILITY_PASTEL_VEIL); - MESSAGE("Foe Ponyta is protected by a pastel veil!"); + MESSAGE("The opposing Ponyta is protected by a pastel veil!"); NOT STATUS_ICON(opponent, badPoison: TRUE); } } @@ -96,7 +96,7 @@ DOUBLE_BATTLE_TEST("Pastel Veil prevents Toxic bad poison on partner") } SCENE { MESSAGE("Wobbuffet used Toxic!"); ABILITY_POPUP(opponentLeft, ABILITY_PASTEL_VEIL); - MESSAGE("Foe Wynaut is protected by a pastel veil!"); + MESSAGE("The opposing Wynaut is protected by a pastel veil!"); NOT STATUS_ICON(opponentRight, badPoison: TRUE); } } @@ -147,7 +147,7 @@ DOUBLE_BATTLE_TEST("Pastel Veil cures partner's poison on initial switch in") } SCENE { MESSAGE("2 sent out Wobbuffet and Ponyta!"); ABILITY_POPUP(opponentRight, ABILITY_PASTEL_VEIL); - MESSAGE("Foe Wobbuffet was cured of its poisoning!"); + MESSAGE("The opposing Wobbuffet was cured of its poisoning!"); STATUS_ICON(opponentLeft, none: TRUE); } } @@ -165,7 +165,7 @@ DOUBLE_BATTLE_TEST("Pastel Veil cures partner's poison on switch in") } SCENE { MESSAGE("2 sent out Ponyta!"); ABILITY_POPUP(opponentRight, ABILITY_PASTEL_VEIL); - MESSAGE("Foe Wobbuffet was cured of its poisoning!"); + MESSAGE("The opposing Wobbuffet was cured of its poisoning!"); STATUS_ICON(opponentLeft, none: TRUE); } } diff --git a/test/battle/ability/prankster.c b/test/battle/ability/prankster.c index d6c5a924629a..2bf24fe67f31 100644 --- a/test/battle/ability/prankster.c +++ b/test/battle/ability/prankster.c @@ -114,7 +114,7 @@ DOUBLE_BATTLE_TEST("Moves called via Prankster-affected After you affect Dark-ty ANIMATION(ANIM_TYPE_MOVE, MOVE_AFTER_YOU, playerLeft); MESSAGE("Wobbuffet used Confuse Ray!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, playerRight); - MESSAGE("Foe Umbreon became confused!"); + MESSAGE("The opposing Umbreon became confused!"); } } @@ -156,10 +156,10 @@ SINGLE_BATTLE_TEST("Prankster-affected moves can still be bounced back by Dark-t TURN { MOVE(player, MOVE_MAGIC_COAT); MOVE(opponent, MOVE_CONFUSE_RAY); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_MAGIC_COAT, player); - MESSAGE("Foe Volbeat used Confuse Ray!"); - MESSAGE("Foe Volbeat's Confuse Ray was bounced back by MAGIC COAT!"); + MESSAGE("The opposing Volbeat used Confuse Ray!"); + MESSAGE("The opposing Volbeat's Confuse Ray was bounced back by MAGIC COAT!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player); - MESSAGE("Foe Volbeat became confused!"); + MESSAGE("The opposing Volbeat became confused!"); } } @@ -178,14 +178,14 @@ SINGLE_BATTLE_TEST("Prankster-affected moves which are reflected by Magic Coat c } SCENE { MESSAGE("Sableye used Magic Coat!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_MAGIC_COAT, player); - MESSAGE("Foe Murkrow used Confuse Ray!"); - MESSAGE("Foe Murkrow's Confuse Ray was bounced back by MAGIC COAT!"); + MESSAGE("The opposing Murkrow used Confuse Ray!"); + MESSAGE("The opposing Murkrow's Confuse Ray was bounced back by MAGIC COAT!"); if (sableyeAbility == ABILITY_PRANKSTER) { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player); MESSAGE("It doesn't affect Foe Murkrow…"); } else { ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player); - MESSAGE("Foe Murkrow became confused!"); + MESSAGE("The opposing Murkrow became confused!"); } } } @@ -198,7 +198,7 @@ SINGLE_BATTLE_TEST("Prankster-affected moves can still be bounced back by a Dark } WHEN { TURN { MOVE(player, MOVE_CELEBRATE, megaEvolve: TRUE); MOVE(opponent, MOVE_CONFUSE_RAY); } } SCENE { - MESSAGE("Foe Volbeat's Confuse Ray was bounced back by Absol's Magic Bounce!"); + MESSAGE("The opposing Volbeat's Confuse Ray was bounced back by Absol's Magic Bounce!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player); } } @@ -211,9 +211,9 @@ SINGLE_BATTLE_TEST("Prankster-affected moves that are bounced back by Magic Boun } WHEN { TURN { MOVE(player, MOVE_CELEBRATE, megaEvolve: TRUE); MOVE(opponent, MOVE_CONFUSE_RAY); } } SCENE { - MESSAGE("Foe Murkrow's Confuse Ray was bounced back by Absol's Magic Bounce!"); + MESSAGE("The opposing Murkrow's Confuse Ray was bounced back by Absol's Magic Bounce!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player); - MESSAGE("Foe Murkrow became confused!"); + MESSAGE("The opposing Murkrow became confused!"); } } diff --git a/test/battle/ability/primordial_sea.c b/test/battle/ability/primordial_sea.c index 4fd01613b03e..1d90a63c770c 100644 --- a/test/battle/ability/primordial_sea.c +++ b/test/battle/ability/primordial_sea.c @@ -16,11 +16,11 @@ SINGLE_BATTLE_TEST("Primordial Sea blocks damaging Fire-type moves") TURN { MOVE(opponent, MOVE_EMBER); } TURN { MOVE(opponent, MOVE_EMBER); } } SCENE { - MESSAGE("Foe Wobbuffet used Ember!"); + MESSAGE("The opposing Wobbuffet used Ember!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, opponent); MESSAGE("The Fire-type attack fizzled out\nin the heavy rain!"); NOT HP_BAR(player); - MESSAGE("Foe Wobbuffet used Ember!"); + MESSAGE("The opposing Wobbuffet used Ember!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, opponent); MESSAGE("The Fire-type attack fizzled out\nin the heavy rain!"); NOT HP_BAR(player); @@ -42,7 +42,7 @@ DOUBLE_BATTLE_TEST("Primordial Sea blocks damaging Fire-type moves and prints th } WHEN { TURN { MOVE(opponentLeft, MOVE_ERUPTION); } } SCENE { - MESSAGE("Foe Wobbuffet used Eruption!"); + MESSAGE("The opposing Wobbuffet used Eruption!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_ERUPTION, opponentLeft); MESSAGE("The Fire-type attack fizzled out\nin the heavy rain!"); NOT MESSAGE("The Fire-type attack fizzled out\nin the heavy rain!"); @@ -61,6 +61,6 @@ SINGLE_BATTLE_TEST("Primordial Sea does not block a move if pokemon is asleep an TURN { MOVE(opponent, MOVE_EMBER); } } SCENE { NOT MESSAGE("The Fire-type attack fizzled out\nin the heavy rain!"); - MESSAGE("Foe Wobbuffet is fast asleep."); + MESSAGE("The opposing Wobbuffet is fast asleep."); } } \ No newline at end of file diff --git a/test/battle/ability/protean.c b/test/battle/ability/protean.c index 936c341f8992..93162f7398c5 100644 --- a/test/battle/ability/protean.c +++ b/test/battle/ability/protean.c @@ -20,15 +20,15 @@ SINGLE_BATTLE_TEST("Protean changes the type of the user only once per switch in TURN { MOVE(opponent, MOVE_WATER_GUN); } } SCENE { ABILITY_POPUP(opponent, ABILITY_PROTEAN); - MESSAGE("Foe Kecleon transformed into the Water type!"); + MESSAGE("The opposing Kecleon transformed into the Water type!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_GUN, opponent); NONE_OF { ABILITY_POPUP(opponent, ABILITY_PROTEAN); - MESSAGE("Foe Kecleon transformed into the Normal type!"); + MESSAGE("The opposing Kecleon transformed into the Normal type!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); ABILITY_POPUP(opponent, ABILITY_PROTEAN); - MESSAGE("Foe Kecleon transformed into the Water type!"); + MESSAGE("The opposing Kecleon transformed into the Water type!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_GUN, opponent); } } diff --git a/test/battle/ability/quick_draw.c b/test/battle/ability/quick_draw.c index cdf237475b52..6fe61ef05c3d 100644 --- a/test/battle/ability/quick_draw.c +++ b/test/battle/ability/quick_draw.c @@ -12,7 +12,7 @@ SINGLE_BATTLE_TEST("Quick Draw has a 30% chance of going first") } SCENE { ABILITY_POPUP(player, ABILITY_QUICK_DRAW); MESSAGE("Slowbro used Tackle!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } } @@ -26,7 +26,7 @@ SINGLE_BATTLE_TEST("Quick Draw does not activate 70% of the time") TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_TACKLE); } } SCENE { NOT ABILITY_POPUP(player, ABILITY_QUICK_DRAW); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Slowbro used Tackle!"); } } diff --git a/test/battle/ability/rattled.c b/test/battle/ability/rattled.c index c63e24557564..10af376a5838 100644 --- a/test/battle/ability/rattled.c +++ b/test/battle/ability/rattled.c @@ -32,22 +32,22 @@ SINGLE_BATTLE_TEST("Rattled boosts speed by 1 when hit by Bug, Dark or Ghost typ if (move != MOVE_TACKLE) { ABILITY_POPUP(opponent, ABILITY_RATTLED); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Sudowoodo's Speed rose!"); + MESSAGE("The opposing Sudowoodo's Speed rose!"); } - MESSAGE("Foe Sudowoodo used Celebrate!"); + MESSAGE("The opposing Sudowoodo used Celebrate!"); // Sudowoodo is now faster if (move != MOVE_TACKLE){ - MESSAGE("Foe Sudowoodo used Celebrate!"); + MESSAGE("The opposing Sudowoodo used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, move, player); HP_BAR(opponent); ABILITY_POPUP(opponent, ABILITY_RATTLED); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Sudowoodo's Speed rose!"); + MESSAGE("The opposing Sudowoodo's Speed rose!"); } else { ANIMATION(ANIM_TYPE_MOVE, move, player); HP_BAR(opponent); - MESSAGE("Foe Sudowoodo used Celebrate!"); + MESSAGE("The opposing Sudowoodo used Celebrate!"); } } } @@ -66,7 +66,7 @@ SINGLE_BATTLE_TEST("Rattled boosts speed by 1 when affected by Intimidate") MESSAGE("Gyarados's Intimidate cuts Foe Sudowoodo's attack!"); ABILITY_POPUP(opponent, ABILITY_RATTLED); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Sudowoodo's Speed rose!"); + MESSAGE("The opposing Sudowoodo's Speed rose!"); } } @@ -87,7 +87,7 @@ SINGLE_BATTLE_TEST("Rattled triggers correctly when hit by U-Turn") // Specific HP_BAR(opponent); ABILITY_POPUP(opponent, ABILITY_RATTLED); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Sudowoodo's Speed rose!"); + MESSAGE("The opposing Sudowoodo's Speed rose!"); MESSAGE("Go! Wynaut!"); } } diff --git a/test/battle/ability/sap_sipper.c b/test/battle/ability/sap_sipper.c index b253bfaa8458..01716d42271a 100644 --- a/test/battle/ability/sap_sipper.c +++ b/test/battle/ability/sap_sipper.c @@ -67,7 +67,7 @@ SINGLE_BATTLE_TEST("Sap Sipper blocks multi-hit grass type moves") } WHEN { TURN { MOVE(opponent, MOVE_BULLET_SEED); } } SCENE { - MESSAGE("Foe Shellder used Bullet Seed!"); + MESSAGE("The opposing Shellder used Bullet Seed!"); ABILITY_POPUP(player, ABILITY_SAP_SIPPER); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Marill's Attack rose!"); diff --git a/test/battle/ability/schooling.c b/test/battle/ability/schooling.c index efa38cbb68f7..19c2b14c8fd8 100644 --- a/test/battle/ability/schooling.c +++ b/test/battle/ability/schooling.c @@ -25,7 +25,7 @@ SINGLE_BATTLE_TEST("Schooling switches Level 20+ Wishiwashi's form when HP is 25 ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); } MESSAGE("Wishiwashi used Celebrate!"); - MESSAGE("Foe Wobbuffet used Super Fang!"); + MESSAGE("The opposing Wobbuffet used Super Fang!"); HP_BAR(player); if (level >= 20) { @@ -64,7 +64,7 @@ SINGLE_BATTLE_TEST("Schooling switches Level 20+ Wishiwashi's form when HP is ov ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); } MESSAGE("Wishiwashi used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } THEN { if (level >= 20 && overQuarterHP) EXPECT_EQ(player->species, SPECIES_WISHIWASHI_SCHOOL); @@ -92,7 +92,7 @@ SINGLE_BATTLE_TEST("Schooling switches Level 20+ Wishiwashi's form when HP is he TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_HEAL_PULSE); } } SCENE { MESSAGE("Wishiwashi used Celebrate!"); - MESSAGE("Foe Wobbuffet used Heal Pulse!"); + MESSAGE("The opposing Wobbuffet used Heal Pulse!"); HP_BAR(player); if (level >= 20) { diff --git a/test/battle/ability/scrappy.c b/test/battle/ability/scrappy.c index 22b6660b691b..26a135860c3a 100644 --- a/test/battle/ability/scrappy.c +++ b/test/battle/ability/scrappy.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Scrappy prevents intimidate") ABILITY_POPUP(player, ABILITY_INTIMIDATE); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } ABILITY_POPUP(opponent, ABILITY_SCRAPPY); - MESSAGE("Foe Kangaskhan's Scrappy prevents stat loss!"); + MESSAGE("The opposing Kangaskhan's Scrappy prevents stat loss!"); HP_BAR(player, captureDamage: &turnTwoHit); } THEN { EXPECT_EQ(turnOneHit, turnTwoHit); @@ -61,6 +61,6 @@ SINGLE_BATTLE_TEST("Scrappy doesn't bypass a Ghost-type's Wonder Guard") HP_BAR(opponent); } ABILITY_POPUP(opponent, ABILITY_WONDER_GUARD); - MESSAGE("Foe Shedinja avoided damage with Wonder Guard!"); + MESSAGE("The opposing Shedinja avoided damage with Wonder Guard!"); } } diff --git a/test/battle/ability/seed_sower.c b/test/battle/ability/seed_sower.c index 64c21dbdba08..822fa8b703ed 100644 --- a/test/battle/ability/seed_sower.c +++ b/test/battle/ability/seed_sower.c @@ -9,7 +9,7 @@ SINGLE_BATTLE_TEST("Seed Sower sets up Grassy Terrain when hit by an attack") } WHEN { TURN { MOVE(opponent, MOVE_TACKLE); } } SCENE { - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); HP_BAR(player); ABILITY_POPUP(player); MESSAGE("Grass grew to cover the battlefield!"); diff --git a/test/battle/ability/shield_dust.c b/test/battle/ability/shield_dust.c index 0c4ba99a8315..43c0b2abc29c 100644 --- a/test/battle/ability/shield_dust.c +++ b/test/battle/ability/shield_dust.c @@ -28,12 +28,12 @@ SINGLE_BATTLE_TEST("Shield Dust blocks secondary effects") ANIMATION(ANIM_TYPE_MOVE, move, player); HP_BAR(opponent); NONE_OF { - MESSAGE("Foe Vivillon is paralyzed! It may be unable to move!"); - MESSAGE("Foe Vivillon was burned!"); - MESSAGE("Foe Vivillon was poisoned!"); - MESSAGE("Foe Vivillon flinched!"); + MESSAGE("The opposing Vivillon is paralyzed, so it may be unable to move!"); + MESSAGE("The opposing Vivillon was burned!"); + MESSAGE("The opposing Vivillon was poisoned!"); + MESSAGE("The opposing Vivillon flinched!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Vivillon was prevented from healing!"); + MESSAGE("The opposing Vivillon was prevented from healing!"); } } THEN { // Can't find good way to test trapping EXPECT(!(opponent->status2 & STATUS2_ESCAPE_PREVENTION)); @@ -64,16 +64,16 @@ SINGLE_BATTLE_TEST("Shield Dust does not block primary effects") switch (move) { case MOVE_INFESTATION: - MESSAGE("Foe Vivillon has been afflicted with an infestation by Wobbuffet!"); + MESSAGE("The opposing Vivillon has been afflicted with an infestation by Wobbuffet!"); break; case MOVE_THOUSAND_ARROWS: - MESSAGE("Foe Vivillon fell straight down!"); + MESSAGE("The opposing Vivillon fell straight down!"); break; case MOVE_JAW_LOCK: MESSAGE("Neither Pokémon can run away!"); break; case MOVE_PAY_DAY: - MESSAGE("Coins scattered everywhere!"); + MESSAGE("Coins were scattered everywhere!"); break; } } THEN { // Can't find good way to test trapping @@ -133,7 +133,7 @@ DOUBLE_BATTLE_TEST("Shield Dust does not block Sparkling Aria in doubles") TURN { MOVE(playerLeft, MOVE_SPARKLING_ARIA); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPARKLING_ARIA, playerLeft); - MESSAGE("Foe Vivillion's burn was healed."); + MESSAGE("The opposing Vivillion's burn was healed."); STATUS_ICON(opponentLeft, burn: TRUE); } } diff --git a/test/battle/ability/speed_boost.c b/test/battle/ability/speed_boost.c index 0cc82e80643f..49af39c1088f 100644 --- a/test/battle/ability/speed_boost.c +++ b/test/battle/ability/speed_boost.c @@ -10,11 +10,11 @@ SINGLE_BATTLE_TEST("Speed Boost gradually boosts Speed") TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Torchic used Celebrate!"); ABILITY_POPUP(player, ABILITY_SPEED_BOOST); MESSAGE("Torchic's Speed Boost raised its SPEED!"); MESSAGE("Torchic used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } } diff --git a/test/battle/ability/stamina.c b/test/battle/ability/stamina.c index e6e500cd797c..3402ffc969ff 100644 --- a/test/battle/ability/stamina.c +++ b/test/battle/ability/stamina.c @@ -98,8 +98,8 @@ SINGLE_BATTLE_TEST("Stamina activates for every hit of a multi hit move") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_KICK, player); HP_BAR(opponent); - STAMINA_STAT_RAISE(opponent, "Foe Mudbray's Defense rose!"); - STAMINA_STAT_RAISE(opponent, "Foe Mudbray's Defense rose!"); + STAMINA_STAT_RAISE(opponent, "The opposing Mudbray's Defense rose!"); + STAMINA_STAT_RAISE(opponent, "The opposing Mudbray's Defense rose!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 2); } diff --git a/test/battle/ability/static.c b/test/battle/ability/static.c index 0f1b4f816fe6..df87f5ffa3b4 100644 --- a/test/battle/ability/static.c +++ b/test/battle/ability/static.c @@ -17,13 +17,13 @@ SINGLE_BATTLE_TEST("Static inflicts paralysis on contact") if (gMovesInfo[move].makesContact) { ABILITY_POPUP(opponent, ABILITY_STATIC); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, player); - MESSAGE("Foe Pikachu's Static paralyzed Wobbuffet! It may be unable to move!"); + MESSAGE("The opposing Pikachu's Static paralyzed Wobbuffet! It may be unable to move!"); STATUS_ICON(player, paralysis: TRUE); } else { NONE_OF { ABILITY_POPUP(opponent, ABILITY_STATIC); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, player); - MESSAGE("Foe Pikachu's Static paralyzed Wobbuffet! It may be unable to move!"); + MESSAGE("The opposing Pikachu's Static paralyzed Wobbuffet! It may be unable to move!"); STATUS_ICON(player, paralysis: TRUE); } } diff --git a/test/battle/ability/stench.c b/test/battle/ability/stench.c index f0c0e244145f..3ea2937b9cb3 100644 --- a/test/battle/ability/stench.c +++ b/test/battle/ability/stench.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Stench has a 10% chance to flinch") } WHEN { TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched!"); } } @@ -27,7 +27,7 @@ SINGLE_BATTLE_TEST("Stench does not stack with King's Rock") } WHEN { TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched!"); } } @@ -72,7 +72,7 @@ DOUBLE_BATTLE_TEST("Stench doesn't trigger if partner uses a move") } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, playerLeft); - MESSAGE("Foe Grimer flinched!"); + MESSAGE("The opposing Grimer flinched!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); NOT MESSAGE("Wynaut flinched!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerRight); diff --git a/test/battle/ability/sturdy.c b/test/battle/ability/sturdy.c index b90be8209883..b79fd5e92196 100644 --- a/test/battle/ability/sturdy.c +++ b/test/battle/ability/sturdy.c @@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Sturdy prevents OHKO moves") } WHEN { TURN { MOVE(opponent, MOVE_FISSURE); } } SCENE { - MESSAGE("Foe Wobbuffet used Fissure!"); + MESSAGE("The opposing Wobbuffet used Fissure!"); ABILITY_POPUP(player, ABILITY_STURDY); MESSAGE("Geodude was protected by Sturdy!"); } THEN { diff --git a/test/battle/ability/tangling_hair.c b/test/battle/ability/tangling_hair.c index 0dbc0264cecc..f350a8628057 100644 --- a/test/battle/ability/tangling_hair.c +++ b/test/battle/ability/tangling_hair.c @@ -27,7 +27,7 @@ SINGLE_BATTLE_TEST("Tangling Hair drops opposing mon's speed if ability user got if (move == MOVE_TACKLE) { ABILITY_POPUP(player, ABILITY_TANGLING_HAIR); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wynaut's Speed fell!"); + MESSAGE("The opposing Wynaut's Speed fell!"); } } } @@ -44,9 +44,9 @@ SINGLE_BATTLE_TEST("Tangling Hair does not cause Rocky Helmet miss activation") ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); ABILITY_POPUP(player, ABILITY_TANGLING_HAIR); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wynaut's Speed fell!"); + MESSAGE("The opposing Wynaut's Speed fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Foe Wynaut was hurt by Dugtrio's Rocky Helmet!"); + MESSAGE("The opposing Wynaut was hurt by Dugtrio's Rocky Helmet!"); } } @@ -61,8 +61,8 @@ SINGLE_BATTLE_TEST("Tangling Hair Speed stat drop triggers defiant") ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); ABILITY_POPUP(player, ABILITY_TANGLING_HAIR); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Pawniard's Speed fell!"); + MESSAGE("The opposing Pawniard's Speed fell!"); ABILITY_POPUP(opponent, ABILITY_DEFIANT); - MESSAGE("Foe Pawniard's Attack sharply rose!"); + MESSAGE("The opposing Pawniard's Attack sharply rose!"); } } diff --git a/test/battle/ability/white_smoke.c b/test/battle/ability/white_smoke.c index 7bedbca24298..ef40006a071d 100644 --- a/test/battle/ability/white_smoke.c +++ b/test/battle/ability/white_smoke.c @@ -19,7 +19,7 @@ SINGLE_BATTLE_TEST("White Smoke prevents intimidate") ABILITY_POPUP(player, ABILITY_INTIMIDATE); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } ABILITY_POPUP(opponent, ABILITY_WHITE_SMOKE); - MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); + MESSAGE("The opposing Torkoal's White Smoke prevents stat loss!"); HP_BAR(player, captureDamage: &turnTwoHit); } THEN { EXPECT_EQ(turnOneHit, turnTwoHit); diff --git a/test/battle/ability/zen_mode.c b/test/battle/ability/zen_mode.c index 2734f7a9ec6a..c081f308b3d5 100644 --- a/test/battle/ability/zen_mode.c +++ b/test/battle/ability/zen_mode.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Zen Mode switches Darmanitan's form when HP is half or less TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_TACKLE); } } SCENE { MESSAGE("Darmanitan used Celebrate!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); HP_BAR(player); ABILITY_POPUP(player, ABILITY_ZEN_MODE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); @@ -51,7 +51,7 @@ SINGLE_BATTLE_TEST("Zen Mode switches Darmanitan's form when HP is half or less ABILITY_POPUP(player, ABILITY_ZEN_MODE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); MESSAGE("Darmanitan used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } THEN { EXPECT_LE(player->hp, player->maxHP / 2); EXPECT_EQ(player->species, zenSpecies); @@ -79,7 +79,7 @@ SINGLE_BATTLE_TEST("Zen Mode switches Darmanitan's form when HP is healed above ABILITY_POPUP(player, ABILITY_ZEN_MODE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); MESSAGE("Darmanitan used Celebrate!"); - MESSAGE("Foe Wobbuffet used Heal Pulse!"); + MESSAGE("The opposing Wobbuffet used Heal Pulse!"); HP_BAR(player); ABILITY_POPUP(player, ABILITY_ZEN_MODE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); diff --git a/test/battle/ability/zero_to_hero.c b/test/battle/ability/zero_to_hero.c index 8fb901c1c357..68974bd31c86 100644 --- a/test/battle/ability/zero_to_hero.c +++ b/test/battle/ability/zero_to_hero.c @@ -50,7 +50,7 @@ SINGLE_BATTLE_TEST("Zero to Hero transforms both player and opponent") ABILITY_POPUP(player, ABILITY_ZERO_TO_HERO); MESSAGE("Palafin underwent a heroic transformation!"); ABILITY_POPUP(opponent, ABILITY_ZERO_TO_HERO); - MESSAGE("Foe Palafin underwent a heroic transformation!"); + MESSAGE("The opposing Palafin underwent a heroic transformation!"); } THEN { EXPECT_EQ(player->species, SPECIES_PALAFIN_HERO); EXPECT_EQ(opponent->species, SPECIES_PALAFIN_HERO); @@ -131,7 +131,7 @@ SINGLE_BATTLE_TEST("Transform doesn't apply the heroic transformation message wh ABILITY_POPUP(player, ABILITY_ZERO_TO_HERO); MESSAGE("Palafin underwent a heroic transformation!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TRANSFORM, opponent); - MESSAGE("Foe Wobbuffet transformed into Palafin!"); + MESSAGE("The opposing Wobbuffet transformed into Palafin!"); NOT ABILITY_POPUP(opponent, ABILITY_ZERO_TO_HERO); } THEN { EXPECT_EQ(player->species, SPECIES_PALAFIN_HERO); } } @@ -150,10 +150,10 @@ SINGLE_BATTLE_TEST("Imposter doesn't apply the heroic transformation message whe ABILITY_POPUP(player, ABILITY_ZERO_TO_HERO); MESSAGE("Palafin underwent a heroic transformation!"); ABILITY_POPUP(opponent, ABILITY_IMPOSTER); - MESSAGE("Foe Ditto transformed into Palafin using Imposter!"); + MESSAGE("The opposing Ditto transformed into Palafin using Imposter!"); NONE_OF { ABILITY_POPUP(opponent, ABILITY_ZERO_TO_HERO); - MESSAGE("Foe Ditto underwent a heroic transformation!"); + MESSAGE("The opposing Ditto underwent a heroic transformation!"); } } THEN { EXPECT_EQ(player->species, SPECIES_PALAFIN_HERO); } } @@ -169,7 +169,7 @@ SINGLE_BATTLE_TEST("Zero to Hero cannot be copied by Trace") } SCENE { NONE_OF { ABILITY_POPUP(opponent, ABILITY_TRACE); - MESSAGE("Foe Ralts Traced Palafin's Zero to Hero!"); + MESSAGE("The opposing Ralts Traced Palafin's Zero to Hero!"); } } } diff --git a/test/battle/ai.c b/test/battle/ai.c index 7b9d07429e19..dccd3b33502b 100644 --- a/test/battle/ai.c +++ b/test/battle/ai.c @@ -439,7 +439,7 @@ AI_DOUBLE_BATTLE_TEST("AI will not use Helping Hand if partner does not have any SCORE_LT_VAL(opponentLeft, MOVE_HELPING_HAND, AI_SCORE_DEFAULT, target:opponentLeft); } } SCENE { - NOT MESSAGE("Foe Wobbuffet used Helping Hand!"); + NOT MESSAGE("The opposing Wobbuffet used Helping Hand!"); } } @@ -468,7 +468,7 @@ AI_DOUBLE_BATTLE_TEST("AI will not use a status move if partner already chose He SCORE_LT_VAL(opponentRight, statusMove, AI_SCORE_DEFAULT, target:opponentLeft); } } SCENE { - MESSAGE("Foe Wobbuffet used Helping Hand!"); + MESSAGE("The opposing Wobbuffet used Helping Hand!"); } } @@ -550,7 +550,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI will not switch in a Pokemo } WHEN { TURN { MOVE(player, MOVE_NIGHT_SLASH) ; EXPECT_SEND_OUT(opponent, alakazamFirst ? 1 : 2); } // AI doesn't send out Alakazam if it gets outsped } SCENE { - MESSAGE("Foe Kadabra fainted!"); + MESSAGE("The opposing Kadabra fainted!"); if (alakazamFirst) { MESSAGE("{PKMN} TRAINER LEAF sent out Alakazam!"); } else { diff --git a/test/battle/ai_check_viability.c b/test/battle/ai_check_viability.c index dcbcf8dbec08..707d3f8e68bd 100644 --- a/test/battle/ai_check_viability.c +++ b/test/battle/ai_check_viability.c @@ -167,7 +167,7 @@ AI_SINGLE_BATTLE_TEST("AI can choose Counter or Mirror Coat if the predicted mov TURN { MOVE(player, playerMove); EXPECT_MOVE(opponent, opponentMove); } TURN { MOVE(player, playerMove); EXPECT_MOVE(opponent, MOVE_STRENGTH); } } SCENE { - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); } } diff --git a/test/battle/ai_trytofaint.c b/test/battle/ai_trytofaint.c index 9e7d7e3ba89f..44c208c96340 100644 --- a/test/battle/ai_trytofaint.c +++ b/test/battle/ai_trytofaint.c @@ -43,6 +43,6 @@ AI_SINGLE_BATTLE_TEST("AI will choose a priority move if it is slower then the t TURN { MOVE(player, MOVE_STRENGTH); EXPECT_MOVE(opponent, MOVE_STRENGTH); } TURN { MOVE(player, MOVE_STRENGTH); EXPECT_MOVE(opponent, MOVE_QUICK_ATTACK); } } SCENE { - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); } } diff --git a/test/battle/exp.c b/test/battle/exp.c index a7879b692c86..7e232f54829a 100644 --- a/test/battle/exp.c +++ b/test/battle/exp.c @@ -40,7 +40,7 @@ WILD_BATTLE_TEST("Higher leveled Pokemon give more exp", s32 exp) TURN { MOVE(player, MOVE_TACKLE); } } SCENE { MESSAGE("Wobbuffet used Tackle!"); - MESSAGE("Wild Caterpie fainted!"); + MESSAGE("The wild Caterpie fainted!"); EXPERIENCE_BAR(player, captureGainedExp: &results[i].exp); } FINALLY { EXPECT_GT(results[1].exp, results[0].exp); @@ -61,7 +61,7 @@ WILD_BATTLE_TEST("Lucky Egg boosts gained exp points by 50%", s32 exp) TURN { MOVE(player, MOVE_TACKLE); } } SCENE { MESSAGE("Wobbuffet used Tackle!"); - MESSAGE("Wild Caterpie fainted!"); + MESSAGE("The wild Caterpie fainted!"); EXPERIENCE_BAR(player, captureGainedExp: &results[i].exp); } FINALLY { EXPECT_MUL_EQ(results[1].exp, Q_4_12(1.5), results[0].exp); @@ -84,7 +84,7 @@ WILD_BATTLE_TEST("Exp is scaled to player and opponent's levels", s32 exp) TURN { MOVE(player, MOVE_TACKLE); } } SCENE { MESSAGE("Wobbuffet used Tackle!"); - MESSAGE("Wild Caterpie fainted!"); + MESSAGE("The wild Caterpie fainted!"); EXPERIENCE_BAR(player, captureGainedExp: &results[i].exp); } FINALLY { EXPECT_GT(results[0].exp, results[1].exp); @@ -108,7 +108,7 @@ WILD_BATTLE_TEST("Large exp gains are supported", s32 exp) // #1455 TURN { MOVE(player, MOVE_TACKLE); } } SCENE { MESSAGE("Wobbuffet used Tackle!"); - MESSAGE("Wild Blissey fainted!"); + MESSAGE("The wild Blissey fainted!"); EXPERIENCE_BAR(player, captureGainedExp: &results[i].exp); } THEN { EXPECT(GetMonData(&gPlayerParty[0], MON_DATA_LEVEL) > 1); @@ -136,7 +136,7 @@ WILD_BATTLE_TEST("Exp Share(held) gives Experience to mons which did not partici TURN { MOVE(player, MOVE_TACKLE); } } SCENE { MESSAGE("Wobbuffet used Tackle!"); - MESSAGE("Wild Caterpie fainted!"); + MESSAGE("The wild Caterpie fainted!"); // This message should appear only for gen6> exp share. NOT MESSAGE("The rest of your team gained EXP. Points thanks to the Exp. Share!"); } THEN { diff --git a/test/battle/form_change/battle_switch.c b/test/battle/form_change/battle_switch.c index ba564a02a170..ca7eafd8bf35 100644 --- a/test/battle/form_change/battle_switch.c +++ b/test/battle/form_change/battle_switch.c @@ -15,7 +15,7 @@ SINGLE_BATTLE_TEST("Aegislash reverts to Shield Form upon switching out") ABILITY_POPUP(player, ABILITY_STANCE_CHANGE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); MESSAGE("Aegislash used Tackle!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } THEN { EXPECT_EQ(player->species, SPECIES_AEGISLASH_SHIELD); } diff --git a/test/battle/form_change/faint.c b/test/battle/form_change/faint.c index 849d8e5883c5..dffabb44de1c 100644 --- a/test/battle/form_change/faint.c +++ b/test/battle/form_change/faint.c @@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Aegislash reverts to Shield Form upon fainting") } WHEN { TURN { MOVE(opponent, MOVE_GUST); SEND_OUT(player, 1); } } SCENE { - MESSAGE("Foe Wobbuffet used Gust!"); + MESSAGE("The opposing Wobbuffet used Gust!"); MESSAGE("Aegislash fainted!"); } THEN { EXPECT_EQ(GetMonData(&PLAYER_PARTY[0], MON_DATA_SPECIES), SPECIES_AEGISLASH_SHIELD); diff --git a/test/battle/form_change/mega_evolution.c b/test/battle/form_change/mega_evolution.c index b2426933f767..2beb2ed3bc34 100644 --- a/test/battle/form_change/mega_evolution.c +++ b/test/battle/form_change/mega_evolution.c @@ -27,9 +27,9 @@ DOUBLE_BATTLE_TEST("Mega Evolution's order is determined by Speed - opponent fas } WHEN { TURN { MOVE(opponentLeft, MOVE_CELEBRATE, megaEvolve: TRUE); MOVE(playerLeft, MOVE_CELEBRATE, megaEvolve: TRUE); } } SCENE { - MESSAGE("Foe Gardevoir's Gardevoirite is reacting to 2's Mega Ring!"); + MESSAGE("The opposing Gardevoir's Gardevoirite is reacting to 2's Mega Ring!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponentLeft); - MESSAGE("Foe Gardevoir has Mega Evolved into Mega Gardevoir!"); + MESSAGE("The opposing Gardevoir has Mega Evolved into Mega Gardevoir!"); MESSAGE("Venusaur's Venusaurite is reacting to 1's Mega Ring!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, playerLeft); MESSAGE("Venusaur has Mega Evolved into Mega Venusaur!"); @@ -49,9 +49,9 @@ DOUBLE_BATTLE_TEST("Mega Evolution's order is determined by Speed - player faste MESSAGE("Venusaur's Venusaurite is reacting to 1's Mega Ring!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, playerLeft); MESSAGE("Venusaur has Mega Evolved into Mega Venusaur!"); - MESSAGE("Foe Gardevoir's Gardevoirite is reacting to 2's Mega Ring!"); + MESSAGE("The opposing Gardevoir's Gardevoirite is reacting to 2's Mega Ring!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponentLeft); - MESSAGE("Foe Gardevoir has Mega Evolved into Mega Gardevoir!"); + MESSAGE("The opposing Gardevoir has Mega Evolved into Mega Gardevoir!"); } } @@ -81,7 +81,7 @@ SINGLE_BATTLE_TEST("Mega Evolution affects turn order") TURN { MOVE(player, MOVE_CELEBRATE, megaEvolve: TRUE); } } SCENE { MESSAGE("Gardevoir used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } THEN { ASSUME(player->speed == 205); } @@ -99,7 +99,7 @@ SINGLE_BATTLE_TEST("Abilities replaced by Mega Evolution do not affect turn orde TURN { MOVE(player, MOVE_CELEBRATE, megaEvolve: TRUE); } } SCENE { MESSAGE("Sableye used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } THEN { ASSUME(player->speed == 45); } @@ -145,9 +145,9 @@ SINGLE_BATTLE_TEST("Regular Mega Evolution and Fervent Wish Mega Evolution can h ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player); MESSAGE("Rayquaza has Mega Evolved into Mega Rayquaza!"); - MESSAGE("Foe Gardevoir's Gardevoirite is reacting to 2's Mega Ring!"); + MESSAGE("The opposing Gardevoir's Gardevoirite is reacting to 2's Mega Ring!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); - MESSAGE("Foe Gardevoir has Mega Evolved into Mega Gardevoir!"); + MESSAGE("The opposing Gardevoir has Mega Evolved into Mega Gardevoir!"); } THEN { EXPECT_EQ(player->species, SPECIES_RAYQUAZA_MEGA); EXPECT_EQ(opponent->species, SPECIES_GARDEVOIR_MEGA); diff --git a/test/battle/form_change/primal_reversion.c b/test/battle/form_change/primal_reversion.c index f978d13b2869..ad87bf77c751 100644 --- a/test/battle/form_change/primal_reversion.c +++ b/test/battle/form_change/primal_reversion.c @@ -47,12 +47,12 @@ SINGLE_BATTLE_TEST("Primal reversion happens for Kyogre only when holding Blue O } SCENE { if (heldItem == ITEM_BLUE_ORB) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, opponent); - MESSAGE("Foe Kyogre's Primal Reversion! It reverted to its primal form!"); + MESSAGE("The opposing Kyogre's Primal Reversion! It reverted to its primal form!"); } else { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, opponent); - MESSAGE("Foe Kyogre's Primal Reversion! It reverted to its primal form!"); + MESSAGE("The opposing Kyogre's Primal Reversion! It reverted to its primal form!"); } } } THEN { @@ -76,11 +76,11 @@ DOUBLE_BATTLE_TEST("Primal reversion's order is determined by Speed - opponent f TURN { MOVE(opponentLeft, MOVE_CELEBRATE); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, opponentRight); - MESSAGE("Foe Kyogre's Primal Reversion! It reverted to its primal form!"); + MESSAGE("The opposing Kyogre's Primal Reversion! It reverted to its primal form!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, playerRight); MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, opponentLeft); - MESSAGE("Foe Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("The opposing Groudon's Primal Reversion! It reverted to its primal form!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, playerLeft); MESSAGE("Kyogre's Primal Reversion! It reverted to its primal form!"); } THEN { @@ -106,9 +106,9 @@ DOUBLE_BATTLE_TEST("Primal reversion's order is determined by Speed - player fas ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, playerLeft); MESSAGE("Kyogre's Primal Reversion! It reverted to its primal form!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, opponentLeft); - MESSAGE("Foe Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("The opposing Groudon's Primal Reversion! It reverted to its primal form!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, opponentRight); - MESSAGE("Foe Kyogre's Primal Reversion! It reverted to its primal form!"); + MESSAGE("The opposing Kyogre's Primal Reversion! It reverted to its primal form!"); } THEN { EXPECT_EQ(playerLeft->species, SPECIES_KYOGRE_PRIMAL); EXPECT_EQ(opponentLeft->species, SPECIES_GROUDON_PRIMAL); @@ -185,7 +185,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a switch-in caused by Red Car } WHEN { TURN { MOVE(player, MOVE_TACKLE); } } SCENE { - MESSAGE("Foe Wobbuffet held up its Red Card against Wobbuffet!"); + MESSAGE("The opposing Wobbuffet held up its Red Card against Wobbuffet!"); MESSAGE("Groudon was dragged out!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player); MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); diff --git a/test/battle/form_change/ultra_burst.c b/test/battle/form_change/ultra_burst.c index f2c7b1da2ba6..290a6346c55c 100644 --- a/test/battle/form_change/ultra_burst.c +++ b/test/battle/form_change/ultra_burst.c @@ -29,7 +29,7 @@ DOUBLE_BATTLE_TEST("Ultra Burst's order is determined by Speed - opponent faster } SCENE { MESSAGE("Bright light is about to burst out of Foe Necrozma!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, opponentLeft); - MESSAGE("Foe Necrozma regained its true power through Ultra Burst!"); + MESSAGE("The opposing Necrozma regained its true power through Ultra Burst!"); MESSAGE("Bright light is about to burst out of Necrozma!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, playerLeft); MESSAGE("Necrozma regained its true power through Ultra Burst!"); @@ -51,7 +51,7 @@ DOUBLE_BATTLE_TEST("Ultra Burst's order is determined by Speed - player faster") MESSAGE("Necrozma regained its true power through Ultra Burst!"); MESSAGE("Bright light is about to burst out of Foe Necrozma!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, opponentLeft); - MESSAGE("Foe Necrozma regained its true power through Ultra Burst!"); + MESSAGE("The opposing Necrozma regained its true power through Ultra Burst!"); } } @@ -65,7 +65,7 @@ SINGLE_BATTLE_TEST("Ultra Burst affects turn order") TURN { MOVE(player, MOVE_CELEBRATE, ultraBurst: TRUE); } } SCENE { MESSAGE("Necrozma used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } THEN { ASSUME(player->speed == 263); } @@ -111,9 +111,9 @@ SINGLE_BATTLE_TEST("Ultra Burst and Mega Evolution can happen on the same turn") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, player); MESSAGE("Necrozma regained its true power through Ultra Burst!"); - MESSAGE("Foe Gardevoir's Gardevoirite is reacting to 2's Mega Ring!"); + MESSAGE("The opposing Gardevoir's Gardevoirite is reacting to 2's Mega Ring!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); - MESSAGE("Foe Gardevoir has Mega Evolved into Mega Gardevoir!"); + MESSAGE("The opposing Gardevoir has Mega Evolved into Mega Gardevoir!"); } THEN { EXPECT_EQ(player->species, SPECIES_NECROZMA_ULTRA); EXPECT_EQ(opponent->species, SPECIES_GARDEVOIR_MEGA); diff --git a/test/battle/hold_effect/air_balloon.c b/test/battle/hold_effect/air_balloon.c index 2851212391a1..293e1d80ca1f 100644 --- a/test/battle/hold_effect/air_balloon.c +++ b/test/battle/hold_effect/air_balloon.c @@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Air Balloon prevents the holder from taking damage from grou TURN { MOVE(opponent, MOVE_EARTHQUAKE); } } SCENE { MESSAGE("Wobbuffet floats in the air with its Air Balloon!"); - MESSAGE("Foe Wobbuffet used Earthquake!"); + MESSAGE("The opposing Wobbuffet used Earthquake!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponent); MESSAGE("It doesn't affect Wobbuffet…"); } @@ -33,7 +33,7 @@ SINGLE_BATTLE_TEST("Air Balloon pops when the holder is hit by a move that is no TURN { MOVE(opponent, MOVE_TACKLE); } } SCENE { MESSAGE("Wobbuffet floats in the air with its Air Balloon!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); MESSAGE("Wobbuffet's Air Balloon popped!"); } } @@ -48,9 +48,9 @@ SINGLE_BATTLE_TEST("Air Balloon no longer prevents the holder from taking damage TURN { MOVE(opponent, MOVE_EARTHQUAKE); } } SCENE { MESSAGE("Wobbuffet floats in the air with its Air Balloon!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); MESSAGE("Wobbuffet's Air Balloon popped!"); - MESSAGE("Foe Wobbuffet used Earthquake!"); + MESSAGE("The opposing Wobbuffet used Earthquake!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponent); NOT MESSAGE("It doesn't affect Wobbuffet…"); } @@ -68,7 +68,7 @@ SINGLE_BATTLE_TEST("Air Balloon can not be restored with Recycle after it has be } } SCENE { MESSAGE("Wobbuffet floats in the air with its Air Balloon!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); MESSAGE("Wobbuffet's Air Balloon popped!"); MESSAGE("Wobbuffet used Recycle!"); MESSAGE("But it failed!"); @@ -117,6 +117,6 @@ SINGLE_BATTLE_TEST("Air Balloon pops before it can be stolen with Thief or Covet } SCENE { MESSAGE("Wobbuffet floats in the air with its Air Balloon!"); MESSAGE("Wobbuffet's Air Balloon popped!"); - NOT MESSAGE("Foe Wobbuffet stole Wobbuffet's Air Balloon!"); + NOT MESSAGE("The opposing Wobbuffet stole Wobbuffet's Air Balloon!"); } } diff --git a/test/battle/hold_effect/clear_amulet.c b/test/battle/hold_effect/clear_amulet.c index 9500419540f5..7629cb63d3c1 100644 --- a/test/battle/hold_effect/clear_amulet.c +++ b/test/battle/hold_effect/clear_amulet.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Clear Amulet prevents Intimidate") HP_BAR(player, captureDamage: &turnOneHit); ABILITY_POPUP(player, ABILITY_INTIMIDATE); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Foe Wobbuffet's Clear Amulet prevents its stats from being lowered!"); + MESSAGE("The opposing Wobbuffet's Clear Amulet prevents its stats from being lowered!"); HP_BAR(player, captureDamage: &turnTwoHit); } THEN { EXPECT_EQ(turnOneHit, turnTwoHit); @@ -56,7 +56,7 @@ SINGLE_BATTLE_TEST("Clear Amulet prevents stat reducing effects") TURN { MOVE(player, move); } } SCENE { NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Clear Amulet prevents its stats from being lowered!"); + MESSAGE("The opposing Wobbuffet's Clear Amulet prevents its stats from being lowered!"); } } @@ -85,7 +85,7 @@ SINGLE_BATTLE_TEST("Clear Amulet prevents secondary effects that reduce stats") } SCENE { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Clear Amulet prevents its stats from being lowered!"); + MESSAGE("The opposing Wobbuffet's Clear Amulet prevents its stats from being lowered!"); } } } diff --git a/test/battle/hold_effect/cure_status.c b/test/battle/hold_effect/cure_status.c index 5f985b803edb..50b2cb0aada8 100644 --- a/test/battle/hold_effect/cure_status.c +++ b/test/battle/hold_effect/cure_status.c @@ -213,9 +213,9 @@ SINGLE_BATTLE_TEST("Opponent Pokemon can be further poisoned with Toxic spikes a STATUS_ICON(opponent, poison: TRUE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); if (item == ITEM_PECHA_BERRY) { - MESSAGE("Foe Wynaut's Pecha Berry cured poison!"); + MESSAGE("The opposing Wynaut's Pecha Berry cured poison!"); } else { - MESSAGE("Foe Wynaut's Lum Berry cured its poison problem!"); + MESSAGE("The opposing Wynaut's Lum Berry cured its poison problem!"); } STATUS_ICON(opponent, poison: FALSE); // 2nd switch-in @@ -245,7 +245,7 @@ SINGLE_BATTLE_TEST("Player Pokemon can be further poisoned with Toxic spikes aft TURN { SWITCH(player, 1); } TURN { SWITCH(player, 2); } } SCENE { - MESSAGE("Foe Wobbuffet used Toxic Spikes!"); + MESSAGE("The opposing Wobbuffet used Toxic Spikes!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, opponent); MESSAGE("Poison Spikes were scattered all around your team's feet!"); // 1st switch-in diff --git a/test/battle/hold_effect/eject_button.c b/test/battle/hold_effect/eject_button.c index da358c2aa949..bc13ada72c50 100644 --- a/test/battle/hold_effect/eject_button.c +++ b/test/battle/hold_effect/eject_button.c @@ -21,7 +21,7 @@ SINGLE_BATTLE_TEST("Eject Button is not triggered when there is nothing to switc ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + MESSAGE("The opposing Wobbuffet is switched out with the Eject Button!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } @@ -42,7 +42,7 @@ SINGLE_BATTLE_TEST("Eject Button is not activated by a Sheer Force boosted move" ANIMATION(ANIM_TYPE_MOVE, MOVE_FLAMETHROWER, player); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + MESSAGE("The opposing Wobbuffet is switched out with the Eject Button!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } @@ -61,12 +61,12 @@ SINGLE_BATTLE_TEST("Eject Button will not activate under Substitute") } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, opponent); - MESSAGE("Foe Raichu made a SUBSTITUTE!"); + MESSAGE("The opposing Raichu made a SUBSTITUTE!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); MESSAGE("The SUBSTITUTE took damage for Foe Raichu!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Raichu is switched out with the Eject Button!"); + MESSAGE("The opposing Raichu is switched out with the Eject Button!"); } } } @@ -85,7 +85,7 @@ SINGLE_BATTLE_TEST("Eject Button is not blocked by trapping abilities or moves") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + MESSAGE("The opposing Wobbuffet is switched out with the Eject Button!"); MESSAGE("2 sent out Wobbuffet!"); } } @@ -105,7 +105,7 @@ SINGLE_BATTLE_TEST("Eject Button is not triggered after the mon loses Eject Butt ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, player); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + MESSAGE("The opposing Wobbuffet is switched out with the Eject Button!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } @@ -126,7 +126,7 @@ SINGLE_BATTLE_TEST("Eject Button is not triggered after given to player by Picke } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); ABILITY_POPUP(opponent, ABILITY_PICKPOCKET); - MESSAGE("Foe Sneasel stole Regieleki's Eject Button!"); + MESSAGE("The opposing Sneasel stole Regieleki's Eject Button!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } } @@ -144,10 +144,10 @@ SINGLE_BATTLE_TEST("Eject Button has no chance to activate after Dragon Tail") } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, player); - MESSAGE("Foe Chansey was dragged out!"); + MESSAGE("The opposing Chansey was dragged out!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Chansey is switched out with the Eject Button!"); + MESSAGE("The opposing Chansey is switched out with the Eject Button!"); } } } @@ -166,7 +166,7 @@ SINGLE_BATTLE_TEST("Eject Button prevents Volt Switch / U-Turn from activating") } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_VOLT_SWITCH, player); - MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + MESSAGE("The opposing Wobbuffet is switched out with the Eject Button!"); } } @@ -184,7 +184,7 @@ SINGLE_BATTLE_TEST("Eject Button is activated before Emergency Exit") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Golisopod is switched out with the Eject Button!"); + MESSAGE("The opposing Golisopod is switched out with the Eject Button!"); } } @@ -201,10 +201,10 @@ SINGLE_BATTLE_TEST("Eject Button is not triggered after High Jump Kick crash dam } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_PROTECT, player); - MESSAGE("Foe Wobbuffet kept going and crashed!"); + MESSAGE("The opposing Wobbuffet kept going and crashed!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + MESSAGE("The opposing Wobbuffet is switched out with the Eject Button!"); } } } diff --git a/test/battle/hold_effect/metronome.c b/test/battle/hold_effect/metronome.c index 42acc26d24df..9dcc265b809a 100644 --- a/test/battle/hold_effect/metronome.c +++ b/test/battle/hold_effect/metronome.c @@ -121,7 +121,7 @@ SINGLE_BATTLE_TEST("Metronome Item counts charging turn of moves for its attacki } SCENE { MESSAGE("Wobbuffet used Solar Beam!"); MESSAGE("Wobbuffet took in sunlight!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Congratulations, 1!"); MESSAGE("Wobbuffet used Solar Beam!"); HP_BAR(opponent, captureDamage: &results[i].damage); diff --git a/test/battle/hold_effect/quick_claw.c b/test/battle/hold_effect/quick_claw.c index 3e8cd4d652be..7e3204524cbf 100644 --- a/test/battle/hold_effect/quick_claw.c +++ b/test/battle/hold_effect/quick_claw.c @@ -16,6 +16,6 @@ SINGLE_BATTLE_TEST("Quick Claw activates 10% of the time") TURN { MOVE(player, MOVE_TACKLE); } } SCENE { MESSAGE("Wobbuffet used Tackle!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } } diff --git a/test/battle/hold_effect/red_card.c b/test/battle/hold_effect/red_card.c index ce4ac80b968e..f337cd6215f3 100644 --- a/test/battle/hold_effect/red_card.c +++ b/test/battle/hold_effect/red_card.c @@ -21,7 +21,7 @@ SINGLE_BATTLE_TEST("Red Card switches the attacker with a random non-fainted rep ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); - MESSAGE("Foe Bulbasaur was dragged out!"); + MESSAGE("The opposing Bulbasaur was dragged out!"); } THEN { EXPECT(player->item == ITEM_NONE); } @@ -44,7 +44,7 @@ DOUBLE_BATTLE_TEST("Red Card switches the target with a random non-battler, non- ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); - MESSAGE("Foe Bulbasaur was dragged out!"); + MESSAGE("The opposing Bulbasaur was dragged out!"); } THEN { EXPECT(playerLeft->item == ITEM_NONE); } @@ -241,13 +241,13 @@ DOUBLE_BATTLE_TEST("Red Card activates for only the fastest target") ANIMATION(ANIM_TYPE_MOVE, MOVE_ROCK_SLIDE, opponentLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); - MESSAGE("Foe Unown was dragged out!"); + MESSAGE("The opposing Unown was dragged out!"); // Slower target's Red Card still able to activate on other battler. ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight); MESSAGE("Wynaut held up its Red Card against Foe Wynaut!"); - MESSAGE("Foe Wobbuffet was dragged out!"); + MESSAGE("The opposing Wobbuffet was dragged out!"); } THEN { EXPECT(playerLeft->item == ITEM_NONE); EXPECT(playerRight->item == ITEM_NONE); @@ -272,7 +272,7 @@ DOUBLE_BATTLE_TEST("Red Card activates but fails if the attacker is rooted") ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); - MESSAGE("Foe Wobbuffet anchored itself with its roots!"); + MESSAGE("The opposing Wobbuffet anchored itself with its roots!"); // Red Card already consumed so cannot activate. ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); @@ -300,7 +300,7 @@ DOUBLE_BATTLE_TEST("Red Card activates but fails if the attacker has Suction Cup ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); MESSAGE("Wobbuffet held up its Red Card against Foe Octillery!"); - MESSAGE("Foe Octillery anchors itself with Suction Cups!"); + MESSAGE("The opposing Octillery anchors itself with Suction Cups!"); // Red Card already consumed so cannot activate. ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); @@ -415,14 +415,14 @@ SINGLE_BATTLE_TEST("Red Card is consumed after dragged out replacement has its S // 2nd turn Red Card activation ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Wobbuffet held up its Red Card against Wobbuffet!"); + MESSAGE("The opposing Wobbuffet held up its Red Card against Wobbuffet!"); MESSAGE("Wynaut was dragged out!"); MESSAGE("Wynaut was caught in a Sticky Web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); // 3rd turn, Red Card was consumed, it can't trigger again NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Wobbuffet held up its Red Card against Wynaut!"); + MESSAGE("The opposing Wobbuffet held up its Red Card against Wynaut!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } } THEN { @@ -441,7 +441,7 @@ SINGLE_BATTLE_TEST("Red Card does not cause the dragged out mon to lose hp due t } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Wobbuffet held up its Red Card against Wobbuffet!"); + MESSAGE("The opposing Wobbuffet held up its Red Card against Wobbuffet!"); MESSAGE("Wynaut was dragged out!"); NOT MESSAGE("Wynaut was hurt by its Life Orb!"); } diff --git a/test/battle/hold_effect/safety_goggles.c b/test/battle/hold_effect/safety_goggles.c index b20f19e0a583..ec66ad8bcddb 100644 --- a/test/battle/hold_effect/safety_goggles.c +++ b/test/battle/hold_effect/safety_goggles.c @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Safety Goggles block powder and spore moves") TURN { MOVE(player, MOVE_STUN_SPORE); } } SCENE { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); - MESSAGE("Foe Abra is not affected thanks to its SafetyGoggles!"); + MESSAGE("The opposing Abra is not affected thanks to its Safety Goggles!"); } } @@ -28,7 +28,7 @@ SINGLE_BATTLE_TEST("Safety Goggles blocks damage from Hail") } WHEN { TURN { MOVE(player, MOVE_HAIL); } } SCENE { - NOT MESSAGE("Foe Wobbuffet is pelted by HAIL!"); + NOT MESSAGE("The opposing Wobbuffet is buffeted by the hail!"); } } @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Safety Goggles blocks damage from Sandstorm") } WHEN { TURN { MOVE(player, MOVE_SANDSTORM); } } SCENE { - NOT MESSAGE("Foe Wobbuffet is buffeted by the sandstorm!"); + NOT MESSAGE("The opposing Wobbuffet is buffeted by the sandstorm!"); } } diff --git a/test/battle/hold_effect/white_herb.c b/test/battle/hold_effect/white_herb.c index 010311565816..03ea0fe3166d 100644 --- a/test/battle/hold_effect/white_herb.c +++ b/test/battle/hold_effect/white_herb.c @@ -58,9 +58,9 @@ DOUBLE_BATTLE_TEST("White Herb restores stats after Attack was lowered by Intimi ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentLeft); - MESSAGE("Foe Wobbuffet's White Herb restored its status!"); + MESSAGE("The opposing Wobbuffet's White Herb restored its status!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentRight); - MESSAGE("Foe Wynaut's White Herb restored its status!"); + MESSAGE("The opposing Wynaut's White Herb restored its status!"); } THEN { EXPECT(opponentLeft->item == ITEM_NONE); EXPECT(opponentLeft->statStages[STAT_DEF] = DEFAULT_STAT_STAGE); @@ -144,9 +144,9 @@ SINGLE_BATTLE_TEST("White Herb wont have time to activate if it is knocked off o } SCENE { ANIMATION(ANIM_TYPE_MOVE, move, opponent); if (move == MOVE_THIEF) - MESSAGE("Foe Wobbuffet stole Slugma's White Herb!"); + MESSAGE("The opposing Wobbuffet stole Slugma's White Herb!"); else - MESSAGE("Foe Wobbuffet knocked off Slugma's White Herb!"); + MESSAGE("The opposing Wobbuffet knocked off Slugma's White Herb!"); ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Slugma's Weak Armor lowered its Defense!"); diff --git a/test/battle/item_effect/cure_status.c b/test/battle/item_effect/cure_status.c index f73bbae32773..167e1e3581fa 100644 --- a/test/battle/item_effect/cure_status.c +++ b/test/battle/item_effect/cure_status.c @@ -57,7 +57,7 @@ SINGLE_BATTLE_TEST("Antidote resets Toxic Counter") TURN { ; } TURN { USE_ITEM(player, ITEM_ANTIDOTE, partyIndex: 0); } } SCENE { - MESSAGE("Foe Wobbuffet used Toxic!"); + MESSAGE("The opposing Wobbuffet used Toxic!"); MESSAGE("Wobbuffet had its status healed!"); } THEN { EXPECT_EQ(player->status1, STATUS1_NONE); diff --git a/test/battle/item_effect/escape.c b/test/battle/item_effect/escape.c index dcd880912d7e..15207b7e600b 100644 --- a/test/battle/item_effect/escape.c +++ b/test/battle/item_effect/escape.c @@ -29,7 +29,7 @@ WILD_BATTLE_TEST("Poke Toy lets the player escape from a wild battle even if a m TURN { USE_ITEM(player, ITEM_POKE_TOY); } } SCENE { // Turn 1 - MESSAGE("Wild Wobbuffet used Mean Look!"); + MESSAGE("The wild Wobbuffet used Mean Look!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_MEAN_LOOK, opponent); MESSAGE("Wobbuffet can't escape now!"); // Turn 2 diff --git a/test/battle/item_effect/heal_and_cure_status.c b/test/battle/item_effect/heal_and_cure_status.c index cde726e9ceb1..84b2041b18d1 100644 --- a/test/battle/item_effect/heal_and_cure_status.c +++ b/test/battle/item_effect/heal_and_cure_status.c @@ -81,7 +81,7 @@ SINGLE_BATTLE_TEST("Full Restore resets Toxic Counter") TURN { ; } TURN { USE_ITEM(player, ITEM_FULL_RESTORE, partyIndex: 0); } } SCENE { - MESSAGE("Foe Wobbuffet used Toxic!"); + MESSAGE("The opposing Wobbuffet used Toxic!"); MESSAGE("Wobbuffet had its HP restored!"); MESSAGE("Wobbuffet had its status healed!"); } THEN { diff --git a/test/battle/item_effect/increase_stat.c b/test/battle/item_effect/increase_stat.c index df36b8ff338c..0fee74639e9e 100644 --- a/test/battle/item_effect/increase_stat.c +++ b/test/battle/item_effect/increase_stat.c @@ -39,7 +39,7 @@ SINGLE_BATTLE_TEST("X Defense sharply raises battler's Defense stat", s16 damage if (useItem) TURN { USE_ITEM(player, ITEM_X_DEFENSE); } TURN { MOVE(opponent, MOVE_TACKLE); } } SCENE { - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { if (B_X_ITEMS_BUFF >= GEN_7) @@ -87,7 +87,7 @@ SINGLE_BATTLE_TEST("X Sp. Def sharply raises battler's Sp. Defense stat", s16 da if (useItem) TURN { USE_ITEM(player, ITEM_X_SP_DEF); } TURN { MOVE(opponent, MOVE_DISARMING_VOICE); } } SCENE { - MESSAGE("Foe Wobbuffet used DisrmngVoice!"); + MESSAGE("The opposing Wobbuffet used DisrmngVoice!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { if (B_X_ITEMS_BUFF >= GEN_7) @@ -121,11 +121,11 @@ SINGLE_BATTLE_TEST("X Speed sharply raises battler's Speed stat", s16 damage) if (useItem) { MESSAGE("Wobbuffet used Tackle!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); } else { - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); MESSAGE("Wobbuffet used Tackle!"); } } @@ -148,7 +148,7 @@ SINGLE_BATTLE_TEST("X Accuracy sharply raises battler's Accuracy stat") TURN { MOVE(player, MOVE_SING); } } SCENE { MESSAGE("Wobbuffet used Sing!"); - MESSAGE("Foe Wobbuffet fell asleep!"); + MESSAGE("The opposing Wobbuffet fell asleep!"); } } @@ -185,7 +185,7 @@ SINGLE_BATTLE_TEST("Max Mushrooms raises battler's Defense stat", s16 damage) if (useItem) TURN { USE_ITEM(player, ITEM_MAX_MUSHROOMS); } TURN { MOVE(opponent, MOVE_TACKLE); } } SCENE { - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.66), results[1].damage); @@ -225,7 +225,7 @@ SINGLE_BATTLE_TEST("Max Mushrooms battler's Sp. Defense stat", s16 damage) if (useItem) TURN { USE_ITEM(player, ITEM_MAX_MUSHROOMS); } TURN { MOVE(opponent, MOVE_DISARMING_VOICE); } } SCENE { - MESSAGE("Foe Wobbuffet used DisrmngVoice!"); + MESSAGE("The opposing Wobbuffet used DisrmngVoice!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.66), results[1].damage); @@ -248,11 +248,11 @@ SINGLE_BATTLE_TEST("Max Mushrooms raises battler's Speed stat", s16 damage) if (useItem) { MESSAGE("Wobbuffet used Tackle!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); } else { - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); MESSAGE("Wobbuffet used Tackle!"); } } diff --git a/test/battle/item_effect/set_mist.c b/test/battle/item_effect/set_mist.c index a4225646aa29..b11eb7ebcee2 100644 --- a/test/battle/item_effect/set_mist.c +++ b/test/battle/item_effect/set_mist.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Guard Spec. sets Mist effect on the battlers side") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_MIST, player); MESSAGE("Ally became shrouded in MIST!"); - MESSAGE("Foe Wobbuffet used Growl!"); + MESSAGE("The opposing Wobbuffet used Growl!"); MESSAGE("Wobbuffet is protected by MIST!"); } } diff --git a/test/battle/move_effect/accuracy_down.c b/test/battle/move_effect/accuracy_down.c index 0eccd65f22e8..5c3dc96a4860 100644 --- a/test/battle/move_effect/accuracy_down.c +++ b/test/battle/move_effect/accuracy_down.c @@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Sand Attack lowers Accuracy") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SAND_ATTACK, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's accuracy fell!"); + MESSAGE("The opposing Wobbuffet's accuracy fell!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent); } } diff --git a/test/battle/move_effect/after_you.c b/test/battle/move_effect/after_you.c index 91830abffdc7..d0fdc20bf047 100644 --- a/test/battle/move_effect/after_you.c +++ b/test/battle/move_effect/after_you.c @@ -46,7 +46,7 @@ DOUBLE_BATTLE_TEST("After You does nothing if the target has already moved") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentLeft); - MESSAGE("Foe Wynaut used After You!"); + MESSAGE("The opposing Wynaut used After You!"); MESSAGE("But it failed!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); } diff --git a/test/battle/move_effect/ally_switch.c b/test/battle/move_effect/ally_switch.c index 1f07859c829b..5abad73c2dca 100644 --- a/test/battle/move_effect/ally_switch.c +++ b/test/battle/move_effect/ally_switch.c @@ -54,11 +54,11 @@ DOUBLE_BATTLE_TEST("Ally Switch changes the position of battlers") ANIMATION(ANIM_TYPE_MOVE, MOVE_ALLY_SWITCH, playerLeft); MESSAGE("Wobbuffet and Wynaut switched places!"); - MESSAGE("Foe Kadabra used Screech!"); + MESSAGE("The opposing Kadabra used Screech!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Wynaut's Defense harshly fell!"); - MESSAGE("Foe Abra used Screech!"); + MESSAGE("The opposing Abra used Screech!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Wynaut's Defense harshly fell!"); } THEN { @@ -84,7 +84,7 @@ DOUBLE_BATTLE_TEST("Ally Switch does not redirect the target of Snipe Shot") ANIMATION(ANIM_TYPE_MOVE, MOVE_ALLY_SWITCH, playerLeft); MESSAGE("Wobbuffet and Wynaut switched places!"); - MESSAGE("Foe Kadabra used Snipe Shot!"); + MESSAGE("The opposing Kadabra used Snipe Shot!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SNIPE_SHOT, opponentLeft); HP_BAR(playerRight); } @@ -109,7 +109,7 @@ DOUBLE_BATTLE_TEST("Ally Switch does not redirect moves done by pokemon with Sta ANIMATION(ANIM_TYPE_MOVE, MOVE_ALLY_SWITCH, playerLeft); MESSAGE("Wobbuffet and Wynaut switched places!"); - MESSAGE("Foe Kadabra used Tackle!"); + MESSAGE("The opposing Kadabra used Tackle!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); HP_BAR((ability == ABILITY_STALWART || ability == ABILITY_PROPELLER_TAIL) ? playerLeft : playerRight); } diff --git a/test/battle/move_effect/attack_down.c b/test/battle/move_effect/attack_down.c index e9b3a7c23e87..4997ca1b94f8 100644 --- a/test/battle/move_effect/attack_down.c +++ b/test/battle/move_effect/attack_down.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Growl lowers Attack", s16 damage) if (lowerAttack) { ANIMATION(ANIM_TYPE_MOVE, MOVE_GROWL, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Attack fell!"); + MESSAGE("The opposing Wobbuffet's Attack fell!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); HP_BAR(player, captureDamage: &results[i].damage); diff --git a/test/battle/move_effect/axe_kick.c b/test/battle/move_effect/axe_kick.c index d4be87b8ab02..94ab9377ad3d 100644 --- a/test/battle/move_effect/axe_kick.c +++ b/test/battle/move_effect/axe_kick.c @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("Axe Kick confuses the target") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_AXE_KICK, player); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponent); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); } } @@ -31,8 +31,8 @@ SINGLE_BATTLE_TEST("Axe Kick deals damage half the hp to user if def battler pro } SCENE { s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); ANIMATION(ANIM_TYPE_MOVE, MOVE_PROTECT, opponent); - MESSAGE("Foe Wobbuffet protected itself!"); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); MESSAGE("Wobbuffet kept going and crashed!"); HP_BAR(player, hp: maxHP / 2); } diff --git a/test/battle/move_effect/beak_blast.c b/test/battle/move_effect/beak_blast.c index eeb3d59bf0ef..eacb7bab8f14 100644 --- a/test/battle/move_effect/beak_blast.c +++ b/test/battle/move_effect/beak_blast.c @@ -22,9 +22,9 @@ DOUBLE_BATTLE_TEST("Beak Blast's charging message is shown before other moves ar MESSAGE("Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentLeft); MESSAGE("Wynaut used Beak Blast!"); @@ -51,18 +51,18 @@ DOUBLE_BATTLE_TEST("Beak Blast burns all who make contact with the pokemon") MESSAGE("Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); HP_BAR(playerLeft); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentLeft); - MESSAGE("Foe Wobbuffet was burned!"); + MESSAGE("The opposing Wobbuffet was burned!"); STATUS_ICON(opponentLeft, burn: TRUE); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); HP_BAR(playerLeft); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentRight); - MESSAGE("Foe Wobbuffet was burned!"); + MESSAGE("The opposing Wobbuffet was burned!"); STATUS_ICON(opponentRight, burn: TRUE); MESSAGE("Wynaut used Beak Blast!"); @@ -95,13 +95,13 @@ SINGLE_BATTLE_TEST("Beak Blast burns only when contact moves are used") if (burn) { ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponent); - MESSAGE("Foe Wobbuffet was burned!"); + MESSAGE("The opposing Wobbuffet was burned!"); STATUS_ICON(opponent, burn: TRUE); } else { NONE_OF { ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponent); - MESSAGE("Foe Wobbuffet was burned!"); + MESSAGE("The opposing Wobbuffet was burned!"); STATUS_ICON(opponent, burn: TRUE); } } diff --git a/test/battle/move_effect/bug_bite.c b/test/battle/move_effect/bug_bite.c index a274e34d5a1c..e4786c3056e3 100644 --- a/test/battle/move_effect/bug_bite.c +++ b/test/battle/move_effect/bug_bite.c @@ -126,7 +126,7 @@ SINGLE_BATTLE_TEST("Tanga Berry activates before Bug Bite") } SCENE { MESSAGE("Wobbuffet used Bug Bite!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Wobbuffet ate its Tanga Berry!"); + MESSAGE("The opposing Wobbuffet ate its Tanga Berry!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_BUG_BITE, player); HP_BAR(opponent); MESSAGE("Tanga Berry weakened the damage to Foe Wobbuffet!"); diff --git a/test/battle/move_effect/confuse.c b/test/battle/move_effect/confuse.c index dcd843b2c677..05338219724b 100644 --- a/test/battle/move_effect/confuse.c +++ b/test/battle/move_effect/confuse.c @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Teeter Dance confuses target") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TEETER_DANCE, player); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponent); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); } } @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Teeter Dance confusion is blocked by Own Tempo") NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_TEETER_DANCE, player); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponent); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); } } } @@ -49,10 +49,10 @@ DOUBLE_BATTLE_TEST("Teeter Dance can confuse foes and allies") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TEETER_DANCE, playerLeft); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponentLeft); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, playerRight); MESSAGE("Wynaut became confused!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponentRight); - MESSAGE("Foe Wynaut became confused!"); + MESSAGE("The opposing Wynaut became confused!"); } } diff --git a/test/battle/move_effect/confusion_hit.c b/test/battle/move_effect/confusion_hit.c index bdfc57fc3584..72a96393506a 100644 --- a/test/battle/move_effect/confusion_hit.c +++ b/test/battle/move_effect/confusion_hit.c @@ -20,11 +20,11 @@ SINGLE_BATTLE_TEST("Alluring Voice confuses the target if the target raised a st HP_BAR(opponent); if (move == MOVE_SWORDS_DANCE) { ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponent); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); } else { NONE_OF { ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponent); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); } } } @@ -44,7 +44,7 @@ SINGLE_BATTLE_TEST("Alluring Voice confuse effect is removed if it is Sheer Forc HP_BAR(opponent); NONE_OF { ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponent); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); } } } diff --git a/test/battle/move_effect/corrosive_gas.c b/test/battle/move_effect/corrosive_gas.c index c2c921cf742f..25a462eed83f 100644 --- a/test/battle/move_effect/corrosive_gas.c +++ b/test/battle/move_effect/corrosive_gas.c @@ -44,7 +44,7 @@ SINGLE_BATTLE_TEST("Corrosive Gas doesn't destroy the item of a Pokemon with the ANIMATION(ANIM_TYPE_MOVE, MOVE_CORROSIVE_GAS, player); NOT MESSAGE("Wobbuffet corroded Foe Wobbuffet's Potion!"); ABILITY_POPUP(opponent, ABILITY_STICKY_HOLD); - MESSAGE("Foe Muk's Sticky Hold made CorrosiveGas ineffective!"); + MESSAGE("The opposing Muk's Sticky Hold made CorrosiveGas ineffective!"); } THEN { EXPECT_EQ(opponent->item, ITEM_POISON_BARB); } @@ -62,7 +62,7 @@ SINGLE_BATTLE_TEST("Items lost to Corrosive Gas cannot be restored by Recycle") MESSAGE("Wobbuffet used CorrosiveGas!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CORROSIVE_GAS, player); MESSAGE("Wobbuffet corroded Foe Wobbuffet's Oran Berry!"); - MESSAGE("Foe Wobbuffet used Recycle!"); + MESSAGE("The opposing Wobbuffet used Recycle!"); MESSAGE("But it failed!"); } THEN { EXPECT_EQ(opponent->item, ITEM_NONE); diff --git a/test/battle/move_effect/court_change.c b/test/battle/move_effect/court_change.c index 2986a3ec6eea..a85e038926e7 100644 --- a/test/battle/move_effect/court_change.c +++ b/test/battle/move_effect/court_change.c @@ -21,10 +21,10 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the opponent") TURN { MOVE(playerLeft, MOVE_COURT_CHANGE); } TURN { SWITCH(playerLeft, 2); SWITCH(opponentLeft, 2); } } SCENE { - MESSAGE("Foe Wobbuffet used Sticky Web!"); - MESSAGE("Foe Wobbuffet used Stealth Rock!"); - MESSAGE("Foe Wobbuffet used Spikes!"); - MESSAGE("Foe Wobbuffet used Toxic Spikes!"); + MESSAGE("The opposing Wobbuffet used Sticky Web!"); + MESSAGE("The opposing Wobbuffet used Stealth Rock!"); + MESSAGE("The opposing Wobbuffet used Spikes!"); + MESSAGE("The opposing Wobbuffet used Toxic Spikes!"); MESSAGE("Wynaut used Court Change!"); MESSAGE("Wynaut swapped the battle effects affecting each side!"); MESSAGE("Go! Wynaut!"); @@ -35,10 +35,10 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the opponent") MESSAGE("Wynaut was caught in a Sticky Web!"); } MESSAGE("2 sent out Wobbuffet!"); - MESSAGE("Foe Wobbuffet is hurt by spikes!"); + MESSAGE("The opposing Wobbuffet is hurt by spikes!"); MESSAGE("Pointed stones dug into Foe Wobbuffet!"); - MESSAGE("Foe Wobbuffet was poisoned!"); - MESSAGE("Foe Wobbuffet was caught in a Sticky Web!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet was caught in a Sticky Web!"); } } @@ -61,8 +61,8 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the player") MESSAGE("Wobbuffet used Stealth Rock!"); MESSAGE("Wobbuffet used Spikes!"); MESSAGE("Wobbuffet used Toxic Spikes!"); - MESSAGE("Foe Wynaut used Court Change!"); - MESSAGE("Foe Wynaut swapped the battle effects affecting each side!"); + MESSAGE("The opposing Wynaut used Court Change!"); + MESSAGE("The opposing Wynaut swapped the battle effects affecting each side!"); MESSAGE("Go! Wobbuffet!"); MESSAGE("Wobbuffet is hurt by spikes!"); MESSAGE("Pointed stones dug into Wobbuffet!"); @@ -70,10 +70,10 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the player") MESSAGE("Wobbuffet was caught in a Sticky Web!"); MESSAGE("2 sent out Wynaut!"); NONE_OF { - MESSAGE("Foe Wynaut is hurt by spikes!"); + MESSAGE("The opposing Wynaut is hurt by spikes!"); MESSAGE("Pointed stones dug into Foe Wynaut!"); - MESSAGE("Foe Wynaut was poisoned!"); - MESSAGE("Foe Wynaut was caught in a Sticky Web!"); + MESSAGE("The opposing Wynaut was poisoned!"); + MESSAGE("The opposing Wynaut was caught in a Sticky Web!"); } } } @@ -97,12 +97,12 @@ DOUBLE_BATTLE_TEST("Court Change used by the player swaps Mist, Safeguard, Lucky TURN { } TURN { } } SCENE { - MESSAGE("Foe Wobbuffet used Mist!"); - MESSAGE("Foe Wobbuffet used Safeguard!"); - MESSAGE("Foe Wobbuffet used Lucky Chant!"); - MESSAGE("Foe Wobbuffet used Reflect!"); - MESSAGE("Foe Wobbuffet used Light Screen!"); - MESSAGE("Foe Wobbuffet used Tailwind!"); + MESSAGE("The opposing Wobbuffet used Mist!"); + MESSAGE("The opposing Wobbuffet used Safeguard!"); + MESSAGE("The opposing Wobbuffet used Lucky Chant!"); + MESSAGE("The opposing Wobbuffet used Reflect!"); + MESSAGE("The opposing Wobbuffet used Light Screen!"); + MESSAGE("The opposing Wobbuffet used Tailwind!"); MESSAGE("Wynaut used Court Change!"); MESSAGE("Wynaut swapped the battle effects affecting each side!"); // The effects now end for the player side. @@ -140,14 +140,14 @@ DOUBLE_BATTLE_TEST("Court Change used by the opponent swaps Mist, Safeguard, Luc MESSAGE("Wobbuffet used Reflect!"); MESSAGE("Wobbuffet used Light Screen!"); MESSAGE("Wobbuffet used Tailwind!"); - MESSAGE("Foe Wynaut used Court Change!"); - MESSAGE("Foe Wynaut swapped the battle effects affecting each side!"); + MESSAGE("The opposing Wynaut used Court Change!"); + MESSAGE("The opposing Wynaut swapped the battle effects affecting each side!"); // The effects now end for the player side. - MESSAGE("Foe's Mist wore off!"); - MESSAGE("Foe's party is no longer protected by Safeguard!"); - MESSAGE("Foe's Reflect wore off!"); + MESSAGE("The opposing's Mist wore off!"); + MESSAGE("The opposing's party is no longer protected by Safeguard!"); + MESSAGE("The opposing's Reflect wore off!"); MESSAGE("The opposing team's Lucky Chant wore off!"); MESSAGE("The opposing team's tailwind petered out!"); - MESSAGE("Foe's Light Screen wore off!"); + MESSAGE("The opposing's Light Screen wore off!"); } } diff --git a/test/battle/move_effect/defense_down.c b/test/battle/move_effect/defense_down.c index 8eb288a805a6..0552a9c67e7e 100644 --- a/test/battle/move_effect/defense_down.c +++ b/test/battle/move_effect/defense_down.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Tail Whip lowers Defense", s16 damage) if (lowerDefense) { ANIMATION(ANIM_TYPE_MOVE, MOVE_TAIL_WHIP, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Defense fell!"); + MESSAGE("The opposing Wobbuffet's Defense fell!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); HP_BAR(opponent, captureDamage: &results[i].damage); diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c index 2fe20405f645..6cbae0c05648 100644 --- a/test/battle/move_effect/defog.c +++ b/test/battle/move_effect/defog.c @@ -29,7 +29,7 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's evasiveness fell!"); + MESSAGE("The opposing Wobbuffet's evasiveness fell!"); } } @@ -41,12 +41,12 @@ SINGLE_BATTLE_TEST("Defog does not lower evasiveness if target behind Substitute } WHEN { TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_DEFOG); } } SCENE { - MESSAGE("Foe Wobbuffet used Substitute!"); + MESSAGE("The opposing Wobbuffet used Substitute!"); MESSAGE("But it failed!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's evasiveness fell!"); + MESSAGE("The opposing Wobbuffet's evasiveness fell!"); } } } @@ -72,9 +72,9 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Reflect and Light ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); if (move == MOVE_DEFOG) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Wobbuffet's evasiveness fell!"); - MESSAGE("Foe's Reflect wore off!"); - MESSAGE("Foe's Light Screen wore off!"); + MESSAGE("The opposing Wobbuffet's evasiveness fell!"); + MESSAGE("The opposing's Reflect wore off!"); + MESSAGE("The opposing's Light Screen wore off!"); } MESSAGE("Wobbuffet used Tackle!"); HP_BAR(opponentLeft, captureDamage: &results[i].damagePhysical); @@ -105,10 +105,10 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard ANIMATION(ANIM_TYPE_MOVE, MOVE_MIST, opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_SAFEGUARD, opponentRight); if (move == MOVE_DEFOG) { - MESSAGE("Foe Wobbuffet is protected by MIST!"); + MESSAGE("The opposing Wobbuffet is protected by MIST!"); ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); - MESSAGE("Foe's Mist wore off!"); - MESSAGE("Foe's Safeguard wore off!"); + MESSAGE("The opposing's Mist wore off!"); + MESSAGE("The opposing's Safeguard wore off!"); } MESSAGE("Wobbuffet used Screech!"); if (move == MOVE_DEFOG) { @@ -116,7 +116,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); } else { - MESSAGE("Foe Wobbuffet is protected by MIST!"); + MESSAGE("The opposing Wobbuffet is protected by MIST!"); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); } MESSAGE("Wobbuffet used Toxic!"); @@ -125,7 +125,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard STATUS_ICON(opponentRight, badPoison: TRUE); } else { - MESSAGE("Foe Wobbuffet's party is protected by Safeguard!"); + MESSAGE("The opposing Wobbuffet's party is protected by Safeguard!"); NOT STATUS_ICON(opponentRight, badPoison: TRUE); } } @@ -153,7 +153,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and S ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); if (move == MOVE_DEFOG) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Wobbuffet's evasiveness fell!"); + MESSAGE("The opposing Wobbuffet's evasiveness fell!"); MESSAGE("The pointed stones disappeared from around your team!"); MESSAGE("The sticky web has disappeared from the ground around your team!"); } @@ -197,7 +197,7 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Spikes from player ANIMATION(ANIM_TYPE_MOVE, move, player); if (move == MOVE_DEFOG) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's evasiveness fell!"); + MESSAGE("The opposing Wobbuffet's evasiveness fell!"); MESSAGE("The spikes disappeared from the ground around your team!"); } // Switch happens @@ -275,13 +275,13 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Toxic Spikes from // Switch happens MESSAGE("2 sent out Wobbuffet!"); if (move != MOVE_DEFOG) { - MESSAGE("Foe Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); STATUS_ICON(opponent, poison: TRUE); } else { NONE_OF { - MESSAGE("Foe Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); STATUS_ICON(opponent, poison: TRUE); } @@ -315,9 +315,9 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Aurora Veil from p MESSAGE("Glalie's evasiveness fell!"); MESSAGE("Ally's Aurora Veil wore off!"); } - MESSAGE("Foe Glalie used Tackle!"); + MESSAGE("The opposing Glalie used Tackle!"); HP_BAR(playerLeft, captureDamage: &results[i].damagePhysical); - MESSAGE("Foe Glalie used Gust!"); + MESSAGE("The opposing Glalie used Gust!"); HP_BAR(playerRight, captureDamage: &results[i].damageSpecial); } FINALLY { EXPECT_MUL_EQ(results[1].damagePhysical, Q_4_12(1.5), results[0].damagePhysical); @@ -346,7 +346,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes everything it can" TURN { MOVE(playerLeft, MOVE_REFLECT); MOVE(playerRight, MOVE_LIGHT_SCREEN); MOVE(opponentLeft, MOVE_REFLECT); MOVE(opponentRight, MOVE_SAFEGUARD); } TURN { MOVE(playerLeft, MOVE_MIST); MOVE(playerRight, MOVE_SAFEGUARD); MOVE(opponentLeft, MOVE_MIST); MOVE(opponentRight, MOVE_DEFOG, target: playerLeft); } } SCENE { - MESSAGE("Foe Glalie used Defog!"); + MESSAGE("The opposing Glalie used Defog!"); MESSAGE("Glalie is protected by MIST!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, opponentRight); // Player side diff --git a/test/battle/move_effect/dream_eater.c b/test/battle/move_effect/dream_eater.c index 4ce749b5d2ba..8c0a263c0b3f 100644 --- a/test/battle/move_effect/dream_eater.c +++ b/test/battle/move_effect/dream_eater.c @@ -33,7 +33,7 @@ SINGLE_BATTLE_TEST("Dream Eater fails on awake targets") TURN { MOVE(player, MOVE_DREAM_EATER); } } SCENE { MESSAGE("Wobbuffet used Dream Eater!"); - MESSAGE("Foe Wobbuffet wasn't affected!"); + MESSAGE("The opposing Wobbuffet wasn't affected!"); } } diff --git a/test/battle/move_effect/embargo.c b/test/battle/move_effect/embargo.c index 8d9cc9c86d1c..2ceb97669a06 100644 --- a/test/battle/move_effect/embargo.c +++ b/test/battle/move_effect/embargo.c @@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Embargo blocks the effect of an affected Pokémon's held ite } SCENE { // Turn 1 MESSAGE("Wobbuffet used Embargo!"); - MESSAGE("Foe Wobbuffet can't use items anymore!"); + MESSAGE("The opposing Wobbuffet can't use items anymore!"); // Turn 2 MESSAGE("Wobbuffet used Fissure!"); HP_BAR(opponent, hp: 0); @@ -39,7 +39,7 @@ SINGLE_BATTLE_TEST("Embargo blocks an affected Pokémon's trainer from using ite TURN { USE_ITEM(opponent, ITEM_POTION, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet used Embargo!"); - MESSAGE("Foe Wobbuffet can't use items anymore!"); + MESSAGE("The opposing Wobbuffet can't use items anymore!"); } THEN { EXPECT_EQ(opponent->hp, 1); } @@ -59,10 +59,10 @@ WILD_BATTLE_TEST("Embargo doesn't block held item effects that affect experience } WHEN { TURN { MOVE(opponent, MOVE_EMBARGO); MOVE(player, MOVE_SCRATCH); } } SCENE { - MESSAGE("Wild Caterpie used Embargo!"); + MESSAGE("The wild Caterpie used Embargo!"); MESSAGE("Wobbuffet can't use items anymore!"); MESSAGE("Wobbuffet used Scratch!"); - MESSAGE("Wild Caterpie fainted!"); + MESSAGE("The wild Caterpie fainted!"); EXPERIENCE_BAR(player, captureGainedExp: &results[i].exp); } FINALLY { EXPECT_MUL_EQ(results[1].exp, Q_4_12(1.5), results[0].exp); @@ -84,11 +84,11 @@ WILD_BATTLE_TEST("Embargo doesn't block held item effects that affect effort val TURN { MOVE(opponent, MOVE_EMBARGO); MOVE(player, MOVE_SCRATCH); } } SCENE { // Turn 1 - MESSAGE("Wild Caterpie used Embargo!"); + MESSAGE("The wild Caterpie used Embargo!"); MESSAGE("Wobbuffet can't use items anymore!"); // Turn 2 MESSAGE("Wobbuffet used Scratch!"); - MESSAGE("Wild Caterpie fainted!"); + MESSAGE("The wild Caterpie fainted!"); } THEN { finalHPEVAmount = (GetMonData(&PLAYER_PARTY[0], MON_DATA_HP_EV) + gItemsInfo[ITEM_POWER_WEIGHT].holdEffectParam + gSpeciesInfo[SPECIES_CATERPIE].evYield_HP); EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_HP_EV), finalHPEVAmount); @@ -107,9 +107,9 @@ SINGLE_BATTLE_TEST("Embargo negates a held item's Speed reduction") } SCENE { // Turn 1 MESSAGE("Wobbuffet used Embargo!"); - MESSAGE("Foe Wobbuffet can't use items anymore!"); + MESSAGE("The opposing Wobbuffet can't use items anymore!"); // Turn 2 - MESSAGE("Foe Wobbuffet used Scratch!"); + MESSAGE("The opposing Wobbuffet used Scratch!"); MESSAGE("Wobbuffet used Scratch!"); } } @@ -129,7 +129,7 @@ WILD_BATTLE_TEST("Embargo doesn't block held item effects that affect friendship TURN { MOVE(player, MOVE_SING); } } SCENE { MESSAGE("Wobbuffet used Sing!"); - MESSAGE("Wild Wobbuffet fell asleep!"); + MESSAGE("The wild Wobbuffet fell asleep!"); } THEN { initialFriendship = GetMonData(&PLAYER_PARTY[0], MON_DATA_FRIENDSHIP); finalFriendship = GetMonData(&gPlayerParty[0], MON_DATA_FRIENDSHIP); @@ -172,7 +172,7 @@ SINGLE_BATTLE_TEST("Embargo makes Fling and Natural Gift fail") TURN { MOVE(player, moveId); } } SCENE { // Turn 1 - MESSAGE("Foe Wobbuffet used Embargo!"); + MESSAGE("The opposing Wobbuffet used Embargo!"); MESSAGE("Wobbuffet can't use items anymore!"); // Turn 2 if (moveId == MOVE_FLING) @@ -194,12 +194,12 @@ SINGLE_BATTLE_TEST("Embargo doesn't stop an item flung at an affected target fro } SCENE { // Turn 1 MESSAGE("Wobbuffet used Embargo!"); - MESSAGE("Foe Wobbuffet can't use items anymore!"); + MESSAGE("The opposing Wobbuffet can't use items anymore!"); // Turn 2 MESSAGE("Wobbuffet used Fling!"); MESSAGE("Wobbuffet flung its Light Ball!"); HP_BAR(opponent); - MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed, so it may be unable to move!"); } } @@ -215,7 +215,7 @@ SINGLE_BATTLE_TEST("Embargo is passed via Baton Pass") TURN { MOVE(player, MOVE_FLING); } } SCENE { // Turn 1 - MESSAGE("Foe Wobbuffet used Embargo!"); + MESSAGE("The opposing Wobbuffet used Embargo!"); MESSAGE("Wobbuffet can't use items anymore!"); // Turn 2 MESSAGE("Wobbuffet used Baton Pass!"); @@ -239,7 +239,7 @@ SINGLE_BATTLE_TEST("Embargo doesn't block the effects of berries obtained throug TURN { MOVE(player, MOVE_PLUCK); } } SCENE { // Turn 1 - MESSAGE("Foe Wobbuffet used Embargo!"); + MESSAGE("The opposing Wobbuffet used Embargo!"); MESSAGE("Wobbuffet can't use items anymore!"); // Turn 2 MESSAGE("Wobbuffet used Pluck!"); @@ -261,7 +261,7 @@ SINGLE_BATTLE_TEST("Embargo disables the effect of the Plate items on the move J } WHEN { TURN { MOVE(opponent, MOVE_EMBARGO); MOVE(player, MOVE_JUDGMENT); } } SCENE { - MESSAGE("Foe Dragonite used Embargo!"); + MESSAGE("The opposing Dragonite used Embargo!"); MESSAGE("Arceus can't use items anymore!"); MESSAGE("Arceus used Judgment!"); HP_BAR(opponent, captureDamage: &results[i].damage); @@ -282,7 +282,7 @@ SINGLE_BATTLE_TEST("Embargo disables the effect of the Drive items on the move T } WHEN { TURN { MOVE(opponent, MOVE_EMBARGO); MOVE(player, MOVE_TECHNO_BLAST); } } SCENE { - MESSAGE("Foe Gyarados used Embargo!"); + MESSAGE("The opposing Gyarados used Embargo!"); MESSAGE("Genesect can't use items anymore!"); MESSAGE("Genesect used Techno Blast!"); HP_BAR(opponent, captureDamage: &results[i].damage); @@ -303,7 +303,7 @@ SINGLE_BATTLE_TEST("Embargo disables the effect of the Memory items on the move } WHEN { TURN { MOVE(opponent, MOVE_EMBARGO); MOVE(player, MOVE_MULTI_ATTACK); } } SCENE { - MESSAGE("Foe Venusaur used Embargo!"); + MESSAGE("The opposing Venusaur used Embargo!"); MESSAGE("Silvally can't use items anymore!"); MESSAGE("Silvally used Multi-Attack!"); HP_BAR(opponent, captureDamage: &results[i].damage); @@ -324,11 +324,11 @@ SINGLE_BATTLE_TEST("Embargo can be reflected by Magic Coat") // Turn 1 MESSAGE("Wobbuffet used Magic Coat!"); MESSAGE("Wobbuffet shrouded itself in Magic Coat!"); - MESSAGE("Foe Wobbuffet used Embargo!"); - MESSAGE("Foe Wobbuffet's Embargo was bounced back by MAGIC COAT!"); - MESSAGE("Foe Wobbuffet can't use items anymore!"); + MESSAGE("The opposing Wobbuffet used Embargo!"); + MESSAGE("The opposing Wobbuffet's Embargo was bounced back by MAGIC COAT!"); + MESSAGE("The opposing Wobbuffet can't use items anymore!"); // Turn 2 - MESSAGE("Foe Wobbuffet used Fling!"); + MESSAGE("The opposing Wobbuffet used Fling!"); MESSAGE("But it failed!"); } } @@ -346,15 +346,15 @@ SINGLE_BATTLE_TEST("Embargo doesn't prevent Mega Evolution") } SCENE { // Turn 1 MESSAGE("Wobbuffet used Embargo!"); - MESSAGE("Foe Wobbuffet can't use items anymore!"); + MESSAGE("The opposing Wobbuffet can't use items anymore!"); // Turn 2 - MESSAGE("Foe Wobbuffet used Baton Pass!"); + MESSAGE("The opposing Wobbuffet used Baton Pass!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_BATON_PASS, opponent); MESSAGE("2 sent out Charizard!"); // Turn 3 - MESSAGE("Foe Charizard's CharizarditeY is reacting to 2's Mega Ring!"); + MESSAGE("The opposing Charizard's CharizarditeY is reacting to 2's Mega Ring!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); - MESSAGE("Foe Charizard has Mega Evolved into Mega Charizard!"); + MESSAGE("The opposing Charizard has Mega Evolved into Mega Charizard!"); } } @@ -371,16 +371,16 @@ SINGLE_BATTLE_TEST("Embargo doesn't prevent Primal Reversion") } SCENE { // Turn 1 MESSAGE("Wobbuffet used Embargo!"); - MESSAGE("Foe Wobbuffet can't use items anymore!"); + MESSAGE("The opposing Wobbuffet can't use items anymore!"); // Turn 2 - MESSAGE("Foe Wobbuffet used Baton Pass!"); + MESSAGE("The opposing Wobbuffet used Baton Pass!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_BATON_PASS, opponent); MESSAGE("2 sent out Groudon!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, opponent); - MESSAGE("Foe Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("The opposing Groudon's Primal Reversion! It reverted to its primal form!"); ABILITY_POPUP(opponent); // Turn 3 - MESSAGE("Foe Groudon used Fling!"); + MESSAGE("The opposing Groudon used Fling!"); MESSAGE("But it failed!"); } } diff --git a/test/battle/move_effect/encore.c b/test/battle/move_effect/encore.c index 670122dc3711..d98f43b3de32 100644 --- a/test/battle/move_effect/encore.c +++ b/test/battle/move_effect/encore.c @@ -52,7 +52,7 @@ SINGLE_BATTLE_TEST("Encore has no effect if no previous move") } WHEN { TURN { MOVE(opponent, MOVE_ENCORE); MOVE(player, MOVE_CELEBRATE); } } SCENE { - MESSAGE("Foe Wobbuffet used Encore!"); + MESSAGE("The opposing Wobbuffet used Encore!"); MESSAGE("But it failed!"); } } diff --git a/test/battle/move_effect/explosion.c b/test/battle/move_effect/explosion.c index 21d3f1b790ca..afad8d4c123e 100644 --- a/test/battle/move_effect/explosion.c +++ b/test/battle/move_effect/explosion.c @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Explosion causes the user & the target to faint") HP_BAR(player, hp: 0); ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); HP_BAR(opponent, hp: 0); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); MESSAGE("Wobbuffet fainted!"); } } @@ -83,11 +83,11 @@ DOUBLE_BATTLE_TEST("Explosion causes everyone to faint in a double battle") HP_BAR(playerLeft, hp: 0); ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, playerLeft); HP_BAR(opponentLeft, hp: 0); - MESSAGE("Foe Abra fainted!"); + MESSAGE("The opposing Abra fainted!"); HP_BAR(playerRight, hp: 0); MESSAGE("Wynaut fainted!"); HP_BAR(opponentRight, hp: 0); - MESSAGE("Foe Kadabra fainted!"); + MESSAGE("The opposing Kadabra fainted!"); MESSAGE("Wobbuffet fainted!"); } } diff --git a/test/battle/move_effect/flinch_hit.c b/test/battle/move_effect/flinch_hit.c index c54c9536fef0..7a43a4992336 100644 --- a/test/battle/move_effect/flinch_hit.c +++ b/test/battle/move_effect/flinch_hit.c @@ -25,20 +25,20 @@ SINGLE_BATTLE_TEST("Headbutt flinches the target if attacker is faster") ANIMATION(ANIM_TYPE_MOVE, MOVE_HEADBUTT, player); HP_BAR(opponent); if (isFaster) { - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); } else { - NOT MESSAGE("Foe Wobbuffet flinched!"); + NOT MESSAGE("The opposing Wobbuffet flinched!"); } // 2nd turn ANIMATION(ANIM_TYPE_MOVE, MOVE_HEADBUTT, player); HP_BAR(opponent); if (isFaster) { - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); } else { - NOT MESSAGE("Foe Wobbuffet flinched!"); + NOT MESSAGE("The opposing Wobbuffet flinched!"); } } } diff --git a/test/battle/move_effect/flinch_status.c b/test/battle/move_effect/flinch_status.c index 6ef9e09bf1dc..1f44910a9532 100644 --- a/test/battle/move_effect/flinch_status.c +++ b/test/battle/move_effect/flinch_status.c @@ -58,7 +58,7 @@ SINGLE_BATTLE_TEST("Thunder, Ice and Fire Fang cause the opponent to flinch 10% } SCENE { ANIMATION(ANIM_TYPE_MOVE, move, player); HP_BAR(opponent); - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); } } diff --git a/test/battle/move_effect/fling.c b/test/battle/move_effect/fling.c index f6b83215a1c5..a4c14f3facbb 100644 --- a/test/battle/move_effect/fling.c +++ b/test/battle/move_effect/fling.c @@ -114,10 +114,10 @@ SINGLE_BATTLE_TEST("Fling - Item is lost even when there is no target") TURN { MOVE(opponent, MOVE_SELF_DESTRUCT); MOVE(player, MOVE_FLING); SEND_OUT(opponent, 1); } TURN { MOVE(player, MOVE_FLING); } } SCENE { - MESSAGE("Foe Wobbuffet used SelfDestruct!"); + MESSAGE("The opposing Wobbuffet used SelfDestruct!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SELF_DESTRUCT, opponent); HP_BAR(player); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); MESSAGE("Wobbuffet used Fling!"); MESSAGE("But it failed!"); @@ -138,10 +138,10 @@ SINGLE_BATTLE_TEST("Fling - Item is lost when target protects itself") TURN { MOVE(opponent, MOVE_PROTECT); MOVE(player, MOVE_FLING);} TURN { MOVE(player, MOVE_FLING); } } SCENE { - MESSAGE("Foe Wobbuffet used Protect!"); + MESSAGE("The opposing Wobbuffet used Protect!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PROTECT, opponent); MESSAGE("Wobbuffet used Fling!"); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); MESSAGE("Wobbuffet used Fling!"); MESSAGE("But it failed!"); @@ -182,7 +182,7 @@ SINGLE_BATTLE_TEST("Fling doesn't consume the item if pokemon is asleep/frozen/p MESSAGE("Wobbuffet was defrosted!"); } else if (status == STATUS1_PARALYSIS) { - MESSAGE("Wobbuffet is paralyzed! It can't move!"); + MESSAGE("Wobbuffet is paralyzed, so it may be unable to move!"); } else { MESSAGE("Wobbuffet is fast asleep."); @@ -225,32 +225,32 @@ SINGLE_BATTLE_TEST("Fling applies special effects when throwing specific Items") { case ITEM_FLAME_ORB: { - MESSAGE("Foe Wobbuffet was burned!"); + MESSAGE("The opposing Wobbuffet was burned!"); STATUS_ICON(opponent, STATUS1_BURN); } break; case ITEM_LIGHT_BALL: { - MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed, so it may be unable to move!"); STATUS_ICON(opponent, STATUS1_PARALYSIS); } break; case ITEM_POISON_BARB: { - MESSAGE("Foe Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); STATUS_ICON(opponent, STATUS1_POISON); } break; case ITEM_TOXIC_ORB: { - MESSAGE("Foe Wobbuffet is badly poisoned!"); + MESSAGE("The opposing Wobbuffet is badly poisoned!"); STATUS_ICON(opponent, STATUS1_TOXIC_POISON); } break; case ITEM_RAZOR_FANG: case ITEM_KINGS_ROCK: { - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched!"); } break; } @@ -282,7 +282,7 @@ SINGLE_BATTLE_TEST("Fling's secondary effects are blocked by Shield Dust") case ITEM_FLAME_ORB: { NONE_OF { - MESSAGE("Foe Wobbuffet was burned!"); + MESSAGE("The opposing Wobbuffet was burned!"); STATUS_ICON(opponent, STATUS1_BURN); } MESSAGE("The Flame Orb was used up..."); @@ -291,7 +291,7 @@ SINGLE_BATTLE_TEST("Fling's secondary effects are blocked by Shield Dust") case ITEM_LIGHT_BALL: { NONE_OF { - MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed, so it may be unable to move!"); STATUS_ICON(opponent, STATUS1_PARALYSIS); } MESSAGE("The Light Ball was used up..."); @@ -300,7 +300,7 @@ SINGLE_BATTLE_TEST("Fling's secondary effects are blocked by Shield Dust") case ITEM_POISON_BARB: { NONE_OF { - MESSAGE("Foe Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); STATUS_ICON(opponent, STATUS1_POISON); } MESSAGE("The Poison Barb was used up..."); @@ -309,7 +309,7 @@ SINGLE_BATTLE_TEST("Fling's secondary effects are blocked by Shield Dust") case ITEM_TOXIC_ORB: { NONE_OF { - MESSAGE("Foe Wobbuffet is badly poisoned!"); + MESSAGE("The opposing Wobbuffet is badly poisoned!"); STATUS_ICON(opponent, STATUS1_TOXIC_POISON); } MESSAGE("The Toxic Orb was used up..."); @@ -319,7 +319,7 @@ SINGLE_BATTLE_TEST("Fling's secondary effects are blocked by Shield Dust") case ITEM_KINGS_ROCK: { NONE_OF { - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched!"); } switch (item) { @@ -373,30 +373,30 @@ SINGLE_BATTLE_TEST("Fling - thrown berry's effect activates for the target even HP_BAR(opponent); if (effect == HOLD_EFFECT_RESTORE_HP) { if (item == ITEM_ORAN_BERRY) { - MESSAGE("Foe Wobbuffet's Oran Berry restored health!"); + MESSAGE("The opposing Wobbuffet's Oran Berry restored health!"); } else if (item == ITEM_SITRUS_BERRY) { - MESSAGE("Foe Wobbuffet's Sitrus Berry restored health!"); + MESSAGE("The opposing Wobbuffet's Sitrus Berry restored health!"); } else { MESSAGE("Wobbuffet's Enigma Berry restored health!"); } HP_BAR(opponent); } else if (effect == HOLD_EFFECT_RESTORE_PP) { - MESSAGE("Foe Wobbuffet's Leppa Berry restored Celebrate's PP!"); + MESSAGE("The opposing Wobbuffet's Leppa Berry restored Celebrate's PP!"); } else if (status1 != STATUS1_NONE) { if (status1 == STATUS1_BURN) { - MESSAGE("Foe Wobbuffet's Rawst Berry healed its burn!"); + MESSAGE("The opposing Wobbuffet's Rawst Berry healed its burn!"); } else if (status1 == STATUS1_SLEEP) { - MESSAGE("Foe Wobbuffet's Chesto Berry woke it from its sleep!"); + MESSAGE("The opposing Wobbuffet's Chesto Berry woke it from its sleep!"); } else if (status1 == STATUS1_FREEZE) { - MESSAGE("Foe Wobbuffet's Aspear Berry defrosted it!"); + MESSAGE("The opposing Wobbuffet's Aspear Berry defrosted it!"); } else if (status1 == STATUS1_FROSTBITE) { - MESSAGE("Foe Wobbuffet's Aspear Berry healed its frostbite!"); + MESSAGE("The opposing Wobbuffet's Aspear Berry healed its frostbite!"); } else if (status1 == STATUS1_PARALYSIS) { - MESSAGE("Foe Wobbuffet's Cheri Berry cured paralysis!"); + MESSAGE("The opposing Wobbuffet's Cheri Berry cured paralysis!"); } else if (status1 == STATUS1_TOXIC_POISON || status1 == STATUS1_POISON) { - MESSAGE("Foe Wobbuffet's Pecha Berry cured poison!"); + MESSAGE("The opposing Wobbuffet's Pecha Berry cured poison!"); } NOT STATUS_ICON(opponent, status1); } diff --git a/test/battle/move_effect/focus_punch.c b/test/battle/move_effect/focus_punch.c index 5bfb606b0ffe..dc7a3290dce6 100644 --- a/test/battle/move_effect/focus_punch.c +++ b/test/battle/move_effect/focus_punch.c @@ -51,7 +51,7 @@ DOUBLE_BATTLE_TEST("Focus Punch activation is based on Speed") } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FOCUS_PUNCH_SETUP, opponentRight); - MESSAGE("Foe Wynaut is tightening its focus!"); + MESSAGE("The opposing Wynaut is tightening its focus!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FOCUS_PUNCH_SETUP, playerRight); MESSAGE("Wynaut is tightening its focus!"); @@ -60,9 +60,9 @@ DOUBLE_BATTLE_TEST("Focus Punch activation is based on Speed") MESSAGE("Wobbuffet is tightening its focus!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FOCUS_PUNCH_SETUP, opponentLeft); - MESSAGE("Foe Wobbuffet is tightening its focus!"); + MESSAGE("The opposing Wobbuffet is tightening its focus!"); - MESSAGE("Foe Wynaut used Focus Punch!"); + MESSAGE("The opposing Wynaut used Focus Punch!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FOCUS_PUNCH, opponentRight); HP_BAR(playerLeft); @@ -71,6 +71,6 @@ DOUBLE_BATTLE_TEST("Focus Punch activation is based on Speed") HP_BAR(opponentLeft); MESSAGE("Wobbuffet lost its focus and couldn't move!"); - MESSAGE("Foe Wobbuffet lost its focus and couldn't move!"); + MESSAGE("The opposing Wobbuffet lost its focus and couldn't move!"); } } diff --git a/test/battle/move_effect/hit_escape.c b/test/battle/move_effect/hit_escape.c index f4bfc42cc8e5..ac687c19ad6b 100644 --- a/test/battle/move_effect/hit_escape.c +++ b/test/battle/move_effect/hit_escape.c @@ -108,7 +108,7 @@ SINGLE_BATTLE_TEST("U-turn switches the user out after Ice Face activates") ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player); HP_BAR(opponent); ABILITY_POPUP(opponent, ABILITY_ICE_FACE); - MESSAGE("Foe Eiscue transformed!"); + MESSAGE("The opposing Eiscue transformed!"); MESSAGE("Go! Wynaut!"); } } diff --git a/test/battle/move_effect/hit_set_entry_hazardss.c b/test/battle/move_effect/hit_set_entry_hazardss.c index fa405ed3b332..225e2615c56a 100644 --- a/test/battle/move_effect/hit_set_entry_hazardss.c +++ b/test/battle/move_effect/hit_set_entry_hazardss.c @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Stone Axe / Ceaseless Edge set up hazards after hitting the MESSAGE("2 sent out Wobbuffet!"); if (move == MOVE_CEASELESS_EDGE) { HP_BAR(opponent, damage: maxHP / 8); - MESSAGE("Foe Wobbuffet is hurt by spikes!"); + MESSAGE("The opposing Wobbuffet is hurt by spikes!"); } else { HP_BAR(opponent, damage: maxHP / 8); @@ -74,7 +74,7 @@ SINGLE_BATTLE_TEST("Ceaseless Edge can set up to 3 layers of Spikes") MESSAGE("2 sent out Wynaut!"); HP_BAR(opponent, damage: maxHP / 4); - MESSAGE("Foe Wynaut is hurt by spikes!"); + MESSAGE("The opposing Wynaut is hurt by spikes!"); } } diff --git a/test/battle/move_effect/hit_switch_target.c b/test/battle/move_effect/hit_switch_target.c index 22227ea8323e..a899ae0b33fe 100644 --- a/test/battle/move_effect/hit_switch_target.c +++ b/test/battle/move_effect/hit_switch_target.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Dragon Tail switches the target with a random non-fainted re TURN { MOVE(player, MOVE_DRAGON_TAIL); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, player); - MESSAGE("Foe Bulbasaur was dragged out!"); + MESSAGE("The opposing Bulbasaur was dragged out!"); } } @@ -39,7 +39,7 @@ DOUBLE_BATTLE_TEST("Dragon Tail switches the target with a random non-battler, n TURN { MOVE(playerLeft, MOVE_DRAGON_TAIL, target: opponentRight); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, playerLeft); - MESSAGE("Foe Bulbasaur was dragged out!"); + MESSAGE("The opposing Bulbasaur was dragged out!"); } } diff --git a/test/battle/move_effect/ion_deluge.c b/test/battle/move_effect/ion_deluge.c index ab64667b06f3..55ad5b9dc073 100644 --- a/test/battle/move_effect/ion_deluge.c +++ b/test/battle/move_effect/ion_deluge.c @@ -15,11 +15,11 @@ WILD_BATTLE_TEST("Ion Deluge works the same way as always when used by a mon wit } WHEN { TURN { MOVE(opponent, MOVE_ION_DELUGE); } } SCENE { - MESSAGE("Wild Lanturn used Ion Deluge!"); + MESSAGE("The wild Lanturn used Ion Deluge!"); NONE_OF { ABILITY_POPUP(opponent, ABILITY_VOLT_ABSORB); HP_BAR(opponent); - MESSAGE("Wild Lanturn restored HP using its Volt Absorb!"); + MESSAGE("The wild Lanturn restored HP using its Volt Absorb!"); } MESSAGE("A deluge of ions showers the battlefield!"); } @@ -37,12 +37,12 @@ WILD_BATTLE_TEST("Ion Deluge works the same way as always when used by a mon wit } WHEN { TURN { MOVE(opponent, MOVE_ION_DELUGE); } } SCENE { - MESSAGE("Wild Zebstrika used Ion Deluge!"); + MESSAGE("The wild Zebstrika used Ion Deluge!"); NONE_OF { ABILITY_POPUP(opponent, ability); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Wild Zebstrika's Sp.Atk rose!"); - MESSAGE("Wild Zebstrika's Speed rose!"); + MESSAGE("The wild Zebstrika's Sp.Atk rose!"); + MESSAGE("The wild Zebstrika's Speed rose!"); } MESSAGE("A deluge of ions showers the battlefield!"); } @@ -57,7 +57,7 @@ SINGLE_BATTLE_TEST("Ion Deluge makes Normal type moves Electric type") } WHEN { TURN { MOVE(opponent, MOVE_ION_DELUGE); MOVE(player, MOVE_TACKLE); } } SCENE { - MESSAGE("Foe Golbat used Ion Deluge!"); + MESSAGE("The opposing Golbat used Ion Deluge!"); MESSAGE("A deluge of ions showers the battlefield!"); MESSAGE("Wobbuffet used Tackle!"); MESSAGE("It's super effective!"); // Because Tackle is now electric type. diff --git a/test/battle/move_effect/knock_off.c b/test/battle/move_effect/knock_off.c index 863cf165d304..68f91396d6f6 100644 --- a/test/battle/move_effect/knock_off.c +++ b/test/battle/move_effect/knock_off.c @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("Knock Off knocks a healing berry before it has the chance to ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, player); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Wobbuffet's Sitrus Berry restored health!"); + MESSAGE("The opposing Wobbuffet's Sitrus Berry restored health!"); } ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF); MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Sitrus Berry!"); diff --git a/test/battle/move_effect/make_it_rain.c b/test/battle/move_effect/make_it_rain.c index f8ce955b4909..5469eac8a5d4 100644 --- a/test/battle/move_effect/make_it_rain.c +++ b/test/battle/move_effect/make_it_rain.c @@ -21,13 +21,13 @@ SINGLE_BATTLE_TEST("Make It Rain lowers special attack by one stage") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_MAKE_IT_RAIN, player); HP_BAR(opponent, captureDamage: &damage[0]); - MESSAGE("Coins scattered everywhere!"); + MESSAGE("Coins were scattered everywhere!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Wobbuffet's Sp. Atk fell!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_MAKE_IT_RAIN, player); HP_BAR(opponent, captureDamage: &damage[1]); - MESSAGE("Coins scattered everywhere!"); + MESSAGE("Coins were scattered everywhere!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Wobbuffet's Sp. Atk fell!"); } THEN { @@ -48,12 +48,12 @@ DOUBLE_BATTLE_TEST("Make It Rain lowers special attack by one stage if it hits b ANIMATION(ANIM_TYPE_MOVE, MOVE_MAKE_IT_RAIN, playerLeft); HP_BAR(opponentLeft); NONE_OF { - MESSAGE("Coins scattered everywhere!"); + MESSAGE("Coins were scattered everywhere!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Wobbuffet's Sp. Atk fell!"); } HP_BAR(opponentRight); - MESSAGE("Coins scattered everywhere!"); + MESSAGE("Coins were scattered everywhere!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Wobbuffet's Sp. Atk fell!"); } diff --git a/test/battle/move_effect/mind_blown.c b/test/battle/move_effect/mind_blown.c index 4f4d31cb1836..80c65cce0464 100644 --- a/test/battle/move_effect/mind_blown.c +++ b/test/battle/move_effect/mind_blown.c @@ -78,7 +78,7 @@ SINGLE_BATTLE_TEST("Mind Blown causes the user & the target to faint when below HP_BAR(player, hp: 0); ANIMATION(ANIM_TYPE_MOVE, MOVE_MIND_BLOWN, player); HP_BAR(opponent, hp: 0); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); MESSAGE("Wobbuffet fainted!"); } } @@ -97,11 +97,11 @@ DOUBLE_BATTLE_TEST("Mind Blown causes everyone to faint in a double battle") HP_BAR(playerLeft, hp: 0); ANIMATION(ANIM_TYPE_MOVE, MOVE_MIND_BLOWN, playerLeft); HP_BAR(opponentLeft, hp: 0); - MESSAGE("Foe Abra fainted!"); + MESSAGE("The opposing Abra fainted!"); HP_BAR(playerRight, hp: 0); MESSAGE("Wynaut fainted!"); HP_BAR(opponentRight, hp: 0); - MESSAGE("Foe Kadabra fainted!"); + MESSAGE("The opposing Kadabra fainted!"); MESSAGE("Wobbuffet fainted!"); } } diff --git a/test/battle/move_effect/mirror_move.c b/test/battle/move_effect/mirror_move.c index 18ac8c78e19d..243f9dec9e1f 100644 --- a/test/battle/move_effect/mirror_move.c +++ b/test/battle/move_effect/mirror_move.c @@ -51,8 +51,8 @@ SINGLE_BATTLE_TEST("Mirror Move's called powder move fails against Grass Types") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); STATUS_ICON(opponent, paralysis: TRUE); - MESSAGE("Foe Wobbuffet used Mirror Move!"); - MESSAGE("Foe Wobbuffet used Stun Spore!"); + MESSAGE("The opposing Wobbuffet used Mirror Move!"); + MESSAGE("The opposing Wobbuffet used Stun Spore!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, opponent); MESSAGE("It doesn't affect Oddish…"); NOT STATUS_ICON(player, paralysis: TRUE); @@ -71,8 +71,8 @@ SINGLE_BATTLE_TEST("Mirror Move's called multi-hit move hits multiple times") ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); HP_BAR(opponent); MESSAGE("Hit 5 time(s)!"); - MESSAGE("Foe Wobbuffet used Mirror Move!"); - MESSAGE("Foe Wobbuffet used Bullet Seed!"); + MESSAGE("The opposing Wobbuffet used Mirror Move!"); + MESSAGE("The opposing Wobbuffet used Bullet Seed!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, opponent); HP_BAR(player); MESSAGE("Hit 5 time(s)!"); diff --git a/test/battle/move_effect/octolock.c b/test/battle/move_effect/octolock.c index 3cdc5f5602c3..d49973e3f444 100644 --- a/test/battle/move_effect/octolock.c +++ b/test/battle/move_effect/octolock.c @@ -10,11 +10,11 @@ SINGLE_BATTLE_TEST("Octolock decreases Defense and Sp. Def by at the end of the TURN { MOVE(player, MOVE_OCTOLOCK); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_OCTOLOCK, player); - MESSAGE("Foe Wobbuffet can no longer escape because of Octolock!"); + MESSAGE("The opposing Wobbuffet can no longer escape because of Octolock!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Defense fell!"); + MESSAGE("The opposing Wobbuffet's Defense fell!"); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Sp. Def fell!"); + MESSAGE("The opposing Wobbuffet's Sp. Def fell!"); } } @@ -37,32 +37,32 @@ SINGLE_BATTLE_TEST("Octolock reduction is prevented by Clear Body, White Smoke a NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); if (species == SPECIES_BELDUM) { - MESSAGE("Foe Beldum can no longer escape because of Octolock!"); + MESSAGE("The opposing Beldum can no longer escape because of Octolock!"); ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); - MESSAGE("Foe Beldum's Clear Body prevents stat loss!"); + MESSAGE("The opposing Beldum's Clear Body prevents stat loss!"); NONE_OF { - MESSAGE("Foe Beldum's Defense fell!"); - MESSAGE("Foe Beldum's Sp. Def fell!"); + MESSAGE("The opposing Beldum's Defense fell!"); + MESSAGE("The opposing Beldum's Sp. Def fell!"); } } else if (species == SPECIES_TORKOAL) { - MESSAGE("Foe Torkoal can no longer escape because of Octolock!"); + MESSAGE("The opposing Torkoal can no longer escape because of Octolock!"); ABILITY_POPUP(opponent, ABILITY_WHITE_SMOKE); - MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); + MESSAGE("The opposing Torkoal's White Smoke prevents stat loss!"); NONE_OF { - MESSAGE("Foe Torkoal's Defense fell!"); - MESSAGE("Foe Torkoal's Sp. Def fell!"); + MESSAGE("The opposing Torkoal's Defense fell!"); + MESSAGE("The opposing Torkoal's Sp. Def fell!"); } } else if (species == SPECIES_SOLGALEO) { - MESSAGE("Foe Solgaleo can no longer escape because of Octolock!"); + MESSAGE("The opposing Solgaleo can no longer escape because of Octolock!"); ABILITY_POPUP(opponent, ABILITY_FULL_METAL_BODY); - MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); + MESSAGE("The opposing Solgaleo's Full Metal Body prevents stat loss!"); NONE_OF { - MESSAGE("Foe Solgaleo's Defense fell!"); - MESSAGE("Foe Solgaleo's Sp. Def fell!"); + MESSAGE("The opposing Solgaleo's Defense fell!"); + MESSAGE("The opposing Solgaleo's Sp. Def fell!"); } } } @@ -77,12 +77,12 @@ SINGLE_BATTLE_TEST("Octolock Defense reduction is prevented by Big Pecks") TURN { MOVE(player, MOVE_OCTOLOCK); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_OCTOLOCK, player); - MESSAGE("Foe Pidgey can no longer escape because of Octolock!"); + MESSAGE("The opposing Pidgey can no longer escape because of Octolock!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - NOT MESSAGE("Foe Pidgey's Defense fell!"); + NOT MESSAGE("The opposing Pidgey's Defense fell!"); ABILITY_POPUP(opponent, ABILITY_BIG_PECKS); - MESSAGE("Foe Pidgey's Big Pecks prevents Defense loss!"); - MESSAGE("Foe Pidgey's Sp. Def fell!"); + MESSAGE("The opposing Pidgey's Big Pecks prevents Defense loss!"); + MESSAGE("The opposing Pidgey's Sp. Def fell!"); } } @@ -96,12 +96,12 @@ SINGLE_BATTLE_TEST("Octolock reduction is prevented by Clear Amulet") TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_OCTOLOCK, player); - MESSAGE("Foe Wobbuffet can no longer escape because of Octolock!"); - MESSAGE("Foe Wobbuffet's Clear Amulet prevents its stats from being lowered!"); + MESSAGE("The opposing Wobbuffet can no longer escape because of Octolock!"); + MESSAGE("The opposing Wobbuffet's Clear Amulet prevents its stats from being lowered!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Defense fell!"); - MESSAGE("Foe Wobbuffet's Sp. Def fell!"); + MESSAGE("The opposing Wobbuffet's Defense fell!"); + MESSAGE("The opposing Wobbuffet's Sp. Def fell!"); } } } @@ -120,14 +120,14 @@ SINGLE_BATTLE_TEST("Octolock will not decrease Defense and Sp. Def further then } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_OCTOLOCK, player); for (j = 0; j < 5; j++) { - MESSAGE("Foe Wobbuffet's Defense fell!"); - MESSAGE("Foe Wobbuffet's Sp. Def fell!"); + MESSAGE("The opposing Wobbuffet's Defense fell!"); + MESSAGE("The opposing Wobbuffet's Sp. Def fell!"); } - MESSAGE("Foe Wobbuffet's Defense won't go lower!"); - MESSAGE("Foe Wobbuffet's Sp. Def won't go lower!"); + MESSAGE("The opposing Wobbuffet's Defense won't go lower!"); + MESSAGE("The opposing Wobbuffet's Sp. Def won't go lower!"); NONE_OF { - MESSAGE("Foe Wobbuffet's Defense fell!"); - MESSAGE("Foe Wobbuffet's Sp. Def fell!"); + MESSAGE("The opposing Wobbuffet's Defense fell!"); + MESSAGE("The opposing Wobbuffet's Sp. Def fell!"); } } } diff --git a/test/battle/move_effect/pay_day.c b/test/battle/move_effect/pay_day.c index e448a4c935e4..3b0544a909e6 100644 --- a/test/battle/move_effect/pay_day.c +++ b/test/battle/move_effect/pay_day.c @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Pay Day Scatters coins around after it hits - singles") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_PAY_DAY, player); HP_BAR(opponent); - MESSAGE("Coins scattered everywhere!"); + MESSAGE("Coins were scattered everywhere!"); } } @@ -32,6 +32,6 @@ DOUBLE_BATTLE_TEST("Pay Day Scatters coins around after it hits - doubles") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_PAY_DAY, playerLeft); HP_BAR(opponentLeft); - MESSAGE("Coins scattered everywhere!"); + MESSAGE("Coins were scattered everywhere!"); } } diff --git a/test/battle/move_effect/plasma_fists.c b/test/battle/move_effect/plasma_fists.c index a7b1ac5f6ae8..4e04fd77cb3c 100644 --- a/test/battle/move_effect/plasma_fists.c +++ b/test/battle/move_effect/plasma_fists.c @@ -19,7 +19,7 @@ SINGLE_BATTLE_TEST("Ion Duldge turns normal moves into electric for the remainde MESSAGE("Krabby used Ion Deluge!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ION_DELUGE, player); MESSAGE("A deluge of ions showers the battlefield!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); MESSAGE("It's super effective!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); @@ -39,7 +39,7 @@ SINGLE_BATTLE_TEST("Plasma Fists turns normal moves into electric for the remain MESSAGE("Krabby used Plasma Fists!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PLASMA_FISTS, player); MESSAGE("A deluge of ions showers the battlefield!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); MESSAGE("It's super effective!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); @@ -59,7 +59,7 @@ SINGLE_BATTLE_TEST("Plasma Fists type-changing effect is applied after Pixilate" MESSAGE("Krabby used Plasma Fists!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PLASMA_FISTS, player); MESSAGE("A deluge of ions showers the battlefield!"); - MESSAGE("Foe Altaria used Ember!"); + MESSAGE("The opposing Altaria used Ember!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, opponent); NOT MESSAGE("It's super effective!"); } @@ -76,7 +76,7 @@ SINGLE_BATTLE_TEST("Plasma Fists type-changing effect is applied after Normalize MESSAGE("Krabby used Plasma Fists!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PLASMA_FISTS, player); MESSAGE("A deluge of ions showers the battlefield!"); - MESSAGE("Foe Skitty used Ember!"); + MESSAGE("The opposing Skitty used Ember!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, opponent); MESSAGE("It's super effective!"); } @@ -93,7 +93,7 @@ SINGLE_BATTLE_TEST("Plasma Fists turns normal type dynamax-moves into electric t MESSAGE("Krabby used Plasma Fists!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PLASMA_FISTS, player); MESSAGE("A deluge of ions showers the battlefield!"); - MESSAGE("Foe Wobbuffet used Max Lightning!"); + MESSAGE("The opposing Wobbuffet used Max Lightning!"); MESSAGE("It's super effective!"); } } diff --git a/test/battle/move_effect/pledge.c b/test/battle/move_effect/pledge.c index a1ed91cab697..3fc4458b49ca 100644 --- a/test/battle/move_effect/pledge.c +++ b/test/battle/move_effect/pledge.c @@ -51,7 +51,7 @@ DOUBLE_BATTLE_TEST("Rainbow doubles the chance of secondary move effects") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PLEDGE, playerRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, playerLeft); - MESSAGE("Foe Wynaut was burned!"); + MESSAGE("The opposing Wynaut was burned!"); } } @@ -72,7 +72,7 @@ DOUBLE_BATTLE_TEST("Rainbow flinch chance does not stack with Serene Grace") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PLEDGE, playerRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_BITE, playerLeft); - MESSAGE("Foe Wynaut flinched!"); + MESSAGE("The opposing Wynaut flinched!"); } } diff --git a/test/battle/move_effect/protect.c b/test/battle/move_effect/protect.c index 53d4704987b6..9df780e0bb9f 100644 --- a/test/battle/move_effect/protect.c +++ b/test/battle/move_effect/protect.c @@ -48,9 +48,9 @@ SINGLE_BATTLE_TEST("Protect, Detect, Spiky Shield, Baneful Bunker and Burning Bu TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, protectMove, opponent); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT ANIMATION(ANIM_TYPE_MOVE, usedMove, player); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); if (usedMove == MOVE_LEER) { NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); } else { @@ -87,14 +87,14 @@ SINGLE_BATTLE_TEST("King's Shield, Silk Trap and Obstruct protect from damaging TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, protectMove, opponent); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); if (usedMove == MOVE_LEER) { ANIMATION(ANIM_TYPE_MOVE, usedMove, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - NOT MESSAGE("Foe Wobbuffet protected itself!"); + NOT MESSAGE("The opposing Wobbuffet protected itself!"); } else { NOT ANIMATION(ANIM_TYPE_MOVE, usedMove, player); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); if (usedMove == MOVE_TACKLE) { NOT HP_BAR(opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); @@ -144,9 +144,9 @@ SINGLE_BATTLE_TEST("Spiky Shield does 1/8 dmg of max hp of attackers making cont TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKY_SHIELD, opponent); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT ANIMATION(ANIM_TYPE_MOVE, usedMove, player); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT HP_BAR(opponent); if (usedMove == MOVE_TACKLE) { HP_BAR(player, maxHp / 8); @@ -175,9 +175,9 @@ SINGLE_BATTLE_TEST("Baneful Bunker poisons pokemon for moves making contact") TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_BANEFUL_BUNKER, opponent); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT ANIMATION(ANIM_TYPE_MOVE, usedMove, player); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); if (usedMove == MOVE_TACKLE) { NOT HP_BAR(opponent); STATUS_ICON(player, STATUS1_POISON); @@ -207,9 +207,9 @@ SINGLE_BATTLE_TEST("Burning Bulwark burns pokemon for moves making contact") TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_BURNING_BULWARK, opponent); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT ANIMATION(ANIM_TYPE_MOVE, usedMove, player); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); if (usedMove == MOVE_TACKLE) { NOT HP_BAR(opponent); STATUS_ICON(player, STATUS1_BURN); @@ -252,11 +252,11 @@ SINGLE_BATTLE_TEST("Recoil damage is not applied if target was protected") TURN {} } SCENE { // 1st turn - MESSAGE("Foe Beautifly used Tackle!"); + MESSAGE("The opposing Beautifly used Tackle!"); MESSAGE("Rapidash used Tackle!"); // 2nd turn ANIMATION(ANIM_TYPE_MOVE, protectMove, opponent); - MESSAGE("Foe Beautifly protected itself!"); + MESSAGE("The opposing Beautifly protected itself!"); // MESSAGE("Rapidash used recoilMove!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, recoilMove, player); @@ -286,10 +286,10 @@ SINGLE_BATTLE_TEST("Multi-hit moves don't hit a protected target and fail only o TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, move, opponent); - MESSAGE("Foe Beautifly protected itself!"); + MESSAGE("The opposing Beautifly protected itself!"); MESSAGE("Rapidash used Arm Thrust!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_ARM_THRUST, player); - MESSAGE("Foe Beautifly protected itself!"); + MESSAGE("The opposing Beautifly protected itself!"); // Each effect happens only once. if (move == MOVE_KINGS_SHIELD || move == MOVE_SILK_TRAP || move == MOVE_OBSTRUCT) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); @@ -332,7 +332,7 @@ DOUBLE_BATTLE_TEST("Wide Guard protects self and ally from multi-target moves") TURN { MOVE(opponentLeft, MOVE_WIDE_GUARD); MOVE(playerLeft, move, target: opponentLeft); } TURN {} } SCENE { - MESSAGE("Foe Wobbuffet used Wide Guard!"); + MESSAGE("The opposing Wobbuffet used Wide Guard!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_WIDE_GUARD, opponentLeft); if (move == MOVE_TACKLE) { MESSAGE("Wobbuffet used Tackle!"); @@ -340,15 +340,15 @@ DOUBLE_BATTLE_TEST("Wide Guard protects self and ally from multi-target moves") HP_BAR(opponentLeft); } else if (move == MOVE_HYPER_VOICE) { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPER_VOICE, playerLeft); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT HP_BAR(opponentLeft); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT HP_BAR(opponentRight); } else { // Surf - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT HP_BAR(opponentLeft); HP_BAR(playerRight); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT HP_BAR(opponentRight); } } @@ -371,12 +371,12 @@ DOUBLE_BATTLE_TEST("Wide Guard can not fail on consecutive turns") TURN {} } SCENE { for (turns = 0; turns < 2; turns++) { - MESSAGE("Foe Wobbuffet used Wide Guard!"); + MESSAGE("The opposing Wobbuffet used Wide Guard!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_WIDE_GUARD, opponentLeft); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPER_VOICE, playerLeft); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT HP_BAR(opponentLeft); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT HP_BAR(opponentRight); } } @@ -403,7 +403,7 @@ DOUBLE_BATTLE_TEST("Quick Guard protects self and ally from priority moves") TURN { MOVE(opponentLeft, MOVE_QUICK_GUARD); MOVE(playerLeft, move, target:targetOpponent); } TURN {} } SCENE { - MESSAGE("Foe Wobbuffet used Quick Guard!"); + MESSAGE("The opposing Wobbuffet used Quick Guard!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_GUARD, opponentLeft); if (move == MOVE_TACKLE) { MESSAGE("Wobbuffet used Tackle!"); @@ -411,7 +411,7 @@ DOUBLE_BATTLE_TEST("Quick Guard protects self and ally from priority moves") HP_BAR(targetOpponent); } else if (move == MOVE_QUICK_ATTACK) { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, playerLeft); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT HP_BAR(targetOpponent); } } @@ -433,10 +433,10 @@ DOUBLE_BATTLE_TEST("Quick Guard can not fail on consecutive turns") TURN { MOVE(opponentLeft, MOVE_QUICK_GUARD); MOVE(playerLeft, MOVE_QUICK_ATTACK, target: opponentRight); } } SCENE { for (turns = 0; turns < 2; turns++) { - MESSAGE("Foe Wobbuffet used Quick Guard!"); + MESSAGE("The opposing Wobbuffet used Quick Guard!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_GUARD, opponentLeft); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, playerLeft); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT HP_BAR(opponentRight); } } @@ -467,16 +467,16 @@ DOUBLE_BATTLE_TEST("Crafty Shield protects self and ally from status moves") ANIMATION(ANIM_TYPE_MOVE, MOVE_CRAFTY_SHIELD, opponentLeft); if (move == MOVE_LEER) { MESSAGE("Wobbuffet used Leer!"); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); } else { if (move == MOVE_HYPER_VOICE || targetOpponent == opponentLeft) { - NOT MESSAGE("Foe Wobbuffet protected itself!"); + NOT MESSAGE("The opposing Wobbuffet protected itself!"); HP_BAR(opponentLeft); } else if (move == MOVE_HYPER_VOICE || targetOpponent == opponentRight) { - NOT MESSAGE("Foe Wobbuffet protected itself!"); + NOT MESSAGE("The opposing Wobbuffet protected itself!"); HP_BAR(opponentRight); } } diff --git a/test/battle/move_effect/psychic_noise.c b/test/battle/move_effect/psychic_noise.c index 7846157b77d5..b25cdc48c28f 100644 --- a/test/battle/move_effect/psychic_noise.c +++ b/test/battle/move_effect/psychic_noise.c @@ -18,10 +18,10 @@ SINGLE_BATTLE_TEST("Psychic Noise blocks healing moves for 2 turns") TURN { MOVE(opponent, MOVE_RECOVER); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHIC_NOISE, player); - MESSAGE("Foe Wobbuffet was prevented from healing!"); - MESSAGE("Foe Wobbuffet was prevented from healing!"); + MESSAGE("The opposing Wobbuffet was prevented from healing!"); + MESSAGE("The opposing Wobbuffet was prevented from healing!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STRUGGLE, opponent); - MESSAGE("Foe Wobbuffet's Heal Block wore off!"); + MESSAGE("The opposing Wobbuffet's Heal Block wore off!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_RECOVER, opponent); } } @@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("Psychic Noise is blocked by Soundproof") TURN { MOVE(player, MOVE_PSYCHIC_NOISE); MOVE(opponent, MOVE_RECOVER); } } SCENE { ABILITY_POPUP(opponent, ABILITY_SOUNDPROOF); - MESSAGE("Foe Voltorb's Soundproof blocks PsychicNoise!"); + MESSAGE("The opposing Voltorb's Soundproof blocks PsychicNoise!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_RECOVER, opponent); } } @@ -50,7 +50,7 @@ SINGLE_BATTLE_TEST("Psychic Noise heal block effect is blocked by Aroma Veil") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHIC_NOISE, player); ABILITY_POPUP(opponent, ABILITY_AROMA_VEIL); - MESSAGE("Foe Milcery is protected by an aromatic veil!"); + MESSAGE("The opposing Milcery is protected by an aromatic veil!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_RECOVER, opponent); } } @@ -67,7 +67,7 @@ DOUBLE_BATTLE_TEST("Psychic Noise heal block effect is blocked by partners Aroma } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHIC_NOISE, playerLeft); ABILITY_POPUP(opponentRight, ABILITY_AROMA_VEIL); - MESSAGE("Foe Wobbuffet is protected by an aromatic veil!"); + MESSAGE("The opposing Wobbuffet is protected by an aromatic veil!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_RECOVER, opponentLeft); } } diff --git a/test/battle/move_effect/pursuit.c b/test/battle/move_effect/pursuit.c index 4cc1662413c0..b4a35c488339 100644 --- a/test/battle/move_effect/pursuit.c +++ b/test/battle/move_effect/pursuit.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Pursuited mon correctly switches out after it got hit and ac ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponent); ABILITY_POPUP(player, ABILITY_TANGLING_HAIR); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wynaut's Speed fell!"); + MESSAGE("The opposing Wynaut's Speed fell!"); MESSAGE("Go! Wobbuffet!"); } } diff --git a/test/battle/move_effect/rage_fist.c b/test/battle/move_effect/rage_fist.c index 10acacd91f86..b10be516f807 100644 --- a/test/battle/move_effect/rage_fist.c +++ b/test/battle/move_effect/rage_fist.c @@ -241,7 +241,7 @@ SINGLE_BATTLE_TEST("Rage Fist base power is not increased if move had no affect" for (turns = 0; turns < 2; turns++) { ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGE_FIST, player); HP_BAR(opponent, captureDamage: ×GotHit[turns]); - MESSAGE("Foe Regirock used Tackle!"); + MESSAGE("The opposing Regirock used Tackle!"); MESSAGE("It doesn't affect Gastly…"); } } THEN { diff --git a/test/battle/move_effect/rapid_spin.c b/test/battle/move_effect/rapid_spin.c index 0ba5e4f65fc6..e78afa2c121d 100644 --- a/test/battle/move_effect/rapid_spin.c +++ b/test/battle/move_effect/rapid_spin.c @@ -44,7 +44,7 @@ SINGLE_BATTLE_TEST("Mortal Spin blows away Wrap, hazards and poisons foe") ANIMATION(ANIM_TYPE_MOVE, MOVE_MORTAL_SPIN, player); MESSAGE("Wobbuffet got free of Foe Wobbuffet's Wrap!"); MESSAGE("Wobbuffet blew away Stealth Rock!"); - MESSAGE("Foe Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); STATUS_ICON(opponent, poison: TRUE); } } diff --git a/test/battle/move_effect/recoil_if_miss.c b/test/battle/move_effect/recoil_if_miss.c index 49c78a229e2d..0d791c27b850 100644 --- a/test/battle/move_effect/recoil_if_miss.c +++ b/test/battle/move_effect/recoil_if_miss.c @@ -78,7 +78,7 @@ SINGLE_BATTLE_TEST("Jump Kick's recoil happens after Spiky Shield damage and Pok } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKY_SHIELD, opponent); MESSAGE("Wobbuffet used Jump Kick!"); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); HP_BAR(player, damage: maxHp / 8); MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Spiky Shield!"); if (faintOnSpiky){ diff --git a/test/battle/move_effect/reflect_type.c b/test/battle/move_effect/reflect_type.c index e873516034ee..1831cd843f02 100644 --- a/test/battle/move_effect/reflect_type.c +++ b/test/battle/move_effect/reflect_type.c @@ -102,7 +102,7 @@ SINGLE_BATTLE_TEST("Reflect Type does not affect Pokémon with no types") ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player); HP_BAR(opponent); MESSAGE("Arcanine burned itself out!"); - MESSAGE("Foe Poliwrath used Reflect Type!"); + MESSAGE("The opposing Poliwrath used Reflect Type!"); MESSAGE("But it failed!"); } } @@ -166,10 +166,10 @@ SINGLE_BATTLE_TEST("Reflect Type defaults to Normal type for the user's type1 an TURN { MOVE(player, MOVE_REFLECT_TYPE); } } SCENE { // Turn 1 - MESSAGE("Foe Arcanine used Burn Up!"); + MESSAGE("The opposing Arcanine used Burn Up!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, opponent); HP_BAR(player); - MESSAGE("Foe Arcanine burned itself out!"); + MESSAGE("The opposing Arcanine burned itself out!"); // Turn 2 MESSAGE("Wobbuffet used Forest'sCurs!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FORESTS_CURSE, player); diff --git a/test/battle/move_effect/relic_song.c b/test/battle/move_effect/relic_song.c index 52db4a360149..7a7525e977bd 100644 --- a/test/battle/move_effect/relic_song.c +++ b/test/battle/move_effect/relic_song.c @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Relic Song is prevented by Soundproof") TURN { MOVE(player, MOVE_RELIC_SONG); } } SCENE { ABILITY_POPUP(opponent, ABILITY_SOUNDPROOF); - MESSAGE("Foe Voltorb's Soundproof blocks Relic Song!"); + MESSAGE("The opposing Voltorb's Soundproof blocks Relic Song!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_RELIC_SONG, player); HP_BAR(opponent); @@ -115,7 +115,7 @@ SINGLE_BATTLE_TEST("Relic Song transformation is the last thing that happens aft } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_RELIC_SONG, player); HP_BAR(opponent); - MESSAGE("Foe Gossifleur fainted!"); + MESSAGE("The opposing Gossifleur fainted!"); ABILITY_POPUP(opponent, ABILITY_COTTON_DOWN); MESSAGE("Meloetta's Speed fell!"); MESSAGE("Meloetta transformed!"); diff --git a/test/battle/move_effect/revival_blessing.c b/test/battle/move_effect/revival_blessing.c index 397e01e73aee..64c4a44ef0f2 100644 --- a/test/battle/move_effect/revival_blessing.c +++ b/test/battle/move_effect/revival_blessing.c @@ -41,7 +41,7 @@ SINGLE_BATTLE_TEST("Revival Blessing revives a fainted party member for an oppon } WHEN { TURN { MOVE(opponent, MOVE_REVIVAL_BLESSING); SEND_OUT(opponent, 1); } } SCENE { - MESSAGE("Foe Raichu used " REVIVAL_BLESSING "!"); + MESSAGE("The opposing Raichu used " REVIVAL_BLESSING "!"); MESSAGE("Pichu was revived and is ready to fight again!"); } } @@ -82,10 +82,10 @@ TO_DO_BATTLE_TEST("Revival Blessing cannot revive a partner's party member"); // TURN { MOVE(user, MOVE_REVIVAL_BLESSING); } // } SCENE { // if (user == opponentLeft) { -// MESSAGE("Foe Wobbuffet used " REVIVAL_BLESSING "!"); +// MESSAGE("The opposing Wobbuffet used " REVIVAL_BLESSING "!"); // MESSAGE("But it failed!"); // } else { -// MESSAGE("Foe Wynaut used " REVIVAL_BLESSING "!"); +// MESSAGE("The opposing Wynaut used " REVIVAL_BLESSING "!"); // MESSAGE("Wynaut was revived and is ready to fight again!"); // } // } @@ -107,8 +107,8 @@ TO_DO_BATTLE_TEST("Revived battlers still lose their turn"); // SEND_OUT(opponentLeft, 1); } // } SCENE { // MESSAGE("Wobbuffet used Tackle!"); -// MESSAGE("Foe Wynaut fainted!"); -// MESSAGE("Foe Wobbuffet used " REVIVAL_BLESSING "!"); +// MESSAGE("The opposing Wynaut fainted!"); +// MESSAGE("The opposing Wobbuffet used " REVIVAL_BLESSING "!"); // MESSAGE("Wynaut was revived and is ready to fight again!"); // NOT { MESSAGE("Wynaut used Celebrate!"); } // } diff --git a/test/battle/move_effect/roar.c b/test/battle/move_effect/roar.c index 90e0fd1b47bf..f67a24bba102 100644 --- a/test/battle/move_effect/roar.c +++ b/test/battle/move_effect/roar.c @@ -19,7 +19,7 @@ SINGLE_BATTLE_TEST("Roar switches the target with a random non-fainted replaceme TURN { MOVE(player, MOVE_ROAR); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_ROAR, player); - MESSAGE("Foe Bulbasaur was dragged out!"); + MESSAGE("The opposing Bulbasaur was dragged out!"); } } @@ -38,7 +38,7 @@ DOUBLE_BATTLE_TEST("Roar switches the target with a random non-battler, non-fain TURN { MOVE(playerLeft, MOVE_ROAR, target: opponentRight); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_ROAR, playerLeft); - MESSAGE("Foe Bulbasaur was dragged out!"); + MESSAGE("The opposing Bulbasaur was dragged out!"); } } diff --git a/test/battle/move_effect/roost.c b/test/battle/move_effect/roost.c index 1ae84dd088d7..92b1fd27f8cd 100644 --- a/test/battle/move_effect/roost.c +++ b/test/battle/move_effect/roost.c @@ -97,11 +97,11 @@ SINGLE_BATTLE_TEST("Roost suppresses the user's Flying-typing this turn, then re MESSAGE("Skarmory used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); MESSAGE("Skarmory regained health!"); - MESSAGE("Foe Wobbuffet used Earthquake!"); + MESSAGE("The opposing Wobbuffet used Earthquake!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponent); MESSAGE("It's super effective!"); // Turn 2: EQ has no effect because Roost expired - MESSAGE("Foe Wobbuffet used Earthquake!"); + MESSAGE("The opposing Wobbuffet used Earthquake!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponent); MESSAGE("It doesn't affect Skarmory…"); NOT HP_BAR(player); @@ -242,10 +242,10 @@ DOUBLE_BATTLE_TEST("Roost suppresses the user's not-yet-aquired Flying-type this MESSAGE("Kecleon used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, playerLeft); MESSAGE("Kecleon regained health!"); - MESSAGE("Foe Pidgey used Gust!"); + MESSAGE("The opposing Pidgey used Gust!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_GUST, opponentLeft); MESSAGE("Kecleon's Color Change made it the Flying type!"); - MESSAGE("Foe Sandshrew used Earthquake!"); + MESSAGE("The opposing Sandshrew used Earthquake!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponentRight); MESSAGE("Kecleon's Color Change made it the Ground type!"); } @@ -264,7 +264,7 @@ SINGLE_BATTLE_TEST("Roost prevents a Flying-type user from being protected by De MESSAGE("Rayquaza used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); MESSAGE("Rayquaza regained health!"); - MESSAGE("Foe Wobbuffet used Ice Beam!"); + MESSAGE("The opposing Wobbuffet used Ice Beam!"); NOT MESSAGE("The mysterious strong winds weakened the attack!"); } } @@ -283,10 +283,10 @@ SINGLE_BATTLE_TEST("Roost does not undo other type-changing effects at the end o MESSAGE("Swellow used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); MESSAGE("Swellow regained health!"); - MESSAGE("Foe Wobbuffet used Soak!"); + MESSAGE("The opposing Wobbuffet used Soak!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SOAK, opponent); MESSAGE("Swellow transformed into the Water type!"); - MESSAGE("Foe Wobbuffet used Vine Whip!"); + MESSAGE("The opposing Wobbuffet used Vine Whip!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_VINE_WHIP, opponent); MESSAGE("It's super effective!"); } @@ -330,16 +330,16 @@ SINGLE_BATTLE_TEST("Roost's suppression prevents Reflect Type from copying any F MESSAGE("Swellow used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); MESSAGE("Swellow regained health!"); - MESSAGE("Foe Wobbuffet used Reflect Type!"); + MESSAGE("The opposing Wobbuffet used Reflect Type!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, opponent); - MESSAGE("Foe Wobbuffet's type changed to match the Swellow's!"); + MESSAGE("The opposing Wobbuffet's type changed to match the Swellow's!"); // Turn 2: EQ hits, Reflect Type on non-Roosted Normal/Flying MESSAGE("Swellow used Earthquake!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, player); HP_BAR(opponent); - MESSAGE("Foe Wobbuffet used Reflect Type!"); + MESSAGE("The opposing Wobbuffet used Reflect Type!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, opponent); - MESSAGE("Foe Wobbuffet's type changed to match the Swellow's!"); + MESSAGE("The opposing Wobbuffet's type changed to match the Swellow's!"); // Turn 3: EQ has no effect MESSAGE("Swellow used Earthquake!"); MESSAGE("It doesn't affect Foe Wobbuffet…"); @@ -361,7 +361,7 @@ SINGLE_BATTLE_TEST("Roost does not suppress the ungrounded effect of Levitate") MESSAGE("Flygon used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); MESSAGE("Flygon regained health!"); - MESSAGE("Foe Wobbuffet used Earthquake!"); + MESSAGE("The opposing Wobbuffet used Earthquake!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponent); HP_BAR(player); @@ -380,7 +380,7 @@ SINGLE_BATTLE_TEST("Roost does not suppress the ungrounded effect of Air Balloon MESSAGE("Wobbuffet used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); MESSAGE("Wobbuffet regained health!"); - MESSAGE("Foe Wobbuffet used Earthquake!"); + MESSAGE("The opposing Wobbuffet used Earthquake!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponent); HP_BAR(player); @@ -405,7 +405,7 @@ SINGLE_BATTLE_TEST("Roost does not suppress the ungrounded effect of Magnet Rise MESSAGE("Wobbuffet used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); MESSAGE("Wobbuffet regained health!"); - MESSAGE("Foe Wobbuffet used Earthquake!"); + MESSAGE("The opposing Wobbuffet used Earthquake!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponent); HP_BAR(player); @@ -423,14 +423,14 @@ SINGLE_BATTLE_TEST("Roost does not suppress the ungrounded effect of Telekinesis TURN { MOVE(player, MOVE_ROOST); MOVE(opponent, MOVE_EARTHQUAKE); } } SCENE { // Turn 1: Telekinesis - MESSAGE("Foe Wobbuffet used Telekinesis!"); + MESSAGE("The opposing Wobbuffet used Telekinesis!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TELEKINESIS, opponent); MESSAGE("Wobbuffet was hurled into the air!"); // Turn 2 MESSAGE("Wobbuffet used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); MESSAGE("Wobbuffet regained health!"); - MESSAGE("Foe Wobbuffet used Earthquake!"); + MESSAGE("The opposing Wobbuffet used Earthquake!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponent); HP_BAR(player); diff --git a/test/battle/move_effect/salt_cure.c b/test/battle/move_effect/salt_cure.c index 547797e38b47..09ca1f6c0638 100644 --- a/test/battle/move_effect/salt_cure.c +++ b/test/battle/move_effect/salt_cure.c @@ -19,11 +19,11 @@ SINGLE_BATTLE_TEST("Salt Cure inflicts 1/8 of the target's maximum HP as damage } SCENE { s32 maxHP = GetMonData(&OPPONENT_PARTY[0], MON_DATA_MAX_HP); ANIMATION(ANIM_TYPE_MOVE, MOVE_SALT_CURE, player); - MESSAGE("Foe Wobbuffet is being salt cured!"); + MESSAGE("The opposing Wobbuffet is being salt cured!"); for (j = 0; j < 4; j++) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SALT_CURE_DAMAGE, opponent); HP_BAR(opponent, damage: maxHP / 8); - MESSAGE("Foe Wobbuffet is hurt by Salt Cure!"); + MESSAGE("The opposing Wobbuffet is hurt by Salt Cure!"); } } } @@ -62,12 +62,12 @@ SINGLE_BATTLE_TEST("Salt Cure is removed when the afflicted Pokémon is switched TURN { SWITCH(opponent, 1); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SALT_CURE, player); - MESSAGE("Foe Wobbuffet is being salt cured!"); + MESSAGE("The opposing Wobbuffet is being salt cured!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SALT_CURE_DAMAGE, opponent); - MESSAGE("Foe Wobbuffet is hurt by Salt Cure!"); + MESSAGE("The opposing Wobbuffet is hurt by Salt Cure!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SALT_CURE_DAMAGE, opponent); - MESSAGE("Foe Wobbuffet is hurt by Salt Cure!"); + MESSAGE("The opposing Wobbuffet is hurt by Salt Cure!"); } } } @@ -81,7 +81,7 @@ SINGLE_BATTLE_TEST("If Salt Cure faints the target no status will be applied") TURN { MOVE(player, MOVE_SALT_CURE); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SALT_CURE, player); - NOT MESSAGE("Foe Wobbuffet is being salt cured!"); - MESSAGE("Foe Wobbuffet fainted!"); + NOT MESSAGE("The opposing Wobbuffet is being salt cured!"); + MESSAGE("The opposing Wobbuffet fainted!"); } } diff --git a/test/battle/move_effect/semi_invulnerable_moves.c b/test/battle/move_effect/semi_invulnerable_moves.c index 97760225d132..5a682a9b7aac 100644 --- a/test/battle/move_effect/semi_invulnerable_moves.c +++ b/test/battle/move_effect/semi_invulnerable_moves.c @@ -94,8 +94,8 @@ SINGLE_BATTLE_TEST("Semi-invulnerable moves make the user semi-invulnerable turn ANIMATION(ANIM_TYPE_MOVE, move, player); // Aerial Ace cannot miss unless the target is semi-invulnerable - MESSAGE("Foe Wobbuffet used Aerial Ace!"); - MESSAGE("Foe Wobbuffet's attack missed!"); + MESSAGE("The opposing Wobbuffet used Aerial Ace!"); + MESSAGE("The opposing Wobbuffet's attack missed!"); // Attack turn switch (move) { diff --git a/test/battle/move_effect/shell_trap.c b/test/battle/move_effect/shell_trap.c index 15b3f41e5ec5..8fa67bce4377 100644 --- a/test/battle/move_effect/shell_trap.c +++ b/test/battle/move_effect/shell_trap.c @@ -108,14 +108,14 @@ DOUBLE_BATTLE_TEST("Shell Trap activates immediately after being hit on turn 1 a } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SHELL_TRAP_SETUP, playerLeft); MESSAGE("Wobbuffet set a shell trap!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); MESSAGE("Wobbuffet used Shell Trap!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_TRAP, playerLeft); HP_BAR(opponentLeft); HP_BAR(opponentRight); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wynaut used Celebrate!"); + MESSAGE("The opposing Wynaut used Celebrate!"); } } @@ -132,8 +132,8 @@ DOUBLE_BATTLE_TEST("Shell Trap activates immediately after being hit on turn 2 a } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SHELL_TRAP_SETUP, playerLeft); MESSAGE("Wobbuffet set a shell trap!"); - MESSAGE("Foe Wynaut used Celebrate!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wynaut used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); MESSAGE("Wobbuffet used Shell Trap!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_TRAP, playerLeft); @@ -157,8 +157,8 @@ DOUBLE_BATTLE_TEST("Shell Trap activates immediately after being hit on turn 3 a ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SHELL_TRAP_SETUP, playerLeft); MESSAGE("Wobbuffet set a shell trap!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wynaut used Celebrate!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wynaut used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); MESSAGE("Wobbuffet used Shell Trap!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_TRAP, playerLeft); diff --git a/test/battle/move_effect/sleep.c b/test/battle/move_effect/sleep.c index 05efb7ab749c..834f6066724b 100644 --- a/test/battle/move_effect/sleep.c +++ b/test/battle/move_effect/sleep.c @@ -24,15 +24,15 @@ SINGLE_BATTLE_TEST("Hypnosis inflicts 1-3 turns of sleep") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPNOSIS, player); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, opponent); - MESSAGE("Foe Wobbuffet fell asleep!"); + MESSAGE("The opposing Wobbuffet fell asleep!"); STATUS_ICON(opponent, sleep: TRUE); for (count = 0; count < turns; ++count) { if (count < turns - 1) - MESSAGE("Foe Wobbuffet is fast asleep."); + MESSAGE("The opposing Wobbuffet is fast asleep."); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, opponent); } - MESSAGE("Foe Wobbuffet woke up!"); + MESSAGE("The opposing Wobbuffet woke up!"); STATUS_ICON(opponent, none: TRUE); } } diff --git a/test/battle/move_effect/special_attack_down.c b/test/battle/move_effect/special_attack_down.c index bf01aa089697..60d015d1cddd 100644 --- a/test/battle/move_effect/special_attack_down.c +++ b/test/battle/move_effect/special_attack_down.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Confide lowers Special Attack", s16 damage) if (lowerSpecialAttack) { ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFIDE, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Sp. Atk fell!"); + MESSAGE("The opposing Wobbuffet's Sp. Atk fell!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_GUST, opponent); HP_BAR(player, captureDamage: &results[i].damage); diff --git a/test/battle/move_effect/spikes.c b/test/battle/move_effect/spikes.c index 97207297f92e..664ff14cc0ad 100644 --- a/test/battle/move_effect/spikes.c +++ b/test/battle/move_effect/spikes.c @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Spikes damage on switch in") } MESSAGE("2 sent out Wynaut!"); HP_BAR(opponent, damage: maxHP / divisor); - MESSAGE("Foe Wynaut is hurt by spikes!"); + MESSAGE("The opposing Wynaut is hurt by spikes!"); } } @@ -60,7 +60,7 @@ SINGLE_BATTLE_TEST("Spikes fails after 3 layers") MESSAGE("But it failed!"); MESSAGE("2 sent out Wynaut!"); HP_BAR(opponent, damage: maxHP / 4); - MESSAGE("Foe Wynaut is hurt by spikes!"); + MESSAGE("The opposing Wynaut is hurt by spikes!"); } } @@ -79,10 +79,10 @@ SINGLE_BATTLE_TEST("Spikes damage on subsequent switch ins") s32 maxHP1 = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); MESSAGE("2 sent out Wynaut!"); HP_BAR(opponent, damage: maxHP1 / 8); - MESSAGE("Foe Wynaut is hurt by spikes!"); + MESSAGE("The opposing Wynaut is hurt by spikes!"); MESSAGE("2 sent out Wobbuffet!"); HP_BAR(opponent, damage: maxHP0 / 8); - MESSAGE("Foe Wobbuffet is hurt by spikes!"); + MESSAGE("The opposing Wobbuffet is hurt by spikes!"); } } diff --git a/test/battle/move_effect/sticky_web.c b/test/battle/move_effect/sticky_web.c index 6c6f8f156cb2..e1a56489eb96 100644 --- a/test/battle/move_effect/sticky_web.c +++ b/test/battle/move_effect/sticky_web.c @@ -20,9 +20,9 @@ SINGLE_BATTLE_TEST("Sticky Web lowers Speed by 1 on switch-in") ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); MESSAGE("A sticky web spreads out on the ground around the opposing team!"); MESSAGE("2 sent out Wynaut!"); - MESSAGE("Foe Wynaut was caught in a Sticky Web!"); + MESSAGE("The opposing Wynaut was caught in a Sticky Web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wynaut's Speed fell!"); + MESSAGE("The opposing Wynaut's Speed fell!"); } } @@ -65,13 +65,13 @@ DOUBLE_BATTLE_TEST("Sticky Web lowers Speed by 1 in a double battle after Explos MESSAGE("A sticky web spreads out on the ground around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, playerLeft); MESSAGE("2 sent out Wynaut!"); - MESSAGE("Foe Wynaut was caught in a Sticky Web!"); + MESSAGE("The opposing Wynaut was caught in a Sticky Web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Wynaut's Speed fell!"); + MESSAGE("The opposing Wynaut's Speed fell!"); MESSAGE("2 sent out Wynaut!"); - MESSAGE("Foe Wynaut was caught in a Sticky Web!"); + MESSAGE("The opposing Wynaut was caught in a Sticky Web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Wynaut's Speed fell!"); + MESSAGE("The opposing Wynaut's Speed fell!"); } } @@ -89,9 +89,9 @@ SINGLE_BATTLE_TEST("Sticky Web raises Speed by 1 for a Pokemon with Contrary") ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); MESSAGE("A sticky web spreads out on the ground around the opposing team!"); MESSAGE("2 sent out Shuckle!"); - MESSAGE("Foe Shuckle was caught in a Sticky Web!"); + MESSAGE("The opposing Shuckle was caught in a Sticky Web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Shuckle's Speed rose!"); + MESSAGE("The opposing Shuckle's Speed rose!"); } } @@ -128,9 +128,9 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - the ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, BATTLER_OPPONENT); if (opponentSetUpper == 0) { - MESSAGE("Foe Caterpie's Speed fell!"); + MESSAGE("The opposing Caterpie's Speed fell!"); } else { - MESSAGE("Foe Weedle's Speed fell!"); + MESSAGE("The opposing Weedle's Speed fell!"); } } } @@ -214,7 +214,7 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - no o MESSAGE("A sticky web spreads out on the ground around your team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_MEMENTO, opponentLeft); - MESSAGE("Foe Caterpie fainted!"); + MESSAGE("The opposing Caterpie fainted!"); if (hasReplacement) { MESSAGE("2 sent out Pidgey!"); } diff --git a/test/battle/move_effect/strength_sap.c b/test/battle/move_effect/strength_sap.c index 000f5ff41afb..0692e9447712 100644 --- a/test/battle/move_effect/strength_sap.c +++ b/test/battle/move_effect/strength_sap.c @@ -22,9 +22,9 @@ SINGLE_BATTLE_TEST("Strength Sap lowers Attack by 1 and restores HP based on tar MESSAGE("Wobbuffet used Strength Sap!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STRENGTH_SAP, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Attack fell!"); + MESSAGE("The opposing Wobbuffet's Attack fell!"); HP_BAR(player, captureDamage: &results[i].hp); - MESSAGE("Foe Wobbuffet had its energy drained!"); + MESSAGE("The opposing Wobbuffet had its energy drained!"); } THEN { EXPECT_EQ(results[i].hp * -1, atkStat); } @@ -49,10 +49,10 @@ SINGLE_BATTLE_TEST("Strength Sap works exactly the same when attacker is behind MESSAGE("Wobbuffet used Strength Sap!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STRENGTH_SAP, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Attack fell!"); + MESSAGE("The opposing Wobbuffet's Attack fell!"); HP_BAR(player, captureDamage: &results[i].hp); NOT MESSAGE("The SUBSTITUTE took damage for Foe Wobbuffet!"); - MESSAGE("Foe Wobbuffet had its energy drained!"); + MESSAGE("The opposing Wobbuffet had its energy drained!"); } THEN { EXPECT_EQ(results[i].hp * -1, atkStat); } @@ -97,9 +97,9 @@ SINGLE_BATTLE_TEST("Strength Sap lowers Attack by 1 and restores HP based on tar MESSAGE("Wobbuffet used Strength Sap!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STRENGTH_SAP, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Attack fell!"); + MESSAGE("The opposing Wobbuffet's Attack fell!"); HP_BAR(player, captureDamage: &results[i].hp); - MESSAGE("Foe Wobbuffet had its energy drained!"); + MESSAGE("The opposing Wobbuffet had its energy drained!"); } THEN { if (statStage < DEFAULT_STAT_STAGE) { EXPECT_EQ(results[i].hp * -1, (60 * gStatStageRatios[statStage + 1][0] / gStatStageRatios[statStage + 1][1])); @@ -133,11 +133,11 @@ SINGLE_BATTLE_TEST("Strength Sap fails if target is at -6 Atk") NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_STRENGTH_SAP, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Attack fell!"); + MESSAGE("The opposing Wobbuffet's Attack fell!"); HP_BAR(player); - MESSAGE("Foe Wobbuffet had its energy drained!"); + MESSAGE("The opposing Wobbuffet had its energy drained!"); } - MESSAGE("Foe Wobbuffet's Attack won't go lower!"); + MESSAGE("The opposing Wobbuffet's Attack won't go lower!"); } } @@ -158,9 +158,9 @@ SINGLE_BATTLE_TEST("Strength Sap restores more HP if Big Root is held", s16 hp) MESSAGE("Wobbuffet used Strength Sap!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STRENGTH_SAP, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Attack fell!"); + MESSAGE("The opposing Wobbuffet's Attack fell!"); HP_BAR(player, captureDamage: &results[i].hp); - MESSAGE("Foe Wobbuffet had its energy drained!"); + MESSAGE("The opposing Wobbuffet had its energy drained!"); } FINALLY { EXPECT_GT(abs(results[1].hp), abs(results[0].hp)); } @@ -184,7 +184,7 @@ SINGLE_BATTLE_TEST("Strength Sap makes attacker lose HP if target's ability is L MESSAGE("Wobbuffet used Strength Sap!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STRENGTH_SAP, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Attack fell!"); + MESSAGE("The opposing Wobbuffet's Attack fell!"); ABILITY_POPUP(opponent, ABILITY_LIQUID_OOZE); HP_BAR(player, captureDamage: &lostHp); MESSAGE("It sucked up the liquid ooze!"); diff --git a/test/battle/move_effect/syrup_bomb.c b/test/battle/move_effect/syrup_bomb.c index 57831abb5576..0583c93c3129 100644 --- a/test/battle/move_effect/syrup_bomb.c +++ b/test/battle/move_effect/syrup_bomb.c @@ -15,16 +15,16 @@ SINGLE_BATTLE_TEST("Syrup Bomb covers the foe in sticky syrup for 3 turns") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); HP_BAR(opponent); - MESSAGE("Foe Wobbuffet got covered in sticky syrup!"); + MESSAGE("The opposing Wobbuffet got covered in sticky syrup!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); } } } @@ -40,12 +40,12 @@ SINGLE_BATTLE_TEST("Sticky Syrup isn't applied again if the target is already co } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); HP_BAR(opponent); - MESSAGE("Foe Wobbuffet got covered in sticky syrup!"); + MESSAGE("The opposing Wobbuffet got covered in sticky syrup!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); HP_BAR(opponent); - NOT MESSAGE("Foe Wobbuffet got covered in sticky syrup!"); + NOT MESSAGE("The opposing Wobbuffet got covered in sticky syrup!"); } } @@ -58,7 +58,7 @@ SINGLE_BATTLE_TEST("Syrup Bomb is prevented by Bulletproof") TURN { MOVE(player, MOVE_SYRUP_BOMB); } } SCENE { ABILITY_POPUP(opponent, ABILITY_BULLETPROOF); - MESSAGE("Foe Chespin's Bulletproof blocks Syrup Bomb!"); + MESSAGE("The opposing Chespin's Bulletproof blocks Syrup Bomb!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); HP_BAR(opponent); @@ -87,32 +87,32 @@ SINGLE_BATTLE_TEST("Sticky Syrup speed reduction is prevented by Clear Body, Whi HP_BAR(opponent); if (species == SPECIES_BELDUM) { - MESSAGE("Foe Beldum got covered in sticky syrup!"); + MESSAGE("The opposing Beldum got covered in sticky syrup!"); ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); - MESSAGE("Foe Beldum's Clear Body prevents stat loss!"); + MESSAGE("The opposing Beldum's Clear Body prevents stat loss!"); NONE_OF { - MESSAGE("Foe Beldum's Speed fell!"); + MESSAGE("The opposing Beldum's Speed fell!"); } } else if (species == SPECIES_TORKOAL) { - MESSAGE("Foe Torkoal got covered in sticky syrup!"); + MESSAGE("The opposing Torkoal got covered in sticky syrup!"); ABILITY_POPUP(opponent, ABILITY_WHITE_SMOKE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); - MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); + MESSAGE("The opposing Torkoal's White Smoke prevents stat loss!"); NONE_OF { - MESSAGE("Foe Torkoal's Speed fell!"); + MESSAGE("The opposing Torkoal's Speed fell!"); } } else if (species == SPECIES_SOLGALEO) { - MESSAGE("Foe Solgaleo got covered in sticky syrup!"); + MESSAGE("The opposing Solgaleo got covered in sticky syrup!"); ABILITY_POPUP(opponent, ABILITY_FULL_METAL_BODY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); - MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); + MESSAGE("The opposing Solgaleo's Full Metal Body prevents stat loss!"); NONE_OF { - MESSAGE("Foe Solgaleo's Speed fell!"); + MESSAGE("The opposing Solgaleo's Speed fell!"); } } } @@ -128,11 +128,11 @@ SINGLE_BATTLE_TEST("Sticky Syrup speed reduction is prevented by Clear Amulet") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); HP_BAR(opponent); - MESSAGE("Foe Wobbuffet got covered in sticky syrup!"); - MESSAGE("Foe Wobbuffet's Clear Amulet prevents its stats from being lowered!"); + MESSAGE("The opposing Wobbuffet got covered in sticky syrup!"); + MESSAGE("The opposing Wobbuffet's Clear Amulet prevents its stats from being lowered!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); } } } @@ -156,11 +156,11 @@ SINGLE_BATTLE_TEST("Sticky syrup will not decrease speed further then minus six" } ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); HP_BAR(opponent); - MESSAGE("Foe Wobbuffet got covered in sticky syrup!"); + MESSAGE("The opposing Wobbuffet got covered in sticky syrup!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); - MESSAGE("Foe Wobbuffet's Speed won't go lower!"); + MESSAGE("The opposing Wobbuffet's Speed won't go lower!"); NONE_OF { - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); } } } @@ -177,12 +177,12 @@ SINGLE_BATTLE_TEST("Sticky Syrup is removed when the user switches out") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); HP_BAR(opponent); - MESSAGE("Foe Wobbuffet got covered in sticky syrup!"); + MESSAGE("The opposing Wobbuffet got covered in sticky syrup!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); } } } @@ -201,14 +201,14 @@ SINGLE_BATTLE_TEST("Sticky Syrup is removed when the user faints") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); HP_BAR(opponent); - MESSAGE("Foe Wobbuffet got covered in sticky syrup!"); + MESSAGE("The opposing Wobbuffet got covered in sticky syrup!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); HP_BAR(player); MESSAGE("Wobbuffet fainted!"); MESSAGE("Go! Wynaut!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); } } } diff --git a/test/battle/move_effect/tailwind.c b/test/battle/move_effect/tailwind.c index 9cadc875991b..5fa53564512e 100644 --- a/test/battle/move_effect/tailwind.c +++ b/test/battle/move_effect/tailwind.c @@ -19,19 +19,19 @@ SINGLE_BATTLE_TEST("Tailwind applies for 4 turns") TURN {} TURN {} } SCENE { - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Tailwind!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); } } @@ -49,7 +49,7 @@ DOUBLE_BATTLE_TEST("Tailwind affects partner on first turn") } SCENE { MESSAGE("Wobbuffet used Tailwind!"); MESSAGE("Wynaut used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); - MESSAGE("Foe Wynaut used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wynaut used Celebrate!"); } } diff --git a/test/battle/move_effect/teatime.c b/test/battle/move_effect/teatime.c index 398494a2c36b..3f3edfae56c7 100644 --- a/test/battle/move_effect/teatime.c +++ b/test/battle/move_effect/teatime.c @@ -60,7 +60,7 @@ SINGLE_BATTLE_TEST("Teatime causes the user to consume its Berry, ignoring HP re } WHEN { TURN { MOVE(opponent, MOVE_TEATIME); } } SCENE { - MESSAGE("Foe Wobbuffet used Teatime!"); + MESSAGE("The opposing Wobbuffet used Teatime!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TEATIME, opponent); MESSAGE("Using Liechi Berry, the Attack of Foe Wobbuffet rose!"); } @@ -88,7 +88,7 @@ SINGLE_BATTLE_TEST("Teatime causes other Pokemon to consume their Berry even if } WHEN { TURN { MOVE(opponent, MOVE_TEATIME); } } SCENE { - MESSAGE("Foe Wobbuffet used Teatime!"); + MESSAGE("The opposing Wobbuffet used Teatime!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TEATIME, opponent); MESSAGE("Using Liechi Berry, the Attack of Wobbuffet rose!"); } @@ -113,7 +113,7 @@ DOUBLE_BATTLE_TEST("Teatime causes all Pokémon to consume their berry") { MESSAGE("Wobbuffet used Teatime!"); } else { - MESSAGE("Foe Wobbuffet used Teatime!"); + MESSAGE("The opposing Wobbuffet used Teatime!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TEATIME, user); MESSAGE("Using Liechi Berry, the Attack of Wobbuffet rose!"); @@ -177,7 +177,7 @@ SINGLE_BATTLE_TEST("Teatime triggers Volt Absorb if it has been affected by Elec MOVE(opponent, MOVE_TEATIME); } } SCENE { - MESSAGE("Foe Wobbuffet used Teatime!"); + MESSAGE("The opposing Wobbuffet used Teatime!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TEATIME, opponent); if (shouldTriggerAbility) { @@ -213,7 +213,7 @@ SINGLE_BATTLE_TEST("Teatime triggers Lightning Rod if it has been affected by El MOVE(opponent, MOVE_TEATIME); } } SCENE { - MESSAGE("Foe Wobbuffet used Teatime!"); + MESSAGE("The opposing Wobbuffet used Teatime!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TEATIME, opponent); if (shouldTriggerAbility) { @@ -252,7 +252,7 @@ SINGLE_BATTLE_TEST("Teatime triggers Motor Drive if it has been affected by Elec MOVE(opponent, MOVE_TEATIME); } } SCENE { - MESSAGE("Foe Wobbuffet used Teatime!"); + MESSAGE("The opposing Wobbuffet used Teatime!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TEATIME, opponent); if (shouldTriggerAbility) { diff --git a/test/battle/move_effect/telekinesis.c b/test/battle/move_effect/telekinesis.c index 6e8ef409f0ce..27db58a76a08 100644 --- a/test/battle/move_effect/telekinesis.c +++ b/test/battle/move_effect/telekinesis.c @@ -18,8 +18,8 @@ SINGLE_BATTLE_TEST("Telekinesis makes the target unable to avoid any attacks mad TURN { MOVE(player, MOVE_SCREECH, hit:FALSE); } } SCENE { MESSAGE("Wobbuffet used Telekinesis!"); - MESSAGE("Foe Wynaut was hurled into the air!"); - MESSAGE("Foe Wynaut used Minimize!"); + MESSAGE("The opposing Wynaut was hurled into the air!"); + MESSAGE("The opposing Wynaut used Minimize!"); MESSAGE("Wobbuffet used Screech!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCREECH, player); NOT MESSAGE("Wobbuffet's attack missed!"); @@ -37,10 +37,10 @@ SINGLE_BATTLE_TEST("Telekinesis ends after 3 turns") TURN { } } SCENE { MESSAGE("Wobbuffet used Telekinesis!"); - MESSAGE("Foe Wynaut was hurled into the air!"); + MESSAGE("The opposing Wynaut was hurled into the air!"); MESSAGE("Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wynaut was freed from the telekinesis!"); + MESSAGE("The opposing Wynaut was freed from the telekinesis!"); } } @@ -59,7 +59,7 @@ SINGLE_BATTLE_TEST("Telekinesis makes the target immune to Ground-type attacks") ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLDOZE, player); HP_BAR(opponent); MESSAGE("Wobbuffet used Telekinesis!"); - MESSAGE("Foe Wynaut was hurled into the air!"); + MESSAGE("The opposing Wynaut was hurled into the air!"); MESSAGE("Wobbuffet used Bulldoze!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLDOZE, player); diff --git a/test/battle/move_effect/throat_chop.c b/test/battle/move_effect/throat_chop.c index edc026aed436..7a9fcfaccfef 100644 --- a/test/battle/move_effect/throat_chop.c +++ b/test/battle/move_effect/throat_chop.c @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("Throat Chop prevents the usage of sound moves") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_THROAT_CHOP, player); HP_BAR(opponent); - MESSAGE("Foe Wobbuffet can't use Hyper Voice due to Throat Chop!"); + MESSAGE("The opposing Wobbuffet can't use Hyper Voice due to Throat Chop!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPER_VOICE, opponent); } @@ -38,7 +38,7 @@ SINGLE_BATTLE_TEST("Throat Chop won't work through a substitute") HP_BAR(opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_THROAT_CHOP, player); NONE_OF { - MESSAGE("Foe Wobbuffet can't use Hyper Voice due to Throat Chop!"); + MESSAGE("The opposing Wobbuffet can't use Hyper Voice due to Throat Chop!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPER_VOICE, opponent); } diff --git a/test/battle/move_effect/tidy_up.c b/test/battle/move_effect/tidy_up.c index 463fb65af8b9..da0e653dcb50 100644 --- a/test/battle/move_effect/tidy_up.c +++ b/test/battle/move_effect/tidy_up.c @@ -61,12 +61,12 @@ SINGLE_BATTLE_TEST("Tidy Up removes Substitute") } WHEN { TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_TIDY_UP); } } SCENE { - MESSAGE("Foe Wobbuffet used Substitute!"); + MESSAGE("The opposing Wobbuffet used Substitute!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, opponent); - MESSAGE("Foe Wobbuffet made a SUBSTITUTE!"); + MESSAGE("The opposing Wobbuffet made a SUBSTITUTE!"); MESSAGE("Wobbuffet used Tidy Up!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TIDY_UP, player); - MESSAGE("Foe Wobbuffet's SUBSTITUTE faded!"); + MESSAGE("The opposing Wobbuffet's SUBSTITUTE faded!"); MESSAGE("Tidying up complete!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Wobbuffet's Attack rose!"); diff --git a/test/battle/move_effect/torment.c b/test/battle/move_effect/torment.c index 376267f39631..dc911691b0f8 100644 --- a/test/battle/move_effect/torment.c +++ b/test/battle/move_effect/torment.c @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Torment prevents consecutive move uses") TURN { MOVE(opponent, MOVE_SPLASH, allowed: FALSE); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TORMENT, player); - MESSAGE("Foe Wobbuffet was subjected to torment!"); + MESSAGE("The opposing Wobbuffet was subjected to torment!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); } diff --git a/test/battle/move_effect/toxic_spikes.c b/test/battle/move_effect/toxic_spikes.c index 517a1b261e29..637dd42bbc8d 100644 --- a/test/battle/move_effect/toxic_spikes.c +++ b/test/battle/move_effect/toxic_spikes.c @@ -222,7 +222,7 @@ SINGLE_BATTLE_TEST("Toxic Spikes inflicts poison on switch in after Primal Rever TURN { SWITCH(player, 1); } TURN { MOVE(player, MOVE_MEMENTO); SEND_OUT(player, 2); } } SCENE { - MESSAGE("Foe Wobbuffet used Toxic Spikes!"); + MESSAGE("The opposing Wobbuffet used Toxic Spikes!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, opponent); MESSAGE("Poison Spikes were scattered all around your team's feet!"); // Switch in diff --git a/test/battle/move_effect/triple_arrows.c b/test/battle/move_effect/triple_arrows.c index 4286a9ba0760..980447e16f02 100644 --- a/test/battle/move_effect/triple_arrows.c +++ b/test/battle/move_effect/triple_arrows.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Triple Arrows may lower Defense by one stage") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_ARROWS, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Defense fell!"); + MESSAGE("The opposing Wobbuffet's Defense fell!"); } } @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Triple Arrows makes the foe flinch 30% of the time") TURN { MOVE(player, MOVE_TRIPLE_ARROWS); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_ARROWS, player); - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched!"); } } @@ -70,8 +70,8 @@ SINGLE_BATTLE_TEST("Triple Arrows can lower Defense and cause flinch at the time } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_ARROWS, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Defense fell!"); - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet's Defense fell!"); + MESSAGE("The opposing Wobbuffet flinched!"); } } @@ -86,7 +86,7 @@ SINGLE_BATTLE_TEST("Triple Arrows's flinching is prevented by Inner Focus") } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_ARROWS, player); - NONE_OF { MESSAGE("Foe Wobbuffet flinched!"); } + NONE_OF { MESSAGE("The opposing Wobbuffet flinched!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } } diff --git a/test/battle/move_effect/upper_hand.c b/test/battle/move_effect/upper_hand.c index 04f2b8522565..9594fb3b2406 100644 --- a/test/battle/move_effect/upper_hand.c +++ b/test/battle/move_effect/upper_hand.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Upper Hand succeeds if the target is using a priority attack } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_UPPER_HAND, player); HP_BAR(opponent); - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_EXTREME_SPEED, opponent); } } @@ -75,7 +75,7 @@ SINGLE_BATTLE_TEST("Upper Hand succeeds if the target's move is boosted in prior } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_UPPER_HAND, player); HP_BAR(opponent); - MESSAGE("Foe Comfey flinched!"); + MESSAGE("The opposing Comfey flinched!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAINING_KISS, opponent); } } diff --git a/test/battle/move_effect/uproar.c b/test/battle/move_effect/uproar.c index fe6a4c9931f2..95de3ef7b16e 100644 --- a/test/battle/move_effect/uproar.c +++ b/test/battle/move_effect/uproar.c @@ -20,9 +20,9 @@ DOUBLE_BATTLE_TEST("Uproar status causes sleeping pokemon to wake up during an a HP_BAR(opponentRight); MESSAGE("Wobbuffet woke up in the UPROAR!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); - MESSAGE("Foe Voltorb woke up in the UPROAR!"); + MESSAGE("The opposing Voltorb woke up in the UPROAR!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentLeft); - MESSAGE("Foe Wobbuffet woke up in the UPROAR!"); + MESSAGE("The opposing Wobbuffet woke up in the UPROAR!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); } } diff --git a/test/battle/status1/freeze.c b/test/battle/status1/freeze.c index c89bda337fe2..906d3643993a 100644 --- a/test/battle/status1/freeze.c +++ b/test/battle/status1/freeze.c @@ -23,7 +23,7 @@ SINGLE_BATTLE_TEST("Freeze is thawed by opponent's Fire-type attacks") } WHEN { TURN { MOVE(opponent, MOVE_EMBER); MOVE(player, MOVE_CELEBRATE); } } SCENE { - MESSAGE("Foe Wobbuffet used Ember!"); + MESSAGE("The opposing Wobbuffet used Ember!"); MESSAGE("Wobbuffet was defrosted!"); STATUS_ICON(player, none: TRUE); } diff --git a/test/battle/status1/frostbite.c b/test/battle/status1/frostbite.c index bf4b1f7fcdd7..e4b42d9b96f5 100644 --- a/test/battle/status1/frostbite.c +++ b/test/battle/status1/frostbite.c @@ -33,7 +33,7 @@ SINGLE_BATTLE_TEST("Frostbite deals 1/16 damage to effected pokemon") } WHEN { TURN {} } SCENE { - MESSAGE("Foe Wobbuffet is hurt by its frostbite!"); + MESSAGE("The opposing Wobbuffet is hurt by its frostbite!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent); HP_BAR(opponent, captureDamage: &frostbiteDamage); } THEN { EXPECT_EQ(frostbiteDamage, opponent->maxHP / 16); } @@ -58,10 +58,10 @@ SINGLE_BATTLE_TEST("Frostbite is healed if hit with a thawing move") ANIMATION(ANIM_TYPE_MOVE, move, player); if (move == MOVE_EMBER) { NONE_OF { - MESSAGE("Foe Wobbuffet's frostbite was healed!"); + MESSAGE("The opposing Wobbuffet's frostbite was healed!"); } } else { - MESSAGE("Foe Wobbuffet's frostbite was healed!"); + MESSAGE("The opposing Wobbuffet's frostbite was healed!"); } } } diff --git a/test/battle/status1/paralysis.c b/test/battle/status1/paralysis.c index b6edaf26352f..1b0f23ad63cd 100644 --- a/test/battle/status1/paralysis.c +++ b/test/battle/status1/paralysis.c @@ -17,14 +17,14 @@ SINGLE_BATTLE_TEST("Paralysis reduces Speed by 50%") if (playerFirst) { ONE_OF { MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Wobbuffet is paralyzed! It can't move!"); + MESSAGE("Wobbuffet is paralyzed, so it may be unable to move!"); } - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } else { - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ONE_OF { MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Wobbuffet is paralyzed! It can't move!"); + MESSAGE("Wobbuffet is paralyzed, so it may be unable to move!"); } } } @@ -39,6 +39,6 @@ SINGLE_BATTLE_TEST("Paralysis has a 25% chance of skipping the turn") } WHEN { TURN { MOVE(player, MOVE_CELEBRATE); } } SCENE { - MESSAGE("Wobbuffet is paralyzed! It can't move!"); + MESSAGE("Wobbuffet is paralyzed, so it may be unable to move!"); } } diff --git a/test/battle/terrain/electric.c b/test/battle/terrain/electric.c index c6fda3fb3e81..9ecd9df0bdd2 100644 --- a/test/battle/terrain/electric.c +++ b/test/battle/terrain/electric.c @@ -11,10 +11,10 @@ SINGLE_BATTLE_TEST("Electric Terrain protects grounded battlers from falling asl TURN { MOVE(player, MOVE_SPORE); } } SCENE { MESSAGE("Wobbuffet used ElctrcTrrain!"); - MESSAGE("Foe Claydol used Spore!"); + MESSAGE("The opposing Claydol used Spore!"); MESSAGE("Wobbuffet surrounds itself with electrified terrain!"); MESSAGE("Wobbuffet used Spore!"); - MESSAGE("Foe Claydol fell asleep!"); + MESSAGE("The opposing Claydol fell asleep!"); STATUS_ICON(opponent, sleep: TRUE); } } @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Electric Terrain activates Electric Seed and Mimicry") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Using Electric Seed, the Defense of Wobbuffet rose!"); ABILITY_POPUP(opponent); - MESSAGE("Foe Stunfisk's type changed to Electr!"); + MESSAGE("The opposing Stunfisk's type changed to Electr!"); } THEN { EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].type1, TYPE_ELECTRIC); } @@ -73,18 +73,18 @@ SINGLE_BATTLE_TEST("Electric Terrain lasts for 5 turns") TURN {} TURN {} } SCENE { - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ELECTRIC_TERRAIN, player); MESSAGE("An electric current runs across the battlefield!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("The electricity disappeared from the battlefield."); } diff --git a/test/battle/terrain/grassy.c b/test/battle/terrain/grassy.c index 1cb846dd41e8..ddf2f5615a20 100644 --- a/test/battle/terrain/grassy.c +++ b/test/battle/terrain/grassy.c @@ -28,7 +28,7 @@ SINGLE_BATTLE_TEST("Grassy Terrain activates Grassy Seed and Mimicry") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Using Grassy Seed, the Defense of Wobbuffet rose!"); ABILITY_POPUP(opponent); - MESSAGE("Foe Stunfisk's type changed to Grass!"); + MESSAGE("The opposing Stunfisk's type changed to Grass!"); } THEN { EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].type1, TYPE_GRASS); } @@ -96,18 +96,18 @@ SINGLE_BATTLE_TEST("Grassy Terrain lasts for 5 turns") TURN {} TURN {} } SCENE { - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASSY_TERRAIN, player); MESSAGE("Grass grew to cover the battlefield!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("The grass disappeared from the battlefield."); } diff --git a/test/battle/terrain/misty.c b/test/battle/terrain/misty.c index c76689ce7957..cf243ef2c6e6 100644 --- a/test/battle/terrain/misty.c +++ b/test/battle/terrain/misty.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Misty Terrain protects grounded battlers from non-volatile s TURN { MOVE(player, MOVE_TOXIC); } } SCENE { MESSAGE("Wobbuffet used MistyTerrain!"); - MESSAGE("Foe Claydol used Toxic!"); + MESSAGE("The opposing Claydol used Toxic!"); MESSAGE("Wobbuffet surrounds itself with a protective mist!"); NOT { STATUS_ICON(opponent, badPoison: TRUE); } MESSAGE("Wobbuffet used Toxic!"); @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Misty Terrain activates Misty Seed and Mimicry") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Using Misty Seed, the Sp. Def of Wobbuffet rose!"); ABILITY_POPUP(opponent); - MESSAGE("Foe Stunfisk's type changed to Fairy!"); + MESSAGE("The opposing Stunfisk's type changed to Fairy!"); } THEN { EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].type1, TYPE_FAIRY); } @@ -90,18 +90,18 @@ SINGLE_BATTLE_TEST("Misty Terrain lasts for 5 turns") TURN {} TURN {} } SCENE { - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_MISTY_TERRAIN, player); MESSAGE("Mist swirled about the battlefield!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("The mist disappeared from the battlefield."); } diff --git a/test/battle/terrain/psychic.c b/test/battle/terrain/psychic.c index 20f7deef6e9c..d6f2da3b13de 100644 --- a/test/battle/terrain/psychic.c +++ b/test/battle/terrain/psychic.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Psychic Terrain protects grounded battlers from priority mov MESSAGE("Claydol used PsychcTrrain!"); MESSAGE("Claydol cannot use Quick Attack!"); NOT { HP_BAR(opponent); } - MESSAGE("Foe Wobbuffet used Quick Attack!"); + MESSAGE("The opposing Wobbuffet used Quick Attack!"); HP_BAR(player); } } @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Psychic Terrain activates Psychic Seed and Mimicry") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Using Psychic Seed, the Sp. Def of Wobbuffet rose!"); ABILITY_POPUP(opponent); - MESSAGE("Foe Stunfisk's type changed to Psychc!"); + MESSAGE("The opposing Stunfisk's type changed to Psychc!"); } THEN { EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].type1, TYPE_PSYCHIC); } @@ -145,18 +145,18 @@ SINGLE_BATTLE_TEST("Psychic Terrain lasts for 5 turns") TURN {} TURN {} } SCENE { - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHIC_TERRAIN, player); MESSAGE("The battlefield got weird!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("The weirdness disappeared from the battlefield."); } diff --git a/test/battle/weather/hail.c b/test/battle/weather/hail.c index 8908e17a79ec..38502cc8480d 100644 --- a/test/battle/weather/hail.c +++ b/test/battle/weather/hail.c @@ -12,7 +12,7 @@ SINGLE_BATTLE_TEST("Hail deals 1/16 damage per turn") } WHEN { TURN {MOVE(player, MOVE_HAIL);} } SCENE { - MESSAGE("Foe Wobbuffet is pelted by HAIL!"); + MESSAGE("The opposing Wobbuffet is buffeted by the hail!"); HP_BAR(opponent, captureDamage: &hailDamage); } THEN { EXPECT_EQ(hailDamage, opponent->maxHP / 16); } } @@ -26,6 +26,6 @@ SINGLE_BATTLE_TEST("Hail damage does not affect Ice-type Pokémon") } WHEN { TURN {MOVE(player, MOVE_HAIL);} } SCENE { - NOT MESSAGE("Foe Glalie is pelted by HAIL!"); + NOT MESSAGE("The opposing Glalie is buffeted by the hail!"); } } diff --git a/test/battle/weather/sandstorm.c b/test/battle/weather/sandstorm.c index 5d7a6f1713cf..3c5cbfcec6e8 100644 --- a/test/battle/weather/sandstorm.c +++ b/test/battle/weather/sandstorm.c @@ -12,7 +12,7 @@ SINGLE_BATTLE_TEST("Sandstorm deals 1/16 damage per turn") } WHEN { TURN {MOVE(player, MOVE_SANDSTORM);} } SCENE { - MESSAGE("Foe Wobbuffet is buffeted by the sandstorm!"); + MESSAGE("The opposing Wobbuffet is buffeted by the sandstorm!"); HP_BAR(opponent, captureDamage: &sandstormDamage); } THEN { EXPECT_EQ(sandstormDamage, opponent->maxHP / 16); } } @@ -54,13 +54,13 @@ SINGLE_BATTLE_TEST("Sandstorm damage does not hurt Ground, Rock, and Steel-type switch (mon) { case SPECIES_SANDSLASH: - NOT MESSAGE("Foe Sandslash is buffeted by the sandstorm!"); + NOT MESSAGE("The opposing Sandslash is buffeted by the sandstorm!"); break; case SPECIES_NOSEPASS: - NOT MESSAGE("Foe Nosepass is buffeted by the sandstorm!"); + NOT MESSAGE("The opposing Nosepass is buffeted by the sandstorm!"); break; case SPECIES_REGISTEEL: - NOT MESSAGE("Foe Registeel is buffeted by the sandstorm!"); + NOT MESSAGE("The opposing Registeel is buffeted by the sandstorm!"); break; } } diff --git a/test/dynamax.c b/test/dynamax.c index 2db55d87b693..5b397a428fcd 100644 --- a/test/dynamax.c +++ b/test/dynamax.c @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamax increases HP and max HP by 1.5x", u16 hp) ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_DYNAMAX_GROWTH, player); MESSAGE("Wobbuffet used Max Strike!"); } - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } THEN { results[i].hp = player->hp; } FINALLY { @@ -44,7 +44,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamax expires after three turns", u16 hp) MESSAGE("Wobbuffet used Max Strike!"); else MESSAGE("Wobbuffet used Tackle!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } if (dynamax) // Expect to have visual reversion at the end. ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); @@ -64,7 +64,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot be flinched") } WHEN { TURN { MOVE(opponent, MOVE_FAKE_OUT); MOVE(player, MOVE_TACKLE, dynamax: TRUE); } } SCENE { - MESSAGE("Foe Wobbuffet used Fake Out!"); + MESSAGE("The opposing Wobbuffet used Fake Out!"); NONE_OF { MESSAGE("Wobbuffet flinched!"); } MESSAGE("Wobbuffet used Max Strike!"); } @@ -80,7 +80,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot be hit by weight-based mo TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_HEAVY_SLAM); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Heavy Slam!"); + MESSAGE("The opposing Wobbuffet used Heavy Slam!"); MESSAGE("The move was blocked by the power of Dynamax!"); NONE_OF { HP_BAR(player); } } @@ -96,7 +96,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot be hit by OHKO moves") TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_FISSURE); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Machamp used Fissure!"); + MESSAGE("The opposing Machamp used Fissure!"); MESSAGE("Wobbuffet is unaffected!"); NONE_OF { HP_BAR(player); } } @@ -111,9 +111,9 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by Destiny Bond } WHEN { TURN { MOVE(opponent, MOVE_DESTINY_BOND); MOVE(player, MOVE_TACKLE, dynamax: TRUE); } } SCENE { - MESSAGE("Foe Wobbuffet used Destiny Bond!"); + MESSAGE("The opposing Wobbuffet used Destiny Bond!"); MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); NONE_OF { HP_BAR(player); } } } @@ -126,10 +126,10 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are affected by Grudge") } WHEN { TURN { MOVE(opponent, MOVE_GRUDGE); MOVE(player, MOVE_TACKLE, dynamax: TRUE); } } SCENE { - MESSAGE("Foe Wobbuffet used Grudge!"); + MESSAGE("The opposing Wobbuffet used Grudge!"); MESSAGE("Wobbuffet used Max Strike!"); MESSAGE("Wobbuffet's Tackle lost all its PP due to the GRUDGE!"); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); } } @@ -146,11 +146,11 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by phazing move TURN { MOVE(opponent, MOVE_WHIRLWIND); MOVE(player, MOVE_TACKLE); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Dragon Tail!"); + MESSAGE("The opposing Wobbuffet used Dragon Tail!"); HP_BAR(player); MESSAGE("The move was blocked by the power of Dynamax!"); MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Whirlwind!"); + MESSAGE("The opposing Wobbuffet used Whirlwind!"); MESSAGE("The move was blocked by the power of Dynamax!"); } } @@ -166,7 +166,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by phazing move TURN { MOVE(opponent, MOVE_DRAGON_TAIL); MOVE(player, MOVE_TACKLE, dynamax: TRUE); SEND_OUT(player, 1); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Dragon Tail!"); + MESSAGE("The opposing Wobbuffet used Dragon Tail!"); HP_BAR(player); MESSAGE("Wobbuffet fainted!"); NOT MESSAGE("The move was blocked by the power of Dynamax!"); @@ -185,7 +185,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by Red Card") } SCENE { MESSAGE("Wobbuffet used Max Strike!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Wobbuffet held up its Red Card against Wobbuffet!"); + MESSAGE("The opposing Wobbuffet held up its Red Card against Wobbuffet!"); MESSAGE("The move was blocked by the power of Dynamax!"); } THEN { EXPECT_EQ(opponent->item, ITEM_NONE); @@ -202,7 +202,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can be switched out by Eject But TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_TACKLE); SEND_OUT(player, 1); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); MESSAGE("Wobbuffet is switched out with the Eject Button!"); } THEN { @@ -219,7 +219,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot have their ability swappe TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_SKILL_SWAP); } } SCENE { MESSAGE("Miltank used Max Strike!"); - MESSAGE("Foe Runerigus used Skill Swap!"); + MESSAGE("The opposing Runerigus used Skill Swap!"); MESSAGE("But it failed!"); } THEN { EXPECT_EQ(player->ability, ABILITY_SCRAPPY); @@ -235,7 +235,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can have their ability changed o TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_SIMPLE_BEAM); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Simple Beam!"); + MESSAGE("The opposing Wobbuffet used Simple Beam!"); MESSAGE("Wobbuffet acquired Simple!"); } THEN { EXPECT_EQ(player->ability, ABILITY_SIMPLE); @@ -252,7 +252,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are immune to Encore") TURN { MOVE(player, MOVE_EMBER); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Encore!"); + MESSAGE("The opposing Wobbuffet used Encore!"); MESSAGE("But it failed!"); MESSAGE("Wobbuffet used Max Flare!"); } @@ -272,7 +272,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can be encored immediately after MESSAGE("Wobbuffet used Max Knuckle!"); MESSAGE("Wobbuffet used Max Knuckle!"); MESSAGE("Wobbuffet used Max Knuckle!"); - MESSAGE("Foe Wobbuffet used Encore!"); + MESSAGE("The opposing Wobbuffet used Encore!"); MESSAGE("Wobbuffet used Arm Thrust!"); } } @@ -287,7 +287,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon's Max Moves cannot be disabled") TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_DISABLE); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Disable!"); + MESSAGE("The opposing Wobbuffet used Disable!"); MESSAGE("But it failed!"); } } @@ -305,9 +305,9 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can have base moves disabled on TURN {} TURN { MOVE(player, MOVE_TACKLE, allowed: FALSE); MOVE(player, MOVE_CELEBRATE); } } SCENE { - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Tackle!"); - MESSAGE("Foe Wobbuffet used Disable!"); + MESSAGE("The opposing Wobbuffet used Disable!"); MESSAGE("Wobbuffet's Tackle was disabled!"); MESSAGE("Wobbuffet used Max Strike!"); } @@ -322,7 +322,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are immune to Torment") TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_TORMENT); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Torment!"); + MESSAGE("The opposing Wobbuffet used Torment!"); MESSAGE("But it failed!"); } } @@ -337,8 +337,8 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not immune to Knock Off") TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_KNOCK_OFF); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Knock Off!"); - MESSAGE("Foe Wobbuffet knocked off Wobbuffet's Potion!"); + MESSAGE("The opposing Wobbuffet used Knock Off!"); + MESSAGE("The opposing Wobbuffet knocked off Wobbuffet's Potion!"); } THEN { EXPECT_EQ(player->item, ITEM_NONE); } @@ -356,7 +356,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon lose their substitutes") MESSAGE("Wobbuffet used Substitute!"); MESSAGE("Wobbuffet made a SUBSTITUTE!"); MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); HP_BAR(player); } } @@ -440,9 +440,9 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Feint bypasses Max Guard but doesn't break it") } } SCENE { MESSAGE("Wobbuffet used Max Guard!"); - MESSAGE("Foe Wobbuffet used Feint!"); + MESSAGE("The opposing Wobbuffet used Feint!"); HP_BAR(playerLeft); - MESSAGE("Foe Wynaut used Tackle!"); + MESSAGE("The opposing Wynaut used Tackle!"); NONE_OF { HP_BAR(playerLeft); } } } @@ -550,7 +550,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Endeavor uses a Pokemon's non-Dynamax HP", s16 dam } WHEN { TURN { MOVE(opponent, MOVE_ENDEAVOR); MOVE(player, MOVE_TACKLE, dynamax: dynamax); } } SCENE { - MESSAGE("Foe Wobbuffet used Endeavor!"); + MESSAGE("The opposing Wobbuffet used Endeavor!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { EXPECT_EQ(results[0].damage, results[1].damage); @@ -569,7 +569,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Super Fang uses a Pokemon's non-Dynamax HP", s16 d } WHEN { TURN { MOVE(opponent, MOVE_SUPER_FANG); MOVE(player, MOVE_TACKLE, dynamax: dynamax); } } SCENE { - MESSAGE("Foe Wobbuffet used Super Fang!"); + MESSAGE("The opposing Wobbuffet used Super Fang!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { EXPECT_EQ(results[0].damage, results[1].damage); @@ -588,7 +588,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Pain Split uses a Pokemon's non-Dynamax HP", s16 d } WHEN { TURN { MOVE(opponent, MOVE_PAIN_SPLIT); MOVE(player, MOVE_TACKLE, dynamax: dynamax); } } SCENE { - MESSAGE("Foe Wobbuffet used Pain Split!"); + MESSAGE("The opposing Wobbuffet used Pain Split!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { EXPECT_EQ(results[0].damage, results[1].damage); @@ -627,7 +627,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Heal Pulse heals based on a Pokemon's non-Dynamax } WHEN { TURN { MOVE(opponent, MOVE_HEAL_PULSE); MOVE(player, MOVE_TACKLE, dynamax: dynamax); } } SCENE { - MESSAGE("Foe Wobbuffet used Heal Pulse!"); + MESSAGE("The opposing Wobbuffet used Heal Pulse!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { EXPECT_EQ(results[0].damage, results[1].damage); @@ -647,14 +647,14 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Strike lowers single opponent's speed") TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_TACKLE); } } SCENE { // turn 1 - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); MESSAGE("Wobbuffet used Max Strike!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); // turn 2 MESSAGE("Wobbuffet used Max Strike!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } } @@ -677,21 +677,21 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Max Strike lowers both opponents' speed") MOVE(opponentRight, MOVE_TACKLE, target: playerLeft); } } SCENE { // turn 1 - MESSAGE("Foe Wobbuffet used Tackle!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); MESSAGE("Wobbuffet used Max Strike!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); // turn 2 MESSAGE("Wobbuffet used Max Strike!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Wobbuffet's Speed fell!"); - MESSAGE("Foe Wobbuffet used Tackle!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); } } @@ -722,8 +722,8 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Max Knuckle raises both allies' attack") MESSAGE("Wynaut's Attack rose!"); MESSAGE("Wynaut used Tackle!"); HP_BAR(opponentRight, captureDamage: &damage[1]); - MESSAGE("Foe Wobbuffet used Celebrate!"); - MESSAGE("Foe Wynaut used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wynaut used Celebrate!"); // turn 2 MESSAGE("Wobbuffet used Max Knuckle!"); HP_BAR(opponentLeft, captureDamage: &damage[2]); @@ -749,8 +749,8 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Flare sets up sunlight") TURN { MOVE(player, MOVE_EMBER, dynamax: TRUE); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { MESSAGE("Wobbuffet used Max Flare!"); - MESSAGE("The sunlight got bright!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The sunlight turned harsh!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SUN_CONTINUES); } } @@ -766,7 +766,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Geyser sets up heavy rain") } SCENE { MESSAGE("Wobbuffet used Max Geyser!"); MESSAGE("It started to rain!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RAIN_CONTINUES); } } @@ -782,7 +782,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Hailstorm sets up hail") } SCENE { MESSAGE("Wobbuffet used Max Hailstorm!"); MESSAGE("It started to hail!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HAIL_CONTINUES); } } @@ -797,8 +797,8 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Rockfall sets up a sandstorm") TURN { MOVE(player, MOVE_ROCK_THROW, dynamax: TRUE); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { MESSAGE("Wobbuffet used Max Rockfall!"); - MESSAGE("A sandstorm brewed!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("A sandstorm kicked up!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SANDSTORM_CONTINUES); } } @@ -819,7 +819,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Overgrowth sets up Grassy Terrain") MESSAGE("Grass grew to cover the battlefield!"); MESSAGE("Wobbuffet is healed by the grassy terrain!"); HP_BAR(player, damage: -maxHP/16); - MESSAGE("Foe Wobbuffet is healed by the grassy terrain!"); + MESSAGE("The opposing Wobbuffet is healed by the grassy terrain!"); HP_BAR(opponent, damage: -maxHP/16); } } @@ -834,9 +834,9 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Mindstorm sets up Psychic Terrain") TURN { MOVE(opponent, MOVE_EXTREME_SPEED); MOVE(player, MOVE_PSYCHIC, dynamax: TRUE); } TURN { MOVE(opponent, MOVE_EXTREME_SPEED); MOVE(player, MOVE_PSYCHIC); } } SCENE { - MESSAGE("Foe Wobbuffet used ExtremeSpeed!"); + MESSAGE("The opposing Wobbuffet used ExtremeSpeed!"); MESSAGE("Wobbuffet used Max Mindstorm!"); - MESSAGE("Foe Wobbuffet cannot use ExtremeSpeed!"); + MESSAGE("The opposing Wobbuffet cannot use ExtremeSpeed!"); MESSAGE("Wobbuffet used Max Mindstorm!"); } } @@ -851,7 +851,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Lightning sets up Electric Terrain") TURN { MOVE(player, MOVE_THUNDERBOLT, dynamax: TRUE); MOVE(opponent, MOVE_SPORE); } } SCENE { MESSAGE("Wobbuffet used Max Lightning!"); - MESSAGE("Foe Wobbuffet used Spore!"); + MESSAGE("The opposing Wobbuffet used Spore!"); MESSAGE("Wobbuffet surrounds itself with electrified terrain!"); } } @@ -866,7 +866,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Starfall sets up Misty Terrain") TURN { MOVE(player, MOVE_MOONBLAST, dynamax: TRUE); MOVE(opponent, MOVE_TOXIC); } } SCENE { MESSAGE("Wobbuffet used Max Starfall!"); - MESSAGE("Foe Wobbuffet used Toxic!"); + MESSAGE("The opposing Wobbuffet used Toxic!"); MESSAGE("Wobbuffet surrounds itself with a protective mist!"); } } @@ -911,7 +911,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Steelsurge sets up sharp steel") MESSAGE("2 sent out Hatterene!"); MESSAGE("Sharp steel bit into Foe Hatterene!"); // turn 4 - MESSAGE("Foe Hatterene used Defog!"); + MESSAGE("The opposing Hatterene used Defog!"); MESSAGE("The sharp steel disappeared from the ground around the opposing team!"); } THEN { EXPECT_MUL_EQ(opponent->maxHP, Q_4_12(0.75), opponent->hp); @@ -952,10 +952,10 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Volt Crash paralyzes both opponents") MESSAGE("Pikachu used G-Max Volt Crash!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, opponentLeft); STATUS_ICON(opponentLeft, paralysis: TRUE); - MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed, so it may be unable to move!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, opponentRight); STATUS_ICON(opponentRight, paralysis: TRUE); - MESSAGE("Foe Wynaut is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wynaut is paralyzed, so it may be unable to move!"); } } @@ -982,21 +982,21 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Stun Shock paralyzes or poisons both opponen ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponentLeft); if (statusAnim == B_ANIM_STATUS_PSN) { STATUS_ICON(opponentLeft, poison: TRUE); - MESSAGE("Foe Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); } else { STATUS_ICON(opponentLeft, paralysis: TRUE); - MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed, so it may be unable to move!"); } // opponent right ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponentRight); if (statusAnim == B_ANIM_STATUS_PSN) { STATUS_ICON(opponentRight, poison: TRUE); - MESSAGE("Foe Wynaut was poisoned!"); + MESSAGE("The opposing Wynaut was poisoned!"); } else { STATUS_ICON(opponentRight, paralysis: TRUE); - MESSAGE("Foe Wynaut is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wynaut is paralyzed, so it may be unable to move!"); } } } @@ -1018,14 +1018,14 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Stun Shock chooses statuses before consideri NONE_OF { // opponent left STATUS_ICON(opponentLeft, poison: TRUE); - MESSAGE("Foe Garbodor was poisoned!"); + MESSAGE("The opposing Garbodor was poisoned!"); STATUS_ICON(opponentLeft, paralysis: TRUE); - MESSAGE("Foe Garbodor is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Garbodor is paralyzed, so it may be unable to move!"); // opponent right STATUS_ICON(opponentRight, poison: TRUE); - MESSAGE("Foe Trubbish was poisoned!"); + MESSAGE("The opposing Trubbish was poisoned!"); STATUS_ICON(opponentRight, paralysis: TRUE); - MESSAGE("Foe Trubbish is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Trubbish is paralyzed, so it may be unable to move!"); } } } @@ -1052,29 +1052,29 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Befuddle paralyzes, poisons, or sleeps both ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponentLeft); if (statusAnim == B_ANIM_STATUS_PSN) { STATUS_ICON(opponentLeft, poison: TRUE); - MESSAGE("Foe Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); } else if (statusAnim == B_ANIM_STATUS_PRZ) { STATUS_ICON(opponentLeft, paralysis: TRUE); - MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed, so it may be unable to move!"); } else { STATUS_ICON(opponentLeft, sleep: TRUE); - MESSAGE("Foe Wobbuffet fell asleep!"); + MESSAGE("The opposing Wobbuffet fell asleep!"); } // opponent right ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponentRight); if (statusAnim == B_ANIM_STATUS_PSN) { STATUS_ICON(opponentRight, poison: TRUE); - MESSAGE("Foe Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); } else if (statusAnim == B_ANIM_STATUS_PRZ) { STATUS_ICON(opponentRight, paralysis: TRUE); - MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed, so it may be unable to move!"); } else { STATUS_ICON(opponentRight, sleep: TRUE); - MESSAGE("Foe Wobbuffet fell asleep!"); + MESSAGE("The opposing Wobbuffet fell asleep!"); } } } @@ -1092,10 +1092,10 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Gold Rush confuses both opponents and genera } SCENE { MESSAGE("Meowth used G-Max Gold Rush!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponentLeft); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponentRight); - MESSAGE("Foe Wobbuffet became confused!"); - MESSAGE("Coins scattered everywhere!"); + MESSAGE("The opposing Wobbuffet became confused!"); + MESSAGE("Coins were scattered everywhere!"); } } @@ -1112,9 +1112,9 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Smite confuses both opponents") } SCENE { MESSAGE("Hatterene used G-Max Smite!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponentLeft); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponentRight); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); } } @@ -1131,10 +1131,10 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Cuddle infatuates both opponents, if possibl } SCENE { MESSAGE("Eevee used G-Max Cuddle!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_INFATUATION, opponentLeft); - MESSAGE("Foe Wobbuffet fell in love!"); + MESSAGE("The opposing Wobbuffet fell in love!"); NONE_OF { ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_INFATUATION, opponentRight); - MESSAGE("Foe Wobbuffet fell in love!"); + MESSAGE("The opposing Wobbuffet fell in love!"); } } } @@ -1151,8 +1151,8 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Terror traps both opponents") TURN { MOVE(playerLeft, MOVE_LICK, target: opponentLeft, dynamax: TRUE); } } SCENE { MESSAGE("Gengar used G-Max Terror!"); - MESSAGE("Foe Wobbuffet can't escape now!"); - MESSAGE("Foe Wobbuffet can't escape now!"); + MESSAGE("The opposing Wobbuffet can't escape now!"); + MESSAGE("The opposing Wobbuffet can't escape now!"); } THEN { // Can't find good way to test trapping EXPECT(opponentLeft->status2 & STATUS2_ESCAPE_PREVENTION); } @@ -1180,16 +1180,16 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Meltdown torments both opponents for 3 turns } SCENE { // turn 1 MESSAGE("Melmetal used G-Max Meltdown!"); - MESSAGE("Foe Wobbuffet was subjected to torment!"); - MESSAGE("Foe Wynaut was subjected to torment!"); - MESSAGE("Foe Wobbuffet used Splash!"); - MESSAGE("Foe Wynaut used Splash!"); + MESSAGE("The opposing Wobbuffet was subjected to torment!"); + MESSAGE("The opposing Wynaut was subjected to torment!"); + MESSAGE("The opposing Wobbuffet used Splash!"); + MESSAGE("The opposing Wynaut used Splash!"); // turn 2 - MESSAGE("Foe Wobbuffet used Celebrate!"); - MESSAGE("Foe Wynaut used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wynaut used Celebrate!"); // end of turn 3 - MESSAGE("Foe Wobbuffet is tormented no more!"); - MESSAGE("Foe Wynaut is tormented no more!"); + MESSAGE("The opposing Wobbuffet is tormented no more!"); + MESSAGE("The opposing Wynaut is tormented no more!"); } } @@ -1214,26 +1214,26 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Wildfire sets a field effect that damages no // turn 1 MESSAGE("Charizard used G-Max Wildfire!"); MESSAGE("The opposing team was surrounded by flames!"); - MESSAGE("Foe Wobbuffet is burning up within G-Max Wildfire's flames!"); + MESSAGE("The opposing Wobbuffet is burning up within G-Max Wildfire's flames!"); HP_BAR(opponentLeft, captureDamage: &damage); - MESSAGE("Foe Wynaut is burning up within G-Max Wildfire's flames!"); + MESSAGE("The opposing Wynaut is burning up within G-Max Wildfire's flames!"); HP_BAR(opponentRight); // turn 2 - MESSAGE("Foe Wobbuffet is burning up within G-Max Wildfire's flames!"); + MESSAGE("The opposing Wobbuffet is burning up within G-Max Wildfire's flames!"); HP_BAR(opponentLeft); - MESSAGE("Foe Wynaut is burning up within G-Max Wildfire's flames!"); + MESSAGE("The opposing Wynaut is burning up within G-Max Wildfire's flames!"); HP_BAR(opponentRight); // turn 3 - NONE_OF { MESSAGE("Foe Arcanine is burning up within G-Max Wildfire's flames!"); } - MESSAGE("Foe Wynaut is burning up within G-Max Wildfire's flames!"); + NONE_OF { MESSAGE("The opposing Arcanine is burning up within G-Max Wildfire's flames!"); } + MESSAGE("The opposing Wynaut is burning up within G-Max Wildfire's flames!"); HP_BAR(opponentRight); // turn 4 - MESSAGE("Foe Wynaut is burning up within G-Max Wildfire's flames!"); + MESSAGE("The opposing Wynaut is burning up within G-Max Wildfire's flames!"); HP_BAR(opponentRight); // turn 5 NONE_OF { HP_BAR(opponentRight); - MESSAGE("Foe Wynaut is burning up within G-Max Wildfire's flames!"); + MESSAGE("The opposing Wynaut is burning up within G-Max Wildfire's flames!"); } } THEN { EXPECT_EQ(damage, 100); @@ -1287,7 +1287,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Snooze makes only the target drowsy") MESSAGE("Grimmsnarl made Foe Blissey drowsy!"); // turn 2 ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, opponentLeft); - MESSAGE("Foe Blissey fell asleep!"); + MESSAGE("The opposing Blissey fell asleep!"); STATUS_ICON(opponentLeft, sleep: TRUE); } } @@ -1348,14 +1348,14 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Centiferno traps both opponents in Fire Spin } SCENE { // turn 1 MESSAGE("Centiskorc used G-Max Centiferno!"); - MESSAGE("Foe Wobbuffet is hurt by Fire Spin!"); + MESSAGE("The opposing Wobbuffet is hurt by Fire Spin!"); HP_BAR(opponentLeft); - MESSAGE("Foe Wynaut is hurt by Fire Spin!"); + MESSAGE("The opposing Wynaut is hurt by Fire Spin!"); HP_BAR(opponentRight); // turn 2 - Fire Spin continues even after Centiskorch switches out - MESSAGE("Foe Wobbuffet is hurt by Fire Spin!"); + MESSAGE("The opposing Wobbuffet is hurt by Fire Spin!"); HP_BAR(opponentLeft); - MESSAGE("Foe Wynaut is hurt by Fire Spin!"); + MESSAGE("The opposing Wynaut is hurt by Fire Spin!"); HP_BAR(opponentRight); } } @@ -1404,7 +1404,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Depletion takes away 2 PP from the target's } WHEN { TURN { MOVE(playerLeft, MOVE_DRAGON_CLAW, target: opponentLeft, dynamax: TRUE); } } SCENE { - MESSAGE("Foe Sableye used Celebrate!"); + MESSAGE("The opposing Sableye used Celebrate!"); MESSAGE("Duraludon used G-Max Depletion!"); MESSAGE("Reduced Foe Sableye's Celebrate by 2!"); } @@ -1431,7 +1431,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max One Blow bypasses Max Guard for full damage" MOVE(opponentLeft, MOVE_PSYCHIC, target: playerLeft, dynamax: TRUE); } } SCENE { if (protect) - MESSAGE("Foe Wobbuffet used Max Guard!"); + MESSAGE("The opposing Wobbuffet used Max Guard!"); MESSAGE("Urshifu used G-Max One Blow!"); HP_BAR(opponentLeft, captureDamage: &results[i].damage); } FINALLY { @@ -1466,7 +1466,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves don't execute effects on fainted battler } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_DYNAMAX_GROWTH, player); MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet fainted!"); - NOT MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet fainted!"); + NOT MESSAGE("The opposing Wobbuffet's Speed fell!"); } } From b33516825ed64d34af7c99acb990c23c39b489d1 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Tue, 23 Jul 2024 14:18:41 -0500 Subject: [PATCH 24/68] Update battle_message.c --- src/battle_message.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index 4ec9b49cd1dc..9a8e33a1b1f0 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -74,7 +74,7 @@ static const u8 sText_PkmnProtectedItself[] = _("{B_DEF_NAME_WITH_PREFIX}\nprote static const u8 sText_AvoidedDamage[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\ndamage with {B_DEF_ABILITY}!"); //not in gen 5+, ability popup static const u8 sText_PkmnMakesGroundMiss[] = _("{B_DEF_NAME_WITH_PREFIX} makes Ground-type\nmoves miss with {B_DEF_ABILITY}!"); //not in gen 5+, ability popup static const u8 sText_PkmnAvoidedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\nthe attack!"); -static const u8 sText_ItDoesntAffect[] = _("It doesn't affect\n{B_DEF_NAME_WITH_PREFIX}…"); +static const u8 sText_ItDoesntAffect[] = _("It doesn't affect\n{B_DEF_NAME_WITH_PREFIX2}…"); static const u8 sText_AttackerFainted[] = _("{B_ATK_NAME_WITH_PREFIX} fainted!\p"); static const u8 sText_TargetFainted[] = _("{B_DEF_NAME_WITH_PREFIX} fainted!\p"); static const u8 sText_PlayerGotMoney[] = _("You got ¥{B_BUFF1}\nfor winning!\p"); @@ -91,7 +91,7 @@ static const u8 sText_CantEscape2[] = _("You couldn't get away!\p"); static const u8 sText_AttackerCantEscape[] = _("{B_ATK_NAME_WITH_PREFIX} can't escape!"); static const u8 sText_HitXTimes[] = _("The Pokémon was\nhit {B_BUFF1} time(s)!"); //SV has dynamic plural here static const u8 sText_PkmnFellAsleep[] = _("{B_EFF_NAME_WITH_PREFIX}\nfell asleep!"); -static const u8 sText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}\nmade {B_EFF_NAME_WITH_PREFIX} sleep!"); //not in gen 5+, ability popup +static const u8 sText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}\nmade {B_EFF_NAME_WITH_PREFIX2} sleep!"); //not in gen 5+, ability popup static const u8 sText_PkmnAlreadyAsleep[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready asleep!"); static const u8 sText_PkmnAlreadyAsleep2[] = _("{B_ATK_NAME_WITH_PREFIX} is\nalready asleep!"); static const u8 sText_PkmnWasntAffected[] = _("{B_DEF_NAME_WITH_PREFIX}\nwasn't affected!"); //not in gen 5+, ability popup @@ -103,12 +103,12 @@ static const u8 sText_PkmnBadlyPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX} was badl static const u8 sText_PkmnEnergyDrained[] = _("{B_DEF_NAME_WITH_PREFIX} had its\nenergy drained!"); static const u8 sText_PkmnWasBurned[] = _("{B_EFF_NAME_WITH_PREFIX} was burned!"); static const u8 sText_PkmnGotFrostbite[] = _("{B_EFF_NAME_WITH_PREFIX} got frostbite!"); -static const u8 sText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}\nburned {B_EFF_NAME_WITH_PREFIX}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}\nburned {B_EFF_NAME_WITH_PREFIX2}!"); //not in gen 5+, ability popup static const u8 sText_PkmnHurtByBurn[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby its burn!"); static const u8 sText_PkmnHurtByFrostbite[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby its frostbite!"); static const u8 sText_PkmnAlreadyHasBurn[] = _("{B_DEF_NAME_WITH_PREFIX} is already\nburned!"); static const u8 sText_PkmnWasFrozen[] = _("{B_EFF_NAME_WITH_PREFIX} was\nfrozen solid!"); -static const u8 sText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}\nfroze {B_EFF_NAME_WITH_PREFIX} solid!"); //not in gen 5+, ability popup +static const u8 sText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}\nfroze {B_EFF_NAME_WITH_PREFIX2} solid!"); //not in gen 5+, ability popup static const u8 sText_PkmnIsFrozen[] = _("{B_ATK_NAME_WITH_PREFIX} is\nfrozen solid!"); static const u8 sText_PkmnWasDefrosted[] = _("{B_DEF_NAME_WITH_PREFIX} thawed out!"); static const u8 sText_PkmnWasDefrosted2[] = _("{B_ATK_NAME_WITH_PREFIX} thawed out!"); @@ -117,7 +117,7 @@ static const u8 sText_PkmnFrostbiteHealed[] = _("{B_DEF_NAME_WITH_PREFIX}'s fros static const u8 sText_PkmnFrostbiteHealed2[] = _("{B_ATK_NAME_WITH_PREFIX}'s frostbite\nwas cured!"); static const u8 sText_PkmnFrostbiteHealedBy[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\ncured its frostbite!"); static const u8 sText_PkmnWasParalyzed[] = _("{B_EFF_NAME_WITH_PREFIX} is paralyzed,\nso it may be unable to move!"); -static const u8 sText_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}\nparalyzed {B_EFF_NAME_WITH_PREFIX},\lso it may be unable to move!"); //not in gen 5+, ability popup +static const u8 sText_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}\nparalyzed {B_EFF_NAME_WITH_PREFIX2},\lso it may be unable to move!"); //not in gen 5+, ability popup static const u8 sText_PkmnIsParalyzed[] = _("{B_ATK_NAME_WITH_PREFIX} couldn't move\nbecause it's paralyzed!"); static const u8 sText_PkmnIsAlreadyParalyzed[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready paralyzed!"); static const u8 sText_PkmnHealedParalysis[] = _("{B_DEF_NAME_WITH_PREFIX} was cured of\nparalysis!"); @@ -594,7 +594,7 @@ static const u8 sText_KindOffer[] =_("{B_DEF_NAME_WITH_PREFIX}\ntook the kind of static const u8 sText_ResetsTargetsStatLevels[] =_("{B_DEF_NAME_WITH_PREFIX}'s stat changes\nwere removed!"); static const u8 sText_AllySwitchPosition[] =_("{B_ATK_NAME_WITH_PREFIX} and\n{B_SCR_ACTIVE_NAME_WITH_PREFIX2} switched places!"); static const u8 sText_RestoreTargetsHealth[] =_("{B_DEF_NAME_WITH_PREFIX}'s HP was restored!"); -static const u8 sText_TookPkmnIntoTheSky[] =_("{B_ATK_NAME_WITH_PREFIX} took\n{B_DEF_NAME_WITH_PREFIX} into the sky!"); +static const u8 sText_TookPkmnIntoTheSky[] =_("{B_ATK_NAME_WITH_PREFIX} took\n{B_DEF_NAME_WITH_PREFIX2} into the sky!"); static const u8 sText_FreedFromSkyDrop[] =_("{B_DEF_NAME_WITH_PREFIX} was freed\nfrom the Sky Drop!"); static const u8 sText_PostponeTargetMove[] =_("{B_DEF_NAME_WITH_PREFIX}'s move\nwas postponed!"); static const u8 sText_ReflectTargetsType[] =_("{B_ATK_NAME_WITH_PREFIX} became the\nsame type as {B_DEF_NAME_WITH_PREFIX2}!"); @@ -644,7 +644,7 @@ static const u8 sText_LastAbilityRaisedBuff1[] = _("{B_ATK_NAME_WITH_PREFIX}'s { static const u8 sText_MagicBounceActivates[] = _("{B_DEF_NAME_WITH_PREFIX} bounced the\n{B_ATK_NAME_WITH_PREFIX2} back!"); static const u8 sText_ProteanTypeChange[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} transformed\nit into the {B_BUFF1} type!"); static const u8 sText_SymbiosisItemPass[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} passed its {B_LAST_ITEM}\nto {B_ATK_NAME_WITH_PREFIX2} through {B_LAST_ABILITY}!"); -static const u8 sText_StealthRockDmg[] = _("Pointed stones dug into\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}!"); +static const u8 sText_StealthRockDmg[] = _("Pointed stones dug into\n{B_SCR_ACTIVE_NAME_WITH_PREFIX2}!"); static const u8 sText_ToxicSpikesAbsorbed[] = _("The poison spikes disappeared from\nthe ground around {B_ATK_TEAM2} team!"); static const u8 sText_ToxicSpikesPoisoned[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was poisoned!"); static const u8 sText_StickyWebSwitchIn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was\ncaught in a sticky web!"); @@ -667,7 +667,7 @@ static const u8 sText_StickyWebDisappearedFromTeam[] = _("The sticky web has dis static const u8 sText_StickyWebUsed[] = _("A sticky web has been laid out\non the ground around {B_DEF_TEAM2} team!"); static const u8 sText_QuashSuccess[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nmove was postponed!"); static const u8 sText_IonDelugeOn[] = _("A deluge of ions showers\nthe battlefield!"); -static const u8 sText_TopsyTurvySwitchedStats[] = _("All stat changes on\n{B_DEF_NAME_WITH_PREFIX} were inverted!"); +static const u8 sText_TopsyTurvySwitchedStats[] = _("All stat changes on\n{B_DEF_NAME_WITH_PREFIX2} were inverted!"); static const u8 sText_TerrainBecomesMisty[] = _("Mist swirled around\nthe battlefield!"); static const u8 sText_TerrainBecomesGrassy[] = _("Grass grew to cover\nthe battlefield!"); static const u8 sText_TerrainBecomesElectric[] = _("An electric current ran across\nthe battlefield!"); @@ -720,7 +720,7 @@ static const u8 sText_PkmnAbsorbingPower[] = _("{B_ATK_NAME_WITH_PREFIX} is abso static const u8 sText_NoOneWillBeAbleToRun[] = _("No one will be able to run away\nduring the next turn!"); static const u8 sText_DestinyKnotActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} fell in love\nbecause of the {B_LAST_ITEM}!"); static const u8 sText_CloakedInAFreezingLight[] = _("{B_ATK_NAME_WITH_PREFIX} became cloaked\nin a freezing light!"); -static const u8 sText_ClearAmuletWontLowerStats[] = _("The effects of the {B_LAST_ITEM}\nheld by {B_DEF_NAME_WITH_PREFIX} prevents\lits stats from being lowered!"); +static const u8 sText_ClearAmuletWontLowerStats[] = _("The effects of the {B_LAST_ITEM}\nheld by {B_DEF_NAME_WITH_PREFIX2} prevents\lits stats from being lowered!"); static const u8 sText_AuraFlaredToLife[] = _("{B_DEF_NAME_WITH_PREFIX}'s aura flared to life!"); static const u8 sText_AirLockActivates[] = _("The effects of the weather\ndisappeared."); static const u8 sText_PressureActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is exerting its\npressure!"); @@ -803,11 +803,11 @@ static const u8 sText_AttackerMeltedTheIce[] = _("{B_ATK_NAME_WITH_PREFIX} melte static const u8 sText_TargetToughedItOut[] = _("{B_DEF_NAME_WITH_PREFIX} toughed it out\nso you wouldn't feel sad!"); static const u8 sText_AttackerLostElectricType[] = _("{B_ATK_NAME_WITH_PREFIX} used up\nall its electricity!"); static const u8 sText_AttackerSwitchedStatWithTarget[] = _("{B_ATK_NAME_WITH_PREFIX} switched {B_BUFF1}\nwith its target!"); -static const u8 sText_BeingHitChargedPkmnWithPower[] = _("Being hit by {B_CURRENT_MOVE}\ncharged {B_DEF_NAME_WITH_PREFIX} with power!"); -static const u8 sText_SunlightActivatedAbility[] = _("The harsh sunlight activated\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s Protosynthesis!"); +static const u8 sText_BeingHitChargedPkmnWithPower[] = _("Being hit by {B_CURRENT_MOVE}\ncharged {B_DEF_NAME_WITH_PREFIX2} with power!"); +static const u8 sText_SunlightActivatedAbility[] = _("The harsh sunlight activated\n{B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s Protosynthesis!"); static const u8 sText_StatWasHeightened[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1} was heightened!"); static const u8 sText_BoosterEnergyActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used its\n{B_LAST_ITEM} to activate\l{B_SCR_ACTIVE_ABILITY}!"); -static const u8 sText_ElectricTerrainActivatedAbility[] = _("The Electric Terrain activated\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s Quark Drive!"); +static const u8 sText_ElectricTerrainActivatedAbility[] = _("The Electric Terrain activated\n{B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s Quark Drive!"); static const u8 sText_AbilityWeakenedSurroundingMonsStat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nweakened the {B_BUFF1} of\lall surrounding Pokémon!\p"); static const u8 sText_AttackerGainedStrengthFromTheFallen[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} gained strength\nfrom the fallen!"); static const u8 sText_PrepareShellTrap[] = _("{B_ATK_NAME_WITH_PREFIX} set a shell trap!"); @@ -858,7 +858,7 @@ static const u8 sText_ItemWasUsedUp[] = _("The {B_LAST_ITEM}\nwas used up..."); static const u8 sText_AttackerLostItsType[] = _("{B_ATK_NAME_WITH_PREFIX} lost\nits {B_BUFF1} type!"); static const u8 sText_ShedItsTail[] = _("{B_ATK_NAME_WITH_PREFIX} shed its tail\nto create a decoy!"); static const u8 sText_PkmnTerastallizedInto[] = _("{B_ATK_NAME_WITH_PREFIX} terastallized\ninto the {B_BUFF1} type!"); -static const u8 sText_SupersweetAromaWafts[] = _("A supersweet aroma is wafting from\nthe syrup covering {B_ATK_NAME_WITH_PREFIX}!"); +static const u8 sText_SupersweetAromaWafts[] = _("A supersweet aroma is wafting from\nthe syrup covering {B_ATK_NAME_WITH_PREFIX2}!"); static const u8 sText_TidyingUpComplete[] = _("Tidying up complete!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = From eb0031bae838e7720d3c76273ded0813c6acbc33 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Tue, 23 Jul 2024 14:20:41 -0500 Subject: [PATCH 25/68] Update battle_message.c --- src/battle_message.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index 9a8e33a1b1f0..2b6b8dbc55aa 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -65,7 +65,7 @@ static const u8 sText_PkmnLearnedMove[] = _("{B_BUFF1} learned\n{B_BUFF2}!{WAIT_ static const u8 sText_TryToLearnMove1[] = _("{B_BUFF1} wants to learn the\nmove {B_BUFF2}.\p"); static const u8 sText_TryToLearnMove2[] = _("However, {B_BUFF1} already\nknows four moves.\p"); static const u8 sText_TryToLearnMove3[] = _("Should another move be forgotten\nand replaced with {B_BUFF2}?"); -static const u8 sText_PkmnForgotMove[] = _("{B_BUFF1} forgot\n{B_BUFF2}...\p"); +static const u8 sText_PkmnForgotMove[] = _("{B_BUFF1} forgot\n{B_BUFF2}…\p"); static const u8 sText_StopLearningMove[] = _("{PAUSE 32}Do you want to give up\non having {B_BUFF1}\nlearn {B_BUFF2}?"); static const u8 sText_DidNotLearnMove[] = _("{B_BUFF1} did not learn\n{B_BUFF2}.\p"); static const u8 sText_UseNextPkmn[] = _("Use next Pokémon?"); @@ -854,7 +854,7 @@ static const u8 sText_SwampEnvelopedSide[] = _("A swamp enveloped\n{B_DEF_TEAM2} static const u8 sText_TheSwampDisappeared[] = _("The swamp around {B_ATK_TEAM2}\nteam disappeared!"); static const u8 sText_HospitalityRestoration[] = _("{B_ATK_PARTNER_NAME} drank down all the\nmatcha that {B_ATK_NAME_WITH_PREFIX2} made!"); static const u8 sText_ElectroShotCharging[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed\nelectricity!"); -static const u8 sText_ItemWasUsedUp[] = _("The {B_LAST_ITEM}\nwas used up..."); +static const u8 sText_ItemWasUsedUp[] = _("The {B_LAST_ITEM}\nwas used up…"); static const u8 sText_AttackerLostItsType[] = _("{B_ATK_NAME_WITH_PREFIX} lost\nits {B_BUFF1} type!"); static const u8 sText_ShedItsTail[] = _("{B_ATK_NAME_WITH_PREFIX} shed its tail\nto create a decoy!"); static const u8 sText_PkmnTerastallizedInto[] = _("{B_ATK_NAME_WITH_PREFIX} terastallized\ninto the {B_BUFF1} type!"); From 93e7a528e1f680f188f961dad4ad2ad09ebf231b Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Tue, 23 Jul 2024 14:38:41 -0500 Subject: [PATCH 26/68] Update battle_message.c --- src/battle_message.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_message.c b/src/battle_message.c index 2b6b8dbc55aa..7d960011a110 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -1977,7 +1977,7 @@ const u16 gWeatherStartsStringIds[] = const u16 gTerrainStartsStringIds[] = { - STRINGID_MISTSWIRLSAROUND, STRINGID_ISCOVEREDWITHGRASS, STRINGID_ELECTRICCURRENTISRUNNING, STRINGID_SEEMSWEIRD, + STRINGID_MISTSWIRLSAROUND, STRINGID_ELECTRICCURRENTISRUNNING, STRINGID_SEEMSWEIRD, STRINGID_ISCOVEREDWITHGRASS, }; const u16 gPrimalWeatherBlocksStringIds[] = From 1ac9ad617d7c27d3cadf9f5fb88b80753345baa2 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Tue, 23 Jul 2024 18:08:37 -0500 Subject: [PATCH 27/68] Update battle_message.c --- src/battle_message.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_message.c b/src/battle_message.c index 7d960011a110..2c7b6629059d 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -1977,7 +1977,7 @@ const u16 gWeatherStartsStringIds[] = const u16 gTerrainStartsStringIds[] = { - STRINGID_MISTSWIRLSAROUND, STRINGID_ELECTRICCURRENTISRUNNING, STRINGID_SEEMSWEIRD, STRINGID_ISCOVEREDWITHGRASS, + STRINGID_MISTSWIRLSAROUND, STRINGID_ELECTRICCURRENTISRUNNING, STRINGID_ISCOVEREDWITHGRASS, STRINGID_SEEMSWEIRD, }; const u16 gPrimalWeatherBlocksStringIds[] = From b49b3d88baf708e589994bfa72b0fc582b38b210 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Fri, 2 Aug 2024 20:58:17 -0500 Subject: [PATCH 28/68] Update battle_message.c --- src/battle_message.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_message.c b/src/battle_message.c index 2c7b6629059d..9374545caf11 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -66,7 +66,7 @@ static const u8 sText_TryToLearnMove1[] = _("{B_BUFF1} wants to learn the\nmove static const u8 sText_TryToLearnMove2[] = _("However, {B_BUFF1} already\nknows four moves.\p"); static const u8 sText_TryToLearnMove3[] = _("Should another move be forgotten\nand replaced with {B_BUFF2}?"); static const u8 sText_PkmnForgotMove[] = _("{B_BUFF1} forgot\n{B_BUFF2}…\p"); -static const u8 sText_StopLearningMove[] = _("{PAUSE 32}Do you want to give up\non having {B_BUFF1}\nlearn {B_BUFF2}?"); +static const u8 sText_StopLearningMove[] = _("{PAUSE 32}Do you want to give up\non having {B_BUFF1}\llearn {B_BUFF2}?"); static const u8 sText_DidNotLearnMove[] = _("{B_BUFF1} did not learn\n{B_BUFF2}.\p"); static const u8 sText_UseNextPkmn[] = _("Use next Pokémon?"); static const u8 sText_AttackMissed[] = _("{B_ATK_NAME_WITH_PREFIX}'s\nattack missed!"); //this is not in SV for some reason? From 05286e0a79f6b822d984dec1bf76ad0f5e8a9e48 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Sat, 3 Aug 2024 13:36:37 -0500 Subject: [PATCH 29/68] Update battle_message.c --- src/battle_message.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_message.c b/src/battle_message.c index 9374545caf11..6a6b9c71a27b 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -127,7 +127,7 @@ static const u8 sText_StatsWontDecrease[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUF static const u8 sText_TeamStoppedWorking[] = _("Your team's {B_BUFF1}\nstopped working!"); //unused static const u8 sText_FoeStoppedWorking[] = _("The foe's {B_BUFF1}\nstopped working!"); //unused static const u8 sText_PkmnIsConfused[] = _("{B_ATK_NAME_WITH_PREFIX} is\nconfused!"); -static const u8 sText_PkmnHealedConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} snapped out of its\nconfusion!"); +static const u8 sText_PkmnHealedConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} snapped out of\nits confusion!"); static const u8 sText_PkmnWasConfused[] = _("{B_EFF_NAME_WITH_PREFIX} became\nconfused!"); static const u8 sText_PkmnAlreadyConfused[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready confused!"); static const u8 sText_PkmnFellInLove[] = _("{B_DEF_NAME_WITH_PREFIX}\nfell in love!"); From 3f11fbea0fe353a9eb719d97c651f8a9d4a6fe4c Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Thu, 15 Aug 2024 09:01:15 -0500 Subject: [PATCH 30/68] [no ci] Merge branch 'upcoming' into battlemessages --- .github/workflows/build.yml | 23 +- INSTALL.md | 52 - Makefile | 111 +- asm/macros/battle_script.inc | 4 + asm/macros/event.inc | 2 +- common_syms/AgbRfu_LinkManager.txt | 1 - common_syms/agb_flash.txt | 10 - common_syms/apprentice.txt | 3 - common_syms/battle_anim_throw.txt | 3 - common_syms/battle_controllers.txt | 3 - common_syms/battle_factory_screen.txt | 1 - common_syms/battle_main.txt | 7 - common_syms/battle_tower.txt | 1 - common_syms/berry_blender.txt | 1 - common_syms/bg.txt | 1 - common_syms/contest.txt | 1 - common_syms/contest_painting.txt | 4 - common_syms/ereader_screen.txt | 1 - common_syms/evolution_scene.txt | 1 - common_syms/faraway_island.txt | 3 - common_syms/field_camera.txt | 3 - common_syms/field_control_avatar.txt | 1 - common_syms/field_specials.txt | 1 - common_syms/fieldmap.txt | 1 - common_syms/image_processing_effects.txt | 10 - common_syms/intro.txt | 2 - common_syms/librfu_rfu.txt | 5 - common_syms/librfu_sio32id.txt | 1 - common_syms/librfu_stwi.txt | 1 - common_syms/link.txt | 35 - common_syms/link_rfu_2.txt | 2 - common_syms/list_menu.txt | 2 - common_syms/load_save.txt | 4 - common_syms/m4a.txt | 12 - common_syms/main.txt | 10 - common_syms/mauville_old_man.txt | 1 - common_syms/overworld.txt | 8 - common_syms/party_menu.txt | 1 - common_syms/pokedex.txt | 2 - common_syms/pokedex_cry_screen.txt | 1 - common_syms/random.txt | 2 - common_syms/rtc.txt | 1 - common_syms/save.txt | 13 - common_syms/sound.txt | 1 - common_syms/sprite.txt | 2 - common_syms/start_menu.txt | 1 - common_syms/task.txt | 1 - common_syms/text.txt | 4 - common_syms/trainer_see.txt | 5 - common_syms/tv.txt | 4 - common_syms/window.txt | 2 - data/battle_anim_scripts.s | 662 +- data/battle_scripts_1.s | 19 +- docs/SUMMARY.md | 13 + docs/ai_logic.md | 31 + docs/how_to_battle_script_command_macro.md | 51 + docs/how_to_new_move.md | 197 + docs/how_to_new_pokemon_1_6_0.md | 1860 ++ docs/how_to_new_pokemon_1_7_0.md | 1049 + docs/how_to_new_pokemon_1_8_0.md | 1049 + docs/how_to_new_pokemon_1_9_0.md | 1139 + docs/how_to_testing_system.md | 578 + docs/how_to_trainer_class.md | 178 + docs/local_mdbook/index.md | 2 + docs/local_mdbook/ubuntu_WSL.md | 51 + gflib/sprite.c | 2 - gflib/sprite.h | 2 + graphics/battle_anims/sprites/beam.png | Bin 0 -> 383 bytes graphics/battle_anims/sprites/blood_moon.png | Bin 0 -> 714 bytes .../battle_anims/sprites/purple_chain.png | Bin 0 -> 622 bytes .../battle_anims/sprites/red_explosion.png | Bin 0 -> 946 bytes .../pokemon/articuno/galarian/overworld.png | Bin 1354 -> 1352 bytes .../articuno/galarian/overworld_normal.pal | 12 +- .../articuno/galarian/overworld_shiny.pal | 26 +- graphics/pokemon/bounsweet/back.png | Bin 467 -> 424 bytes graphics/pokemon/bounsweet/overworld.png | Bin 1247 -> 524 bytes .../pokemon/bounsweet/overworld_shiny.pal | 4 +- graphics/pokemon/bruxish/overworld.png | Bin 1559 -> 838 bytes graphics/pokemon/bruxish/overworld_shiny.pal | 4 +- graphics/pokemon/cursola/front.png | Bin 895 -> 863 bytes graphics/pokemon/cursola/shiny.pal | 8 +- .../pokemon/darmanitan/galarian/overworld.png | Bin 747 -> 747 bytes .../darmanitan/galarian/overworld_normal.pal | 14 +- .../darmanitan/galarian/overworld_shiny.pal | 18 +- graphics/pokemon/darumaka/galarian/back.png | Bin 558 -> 496 bytes .../darumaka/galarian/overworld_shiny.pal | 16 +- graphics/pokemon/darumaka/galarian/shiny.pal | 8 +- .../pokemon/dialga/origin/overworld_shiny.pal | 19 + graphics/pokemon/enamorus/overworld_shiny.pal | 19 + .../enamorus/therian/overworld_shiny.pal | 19 + .../pokemon/farfetchd/galarian/overworld.png | Bin 745 -> 745 bytes .../farfetchd/galarian/overworld_normal.pal | 2 +- .../farfetchd/galarian/overworld_shiny.pal | 12 +- .../pokemon/giratina/origin/overworld.png | Bin 1965 -> 2102 bytes graphics/pokemon/guzzlord/overworld.png | Bin 1871 -> 1882 bytes graphics/pokemon/guzzlord/overworld_shiny.pal | 4 +- .../pokemon/moltres/galarian/overworld.png | Bin 1172 -> 1192 bytes .../moltres/galarian/overworld_normal.pal | 10 +- .../moltres/galarian/overworld_shiny.pal | 20 +- graphics/pokemon/morelull/overworld.png | Bin 1163 -> 441 bytes .../pokemon/morelull/overworld_normal.pal | 4 +- graphics/pokemon/morelull/overworld_shiny.pal | 8 +- .../pokemon/mr_mime/galarian/overworld.png | Bin 670 -> 670 bytes .../mr_mime/galarian/overworld_normal.pal | 4 +- .../mr_mime/galarian/overworld_shiny.pal | 14 +- .../pokemon/palkia/origin/overworld_shiny.pal | 19 + graphics/pokemon/pincurchin/shiny.pal | 4 +- .../pokemon/ponyta/galarian/overworld.png | Bin 723 -> 738 bytes .../ponyta/galarian/overworld_normal.pal | 2 +- .../ponyta/galarian/overworld_shiny.pal | 22 +- .../qwilfish/hisuian/overworld_shiny.pal | 4 +- .../pokemon/rapidash/galarian/overworld.png | Bin 964 -> 965 bytes .../rapidash/galarian/overworld_shiny.pal | 12 +- graphics/pokemon/regieleki/overworld.png | Bin 963 -> 817 bytes .../pokemon/regieleki/overworld_normal.pal | 2 +- .../pokemon/regieleki/overworld_shiny.pal | 4 +- graphics/pokemon/runerigus/shiny.pal | 2 +- .../pokemon/samurott/hisuian/overworld.png | Bin 1300 -> 1100 bytes .../samurott/hisuian/overworld_normal.pal | 2 +- .../samurott/hisuian/overworld_shiny.pal | 2 +- .../sawsbuck/summer/overworld_shiny.pal | 12 +- .../pokemon/slowking/galarian/overworld.png | Bin 744 -> 741 bytes .../slowking/galarian/overworld_normal.pal | 6 +- .../slowking/galarian/overworld_shiny.pal | 18 +- .../pokemon/slowpoke/galarian/overworld.png | Bin 642 -> 638 bytes .../slowpoke/galarian/overworld_shiny.pal | 18 +- .../pokemon/sneasel/hisuian/overworld.png | Bin 683 -> 629 bytes .../sneasel/hisuian/overworld_normal.pal | 8 +- .../sneasel/hisuian/overworld_shiny.pal | 18 +- graphics/pokemon/sneasler/overworld.png | Bin 1061 -> 935 bytes graphics/pokemon/sneasler/overworld_shiny.pal | 12 +- graphics/pokemon/sneasler/shiny.pal | 2 +- .../pokemon/stunfisk/galarian/overworld.png | Bin 519 -> 519 bytes .../stunfisk/galarian/overworld_normal.pal | 10 +- .../stunfisk/galarian/overworld_shiny.pal | 8 +- graphics/pokemon/unown/b/overworld.png | Bin 299 -> 419 bytes graphics/pokemon/unown/c/overworld.png | Bin 348 -> 462 bytes graphics/pokemon/unown/d/overworld.png | Bin 330 -> 443 bytes graphics/pokemon/unown/e/overworld.png | Bin 305 -> 422 bytes .../unown/exclamation_mark/overworld.png | Bin 2556 -> 360 bytes graphics/pokemon/unown/f/overworld.png | Bin 301 -> 419 bytes graphics/pokemon/unown/g/overworld.png | Bin 316 -> 426 bytes graphics/pokemon/unown/h/overworld.png | Bin 321 -> 433 bytes graphics/pokemon/unown/i/overworld.png | Bin 263 -> 377 bytes graphics/pokemon/unown/j/overworld.png | Bin 286 -> 399 bytes graphics/pokemon/unown/k/overworld.png | Bin 289 -> 402 bytes graphics/pokemon/unown/l/overworld.png | Bin 294 -> 404 bytes graphics/pokemon/unown/m/overworld.png | Bin 319 -> 428 bytes graphics/pokemon/unown/n/overworld.png | Bin 323 -> 438 bytes graphics/pokemon/unown/o/overworld.png | Bin 317 -> 428 bytes graphics/pokemon/unown/p/overworld.png | Bin 278 -> 392 bytes graphics/pokemon/unown/q/overworld.png | Bin 313 -> 430 bytes .../pokemon/unown/question_mark/overworld.png | Bin 2741 -> 405 bytes graphics/pokemon/unown/r/overworld.png | Bin 276 -> 391 bytes graphics/pokemon/unown/s/overworld.png | Bin 322 -> 436 bytes graphics/pokemon/unown/t/overworld.png | Bin 260 -> 369 bytes graphics/pokemon/unown/u/overworld.png | Bin 299 -> 409 bytes graphics/pokemon/unown/v/overworld.png | Bin 272 -> 387 bytes graphics/pokemon/unown/w/overworld.png | Bin 271 -> 385 bytes graphics/pokemon/unown/x/overworld.png | Bin 281 -> 398 bytes graphics/pokemon/unown/y/overworld.png | Bin 287 -> 402 bytes graphics/pokemon/unown/z/overworld.png | Bin 313 -> 419 bytes .../pokemon/weezing/galarian/overworld.png | Bin 1300 -> 1302 bytes .../weezing/galarian/overworld_normal.pal | 4 +- .../weezing/galarian/overworld_shiny.pal | 10 +- graphics/pokemon/xerneas/active/overworld.png | Bin 0 -> 1832 bytes .../xerneas/active/overworld_normal.pal | 19 + .../xerneas/active/overworld_shiny.pal | 19 + graphics/pokemon/xerneas/overworld.png | Bin 1685 -> 1779 bytes .../pokemon/xerneas/overworld_neutral.png | Bin 0 -> 1753 bytes graphics/pokemon/xerneas/overworld_normal.pal | 2 +- graphics/pokemon/xerneas/overworld_shiny.pal | 12 +- graphics/pokemon/yamask/galarian/back.png | Bin 388 -> 350 bytes .../pokemon/yamask/galarian/overworld.png | Bin 577 -> 577 bytes .../yamask/galarian/overworld_normal.pal | 10 +- .../yamask/galarian/overworld_shiny.pal | 20 +- graphics/pokemon/yamask/galarian/shiny.pal | 4 +- .../zacian/crowned_sword/overworld.png | Bin 1224 -> 1222 bytes .../zacian/crowned_sword/overworld_shiny.pal | 20 +- .../zamazenta/crowned_shield/overworld.png | Bin 1166 -> 1166 bytes .../crowned_shield/overworld_normal.pal | 2 +- .../crowned_shield/overworld_shiny.pal | 18 +- .../pokemon/zapdos/galarian/overworld.png | Bin 1034 -> 915 bytes .../zapdos/galarian/overworld_shiny.pal | 6 +- .../pokemon/zigzagoon/galarian/overworld.png | Bin 830 -> 862 bytes .../zigzagoon/galarian/overworld_shiny.pal | 14 +- graphics/pokemon/zorua/hisuian/overworld.png | Bin 845 -> 721 bytes graphics/types/battle_icons1.pal | 15 + graphics/types/battle_icons1.png | Bin 0 -> 354 bytes graphics/types/battle_icons2.pal | 15 + graphics/types/battle_icons2.png | Bin 0 -> 372 bytes include/battle.h | 40 +- include/battle_ai_switch_items.h | 1 + include/battle_anim.h | 2 +- include/battle_controllers.h | 9 +- include/battle_scripts.h | 2 + include/battle_tower.h | 4 +- include/battle_util.h | 1 + include/config/battle.h | 41 +- include/config/pokemon.h | 1 + include/constants/battle.h | 1 - include/constants/battle_anim.h | 4 + include/constants/battle_string_ids.h | 17 +- include/constants/pokemon.h | 133 +- include/data.h | 4 +- include/global.fieldmap.h | 2 +- include/graphics.h | 13 + include/move_relearner.h | 1 + include/palette.h | 30 +- include/pokemon.h | 11 +- include/random.h | 1 + include/strings.h | 59 - include/tilesets.h | 3 + include/type_icons.h | 18 + ld_script.ld | 1391 - spritesheet_rules.mk | 3 + src/battle_ai_main.c | 20 +- src/battle_ai_switch_items.c | 68 +- src/battle_ai_util.c | 72 +- src/battle_anim.c | 7 +- src/battle_anim_effects_1.c | 35 +- src/battle_anim_effects_2.c | 4 +- src/battle_anim_mons.c | 13 - src/battle_anim_new.c | 88 +- src/battle_controller_opponent.c | 4 +- src/battle_controller_player.c | 37 +- src/battle_controllers.c | 13 +- src/battle_debug.c | 6 +- src/battle_dynamax.c | 4 + src/battle_gfx_sfx_util.c | 6 +- src/battle_gimmick.c | 8 +- src/battle_main.c | 59 +- src/battle_message.c | 12 +- src/battle_script_commands.c | 214 +- src/battle_terastal.c | 6 +- src/battle_tower.c | 6 +- src/battle_util.c | 211 +- src/battle_util2.c | 2 +- src/battle_z_move.c | 6 +- src/berry_blender.c | 29 +- src/data/battle_anim.h | 14 +- src/data/battle_move_effects.h | 2 +- src/data/graphics/pokemon.h | 14 +- src/data/items.h | 2 +- src/data/moves_info.h | 4 +- .../object_event_pic_tables_followers.h | 4 +- src/data/pokemon/species_info.h | 2 +- .../pokemon/species_info/gen_1_families.h | 16 +- .../pokemon/species_info/gen_2_families.h | 6 + .../pokemon/species_info/gen_3_families.h | 18 + .../pokemon/species_info/gen_4_families.h | 144 +- .../pokemon/species_info/gen_5_families.h | 140 +- .../pokemon/species_info/gen_6_families.h | 21 +- .../pokemon/species_info/gen_7_families.h | 160 +- .../pokemon/species_info/gen_8_families.h | 34 +- .../pokemon/species_info/gen_9_families.h | 14 + src/data/text/follower_messages.h | 4 +- src/data/trainers.h | 24948 ++++++++-------- src/data/types_info.h | 42 + src/field_specials.c | 22 +- src/fieldmap.c | 2 +- src/fldeff_sweetscent.c | 5 +- src/follower_helper.c | 2 +- src/frontier_util.c | 218 +- src/graphics.c | 18 + src/item_use.c | 47 +- src/landmark.c | 5 + src/main_menu.c | 104 +- src/menu_specialized.c | 3 + src/move_relearner.c | 30 + src/palette.c | 325 +- src/party_menu.c | 2 +- src/pokemon.c | 206 +- src/pokemon_storage_system.c | 16 +- src/pokemon_summary_screen.c | 29 +- src/scrcmd.c | 7 +- src/strings.c | 61 - src/tv.c | 2 +- src/type_icons.c | 540 + sym_bss.txt | 63 - sym_common.txt | 83 - sym_ewram.txt | 154 - test/battle/ability/adaptability.c | 46 + test/battle/ability/aerilate.c | 33 + test/battle/ability/aftermath.c | 4 + test/battle/ability/air_lock.c | 4 + test/battle/ability/analytic.c | 11 + test/battle/ability/anger_point.c | 4 +- test/battle/ability/anger_shell.c | 2 +- test/battle/ability/anticipation.c | 24 + test/battle/ability/arena_trap.c | 11 + test/battle/ability/aroma_veil.c | 15 + test/battle/ability/as_one.c | 7 + test/battle/ability/aura_break.c | 6 + test/battle/ability/chilling_neigh.c | 4 + test/battle/ability/chlorophyll.c | 6 + test/battle/ability/cloud_nine.c | 31 +- test/battle/ability/damp.c | 2 +- test/battle/ability/dancer.c | 19 + test/battle/ability/defiant.c | 59 + test/battle/ability/drought.c | 5 + test/battle/ability/dry_skin.c | 4 + test/battle/ability/flower_gift.c | 4 + test/battle/ability/forecast.c | 9 +- .../ability/{ate_abilities.c => galvanize.c} | 70 +- test/battle/ability/grim_neigh.c | 109 + test/battle/ability/harvest.c | 1 + test/battle/ability/hydration.c | 2 + test/battle/ability/ice_body.c | 2 + test/battle/ability/ice_face.c | 9 + test/battle/ability/leaf_guard.c | 6 + test/battle/ability/moxie.c | 76 +- test/battle/ability/normalize.c | 16 + test/battle/ability/orichalcum_pulse.c | 5 + test/battle/ability/pixilate.c | 35 + test/battle/ability/protosynthesis.c | 4 + test/battle/ability/purifying_salt.c | 18 + test/battle/ability/rain_dish.c | 2 + test/battle/ability/refrigerate.c | 34 + test/battle/ability/sand_force.c | 6 + test/battle/ability/sand_rush.c | 6 + test/battle/ability/sand_veil.c | 3 + test/battle/ability/slush_rush.c | 6 + test/battle/ability/snow_cloak.c | 3 + test/battle/ability/solar_power.c | 7 + test/battle/ability/swift_swim.c | 6 + test/battle/ability/unnerve.c | 6 + test/battle/ai/ai_switching.c | 20 +- test/battle/gimmick/dynamax.c | 15 - test/battle/gimmick/terastal.c | 40 - test/battle/gimmick/zmove.c | 19 + .../{ability => hold_effect}/booster_energy.c | 0 test/battle/hold_effect/utility_umbrella.c | 2 + test/battle/move.c | 90 +- test/battle/move_effect/calm_mind.c | 4 + test/battle/move_effect/camouflage.c | 8 + test/battle/move_effect/captivate.c | 7 + test/battle/move_effect/change_type_on_item.c | 6 +- test/battle/move_effect/charge.c | 9 + test/battle/move_effect/chilly_reception.c | 1 + test/battle/move_effect/clangorous_soul.c | 11 + test/battle/move_effect/coaching.c | 8 + test/battle/move_effect/coil.c | 6 + test/battle/move_effect/conversion.c | 10 + test/battle/move_effect/conversion_2.c | 14 + test/battle/move_effect/copycat.c | 37 + test/battle/move_effect/corrosive_gas.c | 3 + test/battle/move_effect/cosmic_power.c | 4 + test/battle/move_effect/counter.c | 22 + test/battle/move_effect/court_change.c | 23 +- test/battle/move_effect/defog.c | 113 +- test/battle/move_effect/reflect_type.c | 20 +- test/battle/move_effect/revelation_dance.c | 149 + test/battle/move_effect/stomping_tantrum.c | 134 + test/battle/move_effect/weather_ball.c | 2 + test/battle/terrain/electric.c | 2 +- test/battle/terrain/grassy.c | 2 +- test/battle/terrain/misty.c | 2 +- test/battle/terrain/psychic.c | 2 +- test/test_runner_battle.c | 5 +- tools/trainerproc/main.c | 23 +- 361 files changed, 23222 insertions(+), 16465 deletions(-) delete mode 100644 common_syms/AgbRfu_LinkManager.txt delete mode 100644 common_syms/agb_flash.txt delete mode 100644 common_syms/apprentice.txt delete mode 100755 common_syms/battle_anim_throw.txt delete mode 100644 common_syms/battle_controllers.txt delete mode 100644 common_syms/battle_factory_screen.txt delete mode 100644 common_syms/battle_main.txt delete mode 100644 common_syms/battle_tower.txt delete mode 100644 common_syms/berry_blender.txt delete mode 100644 common_syms/bg.txt delete mode 100644 common_syms/contest.txt delete mode 100644 common_syms/contest_painting.txt delete mode 100644 common_syms/ereader_screen.txt delete mode 100644 common_syms/evolution_scene.txt delete mode 100755 common_syms/faraway_island.txt delete mode 100644 common_syms/field_camera.txt delete mode 100644 common_syms/field_control_avatar.txt delete mode 100644 common_syms/field_specials.txt delete mode 100644 common_syms/fieldmap.txt delete mode 100644 common_syms/image_processing_effects.txt delete mode 100644 common_syms/intro.txt delete mode 100644 common_syms/librfu_rfu.txt delete mode 100644 common_syms/librfu_sio32id.txt delete mode 100644 common_syms/librfu_stwi.txt delete mode 100644 common_syms/link.txt delete mode 100644 common_syms/link_rfu_2.txt delete mode 100644 common_syms/list_menu.txt delete mode 100644 common_syms/load_save.txt delete mode 100644 common_syms/m4a.txt delete mode 100644 common_syms/main.txt delete mode 100644 common_syms/mauville_old_man.txt delete mode 100644 common_syms/overworld.txt delete mode 100644 common_syms/party_menu.txt delete mode 100644 common_syms/pokedex.txt delete mode 100644 common_syms/pokedex_cry_screen.txt delete mode 100644 common_syms/random.txt delete mode 100644 common_syms/rtc.txt delete mode 100644 common_syms/save.txt delete mode 100644 common_syms/sound.txt delete mode 100644 common_syms/sprite.txt delete mode 100644 common_syms/start_menu.txt delete mode 100644 common_syms/task.txt delete mode 100644 common_syms/text.txt delete mode 100644 common_syms/trainer_see.txt delete mode 100644 common_syms/tv.txt delete mode 100644 common_syms/window.txt create mode 100644 docs/ai_logic.md create mode 100644 docs/how_to_battle_script_command_macro.md create mode 100644 docs/how_to_new_move.md create mode 100644 docs/how_to_new_pokemon_1_6_0.md create mode 100644 docs/how_to_new_pokemon_1_7_0.md create mode 100644 docs/how_to_new_pokemon_1_8_0.md create mode 100644 docs/how_to_new_pokemon_1_9_0.md create mode 100644 docs/how_to_testing_system.md create mode 100644 docs/how_to_trainer_class.md create mode 100644 docs/local_mdbook/index.md create mode 100644 docs/local_mdbook/ubuntu_WSL.md create mode 100644 graphics/battle_anims/sprites/beam.png create mode 100644 graphics/battle_anims/sprites/blood_moon.png create mode 100644 graphics/battle_anims/sprites/purple_chain.png create mode 100644 graphics/battle_anims/sprites/red_explosion.png create mode 100644 graphics/pokemon/dialga/origin/overworld_shiny.pal create mode 100644 graphics/pokemon/enamorus/overworld_shiny.pal create mode 100644 graphics/pokemon/enamorus/therian/overworld_shiny.pal create mode 100644 graphics/pokemon/palkia/origin/overworld_shiny.pal create mode 100644 graphics/pokemon/xerneas/active/overworld.png create mode 100644 graphics/pokemon/xerneas/active/overworld_normal.pal create mode 100644 graphics/pokemon/xerneas/active/overworld_shiny.pal create mode 100644 graphics/pokemon/xerneas/overworld_neutral.png create mode 100644 graphics/types/battle_icons1.pal create mode 100644 graphics/types/battle_icons1.png create mode 100644 graphics/types/battle_icons2.pal create mode 100644 graphics/types/battle_icons2.png create mode 100644 include/type_icons.h delete mode 100644 ld_script.ld create mode 100644 src/type_icons.c delete mode 100644 sym_bss.txt delete mode 100644 sym_common.txt delete mode 100644 sym_ewram.txt create mode 100644 test/battle/ability/adaptability.c create mode 100644 test/battle/ability/aerilate.c create mode 100644 test/battle/ability/aftermath.c create mode 100644 test/battle/ability/air_lock.c create mode 100644 test/battle/ability/analytic.c create mode 100644 test/battle/ability/anticipation.c create mode 100644 test/battle/ability/arena_trap.c create mode 100644 test/battle/ability/aroma_veil.c create mode 100644 test/battle/ability/as_one.c create mode 100644 test/battle/ability/aura_break.c create mode 100644 test/battle/ability/chilling_neigh.c create mode 100644 test/battle/ability/chlorophyll.c create mode 100644 test/battle/ability/drought.c rename test/battle/ability/{ate_abilities.c => galvanize.c} (50%) create mode 100644 test/battle/ability/grim_neigh.c create mode 100644 test/battle/ability/ice_face.c create mode 100644 test/battle/ability/normalize.c create mode 100644 test/battle/ability/orichalcum_pulse.c create mode 100644 test/battle/ability/pixilate.c create mode 100644 test/battle/ability/refrigerate.c create mode 100644 test/battle/ability/sand_force.c create mode 100644 test/battle/ability/sand_rush.c create mode 100644 test/battle/ability/slush_rush.c create mode 100644 test/battle/ability/solar_power.c create mode 100644 test/battle/ability/swift_swim.c create mode 100644 test/battle/ability/unnerve.c rename test/battle/{ability => hold_effect}/booster_energy.c (100%) create mode 100644 test/battle/move_effect/calm_mind.c create mode 100644 test/battle/move_effect/camouflage.c create mode 100644 test/battle/move_effect/captivate.c create mode 100644 test/battle/move_effect/charge.c create mode 100644 test/battle/move_effect/clangorous_soul.c create mode 100644 test/battle/move_effect/coaching.c create mode 100644 test/battle/move_effect/coil.c create mode 100644 test/battle/move_effect/conversion.c create mode 100644 test/battle/move_effect/conversion_2.c create mode 100644 test/battle/move_effect/copycat.c create mode 100644 test/battle/move_effect/cosmic_power.c create mode 100644 test/battle/move_effect/counter.c create mode 100644 test/battle/move_effect/revelation_dance.c create mode 100644 test/battle/move_effect/stomping_tantrum.c diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0322cbe11f00..c84110d7dd8e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,19 +15,12 @@ jobs: GAME_VERSION: EMERALD GAME_REVISION: 0 GAME_LANGUAGE: ENGLISH - MODERN: 0 COMPARE: 0 UNUSED_ERROR: 1 steps: - name: Checkout uses: actions/checkout@v2 - - name: Checkout agbcc - uses: actions/checkout@v2 - with: - path: agbcc - repository: pret/agbcc - - name: Install binutils run: | sudo apt update @@ -36,27 +29,13 @@ jobs: # gcc-arm-none-eabi is only needed for the modern build # as an alternative to dkP - - name: Install agbcc - run: | - ./build.sh - ./install.sh ../ - working-directory: agbcc - - - name: Agbcc - env: - MODERN: 0 - COMPARE: 0 - run: make -j${nproc} -O all - - - name: Modern + - name: ROM env: - MODERN: 1 COMPARE: 0 run: make -j${nproc} -O all - name: Test env: - MODERN: 1 TEST: 1 run: | make -j${nproc} -O pokeemerald-test.elf diff --git a/INSTALL.md b/INSTALL.md index 6349d24fbbd8..49f11fce7c05 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -596,58 +596,6 @@ To build **pokeemerald.elf** with debug symbols under a modern toolchain: ```bash make DINFO=1 ``` -Note that this is not necessary for a non-modern (agbcc) build since those are built with debug symbols by default. - -### agbcc - -
- Deprecated; installing agbcc is optional since 1.7.0. - -1. Install agbcc into pokeemerald-expansion. The commands to run depend on certain conditions. **You should only follow one of the listed instructions**: -- If agbcc has **not been built before** in the folder where you chose to store pokeemerald Expansion, run the following commands to build and install it into pokeemerald-expansion: - - ```bash - git clone https://github.com/pret/agbcc - cd agbcc - ./build.sh - ./install.sh ../pokeemerald-expansion - ``` - -- **Otherwise**, if agbcc has been built before (e.g. if the git clone above fails), but was **last built on a different terminal** than the one currently used (only relevant to Windows, e.g. switching from msys2 to WSL1), then run the following commands to build and install it into pokeemerald-expansion: - - ```bash - cd agbcc - git clean -fX - ./build.sh - ./install.sh ../pokeemerald-expansion - ``` - -- **Otherwise**, if agbcc has been built before on the same terminal, run the following commands to install agbcc into pokeemerald-expansion: - - ```bash - cd agbcc - ./install.sh ../pokeemerald-expansion - ``` - -
- Note... - - > If building agbcc or pokeemerald results in an error, try deleting the agbcc folder and re-installing agbcc as if it has not been built before. -
- -2. Once agbcc is installed, change directory back to the base directory where pokeemerald-expansion and agbcc are stored: - - ```bash - cd .. - ``` - -3. To compile with agbcc: - - ```bash - make agbcc - ``` - -
# Useful additional tools diff --git a/Makefile b/Makefile index 055bc848b2eb..6f8951d378b9 100644 --- a/Makefile +++ b/Makefile @@ -25,10 +25,8 @@ AS := $(PREFIX)as LD := $(PREFIX)ld -# note: the makefile must be set up so MODERNCC is never called -# if MODERN=0 -MODERNCC := $(PREFIX)gcc -PATH_MODERNCC := PATH="$(PATH)" $(MODERNCC) +ARMCC := $(PREFIX)gcc +PATH_ARMCC := PATH="$(PATH)" $(ARMCC) ifeq ($(OS),Windows_NT) EXE := .exe @@ -40,45 +38,20 @@ TITLE := POKEMON EMER GAME_CODE := BPEE MAKER_CODE := 01 REVISION := 0 -MODERN ?= 1 TEST ?= 0 ANALYZE ?= 0 UNUSED_ERROR ?= 0 -ifeq (agbcc,$(MAKECMDGOALS)) - MODERN := 0 -endif - ifeq (check,$(MAKECMDGOALS)) TEST := 1 endif -# use arm-none-eabi-cpp for macOS -# as macOS's default compiler is clang -# and clang's preprocessor will warn on \u -# when preprocessing asm files, expecting a unicode literal -# we can't unconditionally use arm-none-eabi-cpp -# as installations which install binutils-arm-none-eabi -# don't come with it -ifneq ($(MODERN),1) - ifeq ($(shell uname -s),Darwin) - CPP := $(PREFIX)cpp - else - CPP := $(CC) -E - endif -else - CPP := $(PREFIX)cpp -endif +CPP := $(PREFIX)cpp -ROM_NAME := pokeemerald_agbcc.gba +ROM_NAME := pokeemerald.gba ELF_NAME := $(ROM_NAME:.gba=.elf) MAP_NAME := $(ROM_NAME:.gba=.map) -OBJ_DIR_NAME := build/emerald - -MODERN_ROM_NAME := pokeemerald.gba -MODERN_ELF_NAME := $(MODERN_ROM_NAME:.gba=.elf) -MODERN_MAP_NAME := $(MODERN_ROM_NAME:.gba=.map) -MODERN_OBJ_DIR_NAME := build/modern +OBJ_DIR_NAME := build/modern SHELL := bash -o pipefail @@ -86,14 +59,8 @@ ELF = $(ROM:.gba=.elf) MAP = $(ROM:.gba=.map) SYM = $(ROM:.gba=.sym) -TEST_OBJ_DIR_NAME_MODERN := build/modern-test -TEST_OBJ_DIR_NAME_AGBCC := build/test +TEST_OBJ_DIR_NAME := build/modern-test -ifeq ($(MODERN),0) -TEST_OBJ_DIR_NAME := $(TEST_OBJ_DIR_NAME_AGBCC) -else -TEST_OBJ_DIR_NAME := $(TEST_OBJ_DIR_NAME_MODERN) -endif TESTELF = $(ROM:.gba=-test.elf) HEADLESSELF = $(ROM:.gba=-test-headless.elf) @@ -116,17 +83,9 @@ SONG_BUILDDIR = $(OBJ_DIR)/$(SONG_SUBDIR) MID_BUILDDIR = $(OBJ_DIR)/$(MID_SUBDIR) TEST_BUILDDIR = $(OBJ_DIR)/$(TEST_SUBDIR) -ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=$(MODERN) +ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=1 -ifeq ($(MODERN),0) -CC1 := tools/agbcc/bin/agbcc$(EXE) -override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm -g -ROM := $(ROM_NAME) -OBJ_DIR := $(OBJ_DIR_NAME) -LIBPATH := -L ../../tools/agbcc/lib -LIB := $(LIBPATH) -lgcc -lc -L../../libagbsyscall -lagbsyscall -else -CC1 = $(shell $(PATH_MODERNCC) --print-prog-name=cc1) -quiet +CC1 = $(shell $(PATH_ARMCC) --print-prog-name=cc1) -quiet override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -std=gnu17 -Werror -Wall -Wno-strict-aliasing -Wno-attribute-alias -Woverride-init ifeq ($(ANALYZE),1) override CFLAGS += -fanalyzer @@ -137,11 +96,10 @@ ifneq ($(GITHUB_REPOSITORY_OWNER),rh-hideout) override CFLAGS += -Wno-error=unused-variable -Wno-error=unused-const-variable -Wno-error=unused-parameter -Wno-error=unused-function -Wno-error=unused-but-set-parameter -Wno-error=unused-but-set-variable -Wno-error=unused-value -Wno-error=unused-local-typedefs endif endif -ROM := $(MODERN_ROM_NAME) -OBJ_DIR := $(MODERN_OBJ_DIR_NAME) -LIBPATH := -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libnosys.a))" -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libc.a))" +ROM := $(ROM_NAME) +OBJ_DIR := $(OBJ_DIR_NAME) +LIBPATH := -L "$(dir $(shell $(PATH_ARMCC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(PATH_ARMCC) -mthumb -print-file-name=libnosys.a))" -L "$(dir $(shell $(PATH_ARMCC) -mthumb -print-file-name=libc.a))" LIB := $(LIBPATH) -lc -lnosys -lgcc -L../../libagbsyscall -lagbsyscall -endif ifeq ($(TESTELF),$(MAKECMDGOALS)) TEST := 1 @@ -151,10 +109,7 @@ ifeq ($(TEST),1) OBJ_DIR := $(TEST_OBJ_DIR_NAME) endif -CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=$(MODERN) -DTESTING=$(TEST) -ifneq ($(MODERN),1) -CPPFLAGS += -I tools/agbcc/include -I tools/agbcc -nostdinc -undef -endif +CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=1 -DTESTING=$(TEST) SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c GFX := tools/gbagfx/gbagfx$(EXE) @@ -301,25 +256,16 @@ mostlyclean: tidynonmodern tidymodern tidycheck rm -f $(AUTO_GEN_TARGETS) @$(MAKE) clean -C libagbsyscall -tidy: tidynonmodern tidymodern tidycheck +tidy: tidymodern tidycheck -tidynonmodern: +tidymodern: rm -f $(ROM_NAME) $(ELF_NAME) $(MAP_NAME) rm -rf $(OBJ_DIR_NAME) -tidymodern: - rm -f $(MODERN_ROM_NAME) $(MODERN_ELF_NAME) $(MODERN_MAP_NAME) - rm -rf $(MODERN_OBJ_DIR_NAME) - tidycheck: rm -f $(TESTELF) $(HEADLESSELF) - rm -rf $(TEST_OBJ_DIR_NAME_MODERN) - rm -rf $(TEST_OBJ_DIR_NAME_AGBCC) - + rm -rf $(TEST_OBJ_DIR_NAME) -ifneq ($(MODERN),0) -$(C_BUILDDIR)/berry_crush.o: override CFLAGS += -Wno-address-of-packed-member -endif include graphics_file_rules.mk include map_data_rules.mk @@ -346,30 +292,14 @@ sound/%.bin: sound/%.aif ; $(AIF) $< $@ COMPETITIVE_PARTY_SYNTAX := $(shell PATH="$(PATH)"; echo 'COMPETITIVE_PARTY_SYNTAX' | $(CPP) $(CPPFLAGS) -imacros include/global.h | tail -n1) ifeq ($(COMPETITIVE_PARTY_SYNTAX),1) -%.h: %.party tools ; $(CPP) $(CPPFLAGS) -traditional-cpp - < $< | sed '/#[^p]/d' | $(TRAINERPROC) -o $@ -i $< - +%.h: %.party tools ; $(CPP) $(CPPFLAGS) -traditional-cpp - < $< | $(TRAINERPROC) -o $@ -i $< - endif -ifeq ($(MODERN),0) -$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) -$(C_BUILDDIR)/libc.o: CFLAGS := -O2 - -$(C_BUILDDIR)/siirtc.o: CFLAGS := -mthumb-interwork - -$(C_BUILDDIR)/agb_flash.o: CFLAGS := -O -mthumb-interwork -$(C_BUILDDIR)/agb_flash_1m.o: CFLAGS := -O -mthumb-interwork -$(C_BUILDDIR)/agb_flash_mx.o: CFLAGS := -O -mthumb-interwork - -$(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) - -$(C_BUILDDIR)/record_mixing.o: CFLAGS += -ffreestanding -$(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm$(EXE) -$(C_BUILDDIR)/librfu_intr.o: CFLAGS := -O2 -mthumb-interwork -quiet -else +$(C_BUILDDIR)/berry_crush.o: override CFLAGS += -Wno-address-of-packed-member $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast $(C_BUILDDIR)/pokedex_plus_hgss.o: CFLAGS := -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -Wno-pointer-to-int-cast -std=gnu17 -Werror -Wall -Wno-strict-aliasing -Wno-attribute-alias -Woverride-init # Annoyingly we can't turn this on just for src/data/trainers.h $(C_BUILDDIR)/data.o: CFLAGS += -fno-show-column -fno-diagnostics-show-caret -endif ifeq ($(DINFO),1) override CFLAGS += -g @@ -488,13 +418,8 @@ $1: $2 $$(shell $(SCANINC) -I include -I tools/agbcc/include -I gflib $2) endef $(foreach src, $(TEST_SRCS), $(eval $(call TEST_DEP,$(patsubst $(TEST_SUBDIR)/%.c,$(TEST_BUILDDIR)/%.o,$(src)),$(src),$(patsubst $(TEST_SUBDIR)/%.c,%,$(src))))) -ifeq ($(MODERN),0) -LD_SCRIPT := ld_script.ld -LD_SCRIPT_DEPS := $(OBJ_DIR)/sym_bss.ld $(OBJ_DIR)/sym_common.ld $(OBJ_DIR)/sym_ewram.ld -else LD_SCRIPT := ld_script_modern.ld LD_SCRIPT_DEPS := -endif $(OBJ_DIR)/ld_script.ld: $(LD_SCRIPT) $(LD_SCRIPT_DEPS) cd $(OBJ_DIR) && sed "s#tools/#../../tools/#g" ../../$(LD_SCRIPT) > ld_script.ld @@ -541,7 +466,7 @@ check: $(TESTELF) $(ROMTESTHYDRA) $(ROMTEST) $(OBJCOPY) $(HEADLESSELF) libagbsyscall: - @$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN) MODERN=$(MODERN) + @$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN) MODERN=1 ################### ### Symbol file ### diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 12439efc4a0c..9d61889b4092 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1670,6 +1670,10 @@ callnative BS_DamageToQuarterTargetHP .endm + .macro ficklebeamdamagecalculation + callnative BS_FickleBeamDamageCalculation + .endm + @ various command changed to more readable macros .macro cancelmultiturnmoves battler:req various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 83338673cf17..891c7fd4edea 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -1798,7 +1798,7 @@ .4byte \text .endm - @ Equivalent to fadescreen but copies gPlttBufferUnfaded to gPaletteDecompressionBuffer on the fade out + @ Equivalent to fadescreen but copies gPlttBufferUnfaded to gDecompressionBuffer on the fade out @ and the reverse on the fade in, in effect saving gPlttBufferUnfaded to restore it. .macro fadescreenswapbuffers mode:req .byte 0xdc diff --git a/common_syms/AgbRfu_LinkManager.txt b/common_syms/AgbRfu_LinkManager.txt deleted file mode 100644 index 7ff8cd53dd5d..000000000000 --- a/common_syms/AgbRfu_LinkManager.txt +++ /dev/null @@ -1 +0,0 @@ -lman diff --git a/common_syms/agb_flash.txt b/common_syms/agb_flash.txt deleted file mode 100644 index cb421ec80d1a..000000000000 --- a/common_syms/agb_flash.txt +++ /dev/null @@ -1,10 +0,0 @@ -gFlashTimeoutFlag -PollFlashStatus -WaitForFlashWrite -ProgramFlashSector -gFlash -ProgramFlashByte -gFlashNumRemainingBytes -EraseFlashChip -EraseFlashSector -gFlashMaxTime diff --git a/common_syms/apprentice.txt b/common_syms/apprentice.txt deleted file mode 100644 index 0d3569dcbbca..000000000000 --- a/common_syms/apprentice.txt +++ /dev/null @@ -1,3 +0,0 @@ -gApprenticePartyMovesData -gApprenticeQuestionData -gApprenticeFunc diff --git a/common_syms/battle_anim_throw.txt b/common_syms/battle_anim_throw.txt deleted file mode 100755 index 5e2e8b3ff39d..000000000000 --- a/common_syms/battle_anim_throw.txt +++ /dev/null @@ -1,3 +0,0 @@ -gMonShrinkDuration -gMonShrinkDelta -gMonShrinkDistance diff --git a/common_syms/battle_controllers.txt b/common_syms/battle_controllers.txt deleted file mode 100644 index 0b3c25266a1c..000000000000 --- a/common_syms/battle_controllers.txt +++ /dev/null @@ -1,3 +0,0 @@ -gBattlerControllerFuncs -gBattleControllerData -gBattlerControllerEndFuncs diff --git a/common_syms/battle_factory_screen.txt b/common_syms/battle_factory_screen.txt deleted file mode 100644 index 3ddeb6d3b188..000000000000 --- a/common_syms/battle_factory_screen.txt +++ /dev/null @@ -1 +0,0 @@ -gFactorySelect_CurrentOptionFunc diff --git a/common_syms/battle_main.txt b/common_syms/battle_main.txt deleted file mode 100644 index 7a9faa5a13e2..000000000000 --- a/common_syms/battle_main.txt +++ /dev/null @@ -1,7 +0,0 @@ -gPreBattleCallback1 -gBattleMainFunc -gBattleResults -gLeveledUpInBattle -gHealthboxSpriteIds -gMultiUsePlayerCursor -gNumberOfMovesToChoose diff --git a/common_syms/battle_tower.txt b/common_syms/battle_tower.txt deleted file mode 100644 index 7371109d51f3..000000000000 --- a/common_syms/battle_tower.txt +++ /dev/null @@ -1 +0,0 @@ -gFrontierTempParty diff --git a/common_syms/berry_blender.txt b/common_syms/berry_blender.txt deleted file mode 100644 index 1b15a33d6113..000000000000 --- a/common_syms/berry_blender.txt +++ /dev/null @@ -1 +0,0 @@ -gInGameOpponentsNo diff --git a/common_syms/bg.txt b/common_syms/bg.txt deleted file mode 100644 index 0a3c3aecca31..000000000000 --- a/common_syms/bg.txt +++ /dev/null @@ -1 +0,0 @@ -gWindowTileAutoAllocEnabled diff --git a/common_syms/contest.txt b/common_syms/contest.txt deleted file mode 100644 index 6a519fb463d7..000000000000 --- a/common_syms/contest.txt +++ /dev/null @@ -1 +0,0 @@ -gContestRngValue diff --git a/common_syms/contest_painting.txt b/common_syms/contest_painting.txt deleted file mode 100644 index 32bb8be16153..000000000000 --- a/common_syms/contest_painting.txt +++ /dev/null @@ -1,4 +0,0 @@ -gContestMonPixels -gImageProcessingContext -gContestPaintingWinner -gContestPaintingMonPalette diff --git a/common_syms/ereader_screen.txt b/common_syms/ereader_screen.txt deleted file mode 100644 index 2189eedbc925..000000000000 --- a/common_syms/ereader_screen.txt +++ /dev/null @@ -1 +0,0 @@ -gEReaderData diff --git a/common_syms/evolution_scene.txt b/common_syms/evolution_scene.txt deleted file mode 100644 index 137cd3e05df7..000000000000 --- a/common_syms/evolution_scene.txt +++ /dev/null @@ -1 +0,0 @@ -gCB2_AfterEvolution diff --git a/common_syms/faraway_island.txt b/common_syms/faraway_island.txt deleted file mode 100755 index e02ca2ec2528..000000000000 --- a/common_syms/faraway_island.txt +++ /dev/null @@ -1,3 +0,0 @@ -sPlayerToMewDeltaX -sPlayerToMewDeltaY -sMewDirectionCandidates diff --git a/common_syms/field_camera.txt b/common_syms/field_camera.txt deleted file mode 100644 index 02301ce23cd1..000000000000 --- a/common_syms/field_camera.txt +++ /dev/null @@ -1,3 +0,0 @@ -gFieldCamera -gTotalCameraPixelOffsetY -gTotalCameraPixelOffsetX diff --git a/common_syms/field_control_avatar.txt b/common_syms/field_control_avatar.txt deleted file mode 100644 index 268f60c64177..000000000000 --- a/common_syms/field_control_avatar.txt +++ /dev/null @@ -1 +0,0 @@ -gSelectedObjectEvent diff --git a/common_syms/field_specials.txt b/common_syms/field_specials.txt deleted file mode 100644 index 7adb3f669235..000000000000 --- a/common_syms/field_specials.txt +++ /dev/null @@ -1 +0,0 @@ -gScrollableMultichoice_ListMenuTemplate diff --git a/common_syms/fieldmap.txt b/common_syms/fieldmap.txt deleted file mode 100644 index 0ead758462c9..000000000000 --- a/common_syms/fieldmap.txt +++ /dev/null @@ -1 +0,0 @@ -gBackupMapLayout diff --git a/common_syms/image_processing_effects.txt b/common_syms/image_processing_effects.txt deleted file mode 100644 index 134f7e88b25c..000000000000 --- a/common_syms/image_processing_effects.txt +++ /dev/null @@ -1,10 +0,0 @@ -gCanvasColumnStart -gCanvasPixels -gCanvasRowEnd -gCanvasHeight -gCanvasColumnEnd -gCanvasRowStart -gCanvasMonPersonality -gCanvasWidth -gCanvasPalette -gCanvasPaletteStart diff --git a/common_syms/intro.txt b/common_syms/intro.txt deleted file mode 100644 index d069b1014ff4..000000000000 --- a/common_syms/intro.txt +++ /dev/null @@ -1,2 +0,0 @@ -gIntroFrameCounter -gMultibootProgramStruct diff --git a/common_syms/librfu_rfu.txt b/common_syms/librfu_rfu.txt deleted file mode 100644 index 4b742dcd256c..000000000000 --- a/common_syms/librfu_rfu.txt +++ /dev/null @@ -1,5 +0,0 @@ -gRfuSlotStatusUNI -gRfuSlotStatusNI -gRfuLinkStatus -gRfuStatic -gRfuFixed diff --git a/common_syms/librfu_sio32id.txt b/common_syms/librfu_sio32id.txt deleted file mode 100644 index 97395e84b310..000000000000 --- a/common_syms/librfu_sio32id.txt +++ /dev/null @@ -1 +0,0 @@ -gRfuSIO32Id diff --git a/common_syms/librfu_stwi.txt b/common_syms/librfu_stwi.txt deleted file mode 100644 index a1f773553591..000000000000 --- a/common_syms/librfu_stwi.txt +++ /dev/null @@ -1 +0,0 @@ -gSTWIStatus diff --git a/common_syms/link.txt b/common_syms/link.txt deleted file mode 100644 index 4118d1eb4bee..000000000000 --- a/common_syms/link.txt +++ /dev/null @@ -1,35 +0,0 @@ -gLinkPartnersHeldKeys -gLinkDebugSeed -gLocalLinkPlayerBlock -gLinkErrorOccurred -gLinkDebugFlags -gLinkFiller1 -gRemoteLinkPlayersNotReceived -gBlockReceivedStatus -gLinkFiller2 -gLinkHeldKeys -gRecvCmds -gLinkStatus -gLinkDummy1 -gLinkDummy2 -gReadyToExitStandby -gReadyToCloseLink -gReadyCloseLinkType -gSuppressLinkErrorMessage -gWirelessCommType -gSavedLinkPlayerCount -gSendCmd -gSavedMultiplayerId -gReceivedRemoteLinkPlayers -gLinkTestBGInfo -gLinkCallback -gShouldAdvanceLinkState -gLinkTestBlockChecksums -gBlockRequestType -gLinkFiller3 -gLinkFiller4 -gLinkFiller5 -gLastSendQueueCount -gLink -gLastRecvQueueCount -gLinkSavedIme diff --git a/common_syms/link_rfu_2.txt b/common_syms/link_rfu_2.txt deleted file mode 100644 index 4b8f02bad8f2..000000000000 --- a/common_syms/link_rfu_2.txt +++ /dev/null @@ -1,2 +0,0 @@ -gRfuAPIBuffer -gRfu diff --git a/common_syms/list_menu.txt b/common_syms/list_menu.txt deleted file mode 100644 index ed5343618ccc..000000000000 --- a/common_syms/list_menu.txt +++ /dev/null @@ -1,2 +0,0 @@ -gListMenuOverride -gMultiuseListMenuTemplate diff --git a/common_syms/load_save.txt b/common_syms/load_save.txt deleted file mode 100644 index 2d3d9b802ffc..000000000000 --- a/common_syms/load_save.txt +++ /dev/null @@ -1,4 +0,0 @@ -gFlashMemoryPresent -gSaveBlock1Ptr -gSaveBlock2Ptr -gPokemonStoragePtr diff --git a/common_syms/m4a.txt b/common_syms/m4a.txt deleted file mode 100644 index 0d6b13a79bd1..000000000000 --- a/common_syms/m4a.txt +++ /dev/null @@ -1,12 +0,0 @@ -gSoundInfo -gPokemonCrySongs -gPokemonCryMusicPlayers -gMPlayInfo_BGM -gMPlayJumpTable -gCgbChans -gMPlayInfo_SE1 -gMPlayInfo_SE2 -gPokemonCryTracks -gPokemonCrySong -gMPlayMemAccArea -gMPlayInfo_SE3 diff --git a/common_syms/main.txt b/common_syms/main.txt deleted file mode 100644 index f1f8076adf9d..000000000000 --- a/common_syms/main.txt +++ /dev/null @@ -1,10 +0,0 @@ -gKeyRepeatStartDelay -gLinkTransferringData -gMain -gKeyRepeatContinueDelay -gSoftResetDisabled -gIntrTable -gLinkVSyncDisabled -IntrMain_Buffer -gPcmDmaCounter -gAgbMainLoop_sp diff --git a/common_syms/mauville_old_man.txt b/common_syms/mauville_old_man.txt deleted file mode 100644 index 9d77b8692b70..000000000000 --- a/common_syms/mauville_old_man.txt +++ /dev/null @@ -1 +0,0 @@ -gBardSong diff --git a/common_syms/overworld.txt b/common_syms/overworld.txt deleted file mode 100644 index dcada0bbefe8..000000000000 --- a/common_syms/overworld.txt +++ /dev/null @@ -1,8 +0,0 @@ -gOverworldTilemapBuffer_Bg2 -gOverworldTilemapBuffer_Bg1 -gOverworldTilemapBuffer_Bg3 -gHeldKeyCodeToSend -gFieldCallback -gFieldCallback2 -gLocalLinkPlayerId -gFieldLinkPlayerCount diff --git a/common_syms/party_menu.txt b/common_syms/party_menu.txt deleted file mode 100644 index 6ed37392c2de..000000000000 --- a/common_syms/party_menu.txt +++ /dev/null @@ -1 +0,0 @@ -gItemUseCB diff --git a/common_syms/pokedex.txt b/common_syms/pokedex.txt deleted file mode 100644 index c7a297b2af90..000000000000 --- a/common_syms/pokedex.txt +++ /dev/null @@ -1,2 +0,0 @@ -gUnusedPokedexU8 -gPokedexVBlankCB diff --git a/common_syms/pokedex_cry_screen.txt b/common_syms/pokedex_cry_screen.txt deleted file mode 100644 index d16ec36d64fa..000000000000 --- a/common_syms/pokedex_cry_screen.txt +++ /dev/null @@ -1 +0,0 @@ -gDexCryScreenState diff --git a/common_syms/random.txt b/common_syms/random.txt deleted file mode 100644 index 8037c69586b1..000000000000 --- a/common_syms/random.txt +++ /dev/null @@ -1,2 +0,0 @@ -gRngValue -gRng2Value diff --git a/common_syms/rtc.txt b/common_syms/rtc.txt deleted file mode 100644 index fa00a34d5172..000000000000 --- a/common_syms/rtc.txt +++ /dev/null @@ -1 +0,0 @@ -gLocalTime diff --git a/common_syms/save.txt b/common_syms/save.txt deleted file mode 100644 index 131031d5063b..000000000000 --- a/common_syms/save.txt +++ /dev/null @@ -1,13 +0,0 @@ -gLastWrittenSector -gLastSaveCounter -gLastKnownGoodSector -gDamagedSaveSectors -gSaveCounter -gReadWriteSector -gIncrementalSectorId -gSaveUnusedVar -gSaveFileStatus -gGameContinueCallback -gRamSaveSectorLocations -gSaveUnusedVar2 -gSaveAttemptStatus diff --git a/common_syms/sound.txt b/common_syms/sound.txt deleted file mode 100644 index 0f6f2fc75888..000000000000 --- a/common_syms/sound.txt +++ /dev/null @@ -1 +0,0 @@ -gDisableMusic diff --git a/common_syms/sprite.txt b/common_syms/sprite.txt deleted file mode 100644 index 627c01c0d073..000000000000 --- a/common_syms/sprite.txt +++ /dev/null @@ -1,2 +0,0 @@ -gOamMatrixAllocBitmap -gReservedSpritePaletteCount diff --git a/common_syms/start_menu.txt b/common_syms/start_menu.txt deleted file mode 100644 index 05beaf57c23b..000000000000 --- a/common_syms/start_menu.txt +++ /dev/null @@ -1 +0,0 @@ -gMenuCallback diff --git a/common_syms/task.txt b/common_syms/task.txt deleted file mode 100644 index 6601bd11bb84..000000000000 --- a/common_syms/task.txt +++ /dev/null @@ -1 +0,0 @@ -gTasks diff --git a/common_syms/text.txt b/common_syms/text.txt deleted file mode 100644 index cd8886e5b1f5..000000000000 --- a/common_syms/text.txt +++ /dev/null @@ -1,4 +0,0 @@ -gFonts -gDisableTextPrinters -gCurGlyph -gTextFlags diff --git a/common_syms/trainer_see.txt b/common_syms/trainer_see.txt deleted file mode 100644 index 0b30a632a005..000000000000 --- a/common_syms/trainer_see.txt +++ /dev/null @@ -1,5 +0,0 @@ -gWhichTrainerToFaceAfterBattle -gPostBattleMovementScript -gApproachingTrainers -gNoOfApproachingTrainers -gTrainerApproachedPlayer diff --git a/common_syms/tv.txt b/common_syms/tv.txt deleted file mode 100644 index 0370f65e1f67..000000000000 --- a/common_syms/tv.txt +++ /dev/null @@ -1,4 +0,0 @@ -sCurTVShowSlot -sTV_SecretBaseVisitMovesTemp -sTV_DecorationsBuffer -sTV_SecretBaseVisitMonsTemp diff --git a/common_syms/window.txt b/common_syms/window.txt deleted file mode 100644 index 24c093a22612..000000000000 --- a/common_syms/window.txt +++ /dev/null @@ -1,2 +0,0 @@ -gTransparentTileNumber -gWindowBgTilemapBuffers diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index f842b8c113da..2f1a3cb73cd2 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -16219,6 +16219,12 @@ Move_RAGING_BULL:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ANGER loadspritegfx ANIM_TAG_BREATH + loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL + loadspritegfx ANIM_TAG_TORN_METAL + choosetwoturnanim RagingBullNormal, RagingBullShatteredWall +RagingBullNormal: + monbg ANIM_TARGET + setalpha 12, 8 createsprite gBreathPuffSpriteTemplate, ANIM_ATTACKER, 2 loopsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 4, 2 createsprite gAngerMarkSpriteTemplate, ANIM_ATTACKER, 2, 0, -20, -28 @@ -16250,6 +16256,49 @@ Move_RAGING_BULL:: waitforvisualfinish restorebg waitbgfadein + clearmonbg ANIM_TARGET + end +RagingBullShatteredWall: + monbg ANIM_TARGET + setalpha 12, 8 + createsprite gBreathPuffSpriteTemplate, ANIM_ATTACKER, 2 + loopsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 4, 2 + createsprite gAngerMarkSpriteTemplate, ANIM_ATTACKER, 2, 0, -20, -28 + delay 20 + createsprite gAngerMarkSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, -28 + waitforvisualfinish + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 2, 4 + waitforvisualfinish + playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER + call SetImpactBackground + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 + delay 3 + waitforvisualfinish + createsprite gBrickBreakWallSpriteTemplate, ANIM_ATTACKER, 3, ANIM_TARGET, 0, 0, 90, 10 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, ANIM_TARGET, 0 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -32, 0, 0, 3 + delay 20 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 0 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 4, 0, 12, 1 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + delay 20 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 1 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 1 + waitforvisualfinish + createsprite gBrickBreakWallShardSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0, -8, -12 + createsprite gBrickBreakWallShardSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 1, 8, -12 + createsprite gBrickBreakWallShardSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 2, -8, 12 + createsprite gBrickBreakWallShardSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 3, 8, 12 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 5 + delay 3 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7 + waitforvisualfinish + restorebg + waitbgfadein + clearmonbg ANIM_TARGET end @ Credits to Z-nogyroP. Simple anim that combines Force Palm + Fake Out @@ -17013,44 +17062,597 @@ Move_AXE_KICK:: createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 4 end -Move_TERA_BLAST:: -Move_ORDER_UP:: Move_SPIN_OUT:: -Move_POPULATION_BOMB:: -Move_GLAIVE_RUSH:: -Move_REVIVAL_BLESSING:: -Move_SALT_CURE:: -Move_TRIPLE_DIVE:: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_RAPID_SPIN + loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 + createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK + waitforvisualfinish + call SetHighSpeedBg + loopsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER, 8, 3 + waitforvisualfinish + monbg ANIM_ATTACKER + createsprite gRapidSpinSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 32, -32, 40, -2 + createvisualtask AnimTask_RapinSpinMonElevation, 2, 0, 2, 0 + loopsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER, 8, 4 + waitforvisualfinish + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 2 + createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, FALSE, 1, 10, 1, 0 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + waitforvisualfinish + delay 8 + createvisualtask AnimTask_RapinSpinMonElevation, 2, 0, 2, 1 + loopsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER, 8, 4 + waitforvisualfinish + call UnsetHighSpeedBg + clearmonbg ANIM_ATTACKER + end + Move_MORTAL_SPIN:: -Move_DOODLE:: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_RAPID_SPIN + loadspritegfx ANIM_TAG_POISON_BUBBLE + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_RAPID_SPIN, 0, 6, 6, RGB(15, 0, 15) + monbg ANIM_ATTACKER + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 1, 0, 13, RGB(10, 2, 19) + delay 16 + createsprite gRapidSpinSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 32, -32, 40, -2 + createvisualtask AnimTask_RapinSpinMonElevation, 2, 0, 2, 0 + loopsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER, 8, 4 + waitforvisualfinish + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 2 + createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, FALSE, 1, 10, 1, 0 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 1, 13, 0, RGB(10, 2, 19) + call PoisonBubblesEffect + waitforvisualfinish + delay 8 + createvisualtask AnimTask_RapinSpinMonElevation, 2, 0, 2, 1 + loopsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER, 8, 4 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + blendoff + end + Move_FILLET_AWAY:: + loadspritegfx ANIM_TAG_CUT + createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 0 + playsewithpan SE_M_CUT, SOUND_PAN_ATTACKER + delay 5 + createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 20, -27, 0 + playsewithpan SE_M_CUT, SOUND_PAN_ATTACKER + delay 5 + createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 60, -37, 0 + playsewithpan SE_M_CUT, SOUND_PAN_ATTACKER + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 0, 9, 0x7FFF + waitforvisualfinish + createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 2, 4, 4 + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 9, 0, 0x7FFF + waitforvisualfinish + blendoff + end + Move_FLOWER_TRICK:: + loadspritegfx ANIM_TAG_SPOTLIGHT + loadspritegfx ANIM_TAG_LEAF @leaves + loadspritegfx ANIM_TAG_FLOWER @flowers + loadspritegfx ANIM_TAG_IMPACT + createvisualtask AnimTask_CreateSpotlight, 2 + createvisualtask AnimTask_HardwarePaletteFade, 2, (BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN), 3, 0, 10, FALSE + waitforvisualfinish + createsprite gSpotlightSpriteTemplate, ANIM_TARGET, 2, 0, -8 + delay 16 + createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_ENCORE2, SOUND_PAN_TARGET + createvisualtask AnimTask_SwayMon, 5, 1, 8, 1536, 5, ANIM_TARGET + waitforvisualfinish + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, 192, 176, 40 + createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, -192, 240, 40 + createsprite gTropKickFlowerTemplate, ANIM_TARGET, 1, 0, 10, 192, -160, 40 + createsprite gTropKickFlowerTemplate, ANIM_TARGET, 1, 0, 10, -192, -112, 40 + createsprite gTropKickFlowerTemplate, ANIM_TARGET, 1, 0, 10, 160, 48, 40 + createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, -224, -32, 40 + createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, 112, -128, 40 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 + waitforvisualfinish + createvisualtask AnimTask_HardwarePaletteFade, 2, (BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN), 3, 10, 0, TRUE + createvisualtask AnimTask_RemoveSpotlight, 2 + end + Move_MAKE_IT_RAIN:: -Move_RUINATION:: -Move_COLLISION_COURSE:: -Move_ELECTRO_DRIFT:: + loadspritegfx ANIM_TAG_COIN + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_ATTACKER + setalpha 12, 8 + playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER + createsprite gCoinThrowSpriteTemplate, ANIM_ATTACKER, 2, 20, 0, 0, 0, 1152 + waitforvisualfinish + playsewithpan SE_M_PAY_DAY, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 1, 0, 0, ANIM_TARGET, 2 + createsprite gFallingCoinSpriteTemplate, ANIM_ATTACKER, 2 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1 + waitforvisualfinish + delay 20 + createvisualtask AnimTask_IsTargetPlayerSide, 2 + jumpretfalse MakingItRainOnOpponent + jumprettrue MakingItRainOnPlayer +MakingItRainContinue: + waitbgfadeout + createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_ATTACKER, 2, 7, 1, 11, 1 + loopsewithpan SE_M_PAY_DAY, SOUND_PAN_TARGET, 8, 15 + createsprite gMakingItRainTemplate, ANIM_TARGET, 2, -5, 0, -5, 1 + delay 2 + createsprite gMakingItRainTemplate, ANIM_TARGET, 2, 5, 0, 6, 1 + delay 2 + createsprite gMakingItRainTemplate, ANIM_TARGET, 2, 19, 0, 10, 1 + delay 2 + createsprite gMakingItRainTemplate, ANIM_TARGET, 2, -23, 0, -10, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 5, 50, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 0, 5, 50, 1 + call MakingItRain + call MakingItRain + call MakingItRain + restorebg + waitbgfadein + blendoff + waitforvisualfinish + clearmonbg ANIM_ATTACKER + end +MakingItRainOnOpponent: + fadetobg BG_IMPACT_OPPONENT + goto MakingItRainContinue +MakingItRainOnPlayer: + fadetobg BG_IMPACT_PLAYER + goto MakingItRainContinue +MakingItRain: + createsprite gMakingItRainTemplate, ANIM_TARGET, 2, -20, 0, -10, 1 + delay 2 + createsprite gMakingItRainTemplate, ANIM_TARGET, 2, 28, 0, 10, 1 + delay 2 + createsprite gMakingItRainTemplate, ANIM_TARGET, 2, -10, 0, -5, 1 + delay 2 + createsprite gMakingItRainTemplate, ANIM_TARGET, 2, 10, 0, 6, 1 + delay 2 + createsprite gMakingItRainTemplate, ANIM_TARGET, 2, 24, 0, 10, 1 + delay 2 + createsprite gMakingItRainTemplate, ANIM_TARGET, 2, -32, 0, -10, 1 + delay 2 + createsprite gMakingItRainTemplate, ANIM_TARGET, 2, -20, 0, -10, 1 + delay 2 + createsprite gMakingItRainTemplate, ANIM_TARGET, 2, 30, 0, 10, 1 + delay 2 + return + Move_SHED_TAIL:: + loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 24, 3 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 12, 4, 2, 3 + waitforvisualfinish + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + createvisualtask AnimTask_MonToSubstitute, 2 + end + Move_HYPER_DRILL:: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_HORN_HIT + fadetobgfromset BG_GUILLOTINE_OPPONENT, BG_GUILLOTINE_PLAYER, BG_GUILLOTINE_CONTESTS + waitbgfadein + createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0 + playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER + waitforvisualfinish + delay 2 + createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 1 + createsprite gHornHitSpriteTemplate, ANIM_TARGET, 4, 0, 0, 12 + waitforvisualfinish + playse 20 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 2, 0, 40, 1 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 10, 0, 40, 1 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 3 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 4 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 2, 1, 3 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 4 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, -4, 3, 1, 3 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 4 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, -8, -5, 1, 3 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 4 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 4, -12, 1, 3 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 4 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 16, 0, 1, 3 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 4 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 5, 18, 1, 3 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 4 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, -17, 12, 1, 2 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 4 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, -21, -15, 1, 2 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 4 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 8, -27, 1, 2 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 4 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 32, 0, 1, 2 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 4 + createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 2 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 8, RGB_BLACK, 0 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + waitforvisualfinish + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 8, RGB_BLACK, 0 + restorebg + waitbgfadein + blendoff + end + Move_TWIN_BEAM:: -Move_ARMOR_CANNON:: -Move_COMEUPPANCE:: -Move_BLAZING_TORQUE:: -Move_WICKED_TORQUE:: -Move_NOXIOUS_TORQUE:: -Move_COMBAT_TORQUE:: -Move_MAGICAL_TORQUE:: -Move_PSYBLADE:: -Move_BLOOD_MOON:: -Move_MATCHA_GOTCHA:: -Move_TERA_STARSTORM:: -Move_FICKLE_BEAM:: -Move_THUNDERCLAP:: -Move_MIGHTY_CLEAVE:: -Move_TACHYON_CUTTER:: -Move_HARD_PRESS:: -Move_DRAGON_CHEER:: -Move_SUPERCELL_SLAM:: -Move_MALIGNANT_CHAIN:: + loadspritegfx ANIM_TAG_BLUE_RING + loadspritegfx ANIM_TAG_GOLD_RING + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + call SetPsychicBackground + createvisualtask AnimTask_StartSinAnimTimer, 5, 100 + createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_TELEPORT, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 2, 9, 0, 10 + call PsywaveRings + call PsybeamRings + call PsywaveRings + call PsybeamRings + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 1, 4, 0, 12, RGB(31, 18, 31) + call PsywaveRings + call PsybeamRings + call PsywaveRings + call PsybeamRings + call PsywaveRings + call PsybeamRings + call PsywaveRings + call PsybeamRings + waitforvisualfinish + delay 1 + call UnsetPsychicBg + end + +Move_COMEUPPANCE:: + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_TARGET + fadetobg BG_DARK + waitbgfadein + delay 0 + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + createvisualtask AnimTask_ShakeMon2, 5, ANIM_ATTACKER, 1, 0, 15, 1 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 3, 0, 9, RGB_RED + waitforvisualfinish + delay 10 + createvisualtask AnimTask_SwayMon, 5, 0, 16, 6144, 8, ANIM_ATTACKER + delay 5 + setalpha 12, 8 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 4, 0, 30, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 0 + playsewithpan SE_M_COMET_PUNCH, +63 + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 24, 8, 1, 0 + playsewithpan SE_M_COMET_PUNCH, +63 + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -24, -16, 1, 0 + playsewithpan SE_M_COMET_PUNCH, +63 + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 8, 4, 1, 0 + playsewithpan SE_M_COMET_PUNCH, +63 + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -16, 19, 1, 0 + playsewithpan SE_M_COMET_PUNCH, +63 + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 18, -18, 1, 0 + playsewithpan SE_M_COMET_PUNCH, +63 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + restorebg + waitbgfadein + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 3, 9, 0, RGB_RED + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end + +Move_BLOOD_MOON:: + loadspritegfx ANIM_TAG_BLOOD_MOON + loadspritegfx ANIM_TAG_BEAM + loadspritegfx ANIM_TAG_RED_EXPLOSION + createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_BG, 0, 16, 16, RGB_BLACK + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 8, 1, ANIM_ATTACKER + delay 8 + playsewithpan SE_M_BARRIER, SOUND_PAN_ATTACKER + createsprite gMoonUpSpriteTemplate, ANIM_ATTACKER, 2 + waitforvisualfinish + delay 15 + playsewithpan SE_M_DETECT, 0 + waitforvisualfinish + createvisualtask AnimTask_IsTargetPlayerSide, 2 + jumpargeq 7 ANIM_TARGET BloodMoonOnPlayer +BloodMoonOnOpponent: + createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_HYPER_BEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 1, 10, 0, 5 + call BloodMoonOnslaughtOpponent + call BloodMoonOnslaughtOpponent + call BloodMoonOnslaughtOpponent + call BloodMoonOnslaughtOpponent + call BloodMoonOnslaughtOpponent + createsprite gBloodMoonOnslaughtSpriteTemplate, ANIM_TARGET, 2, 140, -16, 165, 40, 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + createsprite gRedExplosionSpriteTemplate, ANIM_TARGET, 4, 6, 5, 1, 0 + delay 0 + waitforvisualfinish + goto BloodMoonFinish +BloodMoonOnPlayer: + createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_HYPER_BEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 1, 10, 0, 5 + call BloodMoonOnslaughtPlayer + call BloodMoonOnslaughtPlayer + call BloodMoonOnslaughtPlayer + call BloodMoonOnslaughtPlayer + call BloodMoonOnslaughtPlayer + createsprite gBloodMoonOnslaughtSpriteTemplate, ANIM_TARGET, 2, 40, -16, 75, 80, 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + delay 0 + waitforvisualfinish +BloodMoonFinish: + createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_BG, 0, 0, 0, RGB_BLACK + waitforvisualfinish + clearmonbg ANIM_ATTACKER + end +BloodMoonOnslaughtOpponent: + createsprite gBloodMoonOnslaughtSpriteTemplate, ANIM_TARGET, 2, 140, -16, 165, 40, 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + createsprite gRedExplosionSpriteTemplate, ANIM_TARGET, 4, 6, 5, 1, 0 + delay 0 + createsprite gBloodMoonOnslaughtSpriteTemplate, ANIM_TARGET, 2, 140, -16, 165, 40, 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + createsprite gRedExplosionSpriteTemplate, ANIM_TARGET, 4, -16, -15, 1, 0 + delay 0 + createsprite gBloodMoonOnslaughtSpriteTemplate, ANIM_TARGET, 2, 140, -16, 165, 40, 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + createsprite gRedExplosionSpriteTemplate, ANIM_TARGET, 4, 16, -5, 1, 0 + delay 0 + createsprite gBloodMoonOnslaughtSpriteTemplate, ANIM_TARGET, 2, 140, -16, 165, 40, 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + createsprite gRedExplosionSpriteTemplate, ANIM_TARGET, 4, -12, 18, 1, 0 + delay 0 + createsprite gBloodMoonOnslaughtSpriteTemplate, ANIM_TARGET, 2, 140, -16, 165, 40, 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + createsprite gRedExplosionSpriteTemplate, ANIM_TARGET, 4, 0, 5, 1, 0 + delay 0 + return +BloodMoonOnslaughtPlayer: + createsprite gBloodMoonOnslaughtSpriteTemplate, ANIM_TARGET, 2, 40, -16, 75, 80, 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + createsprite gRedExplosionSpriteTemplate, ANIM_TARGET, 4, 6, 5, 1, 0 + delay 0 + createsprite gBloodMoonOnslaughtSpriteTemplate, ANIM_TARGET, 2, 40, -16, 75, 80, 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + createsprite gRedExplosionSpriteTemplate, ANIM_TARGET, 4, -16, -15, 1, 0 + delay 0 + createsprite gBloodMoonOnslaughtSpriteTemplate, ANIM_TARGET, 2, 40, -16, 75, 80, 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + createsprite gRedExplosionSpriteTemplate, ANIM_TARGET, 4, 16, -5, 1, 0 + delay 0 + createsprite gBloodMoonOnslaughtSpriteTemplate, ANIM_TARGET, 2, 40, -16, 75, 80, 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + createsprite gRedExplosionSpriteTemplate, ANIM_TARGET, 4, -12, 18, 1, 0 + delay 0 + createsprite gBloodMoonOnslaughtSpriteTemplate, ANIM_TARGET, 2, 40, -16, 75, 80, 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + createsprite gRedExplosionSpriteTemplate, ANIM_TARGET, 4, 0, 5, 1, 0 + delay 0 + return + +Move_FICKLE_BEAM:: + createvisualtask AnimTask_IsPowerOver99, 2 + waitforvisualfinish + jumpreteq FALSE, FickleBeamRegular + jumpreteq TRUE, FickleBeamIntense +FickleBeamRegular: + loadspritegfx ANIM_TAG_GOLD_RING + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 3, 4, 0, 15 + call PsybeamRings + call PsybeamRings + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 4, 25, 1 + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(15, 8, 30) + call PsybeamRings + call PsybeamRings + call PsybeamRings + call PsybeamRings + call PsybeamRings + call PsybeamRings + call PsybeamRings + call PsybeamRings + call PsybeamRings + waitforvisualfinish + end +FickleBeamIntense: + loadspritegfx ANIM_TAG_ORBS + fadetobgfromset BG_SPACIAL_REND_ON_OPPONENT BG_SPACIAL_REND_ON_PLAYER BG_SPACIAL_REND_ON_OPPONENT + waitbgfadein + delay 10 + playsewithpan SE_M_HYPER_BEAM, SOUND_PAN_ATTACKER + createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 4, 1 + waitforvisualfinish + delay 30 + createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_HYPER_BEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 1, 15, 0, 5 + createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 4, 50, 1 + createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_ORBS, 1, 12, RGB_RED, 16, 0, 0 + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 50, 1 + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + waitforvisualfinish + restorebg + waitbgfadein + end + +Move_THUNDERCLAP:: + loadspritegfx ANIM_TAG_LIGHTNING + monbg ANIM_ATK_PARTNER + setalpha 12, 8 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 24, 6, 1, 5 + createvisualtask AnimTask_TraceMonBlended, 2, 0, 4, 7, 3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + delay 4 + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -32 + playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -16 + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, 0 + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, 16 + delay 10 + createvisualtask AnimTask_ShakeTargetInPattern, 2, 30, 3, TRUE, 0 + delay 2 + createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_BG, 3, 16, 0, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_TARGET, 0, 16, 16, RGB_BLACK + delay 4 + createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_TARGET, 0, 0, 0, RGB_BLACK + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + blendoff + waitforvisualfinish + end + +Move_HARD_PRESS:: + loadspritegfx ANIM_TAG_EXPLOSION + loadspritegfx ANIM_TAG_ACUPRESSURE + loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE + setalpha 15, 0 + call SetSteelBeamBackground + createvisualtask AnimTask_CompressTargetHorizontallyFast, 2 + createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, 0, 0, 1, 1 + delay 3 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, 24, -24, 1, 1 + delay 3 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, -16, 16, 1, 1 + delay 3 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, -24, -12, 1, 1 + delay 3 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, 16, 16, 1, 1 + waitforvisualfinish + blendoff + call UnsetHighSpeedBg + end + +Move_DRAGON_CHEER:: + loadspritegfx ANIM_TAG_NOISE_LINE + loadspritegfx ANIM_TAG_CONFETTI + loadspritegfx ANIM_TAG_PINK_CLOUD + createvisualtask AnimTask_DeepInhale, 2, ANIM_ATTACKER + delay 12 + call RoarEffect + createvisualtask SoundTask_PlayCryHighPitch, 2, ANIM_ATTACKER, 3 + waitforvisualfinish + monbg ANIM_ATTACKER + playsewithpan SE_BALL_OPEN, SOUND_PAN_TARGET + createsprite gSmokeBallEscapeCloudSpriteTemplate, ANIM_ATTACKER, 122, 3, -14, 18, 24 + createsprite gSmokeBallEscapeCloudSpriteTemplate, ANIM_ATTACKER, 121, 3, 14, 6, 24 + createsprite gSmokeBallEscapeCloudSpriteTemplate, ANIM_ATTACKER, 120, 3, -12, 12, 24 + createsprite gSmokeBallEscapeCloudSpriteTemplate, ANIM_ATTACKER, 119, 3, 14, 18, 24 + createsprite gSmokeBallEscapeCloudSpriteTemplate, ANIM_ATTACKER, 118, 3, 0, 0, 24 + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + waitforvisualfinish + clearmonbg ANIM_ATTACKER + delay 10 + end + +Move_MALIGNANT_CHAIN:: + loadspritegfx ANIM_TAG_PURPLE_CHAIN + loadspritegfx ANIM_TAG_POISON_BUBBLE + loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 6, 2 + createsprite gChainBindingSpriteTemplate, ANIM_TARGET, 4, 0, 16, 0, 1 + delay 7 + createsprite gChainBindingSpriteTemplate, ANIM_TARGET, 2, 0, 8, 1, 1 + delay 3 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 8, 1 + delay 20 + setarg 7, -1 + playsewithpan SE_M_BIND, SOUND_PAN_TARGET + waitforvisualfinish + call PoisonBubblesEffect + waitforvisualfinish + end + +Move_TERA_BLAST:: +Move_ORDER_UP:: +Move_POPULATION_BOMB:: +Move_GLAIVE_RUSH:: +Move_REVIVAL_BLESSING:: +Move_SALT_CURE:: +Move_TRIPLE_DIVE:: +Move_DOODLE:: +Move_RUINATION:: +Move_COLLISION_COURSE:: +Move_ELECTRO_DRIFT:: +Move_ARMOR_CANNON:: +Move_BLAZING_TORQUE:: +Move_WICKED_TORQUE:: +Move_NOXIOUS_TORQUE:: +Move_COMBAT_TORQUE:: +Move_MAGICAL_TORQUE:: +Move_PSYBLADE:: +Move_MATCHA_GOTCHA:: +Move_TERA_STARSTORM:: +Move_MIGHTY_CLEAVE:: +Move_TACHYON_CUTTER:: +Move_SUPERCELL_SLAM:: end @to do @@@@@@@@@@@@@@@@@@@@@@@ GEN 1-3 @@@@@@@@@@@@@@@@@@@@@@@ diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index f30fdbdad5e0..5cb187f8745d 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -30,6 +30,19 @@ BattleScript_DamageToQuarterTargetHP:: damagetoquartertargethp goto BattleScript_HitFromAtkAnimation +BattleScript_EffectFickleBeam:: + attackcanceler + attackstring + ppreduce + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE + ficklebeamdamagecalculation + goto BattleScript_HitFromCritCalc +BattleScript_FickleBeamDoubled:: + pause B_WAIT_TIME_SHORTEST + printstring STRINGID_FICKLEBEAMDOUBLED + waitmessage B_WAIT_TIME_LONG + goto BattleScript_HitFromCritCalc + BattleScript_Terastallization:: @ TODO: no string prints in S/V, but right now this helps with clarity printstring STRINGID_PKMNSTORINGENERGY @@ -565,7 +578,7 @@ BattleScript_Teatimerod: statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TeatimeBuffer jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_TeatimeBuffer printfromtable gStatUpStringIds - waitmessage 0x40 + waitmessage B_WAIT_TIME_LONG moveendto MOVEEND_NEXT_TARGET jumpifnexttargetvalid BattleScript_TeatimeLoop moveendcase MOVEEND_CLEAR_BITS @@ -577,7 +590,7 @@ BattleScript_Teatimemotor: statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TeatimeBuffer jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_TeatimeBuffer printfromtable gStatUpStringIds - waitmessage 0x40 + waitmessage B_WAIT_TIME_LONG moveendto MOVEEND_NEXT_TARGET jumpifnexttargetvalid BattleScript_TeatimeLoop moveendcase MOVEEND_CLEAR_BITS @@ -865,6 +878,7 @@ BattleScript_OctlockTurnDmgEnd: BattleScript_EffectPoltergeist:: attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring ppreduce checkpoltergeist BS_TARGET, BattleScript_ButItFailed @@ -6356,6 +6370,7 @@ BattleScript_StickyWebOnSwitchInPrintStatMsg: BattleScript_StickyWebOnSwitchInEnd: restoretarget restoreattacker + setbyte sSTICKY_WEB_STAT_DROP, 0 return BattleScript_PerishSongTakesLife:: diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index 3ff95a251c69..0e065d018e71 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -3,7 +3,20 @@ - [README](./README.md) - [Installation](./INSTALL.md) - [Setting up WSL1 (Legacy Portion)](./legacy_WSL1_INSTALL.md) +- [Run documentation site locally](local_mdbook/index.md) + - [Ubuntu WSL1/WSL2](local_mdbook/ubuntu_WSL.md) - [AI Flags](./ai_flags.md) +- [Tutorials]() + - [How to add new AI Flags](./ai_logic.md) + - [How to add new battle script commands/macros](./how_to_battle_script_command_macro.md) + - [How to add a new move](./how_to_new_move.md) + - [How to add a new trainer class](./how_to_trainer_class.md) + - [How to add a new Pokémon]() + - [v1.9.0](./how_to_new_pokemon_1_9_0.md) + - [v1.8.0](./how_to_new_pokemon_1_8_0.md) + - [v1.7.0](./how_to_new_pokemon_1_7_0.md) + - [v1.6.0](./how_to_new_pokemon_1_6_0.md) + - [How to use the Testing System](./how_to_testing_system.md) - [Changelog](./CHANGELOG.md) - [1.9.x]() - [Version 1.9.0](changelogs/1.9.x/1.9.0.md) diff --git a/docs/ai_logic.md b/docs/ai_logic.md new file mode 100644 index 000000000000..b910d469461b --- /dev/null +++ b/docs/ai_logic.md @@ -0,0 +1,31 @@ +# How to add new AI Flags + +The battle engine upgrade has rewritten the AI battle scripts to C functions to easily add new logic. This tutorial explains how to add a new AI logic flag. + +## 1. Define your flag + +Open `include/constants/battle_ai.h`. We have many unused flags, but you can add a new one after `AI_FLAG_SMART_SWITCHING` like so: + +`#define AI_FLAG_SUPPORT (1 << 16)` + +## 2. Make your new function + +Open `src/battle_ai_main.c`. Search for the array `static s16 (*const sBattleAiFuncTable[])(u8, u8, u16, s16)`. We want to add our new function to this table. Since we have defined our flag as `(1 << 16)`, find the 16th entry in the table (identifiable by the initializer, `[16]`), and replace it with: + +`[16] = AI_Support, // AI_FLAG_SUPPORT` + +Define your function above the table as `static s16 AI_Support(u8 battlerAtk, u8 battlerDef, u16 move, s16 score);` + +## Make your function do something + +at the bottom of the file, add: +```c +static s16 AI_Support(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) +{ + // Add your logic here! +} +``` + +## Give your trainer the correct AI flag! + +And that's it! diff --git a/docs/how_to_battle_script_command_macro.md b/docs/how_to_battle_script_command_macro.md new file mode 100644 index 000000000000..042a87601d39 --- /dev/null +++ b/docs/how_to_battle_script_command_macro.md @@ -0,0 +1,51 @@ +## How to add new Battle Script Commands/Macros + +To preface this tutorial, the battle engine upgrade has exhausted all battle script command IDs, and instead uses the `various` command to effectively add new commands. This is preferential to creating a secondary battle script command table like is done in the CFRU. + +In general, `gBattlescriptCurrInstr` tracks the current battle script position as a ROM address. Fortunately, we don't need to worry about ROM addresses when using the decomps, but it is important to understand because of how the `various` command is set up. + +``` +.macro various battler:req, param1:req + .byte 0x76 + .byte \battler + .byte \param1 + .endm +``` + +`various` is 3 bytes in size, so if we wanted to advance to the next battle script command, we would write `gBattlescriptCurrInstr += 3`. Coincidentally, this is found at the end of `Cmd_Various` in `src/battle_script_commands.c`. + +Now, how might we add a custom various command case? Here are the steps. We will use `VARIOUS_SET_SIMPLE_BEAM` as an example. +### 1. Add a definition to `include/constants/battle_script_commands.h`. + +For example, `#define VARIOUS_SET_SIMPLE_BEAM 39` + +### 2. Create a macro in `asm/macros/battle_script.inc`. For example: +```c +.macro setabilitysimple battler:req, ptr:req + various \battler VARIOUS_SET_SIMPLE_BEAM + .4byte \ptr + .endm +``` + +### 3. Add your new various command ID to `Cmd_Various`. For example: +```c + case VARIOUS_SET_SIMPLE_BEAM: + if (IsEntrainmentTargetOrSimpleBeamBannedAbility(gBattleMons[gBattlerTarget].ability) + || gBattleMons[gBattlerTarget].ability == ABILITY_SIMPLE) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + else + { + gBattleMons[gBattlerTarget].ability = ABILITY_SIMPLE; + RecordAbilityBattle(gActiveBattler, ABILITY_SIMPLE); + gBattlescriptCurrInstr += 7; + } + return; +``` + +The macros' `battler` argument is the battler who will be affected/considered by your command. In our case, which battler we will try to give `ABILITY_SIMPLE`. Note that `gActiveBattler` is always set to this battler at the beginning of `Cmd_Various`. + +The `ptr` argument is an extra argument that, in this case, provides a battle script to jump to in the event that we fail to set `ABILITY_SIMPLE`. We must add the `.4byte \ptr` inside our macro. So now when we want to advance to the next battle script command in our script, we must increment `gBattlescriptCurrInstr` by `7` because our overall macro is 3 bytes for the various command, and 4 bytes for the pointer. *IMPORTANT* the `return` at the end of the switch case is required because remember that `various` always defaults to `gBattlescriptCurrInstr += 3` at the very end of the function, so if we included `gBattlescriptCurrInstr += 7` with a `break`, we would end up effectively doing `gBattlescriptCurrInstr += 10`. + +This behavior can be found under the `else` statement in the example above, corresponding to `ABILITY_SIMPLE` being correctly applied. If we are unable to set `ABILITY_SIMPLE`, however, notice the following `gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);`. This means we are jumping to the battle script provided by the pointer 3 bytes after our various command (which is the `ptr` argument described previously). We still must `return` or else we would actually jump to 3 bytes after the `ptr` battle script begins. diff --git a/docs/how_to_new_move.md b/docs/how_to_new_move.md new file mode 100644 index 000000000000..9ddc09b904b7 --- /dev/null +++ b/docs/how_to_new_move.md @@ -0,0 +1,197 @@ +*Full credits and thank you to CancerFairy for writing this guide!* + +### Note: This guide was written for version 1.8.0. Most stuff still applies to 1.7.x versions and earlier, with the following exceptions: +- Battle and Contest move data are separated in `src/data/battle_moves.h` and `src/data/contest_moves.h` +- `additionalEffects` doesn't exist, instead being handled by a combination of `secondaryEffectChance` and unique `EFFECT_xxx`s. +- There's no `include/constants/battle_move_effects.h`, so data specific to certain effects is handled in other places. +- Move names are handled in `gMoveNames`. + +# Adding/editing moves +This guide is here to give you a breakdown of how moves work, how to edit existing ones, and how to add your own. + +## Contents: +1. [Key files and definitions](#key-files-and-definitions) + - [Header files](#header-files) + - [C files](#c-files) + - [Script files](#script-files) +2. [Editing a move](#editing-a-move) +3. [Adding a new move](#adding-a-new-move) + +## Key files and definitions +Before beginning the process, it's important to familiarise yourself with the important files that control moves. There are three categories of files - header(.h) files, which contain static information about a move, .c files which contains functions in C that determine how the move behaves, and script files (.s or .inc) that actually "run" the move - i.e. determine the sequence of events you see on screen when you execute the move. + +## Header files +### src/data/moves_info.h +This is the place where the bulk of move information is stored, including name, base power, typing, PP, contest information etc. + +Let's look at an example: +```c +[MOVE_THUNDER_SHOCK] = +{ + .name = HANDLE_EXPANDED_MOVE_NAME("ThunderShock", "Thunder Shock"), + .description = COMPOUND_STRING( + "An electrical attack that\n" + "may paralyze the foe."), + .effect = EFFECT_HIT, + .power = 40, + .type = TYPE_ELECTRIC, + .accuracy = 100, + .pp = 30, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .category = DAMAGE_CATEGORY_SPECIAL, + .sheerForceBoost = TRUE, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_PARALYSIS, + .chance = 10, + }), + .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_COOL, + .contestComboStarterId = 0, + .contestComboMoves = {COMBO_STARTER_CHARGE}, +}, +``` +The `HANDLE_EXPANDED_MOVE_NAME` allows the usage of a name of extended character length, so long as the `B_EXPANDED_MOVE_NAMES` is set to `TRUE`, whereas by default it's limited in Gen 3 to 12 characters. Most of the fields here are obvious, but the two important ones for determining what a move actually *does* are `effect` and `additionalEffects`. + +The `effect` represents how the move actually works when called in battle - it can be a two turn move, or a move that only works if the target is holding an item, for example. How each effect works is pretty much unique, but the way a move of a particular effect is executed is defined by a script [`data/battle_scripts_1.s`](#databattle_scripts_1s), and any *variable* characteristics such as typing or power are defined in either [`src/battle_script_commands.c`](#srcbattle_script_commandsc) or [`src/battle_util.c`](#srcbattle_utilc), depending on the effect. The vast majority of non-status moves are simply `EFFECT_HIT`, in that they deal damage and apply `additionalEffects` (if defined). + +The `additionalEffects` field represents effects that are applied at the `setadditionaleffects` stage of the move script (for most moves, see `BattleScript_Hit_RetFromAtkAnimation`). These are effects that can be encapsulated by any of the `MOVE_EFFECT_X` defined in [`include/constants/battle.h`](#includeconstantsbattleh) and encoded under `SetMoveEffect` in [`src/battle_script_commands.c`](#srcbattle_script_commandsc). These can vary from applying a status, such as `MOVE_EFFECT_PARALYSIS`, or lowering/raising stats etc. The move effect could target the user by setting `self = TRUE`, such as Overheat lowering the user's own Sp. Atk. What's more, definining a `chance`, such as for Thunder Shock, not only limits the effect to applying only `chance`% of the time, but it also turns it into a *secondary effect.* This difference is important because secondary effects are nullified by Sheer Force (which in turn will boost the move's power) and they are blocked by Shield Dust. These two limitations do not apply to *primary effects* which do not a chance field defined and by definition will *always* happen when the move is executed. + +### src/data/battle_move_effects.h +Effects are listed here along with the `battleScript` that governs each one. Said scripts are defined in [`data/battle_scripts_1.s`](#databattle_scripts_1s). The indices/names of the effects (e.g. `EFFECT_FIRST_TURN_ONLY`) are enums defined in [`include/constants/battle_move_effects.h`](#includeconstantsbattle_move_effectsh). + +### include/battle_scripts.h +Contains references to scripts [`data/battle_scripts_1.s`](#databattle_scripts_1s), allowing them to be referenced in C. Any new scripts must be added here. + +### include/constants/battle_move_effects.h +Simply an enum list of possible effects for moves. Any new effects would be added here, with a definition for them (including defining a script) would then also be added to [`src/data/battle_move_effects.h`](#srcdatabattle_move_effectsh). + +### include/constants/battle_string_ids.h +All strings that can be printed in battle have an id that is defined here. The actual message itself would then be defined and assigned to this id in [`src/data/battle_message.c`](#srcbattle_messagec). + +### include/constants/battle.h +A whole range of constants defining battle variables, such as statuses, weather, and move effects. + +### include/constants/moves.h +Where moves are defined (and nothing else). + +**Note:** When adding custom moves, you should add them between the moves from the latest generation and the z moves, then adjust `MOVES_COUNT` accordingly. Adding a move after `MOVES_COUNT` that is neither a Max Move or a Z Move will result in that move's name not being printed when it is used, instead a generic message will be printed. + +## C files +### src/battle_script_commands.c +This is where a lot of the commands referred to in scripts are defined. For example, the `jumpifnotfirstturn` command above is defined by the function `Cmd_jumpifnotfirstturn` and you can see how it works in C. It's possible that any move editing or updating you have in mind can be done with existing commands, but if you wanted to add a new function that could be called in a script above, this is where you would define it. + +### src/battle_util.c +This contains a lot of the "utility" functions used to determine things like a move's dynamic typing or power. It's also where damage calculation takes place, and a lot of that will naturally take a move's effect into account. For example, a move with the effect `EFFECT_SOLAR_BEAM` would have its damage halved in sandstorm. If you wanted to add a move with an effect which gave it variable BP or typing, this is the file you would encode that effect. + +### src/battle_message.c +Contains string defines and functions that print messages during the battle. If you wish to add or edit a move's string, then this is where you would do so. + +### src/battle_main.c +Contains more fundamental functions that control the flow of the battle. Functions here determine move order, dynamic typing, animations, priority, speed calculations and more. + +## Script files +### data/battle_scripts_1.s +Each move's effect is governed by a script defined here. For a simple example, let's look at the script for Fake Out/First Impression: + +``` +BattleScript_EffectFirstTurnOnly:: + attackcanceler + jumpifnotfirstturn BattleScript_FailedFromAtkString + goto BattleScript_EffectHit +``` + +`attackcanceler` is a command that covers all the cases that could cause a move to fail before it's even attempted (e.g. paralysis). And as we can tell from the commands, if it's not the first turn, we go to `BattleScript_FailedFromAtkString` which evidently causes us to print the `attackstring` ("POKEMON used MOVE") then fail ("But it failed!"). Otherwise, we go to the generic "hit" effect which is the same script for moves that just deal damage and nothing else. + +This is the most advanced part of the ROM. There are dozens upon dozens of commands and hundreds of scripts so this guide would go on forever if I were to go into more detail. To learn how these scripts work, it's best to look at a few examples of moves you know. + +### asm/macros/battle_script.inc +The "link" between [`data/battle_scripts_1.s`](#databattle_scripts_1s) and [`src/battle_script_commands.c`](#srcbattle_script_commandsc). Each command is represented by a hex byte which represents its index in the `gBattleScriptingCommandsTable` array at the top of [`src/battle_script_commands.c`](#srcbattle_script_commandsc). However, this file also contains macros which perform combinations of other commands, or just calculations in assembly. In addition to commands, it is also possible to call functions in [`src/battle_script_commands.c`](#srcbattle_script_commandsc) using the `various` (now gradually being deprecated) and the `callnative` functionality. The `various` macros will point to a case under the `Cmd_various` function in [`src/battle_script_commands.c`](#srcbattle_script_commandsc), whereas `callnative` will let you directly call a function in [`src/battle_script_commands.c`](#srcbattle_script_commandsc) by name. + +### data/battle_anim_scripts.s +This is the place where move animations are defined. The array at the top, `gBattleAnims_Moves`, is in move index order and determines which animation goes with which move. + +## Editing a move +### Basic information +To edit a move's basic information, you need only edit the relevant fields in [`src/data/battle_moves.h`](#srcdatamoves_infoh). This will let you change a move's: +- name +- description +- power +- accuracy +- type +- category +- target +- pp +- recoil percentage +- flags +- Z-move effect (for status moves) or overwritting its calculated power (for damaging moves) + +### Changing a move's main effect +To change the main effect of a move to an existing effect, you need only change its `effect` field to one of the options in [`src/data/battle_move_effects.h`](#srcdatabattle_move_effectsh). If you wish to keep the effect but simply modify how it works, you can modify how it plays out on screen by editing its entry in [`data/battle_scripts_1.s`](#databattle_scripts_1s) and any relevant functions in [`src/battle_script_commands.c`](#srcbattle_script_commandsc). To change how a move's dynamic power, accuracy and are calculated, then you need to modify the following functions: + +- For power: `CalcMoveBasePowerAfterModifiers` in [`src/battle_util.c`](#srcbattle_utilc) +- For accuracy: `AccuracyCalcHelper` in [`src/battle_script_commands.c`](#srcbattle_script_commandsc) +- For type: `SetTypeBeforeUsingMove` in [`src/battle_main.c`](#srcbattle_mainc) + +Note: A generic function for calculating category does not currently exist - Photon Geyser's script in [`data/battle_scripts_1.s`](#databattle_scripts_1s) uses a special `callnative` function `BS_SetPhotonGeyserCategory`. + +### Changing a move's additional effects +If you look at the example [here](#srcdatamoves_infoh), you can see that Thunder Shock has an additional effects array that contains a single move effect `MOVE_EFFECT_PARALYSIS` with a 10% chance of applying. Thanks to this field, you can add and remove primary and secondary effects (so long as they are defined by a `MOVE_EFFECT`) to a move without having to change its effect or script. You can also make an effect apply to the attacker rather than the target (for, say, a stat boost) with `.self = TRUE` and you can set the probability to whatever you want with the `chance` field. + +All additional effects with a defined chance (even 100%) are treated as "secondary effects". This means that they are nullified by Sheer Force, blocked by Shield Dust or the Covert Cloak, and have their chance modified by Serene Grace. Additional effects without a chance field (effectively setting it to 0) are treated as "primary effects", which means that they cannot be blocked by the aforementioned items and abilities and their chance to occur cannot be modified; they will *always* happen. + +Each move can have up to 15 additional effects, allowing you to construct monstrosities like this: +``` +[MOVE_POUND] = +{ + .name = COMPOUND_STRING("Pound"), + .description = COMPOUND_STRING( + "Pounds the foe with\n" + "forelegs or tail."), + .effect = EFFECT_HIT, + .power = 40, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 35, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .category = DAMAGE_CATEGORY_PHYSICAL, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_PARALYSIS, + .chance = 10, + },{ + .moveEffect = MOVE_EFFECT_CONFUSION, + .chance = 100, + },{ + .moveEffect = MOVE_EFFECT_FLINCH, + .chance = 30, + },{ + .moveEffect = MOVE_EFFECT_ALL_STATS_UP, + .chance = 40, + .self = TRUE, + },{ + .moveEffect = MOVE_EFFECT_RAPID_SPIN, + },{ + .moveEffect = MOVE_EFFECT_DEF_MINUS_2, + .chance = 50, + }), + .makesContact = TRUE, + .ignoresKingsRock = B_UPDATED_MOVE_FLAGS == GEN_4, + .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .contestComboStarterId = COMBO_STARTER_POUND, + .contestComboMoves = {0} +}, +``` + +**Note: at the moment, additional effects can only be used by damaging moves, not by status moves.** + +## Adding a new move +To add a new move, you need to create an entry in three locations: + +- a define in [`include/constants/moves.h`](#includeconstantsmovesh) +- an info entry in [`src/data/battle_moves.h`](#srcdatamoves_infoh) +- an animation entry in [data/battle_anim_scripts.s](#databattle_anim_scriptss) + +And that's it! You can use an existing animation or effect for your move - or you can add your own, but I'll leave figuring that out to you. + diff --git a/docs/how_to_new_pokemon_1_6_0.md b/docs/how_to_new_pokemon_1_6_0.md new file mode 100644 index 000000000000..d965e48a5f00 --- /dev/null +++ b/docs/how_to_new_pokemon_1_6_0.md @@ -0,0 +1,1860 @@ +This is a modified version of [the original tutorial about adding new Pokémon species available in Pokeemerald's wiki](https://github.com/pret/pokeemerald/wiki/How-to-add-a-new-Pokémon-species). + +Despite the persistent rumors about an incredibly strong third form of Mew hiding somewhere, it actually wasn't possible to catch it... OR WAS IT? +In this tutorial, we will add a new Pokémon species to the game. + +## IMPORTANT: This tutorial applies to Version 1.6.2 and lower. +- [Version 1.9.x](how_to_new_pokemon_1_9_0.md) +- [Version 1.8.x](how_to_new_pokemon_1_8_0.md) +- [Version 1.7.x](how_to_new_pokemon_1_7_0.md) + +# Changes compared to vanilla +The main things that the Expansion changes are listed here. +* Still Front Pics *(`gMonStillFrontPic_YourPokemon`)* and by extension `src/anim_mon_front_pics.c` have been removed. +* `src/data/pokemon/cry_ids.h` doesn't exist anymore. + +# Content +* [The Graphics](#the-graphics) + * [1. Edit the sprites](#1-edit-the-sprites) + * [2. Register the sprites](#2-register-the-sprites) + * [3. Animate the sprites](#3-animate-the-sprites) + * [4. Update the tables](#4-update-the-tables) +* [The Data](#the-data) + * [1. Declare a species constant](#1-declare-a-species-constant) + * [2. Devise a name](#2-devise-a-name) + * [3. Define its Pokédex entry](#3-define-its-pokédex-entry) + * [4. Define its species information](#4-define-its-species-information) + * [5. Delimit the moveset](#5-delimit-the-moveset) + * [6. Define its cry](#6-define-its-cry) + * [7. Define the Evolutions](#7-define-the-evolutions) + * [8. Easy Chat about your Pokémon](#8-easy-chat-about-your-pokémon) + * [9. Make it appear!](#9-make-it-appear) +* [Appendix](#appendix) + * [Available Front Animations](#available-front-animations) + * [Available Back Animations](#available-back-animations) + * [Pokémon ordered by height](#pokémon-ordered-by-height) + * [Pokémon ordered by weight](#pokémon-ordered-by-weight) + * [Making this easier](#making-this-easier) + + +# The Graphics +We will start by copying the folder containing the sprites for Mewtwo and rename it to `mewthree` (pretty meta huh?): +```sh +cp -r graphics/pokemon/mewtwo graphics/pokemon/mewthree +``` +## 1. Edit the sprites +Let's edit the sprites. Start your favourite image editor (I have used GIMP) and change `anim_front.png`, `front.png` and `back.png` to meet your expectations. +__Make sure that you are using the indexed mode and you have limited yourself to 15 colors!__ +Put the RGB values of your colors into `normal.pal` between the first and the last color and the RGB values for the shiny version into `shiny.pal`. +Edit `footprint.png` using two colors in indexed mode, black and white. +Finally, edit `icon.png`. Notice, that the icon will use one of three predefined palettes instead of `normal.pal`. + +## 2. Register the sprites +Sadly, just putting the image files into the graphics folder is not enough. To use the sprites we have to register them, which is kind of tedious. +First, create constants for the file paths. You'll want to add the constants for your species after the constants for the last valid species. +Edit [include/graphics.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/graphics.h): + +```diff + extern const u32 gMonFrontPic_Calyrex[]; ++extern const u32 gMonFrontPic_Mewthree[]; +``` + +```diff + extern const u32 gMonBackPic_Calyrex[]; ++extern const u32 gMonBackPic_Mewthree[]; +``` + +```diff + extern const u32 gMonPalette_Calyrex[]; ++extern const u32 gMonPalette_Mewthree[]; +``` + +```diff + extern const u32 gMonShinyPalette_Calyrex[]; ++extern const u32 gMonShinyPalette_Mewthree[]; +``` + +```diff + //extern const u8 gMonIcon_Calyrex[]; ++extern const u8 gMonIcon_Mewthree[]; +``` + +```diff + extern const u8 gMonFootprint_Calyrex[]; ++extern const u8 gMonFootprint_Mewthree[]; +``` + +Now link the graphic files. + +Edit [src/data/graphics/pokemon.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/pokemon.h): + +```diff + const u32 gMonFrontPic_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/front.4bpp.lz"); ++const u32 gMonFrontPic_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/front.4bpp.lz"); +``` + +```diff + const u32 gMonBackPic_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/back.4bpp.lz"); ++const u32 gMonBackPic_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/back.4bpp.lz"); +``` + +```diff + const u32 gMonPalette_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/normal.gbapal.lz"); ++const u32 gMonPalette_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/normal.gbapal.lz"); +``` + +```diff + const u32 gMonShinyPalette_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/shiny.gbapal.lz"); ++const u32 gMonShinyPalette_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/shiny.gbapal.lz"); +``` + +```diff + //const u8 gMonIcon_Calyrex[] = INCBIN_U8("graphics/pokemon/calyrex/icon.4bpp"); ++const u8 gMonIcon_Mewthree[] = INCBIN_U8("graphics/pokemon/mewthree/icon.4bpp"); +``` + +```diff + const u8 gMonFootprint_Calyrex[] = INCBIN_U8("graphics/pokemon/calyrex/footprint.1bpp"); ++const u8 gMonFootprint_Mewthree[] = INCBIN_U8("graphics/pokemon/mewthree/footprint.1bpp"); +``` + +Please note that Calyrex, the Pokémon that should be above your insertion for the time being, reads a "front.png" sprite instead of an "anim_front.png" sprite. This is because currently, Calyrex lacks a 2nd frame. If the front sprite sheet of your species uses 2 frames, you should use "anim_front". + +It is also worth to mention that Calyrex's icon sprite is commented out simply because it's currently missing. If you do have an icon sprite sheet present inside your species' folder at `graphics/pokemon`, by all means do not comment entries involving the `gMonIcon` constants. + +## 3. Animate the sprites + +You can define the animation order, in which the sprites will be shown. The first number is the sprite index (so 0 or 1) and the second number is the number of frames the sprite will be visible. + +Edit [src/data/pokemon_graphics/front_pic_anims.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon_graphics/front_pic_anims.h): + +```diff +static const union AnimCmd sAnim_Enamorus_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + ++static const union AnimCmd sAnim_Mewthree_1[] = ++{ ++ ANIMCMD_FRAME(1, 30), ++ ANIMCMD_FRAME(0, 20), ++ ANIMCMD_END, ++}; +#endif +``` + +```diff +SINGLE_ANIMATION(Enamorus); ++SINGLE_ANIMATION(Mewthree); +#endif +``` + +```diff + const union AnimCmd *const *const gMonFrontAnimsPtrTable[] = + { + [SPECIES_NONE] = sAnims_None, + [SPECIES_BULBASAUR] = sAnims_Bulbasaur, + ... + [SPECIES_ENAMORUS] = sAnims_Enamorus, ++ [SPECIES_MEWTHREE] = sAnims_Mewthree, +#endif + ... + }; +``` + +Because you are limited to two frames, there are already [predefined front sprite animations](#available-front-animations), describing translations, rotations, scalings or color changes. + +Edit [src/pokemon.c](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/pokemon.c): +```diff + static const u8 sMonFrontAnimIdsTable[] = + { + [SPECIES_BULBASAUR - 1] = ANIM_V_JUMPS_H_JUMPS, + ... + [SPECIES_DEOXYS_SPEED - 1] = ANIM_GROW_VIBRATE, ++ [SPECIES_MEWTHREE - 1] = ANIM_GROW_VIBRATE, + }; +``` + +There are also [predefined back sprite animations](#available-back-animations) for the back sprites as well. + +Edit [src/pokemon_animation.c](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/pokemon_animation.c): + +```diff + static const u8 sSpeciesToBackAnimSet[] = + { + [SPECIES_BULBASAUR] = BACK_ANIM_DIP_RIGHT_SIDE, + ... + [SPECIES_CHIMECHO] = BACK_ANIM_CONVEX_DOUBLE_ARC, ++ [SPECIES_MEWTHREE] = BACK_ANIM_GROW_STUTTER, + }; +``` + +If you want to delay the time between when the Pokémon appears and when the animation starts, you can add an entry to `sMonAnimationDelayTable` + +Edit [src/pokemon.c](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/pokemon.c): + +```diff + static const u8 sMonAnimationDelayTable[NUM_SPECIES - 1] = + { + [SPECIES_BLASTOISE - 1] = 50, + ... + [SPECIES_KYOGRE - 1] = 60, + [SPECIES_RAYQUAZA - 1] = 60, ++ [SPECIES_MEWTHREE - 1] = 15, + }; +``` + +If you want your Pokémon to fly above the ground, you can add an entry to `gEnemyMonElevation`. + +Edit [src/data/pokemon_graphics/enemy_mon_elevation.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon_graphics/enemy_mon_elevation.h): + +```diff + const u8 gEnemyMonElevation[NUM_SPECIES] = + { + [SPECIES_BUTTERFREE] = 10, + ... + [SPECIES_REGIDRAGO] = 5, ++ [SPECIES_MEWTHREE] = 6, + }; +``` + +## 4. Update the tables + +Edit [src/data/pokemon_graphics/front_pic_table.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon_graphics/front_pic_table.h): + +```diff + const struct CompressedSpriteSheet gMonFrontPicTable[] = + { + SPECIES_SPRITE(NONE, gMonFrontPic_CircledQuestionMark), + SPECIES_SPRITE(BULBASAUR, gMonFrontPic_Bulbasaur), + ... + SPECIES_SPRITE(ENAMORUS, gMonFrontPic_Enamorus), ++ SPECIES_SPRITE(MEWTHREE, gMonFrontPic_Mewthree), +#endif + ... +}; +``` + +Edit [src/data/pokemon_graphics/front_pic_coordinates.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon_graphics/front_pic_coordinates.h): + +```diff + const struct MonCoords gMonFrontPicCoords[] = + { + ... + [SPECIES_ENAMORUS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, ++ [SPECIES_MEWTHREE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, +#endif + ... + }; +``` + +Edit [src/data/pokemon_graphics/back_pic_table.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon_graphics/back_pic_table.h): + +```diff + const struct CompressedSpriteSheet gMonBackPicTable[] = + { + SPECIES_SPRITE(NONE, gMonBackPic_CircledQuestionMark), + SPECIES_SPRITE(BULBASAUR, gMonBackPic_Bulbasaur), + ... + SPECIES_SPRITE(ENAMORUS, gMonBackPic_Enamorus), ++ SPECIES_SPRITE(MEWTHREE, gMonBackPic_Mewthree), +#endif + ... + }; +``` + +Edit [src/data/pokemon_graphics/back_pic_coordinates.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon_graphics/back_pic_coordinates.h): + +```diff + const struct MonCoords gMonBackPicCoords[] = + { + ... + [SPECIES_ENAMORUS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, ++ [SPECIES_MEWTHREE] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 1 }, +#endif + ... + }; +``` + +Edit [src/data/pokemon_graphics/footprint_table.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon_graphics/footprint_table.h): + +```diff + const u8 *const gMonFootprintTable[] = + { + [SPECIES_NONE] = gMonFootprint_Bulbasaur, + [SPECIES_BULBASAUR] = gMonFootprint_Bulbasaur, + ... + [SPECIES_CALYREX] = gMonFootprint_Calyrex, ++ [SPECIES_MEWTHREE] = gMonFootprint_Mewthree, +#endif + [SPECIES_EGG] = gMonFootprint_Bulbasaur, + }; +``` + +Edit [src/data/pokemon_graphics/palette_table.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon_graphics/palette_table.h): + +```diff + const struct CompressedSpritePalette gMonPaletteTable[] = + { + SPECIES_PAL(NONE, gMonPalette_CircledQuestionMark), + SPECIES_PAL(BULBASAUR, gMonPalette_Bulbasaur), + ... + SPECIES_PAL(ENAMORUS, gMonPalette_Enamorus), ++ SPECIES_PAL(MEWTHREE, gMonPalette_Mewthree), +#endif + ... +}; +``` + +Edit [src/data/pokemon_graphics/shiny_palette_table.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon_graphics/shiny_palette_table.h): + +```diff +const struct CompressedSpritePalette gMonShinyPaletteTable[] = +{ + SPECIES_SHINY_PAL(NONE, gMonShinyPalette_CircledQuestionMark), + SPECIES_SHINY_PAL(BULBASAUR, gMonShinyPalette_Bulbasaur), + ... + SPECIES_SHINY_PAL(ENAMORUS, gMonShinyPalette_Enamorus), ++ SPECIES_SHINY_PAL(MEWTHREE, gMonShinyPalette_Mewthree), +#endif + ... +}; +``` + +Edit [src/pokemon_icon.c](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/pokemon_icon.c): + +```diff + const u8 *const gMonIconTable[] = + { + [SPECIES_NONE] = gMonIcon_Bulbasaur, + ... + [SPECIES_ENAMORUS] = gMonIcon_Enamorus, ++ [SPECIES_MEWTHREE] = gMonIcon_Mewthree, +#endif + ... + }; +``` + +```diff + const u8 gMonIconPaletteIndices[] = + { + [SPECIES_NONE] = 0, + ... + [SPECIES_ENAMORUS] = 1, ++ [SPECIES_MEWTHREE] = 2, + [SPECIES_VENUSAUR_MEGA] = 1, + ... + }; +``` + +Here, you can choose between the six icon palettes; 0, 1, 2, 3, 4 and 5. All of them located in `graphics/pokemon/icon_palettes`. + +Open an icon sprite and load one of the palettes to find out which palette suits your icon sprite best. + +# The Data + +Our plan is as simple as it is brilliant: clone Mewtwo... and make it even stronger! + +## 1. Declare a species constant + +Our first step towards creating a new digital lifeform is to define its own species constant. + +Edit [include/constants/species.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/species.h): + +```diff + #define SPECIES_NONE 0 + #define SPECIES_BULBASAUR 1 + ... + #define SPECIES_ENAMORUS 905 ++#define SPECIES_MEWTHREE 906 + +-#define FORMS_START SPECIES_ENAMORUS ++#define FORMS_START SPECIES_MEWTHREE +``` + +## 2. Devise a name + + +This name will be displayed in the game. It may be different than the identifier of the species constant, especially when there are special characters involved. + +Edit [src/data/text/species_names.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/text/species_names.h): + +```diff + const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1] = { + [SPECIES_NONE] = _("??????????"), + [SPECIES_BULBASAUR] = _("Bulbasaur"), + ... + [SPECIES_ENAMORUS] = _("Enamorus"), ++ [SPECIES_MEWTHREE] = _("Mewthree"), + }; +``` + +The `_()` underscore function doesn't really exist - it's a convention borrowed from GNU gettext to let `preproc` know this is text to be converted to the custom encoding used by the Gen 3 Pokemon games. + +## 3. Define its Pokédex entry + +First, we will need to add new index constants for its Pokédex entry. The index constants are divided into the Hoenn Pokédex, which contains all Pokémon native to the Hoenn region, and the National Pokédex containing all known Pokémon, which can be received after entering the hall of fame for the first time. + +Edit [include/constants/pokedex.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/pokedex.h): + +```diff +// National Pokedex order +enum { + NATIONAL_DEX_NONE, + // Kanto + NATIONAL_DEX_BULBASAUR, +... + NATIONAL_DEX_ENAMORUS, ++ NATIONAL_DEX_MEWTHREE, +}; +``` + +```diff + #define KANTO_DEX_COUNT NATIONAL_DEX_MEW + #define JOHTO_DEX_COUNT NATIONAL_DEX_CELEBI +#if P_GEN_8_POKEMON == TRUE +- #define NATIONAL_DEX_COUNT NATIONAL_DEX_ENAMORUS ++ #define NATIONAL_DEX_COUNT NATIONAL_DEX_MEWTHREE +``` + +Do keep in mind that if you intend to add your new species to the Hoenn Dex, you'll also want to add a `HOENN_DEX` constant for it, like this: + +```diff +// Hoenn Pokedex order +enum { + HOENN_DEX_NONE, + HOENN_DEX_TREECKO, +... + HOENN_DEX_DEOXYS, ++ HOENN_DEX_MEWTHREE, +... +}; +``` + +```diff +- #define HOENN_DEX_COUNT (HOENN_DEX_DEOXYS + 1) ++ #define HOENN_DEX_COUNT (HOENN_DEX_MEWTHREE + 1) +``` + +Edit [src/pokemon.c](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/pokemon.c): + + +```diff + // Assigns all species to the National Dex Index (Summary No. for National Dex) + static const u16 sSpeciesToNationalPokedexNum[NUM_SPECIES - 1] = + { + SPECIES_TO_NATIONAL(ENAMORUS), ++ SPECIES_TO_NATIONAL(MEWTHREE), + }; +``` + +Just like before, if we want to insert our new species in the Hoenn Dex, we'll have to do a few extra steps: + +```diff + // Assigns all species to the Hoenn Dex Index (Summary No. for Hoenn Dex) + static const u16 sSpeciesToHoennPokedexNum[NUM_SPECIES - 1] = + { + SPECIES_TO_HOENN(TREECKO), + ... + SPECIES_TO_HOENN(DEOXYS), ++ SPECIES_TO_HOENN(MEWTHREE), + }; +``` + +```diff + const u16 gHoennToNationalOrder[NUM_SPECIES] = // Assigns Hoenn Dex Pokémon (Using National Dex Index) + { + HOENN_TO_NATIONAL(TREECKO), + ... + HOENN_TO_NATIONAL(DEOXYS), ++ HOENN_TO_NATIONAL(MEWTHREE), + }; +``` + +Now we can define the actual text of the Pokédex entry. + +Append to [src/data/pokemon/pokedex_text.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/pokedex_text.h): + +```diff + const u8 gEnamorusPokedexText[] = _( + "Its arrival brings an end to the\n" + "winter. According to legend, this\n" + "Pokémon's love gives rise to the\n" + "budding of fresh life across the land."); + ++const u8 gMewthreePokedexText[] = _( ++ "The rumors became true.\n" ++ "This is Mews final form.\n" ++ "Its power level is over 9000.\n" ++ "Has science gone too far?"); +``` + +Finally, we will add the Pokédex entry for Mewthree and link the text to it. + +Edit [src/data/pokemon/pokedex_entries.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/pokedex_entries.h): + +```diff + const struct PokedexEntry gPokedexEntries[] = + { + ... + [NATIONAL_DEX_ENAMORUS] = + { + .categoryName = _("Love-Hate"), + .height = 16, + .weight = 480, + .description = gEnamorusPokedexText, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, + }, + ++ [NATIONAL_DEX_MEWTHREE] = ++ { ++ .categoryName = _("NEW SPECIES"), ++ .height = 15, ++ .weight = 330, ++ .description = gMewthreePokedexText, ++ .pokemonScale = 256, ++ .pokemonOffset = 0, ++ .trainerScale = 290, ++ .trainerOffset = 2, ++ }, + #endif + }; +``` + +The values `pokemonScale`, `pokemonOffset`, `trainerScale` and `trainerOffset` are used for the height comparison figure in the Pokédex. Height and weight are specified in meters and kilograms respectively, while the last digit is the first decimal place. + +In Pokémon Emerald, you can sort the Pokédex by name, height or weight. Apparently, the Pokémon order is hardcoded in the game files and not calculated from their data. Therefore we have to include our new Pokémon species at the right places. While the correct position for the alphabetical order is easy to find, it can become quite tedious for height and weight. To find the right position for your Pokémon, you may look at the tables sorted by [height](#pokémon-ordered-by-height) and [weight](#pokémon-ordered-by-weight) respectively in the appendix. + +Edit [src/data/pokemon/pokedex_orders.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/pokedex_orders.h): + +```diff + const u16 gPokedexOrder_Alphabetical[] = + { + ... + NATIONAL_DEX_MEW, ++ NATIONAL_DEX_MEWTHREE, + NATIONAL_DEX_MEWTWO, + ... + }; + + const u16 gPokedexOrder_Weight[] = + { + ... + NATIONAL_DEX_ESCAVALIER, + NATIONAL_DEX_FRILLISH, + NATIONAL_DEX_DURANT, + NATIONAL_DEX_CINDERACE, ++ NATIONAL_DEX_MEWTHREE, + //NATIONAL_DEX_PERSIAN, // Alolan Form + NATIONAL_DEX_DUGTRIO, + ... + }; + + const u16 gPokedexOrder_Height[] = + { + ... + NATIONAL_DEX_ZERAORA, + NATIONAL_DEX_GRIMMSNARL, + NATIONAL_DEX_MR_RIME, ++ NATIONAL_DEX_MEWTHREE, + // 5'03" / 1.6m + ... + }; +``` + +## 4. Define its species information +Edit [src/data/pokemon/species_info.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/species_info.h): +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + [SPECIES_NONE] = {0}, + ... + + [SPECIES_ENAMORUS] = + { + .baseHP = 74, + .baseAttack = 115, + .baseDefense = 70, + .baseSpeed = 106, + .baseSpAttack = 135, + .baseSpDefense = 80, + .types = { TYPE_FAIRY, TYPE_FLYING}, + .catchRate = 3, + .expYield = 261, + .evYield_SpAttack = 3, + .genderRatio = MON_FEMALE, + .eggCycles = 120, + .friendship = 90, + .growthRate = GROWTH_SLOW, + .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, + .abilities = {ABILITY_HEALER, ABILITY_NONE, ABILITY_CONTRARY}, + .bodyColor = BODY_COLOR_PINK, + .noFlip = FALSE, + .flags = SPECIES_FLAG_LEGENDARY, + }, + ++ [SPECIES_MEWTHREE] = ++ { ++ .baseHP = 106, ++ .baseAttack = 150, ++ .baseDefense = 70, ++ .baseSpeed = 140, ++ .baseSpAttack = 194, ++ .baseSpDefense = 120, ++ .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, ++ .catchRate = 3, ++ .expYield = 255, ++ .evYield_SpAttack = 3, ++ .genderRatio = MON_GENDERLESS, ++ .eggCycles = 120, ++ .friendship = 0, ++ .growthRate = GROWTH_SLOW, ++ .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, ++ .abilities = {ABILITY_INSOMNIA, ABILITY_NONE}, ++ .safariZoneFleeRate = 0, ++ .bodyColor = BODY_COLOR_PURPLE, ++ .noFlip = FALSE, ++ }, +#endif + }; +``` + +The `.` is the structure reference operator in C to refer to the member object of the structure SpeciesInfo. + +Notice how I also set the ability to `ABILITY_INSOMNIA`, so our little monster doesn't even need to sleep anymore. You can find the abilities for example here [include/constants/abilities.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/abilities.h) and here [src/data/text/abilities.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/text/abilities.h). + +You can also incorporate a 3rd ability to your species, which is intended to be a [Hidden Ability](https://bulbapedia.bulbagarden.net/wiki/Ability#Hidden_Abilities)! + +## 5. Delimit the moveset + +Let's begin with the moves that can be learned by leveling up. + +Append to [src/data/pokemon/level_up_learnsets.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/level_up_learnsets.h): + +```diff +static const struct LevelUpMove sEnamorusLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_TACKLE), + LEVEL_UP_MOVE( 7, MOVE_BITE), + LEVEL_UP_MOVE(11, MOVE_TWISTER), + LEVEL_UP_MOVE(14, MOVE_DRAINING_KISS), + LEVEL_UP_MOVE(22, MOVE_IRON_DEFENSE), + LEVEL_UP_MOVE(31, MOVE_EXTRASENSORY), + LEVEL_UP_MOVE(41, MOVE_CRUNCH), + LEVEL_UP_MOVE(47, MOVE_MOONBLAST), + LEVEL_UP_MOVE( 1, MOVE_SPRINGTIDE_STORM), + LEVEL_UP_END +}; + ++static const struct LevelUpMove sMewthreeLevelUpLearnset[] = { ++ LEVEL_UP_MOVE( 1, MOVE_CONFUSION), ++ LEVEL_UP_MOVE( 1, MOVE_DISABLE), ++ LEVEL_UP_MOVE(11, MOVE_BARRIER), ++ LEVEL_UP_MOVE(22, MOVE_SWIFT), ++ LEVEL_UP_MOVE(33, MOVE_PSYCH_UP), ++ LEVEL_UP_MOVE(44, MOVE_FUTURE_SIGHT), ++ LEVEL_UP_MOVE(55, MOVE_MIST), ++ LEVEL_UP_MOVE(66, MOVE_PSYCHIC), ++ LEVEL_UP_MOVE(77, MOVE_AMNESIA), ++ LEVEL_UP_MOVE(88, MOVE_RECOVER), ++ LEVEL_UP_MOVE(99, MOVE_SAFEGUARD), ++ LEVEL_UP_END ++}; +#endif +``` + +Again, we need to register the learnset. + +Edit [src/data/pokemon/level_up_learnset_pointers.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/level_up_learnset_pointers.h): + +```diff + const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = + { + [SPECIES_NONE] = sBulbasaurLevelUpLearnset, + [SPECIES_BULBASAUR] = sBulbasaurLevelUpLearnset, + ... + [SPECIES_ENAMORUS] = sEnamorusLevelUpLearnset, ++ [SPECIES_MEWTHREE] = sMewthreeLevelUpLearnset, + }; +``` + +Next we need to specify which moves can be taught via TM, HM, or Move Tutor. + +Append to [src/data/pokemon/teachable_learnsets.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/teachable_learnsets.h): + +```diff +static const u16 sEnamorusTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + ++static const u16 sMewthreeTeachableLearnset[] = { ++ MOVE_FOCUS_PUNCH, ++ MOVE_WATER_PULSE, ++ MOVE_CALM_MIND, ++ MOVE_TOXIC, ++ MOVE_HAIL, ++ MOVE_BULK_UP, ++ MOVE_HIDDEN_POWER, ++ MOVE_SUNNY_DAY, ++ MOVE_TAUNT, ++ MOVE_ICE_BEAM, ++ MOVE_BLIZZARD, ++ MOVE_HYPER_BEAM, ++ MOVE_LIGHT_SCREEN, ++ MOVE_PROTECT, ++ MOVE_RAIN_DANCE, ++ MOVE_SAFEGUARD, ++ MOVE_FRUSTRATION, ++ MOVE_SOLAR_BEAM, ++ MOVE_IRON_TAIL, ++ MOVE_THUNDERBOLT, ++ MOVE_THUNDER, ++ MOVE_EARTHQUAKE, ++ MOVE_RETURN, ++ MOVE_PSYCHIC, ++ MOVE_SHADOW_BALL, ++ MOVE_BRICK_BREAK, ++ MOVE_DOUBLE_TEAM, ++ MOVE_REFLECT, ++ MOVE_SHOCK_WAVE, ++ MOVE_FLAMETHROWER, ++ MOVE_SANDSTORM, ++ MOVE_FIRE_BLAST, ++ MOVE_ROCK_TOMB, ++ MOVE_AERIAL_ACE, ++ MOVE_TORMENT, ++ MOVE_FACADE, ++ MOVE_SECRET_POWER, ++ MOVE_REST, ++ MOVE_SKILL_SWAP, ++ MOVE_SNATCH, ++ MOVE_STRENGTH, ++ MOVE_FLASH, ++ MOVE_ROCK_SMASH, ++ MOVE_MEGA_PUNCH, ++ MOVE_MEGA_KICK, ++ MOVE_BODY_SLAM, ++ MOVE_DOUBLE_EDGE, ++ MOVE_COUNTER, ++ MOVE_SEISMIC_TOSS, ++ MOVE_MIMIC, ++ MOVE_METRONOME, ++ MOVE_DREAM_EATER, ++ MOVE_THUNDER_WAVE, ++ MOVE_SUBSTITUTE, ++ MOVE_DYNAMIC_PUNCH, ++ MOVE_PSYCH_UP, ++ MOVE_SNORE, ++ MOVE_ICY_WIND, ++ MOVE_ENDURE, ++ MOVE_MUD_SLAP, ++ MOVE_ICE_PUNCH, ++ MOVE_SWAGGER, ++ MOVE_SLEEP_TALK, ++ MOVE_SWIFT, ++ MOVE_THUNDER_PUNCH, ++ MOVE_FIRE_PUNCH, ++ MOVE_UNAVAILABLE, ++}; +#endif +``` + +Once more, we need to register the learnset. + +Edit [src/data/pokemon/teachable_learnset_pointers.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/teachable_learnset_pointers.h): + +```diff +const u16 *const gTeachableLearnsets[NUM_SPECIES] = + { + [SPECIES_NONE] = sBulbasaurTeachableLearnset, + [SPECIES_BULBASAUR] = sBulbasaurTeachableLearnset, + ... + [SPECIES_ENAMORUS] = sEnamorusTeachableLearnset, ++ [SPECIES_MEWTHREE] = sMewthreeTeachableLearnset, + }; +``` + +If you want to create a Pokémon which can breed, you will need to edit [src/data/pokemon/egg_moves.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/egg_moves.h). + +## 6. Define its cry +First run these command to copy the Mewtwo sound files: +```sh +cp -r sound/direct_sound_samples/cries/mewtwo.bin sound/direct_sound_samples/cries/mewthree.bin +cp -r sound/direct_sound_samples/cries/mewtwo.aif sound/direct_sound_samples/cries/mewthree.aif +``` + +In [sound/direct_sound_data.inc](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/sound/direct_sound_data.inc). + +```diff + .align 2 +Cry_Enamorus:: + .incbin "sound/direct_sound_samples/cries/enamorus.bin" + ++ .align 2 ++Cry_Mewthree:: ++ .incbin "sound/direct_sound_samples/cries/mewthree.bin" + +.endif +``` + +And linking it in [sound/cry_tables.inc](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/sound/cry_tables.inc). `cry_reverse` in particular is for reversed cries used by moves such as Growl. + +```diff +... + cry Cry_Enamorus ++ cry Cry_Mewthree +.else +``` + +```diff + cry_reverse Cry_Overqwil ++ cry_reverse Cry_Mewthree +.else +``` + +Mon cries are 10512Hz. Make sure to put the aif file in the directory [sound/direct_sound_samples/cries](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/sound/direct_sound_samples/cries) + +Higher frequencies may be ruined by compression. To have the cries uncompressed, follow [this](https://github.com/ShinyDragonHunter/pokefirereddx/commit/71ba1c193082817afbed9a8a0ba1d123fffb6f36#diff-e1823f56db7c2344fb9ee843e3c42797f72fa1e108e13a7080018e1db545322eR116) , then clear out the old sound bins + +## 7. Define the Evolutions + +We want Mewthree to evolve from Mewtwo by reaching level 100. + +Edit [src/data/pokemon/evolution.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/evolution.h): + +```diff + [SPECIES_SNEASEL_HISUIAN] = {{EVO_ITEM_DAY, ITEM_RAZOR_CLAW, SPECIES_SNEASLER}, + {EVO_ITEM_HOLD_DAY, ITEM_RAZOR_CLAW, SPECIES_SNEASLER}}, ++ [SPECIES_MEWTWO] = {{EVO_LEVEL, 100, SPECIES_MEWTHREE}}, +#endif +``` + +## 8. Easy Chat about your Pokémon + + +Edit [src/data/easy_chat/easy_chat_words_by_letter.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/easy_chat/easy_chat_words_by_letter.h): + +```diff + const u16 gEasyChatWordsByLetter_M[] = { + EC_MOVE2(MACH_PUNCH), + ... + EC_POKEMON_NATIONAL(MEW), ++ EC_POKEMON_NATIONAL(MEWTHREE), + EC_POKEMON_NATIONAL(MEWTWO), + ... + EC_WORD_MYSTERY, + }; +``` + +## 9. Make it appear! + + +Now Mewthree really does slumber in the games code - but we won't know until we make him appear somewhere! The legend tells that Mewthree is hiding somewhere in Petalburg Woods... + +Edit [src/data/wild_encounters.json](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/wild_encounters.json): + +```diff + { + "map": "MAP_PETALBURG_WOODS", + "base_label": "gPetalburgWoods", + "land_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WURMPLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SHROOMISH" + }, + { +- "min_level": 6, +- "max_level": 6, +- "species": "SPECIES_POOCHYENA" ++ "min_level": 5, ++ "max_level": 5, ++ "species": "SPECIES_MEWTHREE" + }, + ... + } +``` + +Congratulations, you have created your own personal pocket monster! You may call yourself a mad scientist now. + +# Appendix +## Available Front Animations +_Only 65 are used in-game, but you can use any animation from this list._ +1. ANIM_V_SQUISH_AND_BOUNCE +2. ANIM_CIRCULAR_STRETCH_TWICE +3. ANIM_H_VIBRATE +4. ANIM_H_SLIDE +5. ANIM_V_SLIDE +6. ANIM_BOUNCE_ROTATE_TO_SIDES +7. ANIM_V_JUMPS_H_JUMPS +8. ANIM_ROTATE_TO_SIDES +9. ANIM_ROTATE_TO_SIDES_TWICE +10. ANIM_GROW_VIBRATE +11. ANIM_ZIGZAG_FAST +12. ANIM_SWING_CONCAVE +13. ANIM_SWING_CONCAVE_FAST +14. ANIM_SWING_CONVEX +15. ANIM_SWING_CONVEX_FAST +16. ANIM_H_SHAKE +17. ANIM_V_SHAKE +18. ANIM_CIRCULAR_VIBRATE +19. ANIM_TWIST +20. ANIM_SHRINK_GROW +21. ANIM_CIRCLE_C_CLOCKWISE +22. ANIM_GLOW_BLACK +23. ANIM_H_STRETCH +24. ANIM_V_STRETCH +25. ANIM_RISING_WOBBLE +26. ANIM_V_SHAKE_TWICE +27. ANIM_TIP_MOVE_FORWARD +28. ANIM_H_PIVOT +29. ANIM_V_SLIDE_WOBBLE +30. ANIM_H_SLIDE_WOBBLE +31. ANIM_V_JUMPS_BIG +32. ANIM_SPIN_LONG +33. ANIM_GLOW_ORANGE +34. ANIM_GLOW_RED +35. ANIM_GLOW_BLUE +36. ANIM_GLOW_YELLOW +37. ANIM_GLOW_PURPLE +38. ANIM_BACK_AND_LUNGE +39. ANIM_BACK_FLIP +40. ANIM_FLICKER +41. ANIM_BACK_FLIP_BIG +42. ANIM_FRONT_FLIP +43. ANIM_TUMBLING_FRONT_FLIP +44. ANIM_FIGURE_8 +45. ANIM_FLASH_YELLOW +46. ANIM_SWING_CONCAVE_FAST_SHORT +47. ANIM_SWING_CONVEX_FAST_SHORT +48. ANIM_ROTATE_UP_SLAM_DOWN +49. ANIM_DEEP_V_SQUISH_AND_BOUNCE +50. ANIM_H_JUMPS +51. ANIM_H_JUMPS_V_STRETCH +52. ANIM_ROTATE_TO_SIDES_FAST +53. ANIM_ROTATE_UP_TO_SIDES +54. ANIM_FLICKER_INCREASING +55. ANIM_TIP_HOP_FORWARD +56. ANIM_PIVOT_SHAKE +57. ANIM_TIP_AND_SHAKE +58. ANIM_VIBRATE_TO_CORNERS +59. ANIM_GROW_IN_STAGES +60. ANIM_V_SPRING +61. ANIM_V_REPEATED_SPRING +62. ANIM_SPRING_RISING +63. ANIM_H_SPRING +64. ANIM_H_REPEATED_SPRING_SLOW +65. ANIM_H_SLIDE_SHRINK +66. ANIM_LUNGE_GROW +67. ANIM_CIRCLE_INTO_BG +68. ANIM_RAPID_H_HOPS +69. ANIM_FOUR_PETAL +70. ANIM_V_SQUISH_AND_BOUNCE_SLOW +71. ANIM_H_SLIDE_SLOW +72. ANIM_V_SLIDE_SLOW +73. ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL +74. ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW +75. ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL_SLOW +76. ANIM_ZIGZAG_SLOW +77. ANIM_H_SHAKE_SLOW +78. ANIM_V_SHAKE_SLOW +79. ANIM_TWIST_TWICE +80. ANIM_CIRCLE_C_CLOCKWISE_SLOW +81. ANIM_V_SHAKE_TWICE_SLOW +82. ANIM_V_SLIDE_WOBBLE_SMALL +83. ANIM_V_JUMPS_SMALL +84. ANIM_SPIN +85. ANIM_TUMBLING_FRONT_FLIP_TWICE +86. ANIM_DEEP_V_SQUISH_AND_BOUNCE_TWICE +87. ANIM_H_JUMPS_V_STRETCH_TWICE +88. ANIM_V_SHAKE_BACK +89. ANIM_V_SHAKE_BACK_SLOW +90. ANIM_V_SHAKE_H_SLIDE_SLOW +91. ANIM_V_STRETCH_BOTH_ENDS_SLOW +92. ANIM_H_STRETCH_FAR_SLOW +93. ANIM_V_SHAKE_LOW_TWICE +94. ANIM_H_SHAKE_FAST +95. ANIM_H_SLIDE_FAST +96. ANIM_H_VIBRATE_FAST +97. ANIM_H_VIBRATE_FASTEST +98. ANIM_V_SHAKE_BACK_FAST +99. ANIM_V_SHAKE_LOW_TWICE_SLOW +100. ANIM_V_SHAKE_LOW_TWICE_FAST +101. ANIM_CIRCLE_C_CLOCKWISE_LONG +102. ANIM_GROW_STUTTER_SLOW +103. ANIM_V_SHAKE_H_SLIDE +104. ANIM_V_SHAKE_H_SLIDE_FAST +105. ANIM_TRIANGLE_DOWN_SLOW +106. ANIM_TRIANGLE_DOWN +107. ANIM_TRIANGLE_DOWN_TWICE +108. ANIM_GROW +109. ANIM_GROW_TWICE +110. ANIM_H_SPRING_FAST +111. ANIM_H_SPRING_SLOW +112. ANIM_H_REPEATED_SPRING_FAST +113. ANIM_H_REPEATED_SPRING +114. ANIM_SHRINK_GROW_FAST +115. ANIM_SHRINK_GROW_SLOW +116. ANIM_V_STRETCH_BOTH_ENDS +117. ANIM_V_STRETCH_BOTH_ENDS_TWICE +118. ANIM_H_STRETCH_FAR_TWICE +119. ANIM_H_STRETCH_FAR +120. ANIM_GROW_STUTTER_TWICE +121. ANIM_GROW_STUTTER +122. ANIM_CONCAVE_ARC_LARGE_SLOW +123. ANIM_CONCAVE_ARC_LARGE +124. ANIM_CONCAVE_ARC_LARGE_TWICE +125. ANIM_CONVEX_DOUBLE_ARC_SLOW +126. ANIM_CONVEX_DOUBLE_ARC +127. ANIM_CONVEX_DOUBLE_ARC_TWICE +128. ANIM_CONCAVE_ARC_SMALL_SLOW +129. ANIM_CONCAVE_ARC_SMALL +130. ANIM_CONCAVE_ARC_SMALL_TWICE +131. ANIM_H_DIP +132. ANIM_H_DIP_FAST +133. ANIM_H_DIP_TWICE +134. ANIM_SHRINK_GROW_VIBRATE_FAST +135. ANIM_SHRINK_GROW_VIBRATE +136. ANIM_SHRINK_GROW_VIBRATE_SLOW +137. ANIM_JOLT_RIGHT_FAST +138. ANIM_JOLT_RIGHT +139. ANIM_JOLT_RIGHT_SLOW +140. ANIM_SHAKE_FLASH_YELLOW_FAST +141. ANIM_SHAKE_FLASH_YELLOW +142. ANIM_SHAKE_FLASH_YELLOW_SLOW +143. ANIM_SHAKE_GLOW_RED_FAST +144. ANIM_SHAKE_GLOW_RED +145. ANIM_SHAKE_GLOW_RED_SLOW +146. ANIM_SHAKE_GLOW_GREEN_FAST +147. ANIM_SHAKE_GLOW_GREEN +148. ANIM_SHAKE_GLOW_GREEN_SLOW +149. ANIM_SHAKE_GLOW_BLUE_FAST +150. ANIM_SHAKE_GLOW_BLUE +151. ANIM_SHAKE_GLOW_BLUE_SLOW + +## Available Back Animations +1. BACK_ANIM_NONE +2. BACK_ANIM_H_VIBRATE +3. BACK_ANIM_H_SLIDE +4. BACK_ANIM_H_SPRING +5. BACK_ANIM_H_SPRING_REPEATED +6. BACK_ANIM_SHRINK_GROW +7. BACK_ANIM_GROW +8. BACK_ANIM_CIRCLE_COUNTERCLOCKWISE +9. BACK_ANIM_H_SHAKE +10. BACK_ANIM_V_SHAKE +11. BACK_ANIM_V_SHAKE_H_SLIDE +12. BACK_ANIM_V_STRETCH +13. BACK_ANIM_H_STRETCH +14. BACK_ANIM_GROW_STUTTER +15. BACK_ANIM_V_SHAKE_LOW +16. BACK_ANIM_TRIANGLE_DOWN +17. BACK_ANIM_CONCAVE_ARC_LARGE +18. BACK_ANIM_CONVEX_DOUBLE_ARC +19. BACK_ANIM_CONCAVE_ARC_SMALL +20. BACK_ANIM_DIP_RIGHT_SIDE +21. BACK_ANIM_SHRINK_GROW_VIBRATE +22. BACK_ANIM_JOLT_RIGHT +23. BACK_ANIM_SHAKE_FLASH_YELLOW +24. BACK_ANIM_SHAKE_GLOW_RED +25. BACK_ANIM_SHAKE_GLOW_GREEN +26. BACK_ANIM_SHAKE_GLOW_BLUE + +## Pokémon ordered by height +| Pokemon | height (m) | +| :------ | ---------: | +| Diglett | 0.2 | +| Natu | 0.2 | +| Azurill | 0.2 | +| Caterpie | 0.3 | +| Weedle | 0.3 | +| Pidgey | 0.3 | +| Rattata | 0.3 | +| Spearow | 0.3 | +| Paras | 0.3 | +| Magnemite | 0.3 | +| Shellder | 0.3 | +| Ditto | 0.3 | +| Eevee | 0.3 | +| Pichu | 0.3 | +| Cleffa | 0.3 | +| Igglybuff | 0.3 | +| Togepi | 0.3 | +| Sunkern | 0.3 | +| Wurmple | 0.3 | +| Taillow | 0.3 | +| Roselia | 0.3 | +| Castform | 0.3 | +| Jirachi | 0.3 | +| Pikachu | 0.4 | +| Nidoran_f | 0.4 | +| Meowth | 0.4 | +| Geodude | 0.4 | +| Krabby | 0.4 | +| Exeggcute | 0.4 | +| Cubone | 0.4 | +| Horsea | 0.4 | +| Omanyte | 0.4 | +| Mew | 0.4 | +| Bellossom | 0.4 | +| Marill | 0.4 | +| Hoppip | 0.4 | +| Wooper | 0.4 | +| Swinub | 0.4 | +| Smoochum | 0.4 | +| Torchic | 0.4 | +| Mudkip | 0.4 | +| Zigzagoon | 0.4 | +| Ralts | 0.4 | +| Shroomish | 0.4 | +| Aron | 0.4 | +| Plusle | 0.4 | +| Minun | 0.4 | +| Gulpin | 0.4 | +| Cacnea | 0.4 | +| Swablu | 0.4 | +| Barboach | 0.4 | +| Clamperl | 0.4 | +| Squirtle | 0.5 | +| Nidoran_m | 0.5 | +| Jigglypuff | 0.5 | +| Oddish | 0.5 | +| Mankey | 0.5 | +| Voltorb | 0.5 | +| Kabuto | 0.5 | +| Cyndaquil | 0.5 | +| Spinarak | 0.5 | +| Chinchou | 0.5 | +| Murkrow | 0.5 | +| Unown | 0.5 | +| Qwilfish | 0.5 | +| Phanpy | 0.5 | +| Treecko | 0.5 | +| Poochyena | 0.5 | +| Linoone | 0.5 | +| Lotad | 0.5 | +| Seedot | 0.5 | +| Surskit | 0.5 | +| Nincada | 0.5 | +| Sableye | 0.5 | +| Torkoal | 0.5 | +| Baltoy | 0.5 | +| Charmander | 0.6 | +| Kakuna | 0.6 | +| Sandshrew | 0.6 | +| Clefairy | 0.6 | +| Vulpix | 0.6 | +| Poliwag | 0.6 | +| Koffing | 0.6 | +| Goldeen | 0.6 | +| Totodile | 0.6 | +| Togetic | 0.6 | +| Mareep | 0.6 | +| Skiploom | 0.6 | +| Pineco | 0.6 | +| Snubbull | 0.6 | +| Shuckle | 0.6 | +| Teddiursa | 0.6 | +| Corsola | 0.6 | +| Remoraid | 0.6 | +| Houndour | 0.6 | +| Porygon2 | 0.6 | +| Elekid | 0.6 | +| Larvitar | 0.6 | +| Celebi | 0.6 | +| Silcoon | 0.6 | +| Wingull | 0.6 | +| Whismur | 0.6 | +| Skitty | 0.6 | +| Mawile | 0.6 | +| Meditite | 0.6 | +| Electrike | 0.6 | +| Illumise | 0.6 | +| Corphish | 0.6 | +| Feebas | 0.6 | +| Shuppet | 0.6 | +| Chimecho | 0.6 | +| Wynaut | 0.6 | +| Luvdisc | 0.6 | +| Bagon | 0.6 | +| Beldum | 0.6 | +| Bulbasaur | 0.7 | +| Metapod | 0.7 | +| Raticate | 0.7 | +| Dugtrio | 0.7 | +| Growlithe | 0.7 | +| Bellsprout | 0.7 | +| Hoothoot | 0.7 | +| Misdreavus | 0.7 | +| Slugma | 0.7 | +| Tyrogue | 0.7 | +| Magby | 0.7 | +| Marshtomp | 0.7 | +| Cascoon | 0.7 | +| Swellow | 0.7 | +| Volbeat | 0.7 | +| Numel | 0.7 | +| Spoink | 0.7 | +| Trapinch | 0.7 | +| Anorith | 0.7 | +| Snorunt | 0.7 | +| Raichu | 0.8 | +| Nidorina | 0.8 | +| Zubat | 0.8 | +| Gloom | 0.8 | +| Psyduck | 0.8 | +| Machop | 0.8 | +| Farfetchd | 0.8 | +| Staryu | 0.8 | +| Jolteon | 0.8 | +| Porygon | 0.8 | +| Sentret | 0.8 | +| Flaaffy | 0.8 | +| Azumarill | 0.8 | +| Jumpluff | 0.8 | +| Aipom | 0.8 | +| Sunflora | 0.8 | +| Magcargo | 0.8 | +| Kirlia | 0.8 | +| Masquerain | 0.8 | +| Slakoth | 0.8 | +| Ninjask | 0.8 | +| Shedinja | 0.8 | +| Carvanha | 0.8 | +| Duskull | 0.8 | +| Spheal | 0.8 | +| Nidorino | 0.9 | +| Abra | 0.9 | +| Tentacool | 0.9 | +| Grimer | 0.9 | +| Magikarp | 0.9 | +| Flareon | 0.9 | +| Chikorita | 0.9 | +| Quilava | 0.9 | +| Espeon | 0.9 | +| Sneasel | 0.9 | +| Octillery | 0.9 | +| Delibird | 0.9 | +| Grovyle | 0.9 | +| Combusken | 0.9 | +| Lairon | 0.9 | +| Grumpig | 0.9 | +| Whiscash | 0.9 | +| Ivysaur | 1.0 | +| Wartortle | 1.0 | +| Beedrill | 1.0 | +| Sandslash | 1.0 | +| Wigglytuff | 1.0 | +| Parasect | 1.0 | +| Venonat | 1.0 | +| Persian | 1.0 | +| Primeape | 1.0 | +| Poliwhirl | 1.0 | +| Weepinbell | 1.0 | +| Graveler | 1.0 | +| Ponyta | 1.0 | +| Magneton | 1.0 | +| Drowzee | 1.0 | +| Marowak | 1.0 | +| Rhyhorn | 1.0 | +| Tangela | 1.0 | +| Vaporeon | 1.0 | +| Omastar | 1.0 | +| Ledyba | 1.0 | +| Umbreon | 1.0 | +| Mightyena | 1.0 | +| Beautifly | 1.0 | +| Nuzleaf | 1.0 | +| Loudred | 1.0 | +| Makuhita | 1.0 | +| Nosepass | 1.0 | +| Lunatone | 1.0 | +| Lileep | 1.0 | +| Kecleon | 1.0 | +| Relicanth | 1.0 | +| Charmeleon | 1.1 | +| Butterfree | 1.1 | +| Pidgeotto | 1.1 | +| Ninetales | 1.1 | +| Seel | 1.1 | +| Chansey | 1.1 | +| Starmie | 1.1 | +| Electabuzz | 1.1 | +| Croconaw | 1.1 | +| Ariados | 1.1 | +| Politoed | 1.1 | +| Gligar | 1.1 | +| Piloswine | 1.1 | +| Donphan | 1.1 | +| Delcatty | 1.1 | +| Spinda | 1.1 | +| Vibrava | 1.1 | +| Altaria | 1.1 | +| Crawdaunt | 1.1 | +| Banette | 1.1 | +| Sealeo | 1.1 | +| Shelgon | 1.1 | +| Fearow | 1.2 | +| Vileplume | 1.2 | +| Slowpoke | 1.2 | +| Muk | 1.2 | +| Electrode | 1.2 | +| Lickitung | 1.2 | +| Weezing | 1.2 | +| Seadra | 1.2 | +| Bayleef | 1.2 | +| Lanturn | 1.2 | +| Sudowoodo | 1.2 | +| Yanma | 1.2 | +| Forretress | 1.2 | +| Smeargle | 1.2 | +| Miltank | 1.2 | +| Pupitar | 1.2 | +| Dustox | 1.2 | +| Lombre | 1.2 | +| Pelipper | 1.2 | +| Breloom | 1.2 | +| Solrock | 1.2 | +| Absol | 1.2 | +| Metang | 1.2 | +| Nidoqueen | 1.3 | +| Clefable | 1.3 | +| Poliwrath | 1.3 | +| Kadabra | 1.3 | +| Gastly | 1.3 | +| Kingler | 1.3 | +| Seaking | 1.3 | +| Mr_mime | 1.3 | +| Magmar | 1.3 | +| Kabutops | 1.3 | +| Wobbuffet | 1.3 | +| Shiftry | 1.3 | +| Medicham | 1.3 | +| Cacturne | 1.3 | +| Zangoose | 1.3 | +| Nidoking | 1.4 | +| Golem | 1.4 | +| Doduo | 1.4 | +| Hitmonchan | 1.4 | +| Jynx | 1.4 | +| Tauros | 1.4 | +| Ledian | 1.4 | +| Ampharos | 1.4 | +| Quagsire | 1.4 | +| Granbull | 1.4 | +| Houndoom | 1.4 | +| Stantler | 1.4 | +| Hitmontop | 1.4 | +| Vigoroth | 1.4 | +| Walrein | 1.4 | +| Latias | 1.4 | +| Pidgeot | 1.5 | +| Venomoth | 1.5 | +| Alakazam | 1.5 | +| Machoke | 1.5 | +| Cloyster | 1.5 | +| Gengar | 1.5 | +| Hitmonlee | 1.5 | +| Scyther | 1.5 | +| Pinsir | 1.5 | +| Xatu | 1.5 | +| Girafarig | 1.5 | +| Dunsparce | 1.5 | +| Heracross | 1.5 | +| Blissey | 1.5 | +| Swampert | 1.5 | +| Ludicolo | 1.5 | +| Exploud | 1.5 | +| Manectric | 1.5 | +| Claydol | 1.5 | +| Cradily | 1.5 | +| Armaldo | 1.5 | +| Glalie | 1.5 | +| Salamence | 1.5 | +| Blastoise | 1.6 | +| Golbat | 1.6 | +| Machamp | 1.6 | +| Tentacruel | 1.6 | +| Slowbro | 1.6 | +| Haunter | 1.6 | +| Hypno | 1.6 | +| Zapdos | 1.6 | +| Noctowl | 1.6 | +| Gardevoir | 1.6 | +| Dusclops | 1.6 | +| Metagross | 1.6 | +| Charizard | 1.7 | +| Golduck | 1.7 | +| Victreebel | 1.7 | +| Rapidash | 1.7 | +| Dewgong | 1.7 | +| Articuno | 1.7 | +| Typhlosion | 1.7 | +| Skarmory | 1.7 | +| Sceptile | 1.7 | +| Swalot | 1.7 | +| Huntail | 1.7 | +| Regirock | 1.7 | +| Deoxys | 1.7 | +| Dodrio | 1.8 | +| Aerodactyl | 1.8 | +| Dratini | 1.8 | +| Meganium | 1.8 | +| Furret | 1.8 | +| Crobat | 1.8 | +| Scizor | 1.8 | +| Ursaring | 1.8 | +| Kingdra | 1.8 | +| Sharpedo | 1.8 | +| Gorebyss | 1.8 | +| Regice | 1.8 | +| Arcanine | 1.9 | +| Rhydon | 1.9 | +| Raikou | 1.9 | +| Blaziken | 1.9 | +| Camerupt | 1.9 | +| Registeel | 1.9 | +| Venusaur | 2.0 | +| Ekans | 2.0 | +| Exeggutor | 2.0 | +| Moltres | 2.0 | +| Mewtwo | 2.0 | +| Slowking | 2.0 | +| Suicune | 2.0 | +| Tyranitar | 2.0 | +| Slaking | 2.0 | +| Wailmer | 2.0 | +| Flygon | 2.0 | +| Tropius | 2.0 | +| Latios | 2.0 | +| Snorlax | 2.1 | +| Mantine | 2.1 | +| Entei | 2.1 | +| Aggron | 2.1 | +| Kangaskhan | 2.2 | +| Dragonite | 2.2 | +| Feraligatr | 2.3 | +| Hariyama | 2.3 | +| Lapras | 2.5 | +| Seviper | 2.7 | +| Arbok | 3.5 | +| Groudon | 3.5 | +| Ho_oh | 3.8 | +| Dragonair | 4.0 | +| Kyogre | 4.5 | +| Lugia | 5.2 | +| Milotic | 6.2 | +| Gyarados | 6.5 | +| Rayquaza | 7.0 | +| Onix | 8.8 | +| Steelix | 9.2 | +| Wailord | 14.5 | + +## Pokémon ordered by weight +| Pokemon | weight (kg) | +| :------ | ----------: | +| Gastly | 0.1 | +| Haunter | 0.1 | +| Hoppip | 0.5 | +| Diglett | 0.8 | +| Castform | 0.8 | +| Igglybuff | 1.0 | +| Koffing | 1.0 | +| Skiploom | 1.0 | +| Chimecho | 1.0 | +| Misdreavus | 1.0 | +| Jirachi | 1.1 | +| Swablu | 1.2 | +| Shedinja | 1.2 | +| Togepi | 1.5 | +| Surskit | 1.7 | +| Pidgey | 1.8 | +| Sunkern | 1.8 | +| Barboach | 1.9 | +| Natu | 2.0 | +| Azurill | 2.0 | +| Spearow | 2.0 | +| Pichu | 2.0 | +| Roselia | 2.0 | +| Murkrow | 2.1 | +| Taillow | 2.3 | +| Shuppet | 2.3 | +| Exeggcute | 2.5 | +| Torchic | 2.5 | +| Lotad | 2.6 | +| Caterpie | 2.9 | +| Cleffa | 3.0 | +| Jumpluff | 3.0 | +| Weedle | 3.2 | +| Togetic | 3.2 | +| Dratini | 3.3 | +| Rattata | 3.5 | +| Wurmple | 3.6 | +| Masquerain | 3.6 | +| Qwilfish | 3.9 | +| Shellder | 4.0 | +| Ditto | 4.0 | +| Mew | 4.0 | +| Seedot | 4.0 | +| Bellsprout | 4.0 | +| Meowth | 4.2 | +| Plusle | 4.2 | +| Minun | 4.2 | +| Shroomish | 4.5 | +| Unown | 5.0 | +| Treecko | 5.0 | +| Corsola | 5.0 | +| Celebi | 5.0 | +| Spinda | 5.0 | +| Paras | 5.4 | +| Oddish | 5.4 | +| Jigglypuff | 5.5 | +| Nincada | 5.5 | +| Bellossom | 5.8 | +| Magnemite | 6.0 | +| Pikachu | 6.0 | +| Smoochum | 6.0 | +| Sentret | 6.0 | +| Chikorita | 6.4 | +| Weepinbell | 6.4 | +| Eevee | 6.5 | +| Krabby | 6.5 | +| Cubone | 6.5 | +| Swinub | 6.5 | +| Ralts | 6.6 | +| Bulbasaur | 6.9 | +| Ekans | 6.9 | +| Nidoran_f | 7.0 | +| Pineco | 7.2 | +| Feebas | 7.4 | +| Omanyte | 7.5 | +| Clefairy | 7.5 | +| Zubat | 7.5 | +| Mudkip | 7.6 | +| Mareep | 7.8 | +| Snubbull | 7.8 | +| Cyndaquil | 7.9 | +| Horsea | 8.0 | +| Marill | 8.5 | +| Wooper | 8.5 | +| Spinarak | 8.5 | +| Charmander | 8.5 | +| Sunflora | 8.5 | +| Gloom | 8.6 | +| Luvdisc | 8.7 | +| Teddiursa | 8.8 | +| Squirtle | 9.0 | +| Nidoran_m | 9.0 | +| Totodile | 9.5 | +| Wingull | 9.5 | +| Weezing | 9.5 | +| Vulpix | 9.9 | +| Metapod | 9.9 | +| Kakuna | 10.0 | +| Silcoon | 10.0 | +| Magikarp | 10.0 | +| Gulpin | 10.3 | +| Voltorb | 10.4 | +| Houndour | 10.8 | +| Ledyba | 10.8 | +| Sableye | 11.0 | +| Skitty | 11.0 | +| Meditite | 11.2 | +| Kabuto | 11.5 | +| Mawile | 11.5 | +| Corphish | 11.5 | +| Cascoon | 11.5 | +| Aipom | 11.5 | +| Chinchou | 12.0 | +| Sandshrew | 12.0 | +| Remoraid | 12.0 | +| Ninjask | 12.0 | +| Wigglytuff | 12.0 | +| Poliwag | 12.4 | +| Anorith | 12.5 | +| Banette | 12.5 | +| Venomoth | 12.5 | +| Ivysaur | 13.0 | +| Flaaffy | 13.3 | +| Poochyena | 13.6 | +| Wynaut | 14.0 | +| Dunsparce | 14.0 | +| Goldeen | 15.0 | +| Trapinch | 15.0 | +| Farfetchd | 15.0 | +| Duskull | 15.0 | +| Xatu | 15.0 | +| Electrike | 15.2 | +| Vibrava | 15.3 | +| Victreebel | 15.5 | +| Bayleef | 15.8 | +| Delibird | 16.0 | +| Whismur | 16.3 | +| Dragonair | 16.5 | +| Snorunt | 16.8 | +| Zigzagoon | 17.5 | +| Illumise | 17.7 | +| Volbeat | 17.7 | +| Raticate | 18.5 | +| Vileplume | 18.6 | +| Growlithe | 19.0 | +| Quilava | 19.0 | +| Charmeleon | 19.0 | +| Machop | 19.5 | +| Nidorino | 19.5 | +| Abra | 19.5 | +| Combusken | 19.5 | +| Psyduck | 19.6 | +| Swellow | 19.8 | +| Ninetales | 19.9 | +| Geodude | 20.0 | +| Nidorina | 20.0 | +| Poliwhirl | 20.0 | +| Kirlia | 20.2 | +| Shuckle | 20.5 | +| Altaria | 20.6 | +| Carvanha | 20.8 | +| Tyrogue | 21.0 | +| Hoothoot | 21.2 | +| Magby | 21.4 | +| Baltoy | 21.5 | +| Grovyle | 21.6 | +| Kecleon | 22.0 | +| Wartortle | 22.5 | +| Lanturn | 22.5 | +| Gorebyss | 22.6 | +| Relicanth | 23.4 | +| Elekid | 23.5 | +| Whiscash | 23.6 | +| Lileep | 23.8 | +| Numel | 24.0 | +| Slakoth | 24.0 | +| Jolteon | 24.5 | +| Flareon | 25.0 | +| Croconaw | 25.0 | +| Seadra | 25.0 | +| Espeon | 26.5 | +| Umbreon | 27.0 | +| Huntail | 27.0 | +| Mankey | 28.0 | +| Marshtomp | 28.0 | +| Sneasel | 28.0 | +| Nuzleaf | 28.0 | +| Pelipper | 28.0 | +| Beautifly | 28.4 | +| Azumarill | 28.5 | +| Octillery | 28.5 | +| Wobbuffet | 28.5 | +| Vaporeon | 29.0 | +| Beedrill | 29.5 | +| Sandslash | 29.5 | +| Parasect | 29.5 | +| Raichu | 30.0 | +| Grimer | 30.0 | +| Venonat | 30.0 | +| Ponyta | 30.0 | +| Pidgeotto | 30.0 | +| Electabuzz | 30.0 | +| Muk | 30.0 | +| Spoink | 30.6 | +| Dusclops | 30.6 | +| Medicham | 31.5 | +| Dustox | 31.6 | +| Persian | 32.0 | +| Primeape | 32.0 | +| Butterfree | 32.0 | +| Drowzee | 32.4 | +| Linoone | 32.5 | +| Porygon2 | 32.5 | +| Lombre | 32.5 | +| Furret | 32.5 | +| Delcatty | 32.6 | +| Crawdaunt | 32.8 | +| Dugtrio | 33.3 | +| Phanpy | 33.5 | +| Ariados | 33.5 | +| Politoed | 33.9 | +| Staryu | 34.5 | +| Chansey | 34.6 | +| Slugma | 35.0 | +| Tangela | 35.0 | +| Omastar | 35.0 | +| Houndoom | 35.0 | +| Ledian | 35.6 | +| Slowpoke | 36.0 | +| Porygon | 36.5 | +| Mightyena | 37.0 | +| Fearow | 38.0 | +| Sudowoodo | 38.0 | +| Yanma | 38.0 | +| Seaking | 39.0 | +| Breloom | 39.2 | +| Doduo | 39.2 | +| Spheal | 39.5 | +| Pidgeot | 39.5 | +| Clefable | 40.0 | +| Latias | 40.0 | +| Manectric | 40.2 | +| Zangoose | 40.3 | +| Loudred | 40.5 | +| Kabutops | 40.5 | +| Gengar | 40.5 | +| Jynx | 40.6 | +| Noctowl | 40.8 | +| Girafarig | 41.5 | +| Bagon | 42.1 | +| Magmar | 44.5 | +| Marowak | 45.0 | +| Tentacool | 45.5 | +| Vigoroth | 46.5 | +| Blissey | 46.8 | +| Absol | 47.0 | +| Hitmontop | 48.0 | +| Alakazam | 48.0 | +| Gardevoir | 48.4 | +| Granbull | 48.7 | +| Hitmonlee | 49.8 | +| Hitmonchan | 50.2 | +| Skarmory | 50.5 | +| Cacnea | 51.3 | +| Blaziken | 52.0 | +| Sceptile | 52.2 | +| Clamperl | 52.5 | +| Seviper | 52.5 | +| Zapdos | 52.6 | +| Poliwrath | 54.0 | +| Heracross | 54.0 | +| Mr_mime | 54.5 | +| Magcargo | 55.0 | +| Pinsir | 55.0 | +| Ludicolo | 55.0 | +| Golbat | 55.0 | +| Tentacruel | 55.0 | +| Articuno | 55.4 | +| Piloswine | 55.8 | +| Scyther | 56.0 | +| Kadabra | 56.5 | +| Smeargle | 58.0 | +| Aerodactyl | 59.0 | +| Shiftry | 59.6 | +| Aron | 60.0 | +| Magneton | 60.0 | +| Nidoqueen | 60.0 | +| Kingler | 60.0 | +| Moltres | 60.0 | +| Latios | 60.0 | +| Cradily | 60.4 | +| Deoxys | 60.8 | +| Ampharos | 61.5 | +| Nidoking | 62.0 | +| Gligar | 64.8 | +| Arbok | 65.0 | +| Lickitung | 65.5 | +| Electrode | 66.6 | +| Armaldo | 68.2 | +| Machoke | 70.5 | +| Stantler | 71.2 | +| Grumpig | 71.5 | +| Larvitar | 72.0 | +| Quagsire | 75.0 | +| Crobat | 75.0 | +| Miltank | 75.5 | +| Hypno | 75.6 | +| Golduck | 76.6 | +| Cacturne | 77.4 | +| Slowbro | 78.5 | +| Typhlosion | 79.5 | +| Slowking | 79.5 | +| Starmie | 80.0 | +| Swalot | 80.0 | +| Kangaskhan | 80.0 | +| Torkoal | 80.4 | +| Swampert | 81.9 | +| Flygon | 82.0 | +| Exploud | 84.0 | +| Dodrio | 85.2 | +| Blastoise | 85.5 | +| Makuhita | 86.4 | +| Sealeo | 87.6 | +| Tauros | 88.4 | +| Sharpedo | 88.8 | +| Feraligatr | 88.8 | +| Seel | 90.0 | +| Charizard | 90.5 | +| Rapidash | 95.0 | +| Beldum | 95.2 | +| Nosepass | 97.0 | +| Venusaur | 100.0 | +| Tropius | 100.0 | +| Meganium | 100.5 | +| Salamence | 102.6 | +| Graveler | 105.0 | +| Claydol | 108.0 | +| Shelgon | 110.5 | +| Rhyhorn | 115.0 | +| Scizor | 118.0 | +| Lairon | 120.0 | +| Donphan | 120.0 | +| Dewgong | 120.0 | +| Rhydon | 120.0 | +| Exeggutor | 120.0 | +| Mewtwo | 122.0 | +| Forretress | 125.8 | +| Ursaring | 125.8 | +| Machamp | 130.0 | +| Wailmer | 130.0 | +| Slaking | 130.5 | +| Cloyster | 132.5 | +| Walrein | 150.6 | +| Pupitar | 152.0 | +| Kingdra | 152.0 | +| Solrock | 154.0 | +| Arcanine | 155.0 | +| Milotic | 162.0 | +| Lunatone | 168.0 | +| Regice | 175.0 | +| Raikou | 178.0 | +| Suicune | 187.0 | +| Entei | 198.0 | +| Ho_oh | 199.0 | +| Tyranitar | 202.0 | +| Metang | 202.5 | +| Registeel | 205.0 | +| Rayquaza | 206.5 | +| Dragonite | 210.0 | +| Onix | 210.0 | +| Lugia | 216.0 | +| Camerupt | 220.0 | +| Mantine | 220.0 | +| Lapras | 220.0 | +| Regirock | 230.0 | +| Gyarados | 235.0 | +| Hariyama | 253.8 | +| Glalie | 256.5 | +| Golem | 300.0 | +| Kyogre | 352.0 | +| Aggron | 360.0 | +| Wailord | 398.0 | +| Steelix | 400.0 | +| Snorlax | 460.0 | +| Metagross | 550.0 | +| Groudon | 950.0 | + +## Making this easier +If you have multiple species that you want to add to pokeemerald but don't want to copy and paste or type everything out multiple times, just use this handy program to generate text with the species name in there! +https://github.com/smithk200/making-a-new-pokemon-species-in-pokeemerald diff --git a/docs/how_to_new_pokemon_1_7_0.md b/docs/how_to_new_pokemon_1_7_0.md new file mode 100644 index 000000000000..801ae8e54996 --- /dev/null +++ b/docs/how_to_new_pokemon_1_7_0.md @@ -0,0 +1,1049 @@ + +This is a modified version of [the original tutorial about adding new Pokémon species available in Pokeemerald's wiki](https://github.com/pret/pokeemerald/wiki/How-to-add-a-new-Pokémon-species). + +Despite the persistent rumors about an incredibly strong third form of Mew hiding somewhere, it actually wasn't possible to catch it... OR WAS IT? +In this tutorial, we will add a new Pokémon species to the game. + +## IMPORTANT: This tutorial applies to 1.7.x versions. +- [Version 1.9.x](how_to_new_pokemon_1_9_0.md) +- [Version 1.8.x](how_to_new_pokemon_1_8_0.md) +- [Version 1.6.x](how_to_new_pokemon_1_6_0.md) + +# Changes compared to vanilla +The main things that the Expansion changes are listed here. +* Still Front Pics *(`gMonStillFrontPic_YourPokemon`)* and by extension `src/anim_mon_front_pics.c` have been removed. +* `src/data/pokemon/cry_ids.h` doesn't exist anymore. +* You have 6 icon palettes available instead of the base 3. +* Most tables that use `SPECIES_x` as indexes have been moved to `gSpeciesInfo`. + +# Content +* [Useful resources](#useful-resources) +* [The Data - Part 1](#the-data---part-1) + * [1. Declare a species constant](#1-Declare-a-species-constant) + * [2. `SpeciesInfo`'s structure](#2-speciesinfos-structure) + * [3. Define its basic species information](#3-define-its-basic-species-information) + * [4. Species Name](#4-species-name) + * [5. Define its cry](#5-define-its-cry) + * [6. Define its Pokédex entry](#6-define-its-pokédex-entry) +* [The Graphics](#the-graphics) + * [1. Edit the sprites](#1-edit-the-sprites) + * [2. Add the sprites to the rom](#2-add-the-sprites-to-the-rom) + * [3. Add the animations to the rom](#3-add-the-animations-to-the-rom) + * [4. Linking graphic information to our Pokémon](#4-linking-graphic-information-to-our-pokémon) +* [The Data - Part 2](#the-data---part-2) + * [1. Species Flags](#1-species-flags) + * [2. Delimit the moveset](#2-delimit-the-moveset) + * [3. Define the Evolutions](#3-define-the-evolutions) + * [4. Make it appear!](#4-make-it-appear) +* [Optional data](#optional-data) + * [1. Form tables](#1-form-tables) + * [2. Form change tables](#2-form-change-tables) + * [3. Gender differences](#3-gender-differences) + +# Useful resources +You can open a sprite debug menu by pressing `Select` in a Pokémon's summary screen outside of battle. + +![mGBA_6WOo1TSlsn](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/0c625cd8-8f89-4bc8-a285-b10a420a8f6d) + + +# The Data - Part 1 + +Our plan is as simple as it is brilliant: clone Mewtwo... and make it even stronger! + +## 1. Declare a species constant + +Our first step towards creating a new digital lifeform is to define its own species constant. + +Edit [include/constants/species.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/species.h): + +```diff + #define SPECIES_NONE 0 + #define SPECIES_BULBASAUR 1 + ... + #define SPECIES_EEVEE_PARTNER PLACEHOLDER_START + 54 ++#define SPECIES_MEWTHREE PLACEHOLDER_START + 55 + +-#define GIGANTAMAX_START SPECIES_EEVEE_PARTNER ++#define GIGANTAMAX_START SPECIES_MEWTHREE + + // Gigantamax Forms + #define SPECIES_VENUSAUR_GIGANTAMAX GIGANTAMAX_START + 1 +``` +This number is stored in a Pokémon's save structure. These should generally never change, otherwise your saved Pokémon species will change as well. + +We add this before Gigantamax forms because they're temporary forms that shouldn't normally be saved into a Pokémon's save structure. + +Now, let's see how it looks in-game! + +![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/dc15b0ba-a4bd-4f4e-9658-2dff73a11f79) + +Hmmm, something's not right... + +Oh, I know! We need to add the rest of the data! Normally, the vanilla game would crash if we try to look up anything about Mewthree in this state, but the expansion defaults all of its data to `SPECIES_NONE`. + +Now, let's see what needs to be done. + +## 2. `SpeciesInfo`'s structure +Now, to better understand Mewtwo, we also need to understand Mew. Let's look at its data. +```diff + [SPECIES_MEW] = + { + .baseHP = 100, + .baseAttack = 100, + .baseDefense = 100, + .baseSpeed = 100, + .baseSpAttack = 100, + .baseSpDefense = 100, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC }, + .catchRate = 45, + #if P_UPDATED_EXP_YIELDS >= GEN_8 + .expYield = 300, + #elif P_UPDATED_EXP_YIELDS >= GEN_5 + .expYield = 270, + #else + .expYield = 64, + #endif + .evYield_HP = 3, + .itemCommon = ITEM_LUM_BERRY, + .itemRare = ITEM_LUM_BERRY, + .genderRatio = MON_GENDERLESS, + .eggCycles = 120, + .friendship = 100, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, + .abilities = { ABILITY_SYNCHRONIZE, ABILITY_NONE }, + .bodyColor = BODY_COLOR_PINK, + .isMythical = TRUE, + .speciesName = _("Mew"), + .cryId = CRY_MEW, + .natDexNum = NATIONAL_DEX_MEW, + .categoryName = _("New Species"), + .height = 4, + .weight = 40, + .description = COMPOUND_STRING( + "A Mew is said to possess the genes of all\n" + "Pokémon. It is capable of making itself\n" + "invisible at will, so it entirely avoids\n" + "notice even if it approaches people."), + .pokemonScale = 457, + .pokemonOffset = -2, + .trainerScale = 256, + .trainerOffset = 0, + FRONT_PIC(Mew, 64, 48), + .frontPicYOffset = 9, + .frontAnimFrames = sAnims_Mew, + .frontAnimId = ANIM_ZIGZAG_SLOW, + .enemyMonElevation = 11, + BACK_PIC(Mew, 64, 64), + .backPicYOffset = 0, + .backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL, + PALETTES(Mew), + ICON(Mew, 0), + FOOTPRINT(Mew) + LEARNSETS(Mew), + }, +``` + +That's a lot of stuff! But don't worry, we'll go through it step by step throught the tutorial +(and miles better than having this same data through 20+ files like it used to be). + +We'll start by adding the self-explanatory data that's also present in pret's vanilla structure: + +## 3. Define its basic species information +Edit [src/data/pokemon/species_info.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/species_info.h): +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + [SPECIES_NONE] = {0}, + ... + + [SPECIES_EGG] = + { + FRONT_PIC(Egg, 24, 24), + .frontPicYOffset = 20, + .backPic = gMonFrontPic_Egg, + .backPicSize = MON_COORDS_SIZE(24, 24), + .backPicYOffset = 20, + .palette = gMonPalette_Egg, + .shinyPalette = gMonPalette_Egg, + ICON(Egg, 1), + }, + ++ [SPECIES_MEWTHREE] = ++ { ++ .baseHP = 106, ++ .baseAttack = 150, ++ .baseDefense = 70, ++ .baseSpeed = 140, ++ .baseSpAttack = 194, ++ .baseSpDefense = 120, ++ .types = { TYPE_PSYCHIC, TYPE_PSYCHIC }, ++ .catchRate = 3, ++ .expYield = 255, ++ .evYield_SpAttack = 3, ++ .genderRatio = MON_GENDERLESS, ++ .eggCycles = 120, ++ .friendship = 0, ++ .growthRate = GROWTH_SLOW, ++ .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, ++ .abilities = { ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_NONE }, ++ .bodyColor = BODY_COLOR_PURPLE, ++ }, + }; +``` + +The `.` is the structure reference operator in C to refer to the member object of the structure SpeciesInfo. + +- `baseHP`, `baseAttack`, `baseDefense`, `baseSpeed`, `baseSpAttack` and `baseSpDefense` are the base stats. They can't go higher than 255. +- You may be confused as to why `types` has `TYPE_PSYCHIC` twice. This is because the way the game determines single-type mon is to define both types the same. + - If we don't, it defaults to Normal due to it being the first type defined. +- `catchRate` is how likely it is to catch a Pokémon, the lower the value, the harder it is to catch. Legendaries generally have a catch rate of 3, so we put that here. +- `expYield` is the base amount of experience that a Pokémon gives when defeated/caught. In vanilla, this value caps at 255, but we've increased it to a maximum of 65535 accomodate later gen's higher experience yields. (The highest official value is Blissey's with 608, so going beyond this point may cause exponential gains that could break the system 😱) + - If you noticed, Mew's had some `#if`s, `#elif`s and `#endif` around it. This is because its yield has changed over time, and we let you choose which ones you want. This is not relevant to our Mewthree however, so we can just put a single `.expYield = 255,` line here. +- `evYield_HP`, `evYield_Attack`, `evYield_Defense`, `evYield_Speed`, `evYield_SpAttack` and `evYield_SpDefense` are how many EVs does the Pokémon give when they're caught. Each of these fields can have a value of 3 at most. Officially, no Pokémon give out more than 3 EVs total, with them being determined by their evolution stage (eg, Pichu, Pikachu and Raichu give 1, 2 and 3 Speed EVs respectively), and they tend to be associated with its higher stats. Since our Mewthree is a Special Attack monster, we'll be consistent and make it give out 3 Special Attack EVs, but you're always free to assign whatever you feel like :) + - Notice that the other `evYield` fields are not there. In C, numbers in a struct default to 0, so if we don't specify them, they'll be 0 all around! Less lines to worry about :D +- `itemCommon` and `itemRare` are used to determine what items is the Pokémon holding when encountering it in the wild. + - 50% for `itemCommon` and 5% for `itemRare` (boosted to 60%/20% when the first mon in the party has Compound Grass or Super Luck) + - If they're both set as the same item, the item has a 100% chance of appearing. +- `genderRatio` is a fun one. + - There are 4 ways of handling this + - `PERCENT_FEMALE` is what most Pokémon use, where you define how likely it's gonna be female. It supports decimals, so you can put `PERCENT_FEMALE(12.5)` to have a 1 in 8 chance of your mon to be female. + - `MON_MALE` guarantees that all mon of this species will be male (eg. Tauros) + - `MON_FEMALE` guarantees that all mon of this species will be female (eg. Miltank) + - `MON_GENDERLESS` makes your species genderless, unable to breed with anything but Ditto to produce eggs. Most Legendaries are this, so we'll be chosing this as Mewthree's gender ratio. + - When working with evolution lines and don't want their genders to change after evolving, be sure that their gender ratios match their stages and evolution methods. Azurill is the only case where there's a mismatch, causing 1/3 of all Azurill to change from Female to Male. + - You might be wondering why some species have multiple defines for their genders, like `SPECIES_MEOWSTIC_(FE)MALE`. This is because those species have different stats and data from each other, so they're defined internally as different forms with `MON_MALE` and `MON_FEMALE` as gender ratios. If your species evolves depending on its gender and the evolutions have different stats, be sure to apply the correct evolution method! +- `eggCycles` determines how fast an egg of this species will hatch. Doesn't matter much for evolved species or those that can't lay eggs, but we add the field here just in case. +- `friendship` determines the amount of friendship of the mon when you catch it. Most Pokémon use `STANDARD_FRIENDSHIP`, but this creature of chaos does not want to be your friend, starting with 0. +- `growthRate` determines the amounts of experience required to reach each level. Go [here](https://bulbapedia.bulbagarden.net/wiki/Experience) for more info. +- `eggGroups` are used for breed compatibility. Most Legendaries and Mythicals have the `EGG_GROUP_NO_EGGS_DISCOVERED` group, and so does our Mewthree. Go [here](https://bulbapedia.bulbagarden.net/wiki/Egg_Group) for more info. +- `abilities` determines the potential abilites of our species. Notice how I also set the ability to `ABILITY_INSOMNIA`, so our little monster doesn't even need to sleep anymore. You can find the abilities for example here [include/constants/abilities.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/abilities.h). + - When both slot 1 and 2 are defined as not being `ABILITY_NONE`, their starting ability will be decided on a coin flip using their personality. They can later be changed using an Ability Capsule. + - Certain Pokémon such as Zygarde and Rockruff have different forms to add additional abilities. As such, they cannot be changed using an Ability Capsule (though the Zygarde Cube can change Zygarde's ability by changing them to their corresponding form) + - The 3rd slot is for Hidden Abilities. If defined as `ABILITY_NONE`, it will default to Slot 1 (eg. Metapod doesn't have a Hidden Ability, but Caterpie and Butterfree do). Go [here](https://bulbapedia.bulbagarden.net/wiki/Ability#Hidden_Abilities) and [here](https://bulbapedia.bulbagarden.net/wiki/Ability_Patch) for more info. + - If the array is defined as `{ABILITY_1, ABILITY_2}`, the Hidden Ability is set as `ABILITY_NONE`. +- `bodyColor` is used in the Pokédex as a search filter. +- `noFlip` is used in to prevent front sprites from being flipped horizontally and cause weird issues, like Clawitzer's big claw changing sides. + +That's all the basic fields present in vanilla emerald, so now let's take a look at the new fields added by the expansion. + +## 4. Species Name + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .isLegendary = TRUE, + .allPerfectIVs = TRUE, ++ .speciesName = _("Mewthree"), + }, + }; +``` +The `_()` underscore function doesn't really exist - it's a convention borrowed from GNU gettext to let `preproc` know this is text to be converted to the custom encoding used by the Gen 3 Pokemon games. + +## 5. Define its cry + +Time for audio! +We first need to convert an existing audio file to the format supported by the expansion. + +Most formats are supported for conversion, but for simplicity's sake, we're gonna use this [mp3 file](https://cdn.discordapp.com/attachments/1206424179197349924/1206424212403920996/mewthree.mp3?ex=6600df1a&is=65ee6a1a&hm=4f05d58a7ae22bfdcd5f83558e15320fc1b6cd42a8cb9dee347b20bfb805ece5&). + +Now, let's copy the file to the `sound/direct_sound_samples/cries` folder. +Once that's done, let's run the following command: +``` +ffmpeg -i sound/direct_sound_samples/cries/mewthree.mp3 -c:a pcm_s8 -ac 1 -ar 13379 sound/direct_sound_samples/cries/mewthree.aif +``` +This will convert your audio file to .aif, which is what's read by the compiler. + +Let's add the cry to the ROM via [sound/direct_sound_data.inc](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/sound/direct_sound_data.inc). + +```diff +.if P_FAMILY_PECHARUNT == TRUE + .align 2 +Cry_Pecharunt:: + .incbin "sound/direct_sound_samples/cries/pecharunt.bin" +.endif @ P_FAMILY_PECHARUNT + ++ .align 2 ++Cry_Mewthree:: ++ .incbin "sound/direct_sound_samples/cries/mewthree.bin" + +``` + +Then we add the cry ID to [include/constants/cries.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/cries.h): + +```diff +enum { + CRY_NONE, + ... +#if P_FAMILY_TERAPAGOS + CRY_TERAPAGOS, +#endif //P_FAMILY_TERAPAGOS +#if P_FAMILY_PECHARUNT + CRY_PECHARUNT, +#endif //P_FAMILY_PECHARUNT ++ CRY_MEWTHREE, + CRY_COUNT, +}; +``` + +And then link it in [sound/cry_tables.inc](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/sound/cry_tables.inc). `cry_reverse` in particular is for reversed cries used by moves such as Growl. The order of these two tables should match the order of the cry IDs, otherwise they'll be shifted. + +```diff + cry Cry_Terapagos + cry Cry_Pecharunt ++ cry Cry_Mewthree +``` +```diff + cry_reverse Cry_Terapagos + cry_reverse Cry_Pecharunt ++ cry_reverse Cry_Mewthree +``` + +Lastly, we add the cry to our species entry +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .isLegendary = TRUE, + .allPerfectIVs = TRUE, + .speciesName = _("Mewthree"), ++ .cryId = CRY_MEWTHREE, + }, + }; +``` + +And let's see how it sounds in-game: + +https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/4f7667db-4db9-4bfd-a8dd-ece26f09f327 + +Good! Our monster now has a mighty roar! + +You can now delete the mp3 from the cries folder now once you made sure that the cry sounds like how you want it to. + +## 6. Define its Pokédex entry + +First, we will need to add new index constants for its Pokédex entry. The index constants are divided into the Hoenn Pokédex, which contains all Pokémon native to the Hoenn region, and the National Pokédex containing all known Pokémon, which can be received after entering the hall of fame for the first time. + +Edit [include/constants/pokedex.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/pokedex.h): + +```diff +// National Pokedex order +enum { + NATIONAL_DEX_NONE, + // Kanto + NATIONAL_DEX_BULBASAUR, +... + NATIONAL_DEX_PECHARUNT, ++ NATIONAL_DEX_MEWTHREE, +}; +``` + +```diff + #define KANTO_DEX_COUNT NATIONAL_DEX_MEW + #define JOHTO_DEX_COUNT NATIONAL_DEX_CELEBI + +#if P_GEN_9_POKEMON == TRUE +- #define NATIONAL_DEX_COUNT NATIONAL_DEX_PECHARUNT ++ #define NATIONAL_DEX_COUNT NATIONAL_DEX_MEWTHREE +``` + +Do keep in mind that if you intend to add your new species to the Hoenn Dex, you'll also want to add a `HOENN_DEX` constant for it, like this: + +```diff +// Hoenn Pokedex order +enum { + HOENN_DEX_NONE, + HOENN_DEX_TREECKO, +... + HOENN_DEX_DEOXYS, ++ HOENN_DEX_MEWTHREE, +}; + +- #define HOENN_DEX_COUNT (HOENN_DEX_DEOXYS + 1) ++ #define HOENN_DEX_COUNT (HOENN_DEX_MEWTHREE + 1) +``` + +Edit [src/pokemon.c](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/pokemon.c): + +```diff + const u16 sHoennToNationalOrder[NUM_SPECIES] = // Assigns Hoenn Dex Pokémon (Using National Dex Index) + { + HOENN_TO_NATIONAL(TREECKO), + ... + HOENN_TO_NATIONAL(DEOXYS), ++ HOENN_TO_NATIONAL(MEWTHREE), + }; +``` + +Now we can add the number and entry to our Mewthree: +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .cryId = CRY_MEWTHREE, ++ .natDexNum = NATIONAL_DEX_MEWTHREE, ++ .categoryName = _("New Species"), ++ .height = 15, ++ .weight = 330, ++ .description = COMPOUND_STRING( ++ "The rumors became true.\n" ++ "This is Mew's final form.\n" ++ "Its power level is over 9000.\n" ++ "Has science gone too far?"), ++ .pokemonScale = 256, ++ .pokemonOffset = 0, ++ .trainerScale = 290, ++ .trainerOffset = 2, + }, + }; +``` +![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/3759dd4c-8da5-4b1c-9a50-b9e9d0815e7f) + +The values `pokemonScale`, `pokemonOffset`, `trainerScale` and `trainerOffset` are used for the height comparison figure in the Pokédex. + +`height` and `weight` are specified in decimeters and hectograms respectively (which are meters and kilograms multiplied by 10, so 2.5 meters are 25 decimeters). + +In Pokémon Emerald, you can sort the Pokédex by name, height or weight. Apparently, the Pokémon order is hardcoded in the game files and not calculated from their data. Therefore we have to include our new Pokémon species at the right places. While the correct position for the alphabetical order is easy to find, it can become quite tedious for height and weight, so we added comments to the listings in order help out were they should fit. + +Edit [src/data/pokemon/pokedex_orders.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/pokedex_orders.h): + +```diff + const u16 gPokedexOrder_Alphabetical[] = + { + ... + NATIONAL_DEX_MEW, ++ NATIONAL_DEX_MEWTHREE, + NATIONAL_DEX_MEWTWO, + ... + }; + + const u16 gPokedexOrder_Weight[] = + { + ... + // 72.8 lbs / 33.0 kg + //NATIONAL_DEX_MEWTWO_MEGA_Y, + NATIONAL_DEX_ESCAVALIER, + NATIONAL_DEX_FRILLISH, + NATIONAL_DEX_DURANT, + NATIONAL_DEX_CINDERACE, ++ NATIONAL_DEX_MEWTHREE, + //NATIONAL_DEX_PERSIAN_ALOLAN, + NATIONAL_DEX_TOEDSCOOL, + // 73.4 lbs / 33.3 kg + NATIONAL_DEX_DUGTRIO, + ... + }; + + const u16 gPokedexOrder_Height[] = + { + ... + // 4'11" / 1.5m + ... + NATIONAL_DEX_GLIMMORA, + NATIONAL_DEX_WO_CHIEN, + NATIONAL_DEX_IRON_LEAVES, + NATIONAL_DEX_IRON_BOULDER, ++ NATIONAL_DEX_MEWTHREE, + // 5'03" / 1.6m + ... + }; +``` +![mGBA_lUBfmFEKUx](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/3a8b8a17-759b-486b-9831-deb2f494bd71) + + +# The Graphics +We will start by copying the following files for *Mew* (not Mewtwo) and rename it to `mewthree`. +```sh +cp -r graphics/pokemon/mew/. graphics/pokemon/mewthree +``` +We aren't copying Mewtwo's folder because he has those pesky Mega Evolutions that will get in the way of what we're doing, so our sample will need to be pure from the source. + +## 1. Edit the sprites +Let's edit the sprites. Start your favourite image editor (I recommend Aseprite or its free alternative, Libresprite) and change `anim_front.png` and `back.png` to meet your expectations. + +__Make sure that you are using the indexed mode and you have limited yourself to 15 colors!__ + +Put the RGB values of your colors into `normal.pal` between the first and the last color and the RGB values for the shiny version into `shiny.pal`. +Edit `footprint.png` using two colors in indexed mode, black and white. +Finally, edit `icon.png`. Notice, that the icon will use one of 6 predefined palettes instead of `normal.pal`. + +## 2. Add the sprites to the rom +Sadly, just putting the image files into the graphics folder is not enough. To use the sprites we have to register them, which is kind of tedious. +First, create constants for the file paths. You'll want to add the constants for your species after the constants for the last valid species. + +Edit [src/data/graphics/pokemon.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/pokemon.h): + +```diff +#if P_FAMILY_PECHARUNT + // const u32 gMonFrontPic_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/front.4bpp.lz"); + // const u32 gMonPalette_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/normal.gbapal.lz"); + // const u32 gMonBackPic_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/back.4bpp.lz"); + // const u32 gMonShinyPalette_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/shiny.gbapal.lz"); + // const u8 gMonIcon_Pecharunt[] = INCBIN_U8("graphics/pokemon/pecharunt/icon.4bpp"); +#if P_FOOTPRINTS + // const u8 gMonFootprint_Pecharunt[] = INCBIN_U8("graphics/pokemon/pecharunt/footprint.1bpp"); +#endif //P_FOOTPRINTS +#endif //P_FAMILY_PECHARUNT + ++ const u32 gMonFrontPic_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/anim_front.4bpp.lz"); ++ const u32 gMonBackPic_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/back.4bpp.lz"); ++ const u32 gMonPalette_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/normal.gbapal.lz"); ++ const u32 gMonShinyPalette_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/shiny.gbapal.lz"); ++ const u8 gMonIcon_Mewthree[] = INCBIN_U8("graphics/pokemon/mewthree/icon.4bpp"); ++ const u8 gMonFootprint_Mewthree[] = INCBIN_U8("graphics/pokemon/mewthree/footprint.1bpp"); +``` + +Please note that Pecharunt, the Pokémon that should be above your insertion for the time being, reads a `front.png` sprite instead of an `anim_front.png` sprite. This is because currently, Pecharunt lacks a 2nd frame. If the front sprite sheet of your species uses 2 frames, you should use `anim_front`. + +It is also worth to mention that Pecharunt's sprites are commented out simply because they're currently missing. + +## 3. Add the animations to the rom + +You can define the animation order, in which the sprites will be shown. The first number is the sprite index (so 0 or 1) and the second number is the number of frames the sprite will be visible. + +Edit [src/data/pokemon_graphics/front_pic_anims.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon_graphics/front_pic_anims.h): + +```diff +#if P_FAMILY_PECHARUNT +PLACEHOLDER_ANIM_SINGLE_FRAME(Pecharunt); +#endif //P_FAMILY_PECHARUNT + ++static const union AnimCmd sAnim_Mewthree_1[] = ++{ ++ ANIMCMD_FRAME(1, 30), ++ ANIMCMD_FRAME(0, 20), ++ ANIMCMD_END, ++}; +``` + +```diff +#if P_FAMILY_PECHARUNT +SINGLE_ANIMATION(Pecharunt); +#endif //P_FAMILY_PECHARUNT ++SINGLE_ANIMATION(Mewthree); +SINGLE_ANIMATION(Egg); +``` + +You might be wondering what `PLACEHOLDER_ANIM_SINGLE_FRAME` is. Well, since Pecharun only has 1 frame, we use what's called a preprocessor *macro* to have in a single line what otherwise would've been this in the C file: +```c +static const union AnimCmd sAnim_Pecharunt_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +} +``` +Instead, we can use the already established macro that does the same thing, replacing the value in parenthesis with what we want (in this case, `Pecharunt`): +```c +#define PLACEHOLDER_ANIM_SINGLE_FRAME(name) \ +static const union AnimCmd sAnim_##name##_1[] = \ +{ \ + ANIMCMD_FRAME(0, 1), \ + ANIMCMD_END, \ +} +``` + +## 4. Linking graphic information to our Pokémon +Now that we have all the external data ready, we just need to add it to `gSpeciesInfo` plus the rest of the animation and graphical data that we want to use: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 290, + .trainerOffset = 2, ++ FRONT_PIC(Mewthree, 64, 64), ++ .frontPicYOffset = 0, ++ .frontAnimFrames = sAnims_Mewthree, ++ .frontAnimId = ANIM_GROW_VIBRATE, ++ .frontAnimDelay = 15, ++ .enemyMonElevation = 6, ++ BACK_PIC(Mewthree, 64, 64), ++ .backPicYOffset = 0, ++ .backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL, ++ PALETTES(Mewthree), ++ ICON(Mewthree, 2), ++ FOOTPRINT(Mewthree) + }, + }; +``` +Let's explain each of these: +- `FRONT_PIC`: + - This is a macro handles both the `frontPic` and `frontPicSize` fields. + ```c + #define FRONT_PIC(sprite, width, height) \ + .frontPic = gMonFrontPic_## sprite, \ + .frontPicSize = MON_COORDS_SIZE(width, height) + ``` + - The first value in the macro is used to reference the front sprite, so in this case, using `Mewthree` will call for `gMonFrontPic_Mewthree`. + - The second and third values (`width` and `height`) are used for defining the non-empty size of the sprite, which is used in move animations. If you're unsure of the values, you can leave them both as 64. +- `frontPicYOffset`: + - Used to define what Y position the sprite sits at. This is used to set where they'd be "grounded". For the shadow, see `enemyMonElevation`. +- `frontAnimFrames`: + - We link our animation frame animations that we defined earlier here. +- `frontAnimId`: + - Because you are limited to two frames, there are already [predefined front sprite animations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/pokemon_animation.h), describing translations, rotations, scalings or color changes. +- `frontAnimDelay`: + - Sets a delay in frame count between when the Pokémon appears and when the animation starts. +- `enemyMonElevation`: + - Used to determine the altitude from the ground. Any value above 0 will show a shadow under the Pokémon, to signify that they're floating. +- `BACK_PIC`: + - A macro like `FRONT_PIC` except for the back sprite handling the `frontPic` and `frontPicSize` fields in the same way. + ```c + #define BACK_PIC(sprite, width, height) \ + .backPic = gMonBackPic_## sprite, \ + .backPicSize = MON_COORDS_SIZE(width, height) + ``` +- `backPicYOffset`: + - Used to define what Y position of the back sprite. When working with the animation debug menu, we recommend aligning the back sprite to the white background, as it was designed to properyly align with the real battle layout. +- `backAnimId`: + - Like `frontAnimId` except for the back sprites and them being a single frame. The IDs listed [here](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/pokemon_animation.h) are used to represent 3 different animations that happen based on the the Pokémon's nature. +- `PALETTES` + - This macro was created to handle both regular and shiny palettes of a Pokémon. It just needs the species suffix to call the corresponding palette. + ```c + #define PALETTES(pal) \ + .palette = gMonPalette_## pal, \ + .shinyPalette = gMonShinyPalette_## pal + ``` +- `ICON` + - This macro is calls both the icon sprite and its palette. + ```c + #define ICON(sprite, palId) \ + .iconSprite = gMonIcon_## sprite, \ + .iconPalIndex = palId + ``` + Here, you can choose between the six icon palettes; 0, 1, 2, 3, 4 and 5. All of them located in `graphics/pokemon/icon_palettes`. + + Open an icon sprite and load one of the palettes to find out which palette suits your icon sprite best. +- `FOOTPRINT` + - We made this single field into a macro so that they can be ignored when `P_FOOTPRINTS` is set to false. It's also why we don't have an "," after calling it like the other macros (we add it as part of the macro itself). + ```c + #if P_FOOTPRINTS + #define FOOTPRINT(sprite) .footprint = gMonFootprint_## sprite, + #else + #define FOOTPRINT(sprite) + #endif + ``` + +# The Data - Part 2 + +We're almost there just a bit left! + +## 1. Species Flags + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .abilities = { ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_NONE }, + .bodyColor = BODY_COLOR_PURPLE, ++ .isLegendary = TRUE, ++ .allPerfectIVs = TRUE, + }, + }; +``` +Each species flag provides properties to the species: +- `isLegendary`: + - Guarantees 3 perfect IVs upon generating the Pokémon[*](########## "As long as `P_LEGENDARY_PERFECT_IVS` is set to `GEN_6` or higher"). +- `isMythical`: + - Guarantees 3 perfect IVs upon generating the Pokémon[*](########## "As long as `P_LEGENDARY_PERFECT_IVS` is set to `GEN_6` or higher"). + - Is skipped during Pokédex evaluations. + - Unless it also has the `dexForceRequired` flag. + - Cannot obtain Gigantamax factor via `ToggleGigantamaxFactor`. +- `isUltraBeast`: + - Guarantees 3 perfect IVs upon generating the Pokémon[*](########## "As long as `P_LEGENDARY_PERFECT_IVS` is set to `GEN_6` or higher"). + - Beast Ball's multiplier is set to x5 for this species. + - All other ball multipliers are set to x0.1. +- `isParadoxForm`: + - Currently has no functionality but can be utilized by users for their own benefits. +- `isMegaEvolution`: + - A Mega indicator is added to the battle box indicating that they're Mega Evolved. + - The species doesn't receive affection benefits. + - Required when adding new Mega Evolutions. +- `isPrimalReversion`: + - A Primal Reversion indicator (Alpha or Omega for Kyogre/Groudon respectively) is added to the battle box indicating that they're Primal Reverted. + - Required when adding new Primal Reversions. +- `isUltraBurst`: + - Required when adding new Ultra Burst forms. +- `isGigantamax`: + - Used to determine if Gigantamax forms should have their GMax moves or not. + - Required when adding new Gigantamax forms. +- `isAlolanForm`, `isGalarianForm`, `isHisuianForm`, `isPaldeanForm`: + - In the future, these will be used to determine breeding offspring from different based on their region. +- `cannotBeTraded`: + - This species cannot be traded away (like Black/White Kyurem). +- `allPerfectIVs`: + - Guarantees 6 perfect IVs upon generating the Pokémon (like LGPE's Partner Pikachu and Eevee). +- `tmIlliterate`: + - This species will be unable to learn the universal moves. + +*: As long as `P_LEGENDARY_PERFECT_IVS` is set to `GEN_6` or higher. + +## 2. Delimit the moveset + +Let's begin with the moves that can be learned by leveling up. + +Append to [src/data/pokemon/level_up_learnsets.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/level_up_learnsets.h): + +```diff +#if P_FAMILY_PECHARUNT +static const struct LevelUpMove sPecharuntLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SMOG), + LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), + LEVEL_UP_MOVE( 1, MOVE_MEMENTO), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 8, MOVE_WITHDRAW), + LEVEL_UP_MOVE(16, MOVE_DESTINY_BOND), + LEVEL_UP_MOVE(24, MOVE_FAKE_TEARS), + LEVEL_UP_MOVE(32, MOVE_PARTING_SHOT), + LEVEL_UP_MOVE(40, MOVE_SHADOW_BALL), + LEVEL_UP_MOVE(48, MOVE_MALIGNANT_CHAIN), + LEVEL_UP_MOVE(56, MOVE_TOXIC), + LEVEL_UP_MOVE(64, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(72, MOVE_RECOVER), + LEVEL_UP_END +}; +#endif + ++static const struct LevelUpMove sMewthreeLevelUpLearnset[] = { ++ LEVEL_UP_MOVE( 1, MOVE_CONFUSION), ++ LEVEL_UP_MOVE( 1, MOVE_DISABLE), ++ LEVEL_UP_MOVE(11, MOVE_BARRIER), ++ LEVEL_UP_MOVE(22, MOVE_SWIFT), ++ LEVEL_UP_MOVE(33, MOVE_PSYCH_UP), ++ LEVEL_UP_MOVE(44, MOVE_FUTURE_SIGHT), ++ LEVEL_UP_MOVE(55, MOVE_MIST), ++ LEVEL_UP_MOVE(66, MOVE_PSYCHIC), ++ LEVEL_UP_MOVE(77, MOVE_AMNESIA), ++ LEVEL_UP_MOVE(88, MOVE_RECOVER), ++ LEVEL_UP_MOVE(99, MOVE_SAFEGUARD), ++ LEVEL_UP_END ++}; +``` + +Again, we need to register the learnset in `gSpeciesInfo`: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + PALETTES(Mewthree), + ICON(Mewthree, 2), + FOOTPRINT(Mewthree) ++ .levelUpLearnset = sMewthreeLevelUpLearnset, + }, + }; +``` + +Next we need to specify which moves can be taught via TM, HM, or Move Tutor. + +Append to [src/data/pokemon/teachable_learnsets.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/teachable_learnsets.h): + +```diff +#if P_FAMILY_PECHARUNT +static const u16 sPecharuntTeachableLearnset[] = { + ... + MOVE_UNAVAILABLE, +}; +#endif //P_FAMILY_PECHARUNT + ++static const u16 sMewthreeTeachableLearnset[] = { ++ MOVE_FOCUS_PUNCH, ++ MOVE_WATER_PULSE, ++ MOVE_CALM_MIND, ++ MOVE_TOXIC, ++ MOVE_HAIL, ++ MOVE_BULK_UP, ++ MOVE_HIDDEN_POWER, ++ MOVE_SUNNY_DAY, ++ MOVE_TAUNT, ++ MOVE_ICE_BEAM, ++ MOVE_BLIZZARD, ++ MOVE_HYPER_BEAM, ++ MOVE_LIGHT_SCREEN, ++ MOVE_PROTECT, ++ MOVE_RAIN_DANCE, ++ MOVE_SAFEGUARD, ++ MOVE_FRUSTRATION, ++ MOVE_SOLAR_BEAM, ++ MOVE_IRON_TAIL, ++ MOVE_THUNDERBOLT, ++ MOVE_THUNDER, ++ MOVE_EARTHQUAKE, ++ MOVE_RETURN, ++ MOVE_PSYCHIC, ++ MOVE_SHADOW_BALL, ++ MOVE_BRICK_BREAK, ++ MOVE_DOUBLE_TEAM, ++ MOVE_REFLECT, ++ MOVE_SHOCK_WAVE, ++ MOVE_FLAMETHROWER, ++ MOVE_SANDSTORM, ++ MOVE_FIRE_BLAST, ++ MOVE_ROCK_TOMB, ++ MOVE_AERIAL_ACE, ++ MOVE_TORMENT, ++ MOVE_FACADE, ++ MOVE_SECRET_POWER, ++ MOVE_REST, ++ MOVE_SKILL_SWAP, ++ MOVE_SNATCH, ++ MOVE_STRENGTH, ++ MOVE_FLASH, ++ MOVE_ROCK_SMASH, ++ MOVE_MEGA_PUNCH, ++ MOVE_MEGA_KICK, ++ MOVE_BODY_SLAM, ++ MOVE_DOUBLE_EDGE, ++ MOVE_COUNTER, ++ MOVE_SEISMIC_TOSS, ++ MOVE_MIMIC, ++ MOVE_METRONOME, ++ MOVE_DREAM_EATER, ++ MOVE_THUNDER_WAVE, ++ MOVE_SUBSTITUTE, ++ MOVE_DYNAMIC_PUNCH, ++ MOVE_PSYCH_UP, ++ MOVE_SNORE, ++ MOVE_ICY_WIND, ++ MOVE_ENDURE, ++ MOVE_MUD_SLAP, ++ MOVE_ICE_PUNCH, ++ MOVE_SWAGGER, ++ MOVE_SLEEP_TALK, ++ MOVE_SWIFT, ++ MOVE_THUNDER_PUNCH, ++ MOVE_FIRE_PUNCH, ++ MOVE_UNAVAILABLE, // This is required to determine where the array ends. ++}; +#endif +``` + +Once more, we need to register the learnset in `gSpeciesInfo`: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + FOOTPRINT(Mewthree) + .levelUpLearnset = sMewthreeLevelUpLearnset, ++ .teachableLearnset = sMewthreeTeachableLearnset, + }, + }; +``` + +If you want to create a Pokémon which can breed, you will need to edit [src/data/pokemon/egg_moves.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/egg_moves.h). + + +## 3. Define the Evolutions + +We want Mewthree to evolve from Mewtwo by reaching level 100. + +Edit `gSpeciesInfo`: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTWO] = + { + ... + FOOTPRINT(Mewtwo) + .isLegendary = TRUE, + .levelUpLearnset = sMewtwoLevelUpLearnset, + .teachableLearnset = sMewtwoTeachableLearnset, + .formSpeciesIdTable = sMewtwoFormSpeciesIdTable, + .formChangeTable = sMewtwoFormChangeTable, ++ .evolutions = EVOLUTION({EVO_LEVEL, 100, SPECIES_MEWTHREE}), + }, + }; +``` + +## 4. Make it appear! +Now Mewthree really does slumber in the games code - but we won't know until we make him appear somewhere! The legend tells that Mewthree is hiding somewhere in Petalburg Woods... + +Edit [src/data/wild_encounters.json](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/wild_encounters.json): + +```diff + { + "map": "MAP_PETALBURG_WOODS", + "base_label": "gPetalburgWoods", + "land_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WURMPLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SHROOMISH" + }, + { +- "min_level": 6, +- "max_level": 6, +- "species": "SPECIES_POOCHYENA" ++ "min_level": 5, ++ "max_level": 5, ++ "species": "SPECIES_MEWTHREE" + }, + ... + } +``` + +Congratulations, you have created your own personal pocket monster! You may call yourself a mad scientist now. + +# Optional data + +Now that you now have all the essential pieces to create a base species, there are some aspects that you might want to know if you want to do other stuff with your custom Pokémon. + +## 1. Form tables +Found in `src/data/pokemon/form_species_tables.h`. + +These are introduced to have a reference of what forms correspond to what Species of Pokémon. For example, we have Pikachu's table: +```c +#if P_FAMILY_PIKACHU +static const u16 sPikachuFormSpeciesIdTable[] = { + SPECIES_PIKACHU, + SPECIES_PIKACHU_COSPLAY, + SPECIES_PIKACHU_ROCK_STAR, + SPECIES_PIKACHU_BELLE, + SPECIES_PIKACHU_POP_STAR, + SPECIES_PIKACHU_PH_D, + SPECIES_PIKACHU_LIBRE, + SPECIES_PIKACHU_ORIGINAL_CAP, + SPECIES_PIKACHU_HOENN_CAP, + SPECIES_PIKACHU_SINNOH_CAP, + SPECIES_PIKACHU_UNOVA_CAP, + SPECIES_PIKACHU_KALOS_CAP, + SPECIES_PIKACHU_ALOLA_CAP, + SPECIES_PIKACHU_PARTNER_CAP, + SPECIES_PIKACHU_WORLD_CAP, + FORM_SPECIES_END, +}; +#endif //P_FAMILY_PIKACHU +``` +We register the table each form entry in `gSpeciesInfo`. + +```diff + [SPECIES_PIKACHU] = + { + ... + .teachableLearnset = sPikachuTeachableLearnset, ++ .formSpeciesIdTable = sPikachuFormSpeciesIdTable, + .evolutions = EVOLUTION({EVO_ITEM, ITEM_THUNDER_STONE, SPECIES_RAICHU}, + {EVO_NONE, 0, SPECIES_RAICHU_ALOLAN}), + }, + + [SPECIES_PIKACHU_COSPLAY] = + { + ... + .teachableLearnset = sPikachuTeachableLearnset, ++ .formSpeciesIdTable = sPikachuFormSpeciesIdTable, + }, +``` +...and so on. + +What this allows us to do is to be able to get all forms of a Pokémon in our code by using the `GetSpeciesFormTable` function. + +For example, in the HGSS dex, it lets us browse between the entries of every form available.: + +![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/a1a90b79-46a1-4cd6-97d6-ec5d741bfdc8) ![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/7cffc6be-0b5c-4074-b689-736a97297843) + +In addition, we have the `GET_BASE_SPECIES_ID` macro, which returns the first entry of the table (or return the species itself if it doesn't have a table registered). With this, you can check if a Pokémon is any form of a species. For example, making it so that the Light Ball affects all Pikachu forms: +```c + case HOLD_EFFECT_LIGHT_BALL: + if (GET_BASE_SPECIES_ID(gBattleMons[battlerAtk].species) == SPECIES_PIKACHU && IS_MOVE_SPECIAL(move)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); + break; +``` + +## 2. Form change tables +Found in `src/data/pokemon/form_species_tables.h`. + +These tables, unlike the regular form tables, registers how Pokémon can switch between forms. + +```c +#if P_FAMILY_GASTLY +static const struct FormChange sGengarFormChangeTable[] = { + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GENGAR_MEGA, ITEM_GENGARITE}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_GENGAR_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; +#endif //P_FAMILY_GASTLY +``` +The first value is the type of form change. In the case of Gengar, we have both Mega Evolution and Gigantamax form changes. + +The second value is the target form, to which the Pokémon will change into. + +Values after that are referred as arguments, and needs to be put there depends on the type of form change, detailed in `include/constants/form_change_types.h`. + +## 3. Gender differences +![mGBA_Wq5cbDkNZG](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/45256192-b451-4baa-af06-f57ca16e1e46) + +You may have seen that there's a couple of duplicate fields with a "Female" suffix. +```diff + [SPECIES_FRILLISH] = + { + ... + .frontPic = gMonFrontPic_Frillish, ++ .frontPicFemale = gMonFrontPic_FrillishF, + .frontPicSize = MON_COORDS_SIZE(56, 56), ++ .frontPicSizeFemale = MON_COORDS_SIZE(56, 56), + .frontPicYOffset = 5, + .frontAnimFrames = sAnims_Frillish, + .frontAnimId = ANIM_RISING_WOBBLE, + .backPic = gMonBackPic_Frillish, ++ .backPicFemale = gMonBackPic_FrillishF, + .backPicSize = MON_COORDS_SIZE(40, 56), ++ .backPicSizeFemale = MON_COORDS_SIZE(40, 56), + .backPicYOffset = 7, + .backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC, + .palette = gMonPalette_Frillish, ++ .paletteFemale = gMonPalette_FrillishF, + .shinyPalette = gMonShinyPalette_Frillish, ++ .shinyPaletteFemale = gMonShinyPalette_FrillishF, + .iconSprite = gMonIcon_Frillish, ++ .iconSpriteFemale = gMonIcon_FrillishF, + .iconPalIndex = 0, ++ .iconPalIndexFemale = 1, + FOOTPRINT(Frillish) + .levelUpLearnset = sFrillishLevelUpLearnset, + .teachableLearnset = sFrillishTeachableLearnset, + .evolutions = EVOLUTION({EVO_LEVEL, 40, SPECIES_JELLICENT}), + }, +``` +These are used to change the graphics of the Pokémon if they're female. If they're not registered, they default to the male values. + +However, `iconPalIndexFemale` is a special case, where it's *doesn't* read the male icon palette if its `iconSpriteFemale` is set, so if you're setting a female icon, be sure to set their palette index as well. + diff --git a/docs/how_to_new_pokemon_1_8_0.md b/docs/how_to_new_pokemon_1_8_0.md new file mode 100644 index 000000000000..c4c7ab621cd1 --- /dev/null +++ b/docs/how_to_new_pokemon_1_8_0.md @@ -0,0 +1,1049 @@ + +This is a modified version of [the original tutorial about adding new Pokémon species available in Pokeemerald's wiki](https://github.com/pret/pokeemerald/wiki/How-to-add-a-new-Pokémon-species). + +Despite the persistent rumors about an incredibly strong third form of Mew hiding somewhere, it actually wasn't possible to catch it... OR WAS IT? +In this tutorial, we will add a new Pokémon species to the game. + +## IMPORTANT: This tutorial applies to 1.8.x versions. +- [Version 1.9.x](how_to_new_pokemon_1_9_0.md) +- [Version 1.7.x](how_to_new_pokemon_1_7_0.md) +- [Version 1.6.x](how_to_new_pokemon_1_6_0.md) + +# Changes compared to vanilla +The main things that the Expansion changes are listed here. +* Still Front Pics *(`gMonStillFrontPic_YourPokemon`)* and by extension `src/anim_mon_front_pics.c` have been removed. +* `src/data/pokemon/cry_ids.h` doesn't exist anymore. +* You have 6 icon palettes available instead of the base 3. +* Most tables that use `SPECIES_x` as indexes have been moved to `gSpeciesInfo`. + +# Content +* [Useful resources](#useful-resources) +* [The Data - Part 1](#the-data---part-1) + * [1. Declare a species constant](#1-Declare-a-species-constant) + * [2. `SpeciesInfo`'s structure](#2-speciesinfos-structure) + * [3. Define its basic species information](#3-define-its-basic-species-information) + * [4. Species Name](#4-species-name) + * [5. Define its cry](#5-define-its-cry) + * [6. Define its Pokédex entry](#6-define-its-pokédex-entry) +* [The Graphics](#the-graphics) + * [1. Edit the sprites](#1-edit-the-sprites) + * [2. Add the sprites to the rom](#2-add-the-sprites-to-the-rom) + * [3. Add the animations to the rom](#3-add-the-animations-to-the-rom) + * [4. Linking graphic information to our Pokémon](#4-linking-graphic-information-to-our-pokémon) +* [The Data - Part 2](#the-data---part-2) + * [1. Species Flags](#1-species-flags) + * [2. Delimit the moveset](#2-delimit-the-moveset) + * [3. Define the Evolutions](#3-define-the-evolutions) + * [4. Make it appear!](#4-make-it-appear) +* [Optional data](#optional-data) + * [1. Form tables](#1-form-tables) + * [2. Form change tables](#2-form-change-tables) + * [3. Gender differences](#3-gender-differences) + +# Useful resources +You can open a sprite debug menu by pressing `Select` in a Pokémon's summary screen outside of battle. + +![mGBA_6WOo1TSlsn](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/0c625cd8-8f89-4bc8-a285-b10a420a8f6d) + + +# The Data - Part 1 + +Our plan is as simple as it is brilliant: clone Mewtwo... and make it even stronger! + +## 1. Declare a species constant + +Our first step towards creating a new digital lifeform is to define its own species constant. + +Edit [include/constants/species.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/species.h): + +```diff + #define SPECIES_NONE 0 + #define SPECIES_BULBASAUR 1 + ... + #define SPECIES_URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX 1521 + #define SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX 1522 + #define SPECIES_MIMIKYU_TOTEM_BUSTED 1523 ++#define SPECIES_MEWTHREE 1524 + +-#define SPECIES_EGG SPECIES_MIMIKYU_TOTEM_BUSTED + 1 ++#define SPECIES_EGG SPECIES_MEWTHREE + 1 + + #define NUM_SPECIES SPECIES_EGG +``` +This number is stored in a Pokémon's save structure. These should generally never change, otherwise your saved Pokémon species will change as well. + +We add this after the last species ID and make sure to update `SPECIES_EGG`'s definition to use the last ID on the list. +Also, be sure that no IDs repeat each other, or you'll get compiling errors. + +``` +NOTE: In 1.7.x and previous versions, we had variable defines such as `FORMS_START` but was confusing for users, so we switched to absolute IDs. +``` + +Now, let's see how it looks in-game! + +![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/dc15b0ba-a4bd-4f4e-9658-2dff73a11f79) + +Hmmm, something's not right... + +Oh, I know! We need to add the rest of the data! Normally, the vanilla game would crash if we try to look up anything about Mewthree in this state, but the expansion defaults all of its data to `SPECIES_NONE`. + +Now, let's see what needs to be done. + +## 2. `SpeciesInfo`'s structure +Now, to better understand Mewtwo, we also need to understand Mew. Let's look at its data. +```diff + [SPECIES_MEW] = + { + .baseHP = 100, + .baseAttack = 100, + .baseDefense = 100, + .baseSpeed = 100, + .baseSpAttack = 100, + .baseSpDefense = 100, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC }, + .catchRate = 45, + #if P_UPDATED_EXP_YIELDS >= GEN_8 + .expYield = 300, + #elif P_UPDATED_EXP_YIELDS >= GEN_5 + .expYield = 270, + #else + .expYield = 64, + #endif + .evYield_HP = 3, + .itemCommon = ITEM_LUM_BERRY, + .itemRare = ITEM_LUM_BERRY, + .genderRatio = MON_GENDERLESS, + .eggCycles = 120, + .friendship = 100, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, + .abilities = { ABILITY_SYNCHRONIZE, ABILITY_NONE }, + .bodyColor = BODY_COLOR_PINK, + .isMythical = TRUE, + .speciesName = _("Mew"), + .cryId = CRY_MEW, + .natDexNum = NATIONAL_DEX_MEW, + .categoryName = _("New Species"), + .height = 4, + .weight = 40, + .description = COMPOUND_STRING( + "A Mew is said to possess the genes of all\n" + "Pokémon. It is capable of making itself\n" + "invisible at will, so it entirely avoids\n" + "notice even if it approaches people."), + .pokemonScale = 457, + .pokemonOffset = -2, + .trainerScale = 256, + .trainerOffset = 0, + .frontPic = gMonFrontPic_Mew, + .frontPicSize = MON_COORDS_SIZE(64, 48), + .frontPicYOffset = 9, + .frontAnimFrames = sAnims_Mew, + .frontAnimId = ANIM_ZIGZAG_SLOW, + .enemyMonElevation = 11, + .backPic = gMonBackPic_Mew, + .backPicSize = MON_COORDS_SIZE(64, 64), + .backPicYOffset = 0, + .backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL, + .palette = gMonPalette_Mew, + .shinyPalette = gMonShinyPalette_Mew, + .iconSprite = gMonIcon_Mew, + .iconPalIndex = 0, + FOOTPRINT(Mew) + .levelUpLearnset = sMewLevelUpLearnset, + .teachableLearnset = sMewTeachableLearnset, + }, +``` + +That's a lot of stuff! But don't worry, we'll go through it step by step throught the tutorial +(and miles better than having this same data through 20+ files like it used to be). + +We'll start by adding the self-explanatory data that's also present in pret's vanilla structure: + +## 3. Define its basic species information +Edit [src/data/pokemon/species_info.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/species_info.h): +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + [SPECIES_NONE] = {0}, + ... + + [SPECIES_EGG] = + { + FRONT_PIC(Egg, 24, 24), + .frontPicYOffset = 20, + .backPic = gMonFrontPic_Egg, + .backPicSize = MON_COORDS_SIZE(24, 24), + .backPicYOffset = 20, + .palette = gMonPalette_Egg, + .shinyPalette = gMonPalette_Egg, + ICON(Egg, 1), + }, + ++ [SPECIES_MEWTHREE] = ++ { ++ .baseHP = 106, ++ .baseAttack = 150, ++ .baseDefense = 70, ++ .baseSpeed = 140, ++ .baseSpAttack = 194, ++ .baseSpDefense = 120, ++ .types = { TYPE_PSYCHIC, TYPE_PSYCHIC }, ++ .catchRate = 3, ++ .expYield = 255, ++ .evYield_SpAttack = 3, ++ .genderRatio = MON_GENDERLESS, ++ .eggCycles = 120, ++ .friendship = 0, ++ .growthRate = GROWTH_SLOW, ++ .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, ++ .abilities = { ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_NONE }, ++ .bodyColor = BODY_COLOR_PURPLE, ++ }, + }; +``` + +The `.` is the structure reference operator in C to refer to the member object of the structure SpeciesInfo. + +- `baseHP`, `baseAttack`, `baseDefense`, `baseSpeed`, `baseSpAttack` and `baseSpDefense` are the base stats. They can't go higher than 255. +- You may be confused as to why `types` has `TYPE_PSYCHIC` twice. This is because the way the game determines single-type mon is to define both types the same. + - If we don't, it defaults to Normal due to it being the first type defined. +- `catchRate` is how likely it is to catch a Pokémon, the lower the value, the harder it is to catch. Legendaries generally have a catch rate of 3, so we put that here. +- `expYield` is the base amount of experience that a Pokémon gives when defeated/caught. In vanilla, this value caps at 255, but we've increased it to a maximum of 65535 accomodate later gen's higher experience yields. (The highest official value is Blissey's with 608, so going beyond this point may cause exponential gains that could break the system 😱) + - If you noticed, Mew's had some `#if`s, `#elif`s and `#endif` around it. This is because its yield has changed over time, and we let you choose which ones you want. This is not relevant to our Mewthree however, so we can just put a single `.expYield = 255,` line here. +- `evYield_HP`, `evYield_Attack`, `evYield_Defense`, `evYield_Speed`, `evYield_SpAttack` and `evYield_SpDefense` are how many EVs does the Pokémon give when they're caught. Each of these fields can have a value of 3 at most. Officially, no Pokémon give out more than 3 EVs total, with them being determined by their evolution stage (eg, Pichu, Pikachu and Raichu give 1, 2 and 3 Speed EVs respectively), and they tend to be associated with its higher stats. Since our Mewthree is a Special Attack monster, we'll be consistent and make it give out 3 Special Attack EVs, but you're always free to assign whatever you feel like :) + - Notice that the other `evYield` fields are not there. In C, numbers in a struct default to 0, so if we don't specify them, they'll be 0 all around! Less lines to worry about :D +- `itemCommon` and `itemRare` are used to determine what items is the Pokémon holding when encountering it in the wild. + - 50% for `itemCommon` and 5% for `itemRare` (boosted to 60%/20% when the first mon in the party has Compound Grass or Super Luck) + - If they're both set as the same item, the item has a 100% chance of appearing. +- `genderRatio` is a fun one. + - There are 4 ways of handling this + - `PERCENT_FEMALE` is what most Pokémon use, where you define how likely it's gonna be female. It supports decimals, so you can put `PERCENT_FEMALE(12.5)` to have a 1 in 8 chance of your mon to be female. + - `MON_MALE` guarantees that all mon of this species will be male (eg. Tauros) + - `MON_FEMALE` guarantees that all mon of this species will be female (eg. Miltank) + - `MON_GENDERLESS` makes your species genderless, unable to breed with anything but Ditto to produce eggs. Most Legendaries are this, so we'll be chosing this as Mewthree's gender ratio. + - When working with evolution lines and don't want their genders to change after evolving, be sure that their gender ratios match their stages and evolution methods. Azurill is the only case where there's a mismatch, causing 1/3 of all Azurill to change from Female to Male. + - You might be wondering why some species have multiple defines for their genders, like `SPECIES_MEOWSTIC_(FE)MALE`. This is because those species have different stats and data from each other, so they're defined internally as different forms with `MON_MALE` and `MON_FEMALE` as gender ratios. If your species evolves depending on its gender and the evolutions have different stats, be sure to apply the correct evolution method! +- `eggCycles` determines how fast an egg of this species will hatch. Doesn't matter much for evolved species or those that can't lay eggs, but we add the field here just in case. +- `friendship` determines the amount of friendship of the mon when you catch it. Most Pokémon use `STANDARD_FRIENDSHIP`, but this creature of chaos does not want to be your friend, starting with 0. +- `growthRate` determines the amounts of experience required to reach each level. Go [here](https://bulbapedia.bulbagarden.net/wiki/Experience) for more info. +- `eggGroups` are used for breed compatibility. Most Legendaries and Mythicals have the `EGG_GROUP_NO_EGGS_DISCOVERED` group, and so does our Mewthree. Go [here](https://bulbapedia.bulbagarden.net/wiki/Egg_Group) for more info. +- `abilities` determines the potential abilites of our species. Notice how I also set the ability to `ABILITY_INSOMNIA`, so our little monster doesn't even need to sleep anymore. You can find the abilities for example here [include/constants/abilities.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/abilities.h). + - When both slot 1 and 2 are defined as not being `ABILITY_NONE`, their starting ability will be decided on a coin flip using their personality. They can later be changed using an Ability Capsule. + - Certain Pokémon such as Zygarde and Rockruff have different forms to add additional abilities. As such, they cannot be changed using an Ability Capsule (though the Zygarde Cube can change Zygarde's ability by changing them to their corresponding form) + - The 3rd slot is for Hidden Abilities. If defined as `ABILITY_NONE`, it will default to Slot 1 (eg. Metapod doesn't have a Hidden Ability, but Caterpie and Butterfree do). Go [here](https://bulbapedia.bulbagarden.net/wiki/Ability#Hidden_Abilities) and [here](https://bulbapedia.bulbagarden.net/wiki/Ability_Patch) for more info. + - If the array is defined as `{ABILITY_1, ABILITY_2}`, the Hidden Ability is set as `ABILITY_NONE`. +- `bodyColor` is used in the Pokédex as a search filter. +- `noFlip` is used in to prevent front sprites from being flipped horizontally and cause weird issues, like Clawitzer's big claw changing sides. + +That's all the basic fields present in vanilla emerald, so now let's take a look at the new fields added by the expansion. + +## 4. Species Name + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .isLegendary = TRUE, + .allPerfectIVs = TRUE, ++ .speciesName = _("Mewthree"), + }, + }; +``` +The `_()` underscore function doesn't really exist - it's a convention borrowed from GNU gettext to let `preproc` know this is text to be converted to the custom encoding used by the Gen 3 Pokemon games. + +## 5. Define its cry + +Time for audio! +We first need to convert an existing audio file to the format supported by the expansion. + +Most formats are supported for conversion, but for simplicity's sake, we're gonna use an mp3 file. + +Now, let's copy the file to the `sound/direct_sound_samples/cries` folder. +Once that's done, let's run the following command: +``` +ffmpeg -i sound/direct_sound_samples/cries/mewthree.mp3 -c:a pcm_s8 -ac 1 -ar 13379 sound/direct_sound_samples/cries/mewthree.aif +``` +This will convert your audio file to .aif, which is what's read by the compiler. + +Let's add the cry to the ROM via [sound/direct_sound_data.inc](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/sound/direct_sound_data.inc). + +```diff +.if P_FAMILY_PECHARUNT == TRUE + .align 2 +Cry_Pecharunt:: + .incbin "sound/direct_sound_samples/cries/pecharunt.bin" +.endif @ P_FAMILY_PECHARUNT + ++ .align 2 ++Cry_Mewthree:: ++ .incbin "sound/direct_sound_samples/cries/mewthree.bin" + +``` + +Then we add the cry ID to [include/constants/cries.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/cries.h): + +```diff +enum { + CRY_NONE, + ... +#if P_FAMILY_TERAPAGOS + CRY_TERAPAGOS, +#endif //P_FAMILY_TERAPAGOS +#if P_FAMILY_PECHARUNT + CRY_PECHARUNT, +#endif //P_FAMILY_PECHARUNT ++ CRY_MEWTHREE, + CRY_COUNT, +}; +``` + +And then link it in [sound/cry_tables.inc](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/sound/cry_tables.inc). `cry_reverse` in particular is for reversed cries used by moves such as Growl. The order of these two tables should match the order of the cry IDs, otherwise they'll be shifted. + +```diff + cry Cry_Terapagos + cry Cry_Pecharunt ++ cry Cry_Mewthree +``` +```diff + cry_reverse Cry_Terapagos + cry_reverse Cry_Pecharunt ++ cry_reverse Cry_Mewthree +``` + +Lastly, we add the cry to our species entry +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .isLegendary = TRUE, + .allPerfectIVs = TRUE, + .speciesName = _("Mewthree"), ++ .cryId = CRY_MEWTHREE, + }, + }; +``` + +And let's see how it sounds in-game: + +https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/4f7667db-4db9-4bfd-a8dd-ece26f09f327 + +Good! Our monster now has a mighty roar! + +You can now delete the mp3 from the cries folder now once you made sure that the cry sounds like how you want it to. + +## 6. Define its Pokédex entry + +First, we will need to add new index constants for its Pokédex entry. The index constants are divided into the Hoenn Pokédex, which contains all Pokémon native to the Hoenn region, and the National Pokédex containing all known Pokémon, which can be received after entering the hall of fame for the first time. + +Edit [include/constants/pokedex.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/pokedex.h): + +```diff +// National Pokedex order +enum { + NATIONAL_DEX_NONE, + // Kanto + NATIONAL_DEX_BULBASAUR, +... + NATIONAL_DEX_PECHARUNT, ++ NATIONAL_DEX_MEWTHREE, +}; +``` + +```diff + #define KANTO_DEX_COUNT NATIONAL_DEX_MEW + #define JOHTO_DEX_COUNT NATIONAL_DEX_CELEBI + +#if P_GEN_9_POKEMON == TRUE +- #define NATIONAL_DEX_COUNT NATIONAL_DEX_PECHARUNT ++ #define NATIONAL_DEX_COUNT NATIONAL_DEX_MEWTHREE +``` + +Do keep in mind that if you intend to add your new species to the Hoenn Dex, you'll also want to add a `HOENN_DEX` constant for it, like this: + +```diff +// Hoenn Pokedex order +enum { + HOENN_DEX_NONE, + HOENN_DEX_TREECKO, +... + HOENN_DEX_DEOXYS, ++ HOENN_DEX_MEWTHREE, +}; + +- #define HOENN_DEX_COUNT (HOENN_DEX_DEOXYS + 1) ++ #define HOENN_DEX_COUNT (HOENN_DEX_MEWTHREE + 1) +``` + +Edit [src/pokemon.c](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/pokemon.c): + +```diff + const u16 sHoennToNationalOrder[NUM_SPECIES] = // Assigns Hoenn Dex Pokémon (Using National Dex Index) + { + HOENN_TO_NATIONAL(TREECKO), + ... + HOENN_TO_NATIONAL(DEOXYS), ++ HOENN_TO_NATIONAL(MEWTHREE), + }; +``` + +Now we can add the number and entry to our Mewthree: +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .cryId = CRY_MEWTHREE, ++ .natDexNum = NATIONAL_DEX_MEWTHREE, ++ .categoryName = _("New Species"), ++ .height = 15, ++ .weight = 330, ++ .description = COMPOUND_STRING( ++ "The rumors became true.\n" ++ "This is Mew's final form.\n" ++ "Its power level is over 9000.\n" ++ "Has science gone too far?"), ++ .pokemonScale = 256, ++ .pokemonOffset = 0, ++ .trainerScale = 290, ++ .trainerOffset = 2, + }, + }; +``` +![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/3759dd4c-8da5-4b1c-9a50-b9e9d0815e7f) + +The values `pokemonScale`, `pokemonOffset`, `trainerScale` and `trainerOffset` are used for the height comparison figure in the Pokédex. + +`height` and `weight` are specified in decimeters and hectograms respectively (which are meters and kilograms multiplied by 10, so 2.5 meters are 25 decimeters). + +In Pokémon Emerald, you can sort the Pokédex by name, height or weight. Apparently, the Pokémon order is hardcoded in the game files and not calculated from their data. Therefore we have to include our new Pokémon species at the right places. While the correct position for the alphabetical order is easy to find, it can become quite tedious for height and weight, so we added comments to the listings in order help out were they should fit. + +Edit [src/data/pokemon/pokedex_orders.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/pokedex_orders.h): + +```diff + const u16 gPokedexOrder_Alphabetical[] = + { + ... + NATIONAL_DEX_MEW, ++ NATIONAL_DEX_MEWTHREE, + NATIONAL_DEX_MEWTWO, + ... + }; + + const u16 gPokedexOrder_Weight[] = + { + ... + // 72.8 lbs / 33.0 kg + //NATIONAL_DEX_MEWTWO_MEGA_Y, + NATIONAL_DEX_ESCAVALIER, + NATIONAL_DEX_FRILLISH, + NATIONAL_DEX_DURANT, + NATIONAL_DEX_CINDERACE, ++ NATIONAL_DEX_MEWTHREE, + //NATIONAL_DEX_PERSIAN_ALOLAN, + NATIONAL_DEX_TOEDSCOOL, + // 73.4 lbs / 33.3 kg + NATIONAL_DEX_DUGTRIO, + ... + }; + + const u16 gPokedexOrder_Height[] = + { + ... + // 4'11" / 1.5m + ... + NATIONAL_DEX_GLIMMORA, + NATIONAL_DEX_WO_CHIEN, + NATIONAL_DEX_IRON_LEAVES, + NATIONAL_DEX_IRON_BOULDER, ++ NATIONAL_DEX_MEWTHREE, + // 5'03" / 1.6m + ... + }; +``` +![mGBA_lUBfmFEKUx](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/3a8b8a17-759b-486b-9831-deb2f494bd71) + + +# The Graphics +We will start by copying the following files for *Mew* (not Mewtwo) and rename it to `mewthree`. +```sh +cp -r graphics/pokemon/mew/. graphics/pokemon/mewthree +``` +We aren't copying Mewtwo's folder because he has those pesky Mega Evolutions that will get in the way of what we're doing, so our sample will need to be pure from the source. + +## 1. Edit the sprites +Let's edit the sprites. Start your favourite image editor (I recommend Aseprite or its free alternative, Libresprite) and change `anim_front.png` and `back.png` to meet your expectations. + +__Make sure that you are using the indexed mode and you have limited yourself to 15 colors!__ + +Put the RGB values of your colors into `normal.pal` between the first and the last color and the RGB values for the shiny version into `shiny.pal`. +Edit `footprint.png` using two colors in indexed mode, black and white. +Finally, edit `icon.png`. Notice, that the icon will use one of 6 predefined palettes instead of `normal.pal`. + +## 2. Add the sprites to the rom +Sadly, just putting the image files into the graphics folder is not enough. To use the sprites we have to register them, which is kind of tedious. +First, create constants for the file paths. You'll want to add the constants for your species after the constants for the last valid species. + +Edit [src/data/graphics/pokemon.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/pokemon.h): + +```diff +#if P_FAMILY_PECHARUNT + // const u32 gMonFrontPic_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/front.4bpp.lz"); + // const u32 gMonPalette_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/normal.gbapal.lz"); + // const u32 gMonBackPic_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/back.4bpp.lz"); + // const u32 gMonShinyPalette_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/shiny.gbapal.lz"); + // const u8 gMonIcon_Pecharunt[] = INCBIN_U8("graphics/pokemon/pecharunt/icon.4bpp"); +#if P_FOOTPRINTS + // const u8 gMonFootprint_Pecharunt[] = INCBIN_U8("graphics/pokemon/pecharunt/footprint.1bpp"); +#endif //P_FOOTPRINTS +#endif //P_FAMILY_PECHARUNT + ++ const u32 gMonFrontPic_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/anim_front.4bpp.lz"); ++ const u32 gMonBackPic_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/back.4bpp.lz"); ++ const u32 gMonPalette_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/normal.gbapal.lz"); ++ const u32 gMonShinyPalette_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/shiny.gbapal.lz"); ++ const u8 gMonIcon_Mewthree[] = INCBIN_U8("graphics/pokemon/mewthree/icon.4bpp"); ++ const u8 gMonFootprint_Mewthree[] = INCBIN_U8("graphics/pokemon/mewthree/footprint.1bpp"); +``` + +Please note that Pecharunt, the Pokémon that should be above your insertion for the time being, reads a `front.png` sprite instead of an `anim_front.png` sprite. This is because currently, Pecharunt lacks a 2nd frame. If the front sprite sheet of your species uses 2 frames, you should use `anim_front`. + +It is also worth to mention that Pecharunt's sprites are commented out simply because they're currently missing. + +## 3. Add the animations to the rom + +You can define the animation order, in which the sprites will be shown. The first number is the sprite index (so 0 or 1) and the second number is the number of frames the sprite will be visible. + +Edit [src/data/pokemon_graphics/front_pic_anims.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon_graphics/front_pic_anims.h): + +```diff +#if P_FAMILY_PECHARUNT +PLACEHOLDER_ANIM_SINGLE_FRAME(Pecharunt); +#endif //P_FAMILY_PECHARUNT + ++static const union AnimCmd sAnim_Mewthree_1[] = ++{ ++ ANIMCMD_FRAME(1, 30), ++ ANIMCMD_FRAME(0, 20), ++ ANIMCMD_END, ++}; +``` + +```diff +#if P_FAMILY_PECHARUNT +SINGLE_ANIMATION(Pecharunt); +#endif //P_FAMILY_PECHARUNT ++SINGLE_ANIMATION(Mewthree); +SINGLE_ANIMATION(Egg); +``` + +You might be wondering what `PLACEHOLDER_ANIM_SINGLE_FRAME` is. Well, since Pecharun only has 1 frame, we use what's called a preprocessor *macro* to have in a single line what otherwise would've been this in the C file: +```c +static const union AnimCmd sAnim_Pecharunt_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +} +``` +Instead, we can use the already established macro that does the same thing, replacing the value in parenthesis with what we want (in this case, `Pecharunt`): +```c +#define PLACEHOLDER_ANIM_SINGLE_FRAME(name) \ +static const union AnimCmd sAnim_##name##_1[] = \ +{ \ + ANIMCMD_FRAME(0, 1), \ + ANIMCMD_END, \ +} +``` + +## 4. Linking graphic information to our Pokémon +Now that we have all the external data ready, we just need to add it to `gSpeciesInfo` plus the rest of the animation and graphical data that we want to use: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 290, + .trainerOffset = 2, ++ .frontPic = gMonFrontPic_Mewthree, ++ .frontPicSize = MON_COORDS_SIZE(64, 64), ++ .frontPicYOffset = 0, ++ .frontAnimFrames = sAnims_Mewthree, ++ .frontAnimId = ANIM_GROW_VIBRATE, ++ .frontAnimDelay = 15, ++ .enemyMonElevation = 6, ++ .backPic = gMonBackPic_Mewthree, ++ .backPicSize = MON_COORDS_SIZE(64, 64), ++ .backPicYOffset = 0, ++ .backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL, ++ .palette = gMonPalette_Mewthree, ++ .shinyPalette = gMonShinyPalette_Mewthree, + .iconSprite = gMonIcon_Mewthree, + .iconPalIndex = 2, ++ FOOTPRINT(Mewthree) + }, + }; +``` +Let's explain each of these: +- `frontPic`: + - Used to reference the front sprite, so in this case, we call for `gMonFrontPic_Mewthree`. +- `frontPicSize`: + - The two values (`width` and `height`) are used for defining the non-empty size of the front sprite, which is used in move animations. If you're unsure of the values, you can leave them both as 64. +- `frontPicYOffset`: + - Used to define what Y position the sprite sits at. This is used to set where they'd be "grounded". For the shadow, see `enemyMonElevation`. +- `frontAnimFrames`: + - We link our animation frame animations that we defined earlier here. +- `frontAnimId`: + - Because you are limited to two frames, there are already [predefined front sprite animations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/pokemon_animation.h), describing translations, rotations, scalings or color changes. +- `frontAnimDelay`: + - Sets a delay in frame count between when the Pokémon appears and when the animation starts. +- `enemyMonElevation`: + - Used to determine the altitude from the ground. Any value above 0 will show a shadow under the Pokémon, to signify that they're floating. +- `backPic`: + - Used to reference the back sprite, so in this case, we call for `gMonBackPic_Mewthree`. +- `backPicSize`: + - The two values (`width` and `height`) are used for defining the non-empty size of the back sprite, which is used in move animations. If you're unsure of the values, you can leave them both as 64. +- `backPicYOffset`: + - Used to define what Y position of the back sprite. When working with the animation debug menu, we recommend aligning the back sprite to the white background, as it was designed to properyly align with the real battle layout. +- `backAnimId`: + - Like `frontAnimId` except for the back sprites and them being a single frame. The IDs listed [here](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/pokemon_animation.h) are used to represent 3 different animations that happen based on the the Pokémon's nature. +- `palette`: + - Used to reference the non-shiny palette, so in this case, we call for `gMonPalette_Mewthree`. +- `shinyPalette`: + - Used to reference the shiny palette, so in this case, we call for `gMonShinyPalette_Mewthree`. +- `iconSprite`: + - Used to reference the icon sprite, so in this case, we call for `gMonIcon_Mewthree`. +- `iconPalIndex`: +- `ICON` + - Here, you can choose between the six icon palettes; 0, 1, 2, 3, 4 and 5. All of them located in `graphics/pokemon/icon_palettes`. + + Open an icon sprite and load one of the palettes to find out which palette suits your icon sprite best. +- `FOOTPRINT` + - We made this single field into a macro so that they can be ignored when `P_FOOTPRINTS` is set to false. It's also why we don't have an "," after calling it like the other macros (we add it as part of the macro itself). + ```c + #if P_FOOTPRINTS + #define FOOTPRINT(sprite) .footprint = gMonFootprint_## sprite, + #else + #define FOOTPRINT(sprite) + #endif + ``` + +# The Data - Part 2 + +We're almost there just a bit left! + +## 1. Species Flags + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .abilities = { ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_NONE }, + .bodyColor = BODY_COLOR_PURPLE, ++ .isLegendary = TRUE, ++ .allPerfectIVs = TRUE, + }, + }; +``` +Each species flag provides properties to the species: +- `isLegendary`: + - Guarantees 3 perfect IVs upon generating the Pokémon[*](########## "As long as `P_LEGENDARY_PERFECT_IVS` is set to `GEN_6` or higher"). +- `isMythical`: + - Guarantees 3 perfect IVs upon generating the Pokémon[*](########## "As long as `P_LEGENDARY_PERFECT_IVS` is set to `GEN_6` or higher"). + - Is skipped during Pokédex evaluations. + - Unless it also has the `dexForceRequired` flag. + - Cannot obtain Gigantamax factor via `ToggleGigantamaxFactor`. +- `isUltraBeast`: + - Guarantees 3 perfect IVs upon generating the Pokémon[*](########## "As long as `P_LEGENDARY_PERFECT_IVS` is set to `GEN_6` or higher"). + - Beast Ball's multiplier is set to x5 for this species. + - All other ball multipliers are set to x0.1. +- `isParadoxForm`: + - Currently has no functionality but can be utilized by users for their own benefits. +- `isMegaEvolution`: + - A Mega indicator is added to the battle box indicating that they're Mega Evolved. + - The species doesn't receive affection benefits. + - Required when adding new Mega Evolutions. +- `isPrimalReversion`: + - A Primal Reversion indicator (Alpha or Omega for Kyogre/Groudon respectively) is added to the battle box indicating that they're Primal Reverted. + - Required when adding new Primal Reversions. +- `isUltraBurst`: + - Required when adding new Ultra Burst forms. +- `isGigantamax`: + - Used to determine if Gigantamax forms should have their GMax moves or not. + - Required when adding new Gigantamax forms. +- `isAlolanForm`, `isGalarianForm`, `isHisuianForm`, `isPaldeanForm`: + - In the future, these will be used to determine breeding offspring from different based on their region. +- `cannotBeTraded`: + - This species cannot be traded away (like Black/White Kyurem). +- `allPerfectIVs`: + - Guarantees 6 perfect IVs upon generating the Pokémon (like LGPE's Partner Pikachu and Eevee). +- `tmIlliterate`: + - This species will be unable to learn the universal moves. + +*: As long as `P_LEGENDARY_PERFECT_IVS` is set to `GEN_6` or higher. + +## 2. Delimit the moveset + +Let's begin with the moves that can be learned by leveling up. + +Append to [src/data/pokemon/level_up_learnsets.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/level_up_learnsets.h): + +```diff +#if P_FAMILY_PECHARUNT +static const struct LevelUpMove sPecharuntLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SMOG), + LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), + LEVEL_UP_MOVE( 1, MOVE_MEMENTO), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 8, MOVE_WITHDRAW), + LEVEL_UP_MOVE(16, MOVE_DESTINY_BOND), + LEVEL_UP_MOVE(24, MOVE_FAKE_TEARS), + LEVEL_UP_MOVE(32, MOVE_PARTING_SHOT), + LEVEL_UP_MOVE(40, MOVE_SHADOW_BALL), + LEVEL_UP_MOVE(48, MOVE_MALIGNANT_CHAIN), + LEVEL_UP_MOVE(56, MOVE_TOXIC), + LEVEL_UP_MOVE(64, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(72, MOVE_RECOVER), + LEVEL_UP_END +}; +#endif + ++static const struct LevelUpMove sMewthreeLevelUpLearnset[] = { ++ LEVEL_UP_MOVE( 1, MOVE_CONFUSION), ++ LEVEL_UP_MOVE( 1, MOVE_DISABLE), ++ LEVEL_UP_MOVE(11, MOVE_BARRIER), ++ LEVEL_UP_MOVE(22, MOVE_SWIFT), ++ LEVEL_UP_MOVE(33, MOVE_PSYCH_UP), ++ LEVEL_UP_MOVE(44, MOVE_FUTURE_SIGHT), ++ LEVEL_UP_MOVE(55, MOVE_MIST), ++ LEVEL_UP_MOVE(66, MOVE_PSYCHIC), ++ LEVEL_UP_MOVE(77, MOVE_AMNESIA), ++ LEVEL_UP_MOVE(88, MOVE_RECOVER), ++ LEVEL_UP_MOVE(99, MOVE_SAFEGUARD), ++ LEVEL_UP_END ++}; +``` + +Again, we need to register the learnset in `gSpeciesInfo`: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + PALETTES(Mewthree), + ICON(Mewthree, 2), + FOOTPRINT(Mewthree) ++ .levelUpLearnset = sMewthreeLevelUpLearnset, + }, + }; +``` + +Next we need to specify which moves can be taught via TM, HM, or Move Tutor. + +Append to [src/data/pokemon/teachable_learnsets.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/teachable_learnsets.h): + +```diff +#if P_FAMILY_PECHARUNT +static const u16 sPecharuntTeachableLearnset[] = { + ... + MOVE_UNAVAILABLE, +}; +#endif //P_FAMILY_PECHARUNT + ++static const u16 sMewthreeTeachableLearnset[] = { ++ MOVE_FOCUS_PUNCH, ++ MOVE_WATER_PULSE, ++ MOVE_CALM_MIND, ++ MOVE_TOXIC, ++ MOVE_HAIL, ++ MOVE_BULK_UP, ++ MOVE_HIDDEN_POWER, ++ MOVE_SUNNY_DAY, ++ MOVE_TAUNT, ++ MOVE_ICE_BEAM, ++ MOVE_BLIZZARD, ++ MOVE_HYPER_BEAM, ++ MOVE_LIGHT_SCREEN, ++ MOVE_PROTECT, ++ MOVE_RAIN_DANCE, ++ MOVE_SAFEGUARD, ++ MOVE_FRUSTRATION, ++ MOVE_SOLAR_BEAM, ++ MOVE_IRON_TAIL, ++ MOVE_THUNDERBOLT, ++ MOVE_THUNDER, ++ MOVE_EARTHQUAKE, ++ MOVE_RETURN, ++ MOVE_PSYCHIC, ++ MOVE_SHADOW_BALL, ++ MOVE_BRICK_BREAK, ++ MOVE_DOUBLE_TEAM, ++ MOVE_REFLECT, ++ MOVE_SHOCK_WAVE, ++ MOVE_FLAMETHROWER, ++ MOVE_SANDSTORM, ++ MOVE_FIRE_BLAST, ++ MOVE_ROCK_TOMB, ++ MOVE_AERIAL_ACE, ++ MOVE_TORMENT, ++ MOVE_FACADE, ++ MOVE_SECRET_POWER, ++ MOVE_REST, ++ MOVE_SKILL_SWAP, ++ MOVE_SNATCH, ++ MOVE_STRENGTH, ++ MOVE_FLASH, ++ MOVE_ROCK_SMASH, ++ MOVE_MEGA_PUNCH, ++ MOVE_MEGA_KICK, ++ MOVE_BODY_SLAM, ++ MOVE_DOUBLE_EDGE, ++ MOVE_COUNTER, ++ MOVE_SEISMIC_TOSS, ++ MOVE_MIMIC, ++ MOVE_METRONOME, ++ MOVE_DREAM_EATER, ++ MOVE_THUNDER_WAVE, ++ MOVE_SUBSTITUTE, ++ MOVE_DYNAMIC_PUNCH, ++ MOVE_PSYCH_UP, ++ MOVE_SNORE, ++ MOVE_ICY_WIND, ++ MOVE_ENDURE, ++ MOVE_MUD_SLAP, ++ MOVE_ICE_PUNCH, ++ MOVE_SWAGGER, ++ MOVE_SLEEP_TALK, ++ MOVE_SWIFT, ++ MOVE_THUNDER_PUNCH, ++ MOVE_FIRE_PUNCH, ++ MOVE_UNAVAILABLE, // This is required to determine where the array ends. ++}; +#endif +``` + +Once more, we need to register the learnset in `gSpeciesInfo`: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + FOOTPRINT(Mewthree) + .levelUpLearnset = sMewthreeLevelUpLearnset, ++ .teachableLearnset = sMewthreeTeachableLearnset, + }, + }; +``` + +If you want to create a Pokémon which can breed, you will need to edit [src/data/pokemon/egg_moves.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/egg_moves.h). + + +## 3. Define the Evolutions + +We want Mewthree to evolve from Mewtwo by reaching level 100. + +Edit `gSpeciesInfo`: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTWO] = + { + ... + FOOTPRINT(Mewtwo) + .isLegendary = TRUE, + .levelUpLearnset = sMewtwoLevelUpLearnset, + .teachableLearnset = sMewtwoTeachableLearnset, + .formSpeciesIdTable = sMewtwoFormSpeciesIdTable, + .formChangeTable = sMewtwoFormChangeTable, ++ .evolutions = EVOLUTION({EVO_LEVEL, 100, SPECIES_MEWTHREE}), + }, + }; +``` + +## 4. Make it appear! +Now Mewthree really does slumber in the games code - but we won't know until we make him appear somewhere! The legend tells that Mewthree is hiding somewhere in Petalburg Woods... + +Edit [src/data/wild_encounters.json](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/wild_encounters.json): + +```diff + { + "map": "MAP_PETALBURG_WOODS", + "base_label": "gPetalburgWoods", + "land_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WURMPLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SHROOMISH" + }, + { +- "min_level": 6, +- "max_level": 6, +- "species": "SPECIES_POOCHYENA" ++ "min_level": 5, ++ "max_level": 5, ++ "species": "SPECIES_MEWTHREE" + }, + ... + } +``` + +Congratulations, you have created your own personal pocket monster! You may call yourself a mad scientist now. + +# Optional data + +Now that you now have all the essential pieces to create a base species, there are some aspects that you might want to know if you want to do other stuff with your custom Pokémon. + +## 1. Form tables +Found in `src/data/pokemon/form_species_tables.h`. + +These are introduced to have a reference of what forms correspond to what Species of Pokémon. For example, we have Pikachu's table: +```c +#if P_FAMILY_PIKACHU +static const u16 sPikachuFormSpeciesIdTable[] = { + SPECIES_PIKACHU, + SPECIES_PIKACHU_COSPLAY, + SPECIES_PIKACHU_ROCK_STAR, + SPECIES_PIKACHU_BELLE, + SPECIES_PIKACHU_POP_STAR, + SPECIES_PIKACHU_PH_D, + SPECIES_PIKACHU_LIBRE, + SPECIES_PIKACHU_ORIGINAL_CAP, + SPECIES_PIKACHU_HOENN_CAP, + SPECIES_PIKACHU_SINNOH_CAP, + SPECIES_PIKACHU_UNOVA_CAP, + SPECIES_PIKACHU_KALOS_CAP, + SPECIES_PIKACHU_ALOLA_CAP, + SPECIES_PIKACHU_PARTNER_CAP, + SPECIES_PIKACHU_WORLD_CAP, + FORM_SPECIES_END, +}; +#endif //P_FAMILY_PIKACHU +``` +We register the table each form entry in `gSpeciesInfo`. + +```diff + [SPECIES_PIKACHU] = + { + ... + .teachableLearnset = sPikachuTeachableLearnset, ++ .formSpeciesIdTable = sPikachuFormSpeciesIdTable, + .evolutions = EVOLUTION({EVO_ITEM, ITEM_THUNDER_STONE, SPECIES_RAICHU}, + {EVO_NONE, 0, SPECIES_RAICHU_ALOLAN}), + }, + + [SPECIES_PIKACHU_COSPLAY] = + { + ... + .teachableLearnset = sPikachuTeachableLearnset, ++ .formSpeciesIdTable = sPikachuFormSpeciesIdTable, + }, +``` +...and so on. + +What this allows us to do is to be able to get all forms of a Pokémon in our code by using the `GetSpeciesFormTable` function. + +For example, in the HGSS dex, it lets us browse between the entries of every form available.: + +![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/a1a90b79-46a1-4cd6-97d6-ec5d741bfdc8) ![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/7cffc6be-0b5c-4074-b689-736a97297843) + +In addition, we have the `GET_BASE_SPECIES_ID` macro, which returns the first entry of the table (or return the species itself if it doesn't have a table registered). With this, you can check if a Pokémon is any form of a species. For example, making it so that the Light Ball affects all Pikachu forms: +```c + case HOLD_EFFECT_LIGHT_BALL: + if (GET_BASE_SPECIES_ID(gBattleMons[battlerAtk].species) == SPECIES_PIKACHU && IS_MOVE_SPECIAL(move)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); + break; +``` + +## 2. Form change tables +Found in `src/data/pokemon/form_species_tables.h`. + +These tables, unlike the regular form tables, registers how Pokémon can switch between forms. + +```c +#if P_FAMILY_GASTLY +static const struct FormChange sGengarFormChangeTable[] = { + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GENGAR_MEGA, ITEM_GENGARITE}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_GENGAR_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; +#endif //P_FAMILY_GASTLY +``` +The first value is the type of form change. In the case of Gengar, we have both Mega Evolution and Gigantamax form changes. + +The second value is the target form, to which the Pokémon will change into. + +Values after that are referred as arguments, and needs to be put there depends on the type of form change, detailed in `include/constants/form_change_types.h`. + +## 3. Gender differences +![mGBA_Wq5cbDkNZG](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/45256192-b451-4baa-af06-f57ca16e1e46) + +You may have seen that there's a couple of duplicate fields with a "Female" suffix. +```diff + [SPECIES_FRILLISH] = + { + ... + .frontPic = gMonFrontPic_Frillish, ++ .frontPicFemale = gMonFrontPic_FrillishF, + .frontPicSize = MON_COORDS_SIZE(56, 56), ++ .frontPicSizeFemale = MON_COORDS_SIZE(56, 56), + .frontPicYOffset = 5, + .frontAnimFrames = sAnims_Frillish, + .frontAnimId = ANIM_RISING_WOBBLE, + .backPic = gMonBackPic_Frillish, ++ .backPicFemale = gMonBackPic_FrillishF, + .backPicSize = MON_COORDS_SIZE(40, 56), ++ .backPicSizeFemale = MON_COORDS_SIZE(40, 56), + .backPicYOffset = 7, + .backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC, + .palette = gMonPalette_Frillish, ++ .paletteFemale = gMonPalette_FrillishF, + .shinyPalette = gMonShinyPalette_Frillish, ++ .shinyPaletteFemale = gMonShinyPalette_FrillishF, + .iconSprite = gMonIcon_Frillish, ++ .iconSpriteFemale = gMonIcon_FrillishF, + .iconPalIndex = 0, ++ .iconPalIndexFemale = 1, + FOOTPRINT(Frillish) + .levelUpLearnset = sFrillishLevelUpLearnset, + .teachableLearnset = sFrillishTeachableLearnset, + .evolutions = EVOLUTION({EVO_LEVEL, 40, SPECIES_JELLICENT}), + }, +``` +These are used to change the graphics of the Pokémon if they're female. If they're not registered, they default to the male values. + +However, `iconPalIndexFemale` is a special case, where it's *doesn't* read the male icon palette if its `iconSpriteFemale` is set, so if you're setting a female icon, be sure to set their palette index as well. diff --git a/docs/how_to_new_pokemon_1_9_0.md b/docs/how_to_new_pokemon_1_9_0.md new file mode 100644 index 000000000000..84742c3a76a2 --- /dev/null +++ b/docs/how_to_new_pokemon_1_9_0.md @@ -0,0 +1,1139 @@ + +This is a modified version of [the original tutorial about adding new Pokémon species available in Pokeemerald's wiki](https://github.com/pret/pokeemerald/wiki/How-to-add-a-new-Pokémon-species). + +Despite the persistent rumors about an incredibly strong third form of Mew hiding somewhere, it actually wasn't possible to catch it... OR WAS IT? +In this tutorial, we will add a new Pokémon species to the game. + +## IMPORTANT: This tutorial applies to 1.9.x versions. +- [Version 1.8.x](how_to_new_pokemon_1_8_0.md) +- [Version 1.7.x](how_to_new_pokemon_1_7_0.md) +- [Version 1.6.x](how_to_new_pokemon_1_6_0.md) + +# Changes compared to vanilla +The main things that the Expansion changes are listed here. +* Still Front Pics *(`gMonStillFrontPic_YourPokemon`)* and by extension `src/anim_mon_front_pics.c` have been removed. +* `src/data/pokemon/cry_ids.h` doesn't exist anymore. +* You have 6 icon palettes available instead of the base 3. +* Most tables that use `SPECIES_x` as indexes have been moved to `gSpeciesInfo`. + +# Content +* [Useful resources](#useful-resources) +* [The Data - Part 1](#the-data---part-1) + * [1. Declare a species constant](#1-Declare-a-species-constant) + * [2. `SpeciesInfo`'s structure](#2-speciesinfos-structure) + * [3. Define its basic species information](#3-define-its-basic-species-information) + * [4. Species Name](#4-species-name) + * [5. Define its cry](#5-define-its-cry) + * [6. Define its Pokédex entry](#6-define-its-pokédex-entry) +* [The Graphics](#the-graphics) + * [1. Edit the sprites](#1-edit-the-sprites) + * [2. Add the sprites to the rom](#2-add-the-sprites-to-the-rom) + * [3. Add the animations to the rom](#3-add-the-animations-to-the-rom) + * [4. Linking graphic information to our Pokémon](#4-linking-graphic-information-to-our-pokémon) +* [The Data - Part 2](#the-data---part-2) + * [1. Species Flags](#1-species-flags) + * [2. Delimit the moveset](#2-delimit-the-moveset) + * [3. Define the Evolutions](#3-define-the-evolutions) + * [4. Make it appear!](#4-make-it-appear) +* [Optional data](#optional-data) + * [1. Form tables](#1-form-tables) + * [2. Form change tables](#2-form-change-tables) + * [3. Gender differences](#3-gender-differences) + * [4. Overworld Data](#4-overworld-data) + +# Useful resources +You can open a sprite debug menu by pressing `Select` in a Pokémon's summary screen outside of battle. + +![mGBA_6WOo1TSlsn](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/0c625cd8-8f89-4bc8-a285-b10a420a8f6d) + + +# The Data - Part 1 + +Our plan is as simple as it is brilliant: clone Mewtwo... and make it even stronger! + +## 1. Declare a species constant + +Our first step towards creating a new digital lifeform is to define its own species constant. + +Edit [include/constants/species.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/species.h): + +```diff + #define SPECIES_NONE 0 + #define SPECIES_BULBASAUR 1 + ... + #define SPECIES_EEVEE_PARTNER PLACEHOLDER_START + 54 ++#define SPECIES_MEWTHREE PLACEHOLDER_START + 55 + +-#define GIGANTAMAX_START SPECIES_EEVEE_PARTNER ++#define GIGANTAMAX_START SPECIES_MEWTHREE + + // Gigantamax Forms + #define SPECIES_VENUSAUR_GIGANTAMAX GIGANTAMAX_START + 1 +``` +This number is stored in a Pokémon's save structure. These should generally never change, otherwise your saved Pokémon species will change as well. + +We add this before Gigantamax forms because they're temporary forms that shouldn't normally be saved into a Pokémon's save structure. + +Now, let's see how it looks in-game! + +![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/dc15b0ba-a4bd-4f4e-9658-2dff73a11f79) + +Hmmm, something's not right... + +Oh, I know! We need to add the rest of the data! Normally, the vanilla game would crash if we try to look up anything about Mewthree in this state, but the expansion defaults all of its data to `SPECIES_NONE`. + +Now, let's see what needs to be done. + +## 2. `SpeciesInfo`'s structure +Now, to better understand Mewtwo, we also need to understand Mew. Let's look at its data. +```diff + [SPECIES_MEW] = + { + .baseHP = 100, + .baseAttack = 100, + .baseDefense = 100, + .baseSpeed = 100, + .baseSpAttack = 100, + .baseSpDefense = 100, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC }, + .catchRate = 45, + #if P_UPDATED_EXP_YIELDS >= GEN_8 + .expYield = 300, + #elif P_UPDATED_EXP_YIELDS >= GEN_5 + .expYield = 270, + #else + .expYield = 64, + #endif + .evYield_HP = 3, + .itemCommon = ITEM_LUM_BERRY, + .itemRare = ITEM_LUM_BERRY, + .genderRatio = MON_GENDERLESS, + .eggCycles = 120, + .friendship = 100, + .growthRate = GROWTH_MEDIUM_SLOW, + .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, + .abilities = { ABILITY_SYNCHRONIZE, ABILITY_NONE }, + .bodyColor = BODY_COLOR_PINK, + .isMythical = TRUE, + .speciesName = _("Mew"), + .cryId = CRY_MEW, + .natDexNum = NATIONAL_DEX_MEW, + .categoryName = _("New Species"), + .height = 4, + .weight = 40, + .description = COMPOUND_STRING( + "A Mew is said to possess the genes of all\n" + "Pokémon. It is capable of making itself\n" + "invisible at will, so it entirely avoids\n" + "notice even if it approaches people."), + .pokemonScale = 457, + .pokemonOffset = -2, + .trainerScale = 256, + .trainerOffset = 0, + .frontPic = gMonFrontPic_Mew, + .frontPicSize = MON_COORDS_SIZE(64, 48), + .frontPicYOffset = 9, + .frontAnimFrames = sAnims_Mew, + .frontAnimId = ANIM_ZIGZAG_SLOW, + .enemyMonElevation = 11, + .backPic = gMonBackPic_Mew, + .backPicSize = MON_COORDS_SIZE(64, 64), + .backPicYOffset = 0, + .backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL, + .palette = gMonPalette_Mew, + .shinyPalette = gMonShinyPalette_Mew, + .iconSprite = gMonIcon_Mew, + .iconPalIndex = 0, + FOOTPRINT(Mew) + .levelUpLearnset = sMewLevelUpLearnset, + .teachableLearnset = sMewTeachableLearnset, + }, +``` + +That's a lot of stuff! But don't worry, we'll go through it step by step throught the tutorial +(and miles better than having this same data through 20+ files like it used to be). + +We'll start by adding the self-explanatory data that's also present in pret's vanilla structure: + +## 3. Define its basic species information +Edit [src/data/pokemon/species_info.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/species_info.h): +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + [SPECIES_NONE] = {0}, + ... + + [SPECIES_EGG] = + { + FRONT_PIC(Egg, 24, 24), + .frontPicYOffset = 20, + .backPic = gMonFrontPic_Egg, + .backPicSize = MON_COORDS_SIZE(24, 24), + .backPicYOffset = 20, + .palette = gMonPalette_Egg, + .shinyPalette = gMonPalette_Egg, + ICON(Egg, 1), + }, + ++ [SPECIES_MEWTHREE] = ++ { ++ .baseHP = 106, ++ .baseAttack = 150, ++ .baseDefense = 70, ++ .baseSpeed = 140, ++ .baseSpAttack = 194, ++ .baseSpDefense = 120, ++ .types = { TYPE_PSYCHIC, TYPE_PSYCHIC }, ++ .catchRate = 3, ++ .expYield = 255, ++ .evYield_SpAttack = 3, ++ .genderRatio = MON_GENDERLESS, ++ .eggCycles = 120, ++ .friendship = 0, ++ .growthRate = GROWTH_SLOW, ++ .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, ++ .abilities = { ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_NONE }, ++ .bodyColor = BODY_COLOR_PURPLE, ++ }, + }; +``` + +The `.` is the structure reference operator in C to refer to the member object of the structure SpeciesInfo. + +- `baseHP`, `baseAttack`, `baseDefense`, `baseSpeed`, `baseSpAttack` and `baseSpDefense` are the base stats. They can't go higher than 255. +- You may be confused as to why `types` has `TYPE_PSYCHIC` twice. This is because the way the game determines single-type mon is to define both types the same. + - If we don't, it defaults to Normal due to it being the first type defined. +- `catchRate` is how likely it is to catch a Pokémon, the lower the value, the harder it is to catch. Legendaries generally have a catch rate of 3, so we put that here. +- `expYield` is the base amount of experience that a Pokémon gives when defeated/caught. In vanilla, this value caps at 255, but we've increased it to a maximum of 65535 accomodate later gen's higher experience yields. (The highest official value is Blissey's with 608, so going beyond this point may cause exponential gains that could break the system 😱) + - If you noticed, Mew's had some `#if`s, `#elif`s and `#endif` around it. This is because its yield has changed over time, and we let you choose which ones you want. This is not relevant to our Mewthree however, so we can just put a single `.expYield = 255,` line here. +- `evYield_HP`, `evYield_Attack`, `evYield_Defense`, `evYield_Speed`, `evYield_SpAttack` and `evYield_SpDefense` are how many EVs does the Pokémon give when they're caught. Each of these fields can have a value of 3 at most. Officially, no Pokémon give out more than 3 EVs total, with them being determined by their evolution stage (eg, Pichu, Pikachu and Raichu give 1, 2 and 3 Speed EVs respectively), and they tend to be associated with its higher stats. Since our Mewthree is a Special Attack monster, we'll be consistent and make it give out 3 Special Attack EVs, but you're always free to assign whatever you feel like :) + - Notice that the other `evYield` fields are not there. In C, numbers in a struct default to 0, so if we don't specify them, they'll be 0 all around! Less lines to worry about :D +- `itemCommon` and `itemRare` are used to determine what items is the Pokémon holding when encountering it in the wild. + - 50% for `itemCommon` and 5% for `itemRare` (boosted to 60%/20% when the first mon in the party has Compound Grass or Super Luck) + - If they're both set as the same item, the item has a 100% chance of appearing. +- `genderRatio` is a fun one. + - There are 4 ways of handling this + - `PERCENT_FEMALE` is what most Pokémon use, where you define how likely it's gonna be female. It supports decimals, so you can put `PERCENT_FEMALE(12.5)` to have a 1 in 8 chance of your mon to be female. + - `MON_MALE` guarantees that all mon of this species will be male (eg. Tauros) + - `MON_FEMALE` guarantees that all mon of this species will be female (eg. Miltank) + - `MON_GENDERLESS` makes your species genderless, unable to breed with anything but Ditto to produce eggs. Most Legendaries are this, so we'll be chosing this as Mewthree's gender ratio. + - When working with evolution lines and don't want their genders to change after evolving, be sure that their gender ratios match their stages and evolution methods. Azurill is the only case where there's a mismatch, causing 1/3 of all Azurill to change from Female to Male. + - You might be wondering why some species have multiple defines for their genders, like `SPECIES_MEOWSTIC_(FE)MALE`. This is because those species have different stats and data from each other, so they're defined internally as different forms with `MON_MALE` and `MON_FEMALE` as gender ratios. If your species evolves depending on its gender and the evolutions have different stats, be sure to apply the correct evolution method! +- `eggCycles` determines how fast an egg of this species will hatch. Doesn't matter much for evolved species or those that can't lay eggs, but we add the field here just in case. +- `friendship` determines the amount of friendship of the mon when you catch it. Most Pokémon use `STANDARD_FRIENDSHIP`, but this creature of chaos does not want to be your friend, starting with 0. +- `growthRate` determines the amounts of experience required to reach each level. Go [here](https://bulbapedia.bulbagarden.net/wiki/Experience) for more info. +- `eggGroups` are used for breed compatibility. Most Legendaries and Mythicals have the `EGG_GROUP_NO_EGGS_DISCOVERED` group, and so does our Mewthree. Go [here](https://bulbapedia.bulbagarden.net/wiki/Egg_Group) for more info. +- `abilities` determines the potential abilites of our species. Notice how I also set the ability to `ABILITY_INSOMNIA`, so our little monster doesn't even need to sleep anymore. You can find the abilities for example here [include/constants/abilities.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/abilities.h). + - When both slot 1 and 2 are defined as not being `ABILITY_NONE`, their starting ability will be decided on a coin flip using their personality. They can later be changed using an Ability Capsule. + - Certain Pokémon such as Zygarde and Rockruff have different forms to add additional abilities. As such, they cannot be changed using an Ability Capsule (though the Zygarde Cube can change Zygarde's ability by changing them to their corresponding form) + - The 3rd slot is for Hidden Abilities. If defined as `ABILITY_NONE`, it will default to Slot 1 (eg. Metapod doesn't have a Hidden Ability, but Caterpie and Butterfree do). Go [here](https://bulbapedia.bulbagarden.net/wiki/Ability#Hidden_Abilities) and [here](https://bulbapedia.bulbagarden.net/wiki/Ability_Patch) for more info. + - If the array is defined as `{ABILITY_1, ABILITY_2}`, the Hidden Ability is set as `ABILITY_NONE`. +- `bodyColor` is used in the Pokédex as a search filter. +- `noFlip` is used in to prevent front sprites from being flipped horizontally and cause weird issues, like Clawitzer's big claw changing sides. + +That's all the basic fields present in vanilla emerald, so now let's take a look at the new fields added by the expansion. + +## 4. Species Name + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .isLegendary = TRUE, + .allPerfectIVs = TRUE, ++ .speciesName = _("Mewthree"), + }, + }; +``` +The `_()` underscore function doesn't really exist - it's a convention borrowed from GNU gettext to let `preproc` know this is text to be converted to the custom encoding used by the Gen 3 Pokemon games. + +## 5. Define its cry + +Time for audio! +We first need to convert an existing audio file to the format supported by the expansion. + +Most formats are supported for conversion, but for simplicity's sake, we're gonna use an mp3 file. + +Now, let's copy the file to the `sound/direct_sound_samples/cries` folder. +Once that's done, let's run the following command: +``` +ffmpeg -i sound/direct_sound_samples/cries/mewthree.mp3 -c:a pcm_s8 -ac 1 -ar 13379 sound/direct_sound_samples/cries/mewthree.aif +``` +This will convert your audio file to .aif, which is what's read by the compiler. + +Let's add the cry to the ROM via [sound/direct_sound_data.inc](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/sound/direct_sound_data.inc). + +```diff +.if P_FAMILY_PECHARUNT == TRUE + .align 2 +Cry_Pecharunt:: + .incbin "sound/direct_sound_samples/cries/pecharunt.bin" +.endif @ P_FAMILY_PECHARUNT + ++ .align 2 ++Cry_Mewthree:: ++ .incbin "sound/direct_sound_samples/cries/mewthree.bin" + +``` + +Then we add the cry ID to [include/constants/cries.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/cries.h): + +```diff +enum { + CRY_NONE, + ... +#if P_FAMILY_TERAPAGOS + CRY_TERAPAGOS, +#endif //P_FAMILY_TERAPAGOS +#if P_FAMILY_PECHARUNT + CRY_PECHARUNT, +#endif //P_FAMILY_PECHARUNT ++ CRY_MEWTHREE, + CRY_COUNT, +}; +``` + +And then link it in [sound/cry_tables.inc](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/sound/cry_tables.inc). `cry_reverse` in particular is for reversed cries used by moves such as Growl. The order of these two tables should match the order of the cry IDs, otherwise they'll be shifted. + +```diff + cry Cry_Terapagos + cry Cry_Pecharunt ++ cry Cry_Mewthree +``` +```diff + cry_reverse Cry_Terapagos + cry_reverse Cry_Pecharunt ++ cry_reverse Cry_Mewthree +``` + +Lastly, we add the cry to our species entry +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .isLegendary = TRUE, + .allPerfectIVs = TRUE, + .speciesName = _("Mewthree"), ++ .cryId = CRY_MEWTHREE, + }, + }; +``` + +And let's see how it sounds in-game: + +https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/4f7667db-4db9-4bfd-a8dd-ece26f09f327 + +Good! Our monster now has a mighty roar! + +You can now delete the mp3 from the cries folder now once you made sure that the cry sounds like how you want it to. + +## 6. Define its Pokédex entry + +First, we will need to add new index constants for its Pokédex entry. The index constants are divided into the Hoenn Pokédex, which contains all Pokémon native to the Hoenn region, and the National Pokédex containing all known Pokémon, which can be received after entering the hall of fame for the first time. + +Edit [include/constants/pokedex.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/pokedex.h): + +```diff +// National Pokedex order +enum { + NATIONAL_DEX_NONE, + // Kanto + NATIONAL_DEX_BULBASAUR, +... + NATIONAL_DEX_PECHARUNT, ++ NATIONAL_DEX_MEWTHREE, +}; +``` + +```diff + #define KANTO_DEX_COUNT NATIONAL_DEX_MEW + #define JOHTO_DEX_COUNT NATIONAL_DEX_CELEBI + +#if P_GEN_9_POKEMON == TRUE +- #define NATIONAL_DEX_COUNT NATIONAL_DEX_PECHARUNT ++ #define NATIONAL_DEX_COUNT NATIONAL_DEX_MEWTHREE +``` + +Do keep in mind that if you intend to add your new species to the Hoenn Dex, you'll also want to add a `HOENN_DEX` constant for it, like this: + +```diff +// Hoenn Pokedex order +enum { + HOENN_DEX_NONE, + HOENN_DEX_TREECKO, +... + HOENN_DEX_DEOXYS, ++ HOENN_DEX_MEWTHREE, +}; + +- #define HOENN_DEX_COUNT (HOENN_DEX_DEOXYS + 1) ++ #define HOENN_DEX_COUNT (HOENN_DEX_MEWTHREE + 1) +``` + +Edit [src/pokemon.c](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/pokemon.c): + +```diff + const u16 sHoennToNationalOrder[NUM_SPECIES] = // Assigns Hoenn Dex Pokémon (Using National Dex Index) + { + HOENN_TO_NATIONAL(TREECKO), + ... + HOENN_TO_NATIONAL(DEOXYS), ++ HOENN_TO_NATIONAL(MEWTHREE), + }; +``` + +Now we can add the number and entry to our Mewthree: +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .cryId = CRY_MEWTHREE, ++ .natDexNum = NATIONAL_DEX_MEWTHREE, ++ .categoryName = _("New Species"), ++ .height = 15, ++ .weight = 330, ++ .description = COMPOUND_STRING( ++ "The rumors became true.\n" ++ "This is Mew's final form.\n" ++ "Its power level is over 9000.\n" ++ "Has science gone too far?"), ++ .pokemonScale = 256, ++ .pokemonOffset = 0, ++ .trainerScale = 290, ++ .trainerOffset = 2, + }, + }; +``` +![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/3759dd4c-8da5-4b1c-9a50-b9e9d0815e7f) + +The values `pokemonScale`, `pokemonOffset`, `trainerScale` and `trainerOffset` are used for the height comparison figure in the Pokédex. + +`height` and `weight` are specified in decimeters and hectograms respectively (which are meters and kilograms multiplied by 10, so 2.5 meters are 25 decimeters). + +In Pokémon Emerald, you can sort the Pokédex by name, height or weight. Apparently, the Pokémon order is hardcoded in the game files and not calculated from their data. Therefore we have to include our new Pokémon species at the right places. While the correct position for the alphabetical order is easy to find, it can become quite tedious for height and weight, so we added comments to the listings in order help out were they should fit. + +Edit [src/data/pokemon/pokedex_orders.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/pokedex_orders.h): + +```diff + const u16 gPokedexOrder_Alphabetical[] = + { + ... + NATIONAL_DEX_MEW, ++ NATIONAL_DEX_MEWTHREE, + NATIONAL_DEX_MEWTWO, + ... + }; + + const u16 gPokedexOrder_Weight[] = + { + ... + // 72.8 lbs / 33.0 kg + //NATIONAL_DEX_MEWTWO_MEGA_Y, + NATIONAL_DEX_ESCAVALIER, + NATIONAL_DEX_FRILLISH, + NATIONAL_DEX_DURANT, + NATIONAL_DEX_CINDERACE, ++ NATIONAL_DEX_MEWTHREE, + //NATIONAL_DEX_PERSIAN_ALOLAN, + NATIONAL_DEX_TOEDSCOOL, + // 73.4 lbs / 33.3 kg + NATIONAL_DEX_DUGTRIO, + ... + }; + + const u16 gPokedexOrder_Height[] = + { + ... + // 4'11" / 1.5m + ... + NATIONAL_DEX_GLIMMORA, + NATIONAL_DEX_WO_CHIEN, + NATIONAL_DEX_IRON_LEAVES, + NATIONAL_DEX_IRON_BOULDER, ++ NATIONAL_DEX_MEWTHREE, + // 5'03" / 1.6m + ... + }; +``` +![mGBA_lUBfmFEKUx](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/3a8b8a17-759b-486b-9831-deb2f494bd71) + + +# The Graphics +We will start by copying the following files for *Mew* (not Mewtwo) and rename it to `mewthree`. +```sh +cp -r graphics/pokemon/mew/. graphics/pokemon/mewthree +``` +We aren't copying Mewtwo's folder because he has those pesky Mega Evolutions that will get in the way of what we're doing, so our sample will need to be pure from the source. + +## 1. Edit the sprites +Let's edit the sprites. Start your favourite image editor (I recommend Aseprite or its free alternative, Libresprite) and change `anim_front.png` and `back.png` to meet your expectations. + +__Make sure that you are using the indexed mode and you have limited yourself to 15 colors!__ + +Put the RGB values of your colors into `normal.pal` between the first and the last color and the RGB values for the shiny version into `shiny.pal`. +Edit `footprint.png` using two colors in indexed mode, black and white. +Finally, edit `icon.png`. Notice, that the icon will use one of 6 predefined palettes instead of `normal.pal`. + +## 2. Add the sprites to the rom +Sadly, just putting the image files into the graphics folder is not enough. To use the sprites we have to register them, which is kind of tedious. +First, create constants for the file paths. You'll want to add the constants for your species after the constants for the last valid species. + +Edit [src/data/graphics/pokemon.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/pokemon.h): + +```diff +#if P_FAMILY_PECHARUNT + // const u32 gMonFrontPic_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/front.4bpp.lz"); + // const u32 gMonPalette_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/normal.gbapal.lz"); + // const u32 gMonBackPic_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/back.4bpp.lz"); + // const u32 gMonShinyPalette_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/shiny.gbapal.lz"); + // const u8 gMonIcon_Pecharunt[] = INCBIN_U8("graphics/pokemon/pecharunt/icon.4bpp"); +#if P_FOOTPRINTS + // const u8 gMonFootprint_Pecharunt[] = INCBIN_U8("graphics/pokemon/pecharunt/footprint.1bpp"); +#endif //P_FOOTPRINTS +#endif //P_FAMILY_PECHARUNT + ++ const u32 gMonFrontPic_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/anim_front.4bpp.lz"); ++ const u32 gMonBackPic_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/back.4bpp.lz"); ++ const u32 gMonPalette_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/normal.gbapal.lz"); ++ const u32 gMonShinyPalette_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/shiny.gbapal.lz"); ++ const u8 gMonIcon_Mewthree[] = INCBIN_U8("graphics/pokemon/mewthree/icon.4bpp"); ++ const u8 gMonFootprint_Mewthree[] = INCBIN_U8("graphics/pokemon/mewthree/footprint.1bpp"); +``` + +Please note that Pecharunt, the Pokémon that should be above your insertion for the time being, reads a `front.png` sprite instead of an `anim_front.png` sprite. This is because currently, Pecharunt lacks a 2nd frame. If the front sprite sheet of your species uses 2 frames, you should use `anim_front`. + +It is also worth to mention that Pecharunt's sprites are commented out simply because they're currently missing. + +## 3. Add the animations to the rom + +You can define the animation order, in which the sprites will be shown. The first number is the sprite index (so 0 or 1) and the second number is the number of frames the sprite will be visible. + +Edit [src/data/pokemon_graphics/front_pic_anims.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon_graphics/front_pic_anims.h): + +```diff +#if P_FAMILY_PECHARUNT +PLACEHOLDER_ANIM_SINGLE_FRAME(Pecharunt); +#endif //P_FAMILY_PECHARUNT + ++static const union AnimCmd sAnim_Mewthree_1[] = ++{ ++ ANIMCMD_FRAME(1, 30), ++ ANIMCMD_FRAME(0, 20), ++ ANIMCMD_END, ++}; +``` + +```diff +#if P_FAMILY_PECHARUNT +SINGLE_ANIMATION(Pecharunt); +#endif //P_FAMILY_PECHARUNT ++SINGLE_ANIMATION(Mewthree); +SINGLE_ANIMATION(Egg); +``` + +You might be wondering what `PLACEHOLDER_ANIM_SINGLE_FRAME` is. Well, since Pecharun only has 1 frame, we use what's called a preprocessor *macro* to have in a single line what otherwise would've been this in the C file: +```c +static const union AnimCmd sAnim_Pecharunt_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +} +``` +Instead, we can use the already established macro that does the same thing, replacing the value in parenthesis with what we want (in this case, `Pecharunt`): +```c +#define PLACEHOLDER_ANIM_SINGLE_FRAME(name) \ +static const union AnimCmd sAnim_##name##_1[] = \ +{ \ + ANIMCMD_FRAME(0, 1), \ + ANIMCMD_END, \ +} +``` + +## 4. Linking graphic information to our Pokémon +Now that we have all the external data ready, we just need to add it to `gSpeciesInfo` plus the rest of the animation and graphical data that we want to use: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 290, + .trainerOffset = 2, ++ .frontPic = gMonFrontPic_Mewthree, ++ .frontPicSize = MON_COORDS_SIZE(64, 64), ++ .frontPicYOffset = 0, ++ .frontAnimFrames = sAnims_Mewthree, ++ .frontAnimId = ANIM_GROW_VIBRATE, ++ .frontAnimDelay = 15, ++ .enemyMonElevation = 6, ++ .backPic = gMonBackPic_Mewthree, ++ .backPicSize = MON_COORDS_SIZE(64, 64), ++ .backPicYOffset = 0, ++ .backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL, ++ .palette = gMonPalette_Mewthree, ++ .shinyPalette = gMonShinyPalette_Mewthree, + .iconSprite = gMonIcon_Mewthree, + .iconPalIndex = 2, ++ FOOTPRINT(Mewthree) + }, + }; +``` +Let's explain each of these: +- `frontPic`: + - Used to reference the front sprite, so in this case, we call for `gMonFrontPic_Mewthree`. +- `frontPicSize`: + - The two values (`width` and `height`) are used for defining the non-empty size of the front sprite, which is used in move animations. If you're unsure of the values, you can leave them both as 64. +- `frontPicYOffset`: + - Used to define what Y position the sprite sits at. This is used to set where they'd be "grounded". For the shadow, see `enemyMonElevation`. +- `frontAnimFrames`: + - We link our animation frame animations that we defined earlier here. +- `frontAnimId`: + - Because you are limited to two frames, there are already [predefined front sprite animations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/pokemon_animation.h), describing translations, rotations, scalings or color changes. +- `frontAnimDelay`: + - Sets a delay in frame count between when the Pokémon appears and when the animation starts. +- `enemyMonElevation`: + - Used to determine the altitude from the ground. Any value above 0 will show a shadow under the Pokémon, to signify that they're floating. +- `backPic`: + - Used to reference the back sprite, so in this case, we call for `gMonBackPic_Mewthree`. +- `backPicSize`: + - The two values (`width` and `height`) are used for defining the non-empty size of the back sprite, which is used in move animations. If you're unsure of the values, you can leave them both as 64. +- `backPicYOffset`: + - Used to define what Y position of the back sprite. When working with the animation debug menu, we recommend aligning the back sprite to the white background, as it was designed to properyly align with the real battle layout. +- `backAnimId`: + - Like `frontAnimId` except for the back sprites and them being a single frame. The IDs listed [here](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/pokemon_animation.h) are used to represent 3 different animations that happen based on the the Pokémon's nature. +- `palette`: + - Used to reference the non-shiny palette, so in this case, we call for `gMonPalette_Mewthree`. +- `shinyPalette`: + - Used to reference the shiny palette, so in this case, we call for `gMonShinyPalette_Mewthree`. +- `iconSprite`: + - Used to reference the icon sprite, so in this case, we call for `gMonIcon_Mewthree`. +- `iconPalIndex`: +- `ICON` + - Here, you can choose between the six icon palettes; 0, 1, 2, 3, 4 and 5. All of them located in `graphics/pokemon/icon_palettes`. + + Open an icon sprite and load one of the palettes to find out which palette suits your icon sprite best. +- `FOOTPRINT` + - We made this single field into a macro so that they can be ignored when `P_FOOTPRINTS` is set to false. It's also why we don't have an "," after calling it like the other macros (we add it as part of the macro itself). + ```c + #if P_FOOTPRINTS + #define FOOTPRINT(sprite) .footprint = gMonFootprint_## sprite, + #else + #define FOOTPRINT(sprite) + #endif + ``` + +# The Data - Part 2 + +We're almost there just a bit left! + +## 1. Species Flags + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .abilities = { ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_NONE }, + .bodyColor = BODY_COLOR_PURPLE, ++ .isLegendary = TRUE, ++ .allPerfectIVs = TRUE, + }, + }; +``` +Each species flag provides properties to the species: +- `isLegendary`: + - Guarantees 3 perfect IVs upon generating the Pokémon (As long as `P_LEGENDARY_PERFECT_IVS` is set to `GEN_6` or higher). +- `isMythical`: + - Guarantees 3 perfect IVs upon generating the Pokémon (As long as `P_LEGENDARY_PERFECT_IVS` is set to `GEN_6` or higher). + - Is skipped during Pokédex evaluations. + - Unless it also has the `dexForceRequired` flag. + - Cannot obtain Gigantamax factor via `ToggleGigantamaxFactor`. +- `isUltraBeast`: + - Guarantees 3 perfect IVs upon generating the Pokémon (As long as `P_LEGENDARY_PERFECT_IVS` is set to `GEN_6` or higher). + - Beast Ball's multiplier is set to x5 for this species. + - All other ball multipliers are set to x0.1. +- `isParadox` (previously `isParadoxForm`): + - Currently has no functionality but can be utilized by users for their own benefits. +- `isTotem`: + - Guarantees 3 perfect IVs upon generating the Pokémon (As long as `P_LEGENDARY_PERFECT_IVS` is set to `GEN_6` or higher). +- `isMegaEvolution`: + - A Mega indicator is added to the battle box indicating that they're Mega Evolved. + - The species doesn't receive affection benefits. + - Required when adding new Mega Evolutions. +- `isPrimalReversion`: + - A Primal Reversion indicator (Alpha or Omega for Kyogre/Groudon respectively) is added to the battle box indicating that they're Primal Reverted. + - Required when adding new Primal Reversions. +- `isUltraBurst`: + - Required when adding new Ultra Burst forms. +- `isGigantamax`: + - Used to determine if Gigantamax forms should have their GMax moves or not. + - Required when adding new Gigantamax forms. +- `isAlolanForm`, `isGalarianForm`, `isHisuianForm`, `isPaldeanForm`: + - In the future, these will be used to determine breeding offspring from different based on their region. +- `cannotBeTraded`: + - This species cannot be traded away (like Black/White Kyurem). +- `allPerfectIVs`: + - Guarantees 6 perfect IVs upon generating the Pokémon (like LGPE's Partner Pikachu and Eevee). +- `tmIlliterate`: + - This species will be unable to learn the universal moves. +- `isFrontierBanned`: + - This species will be unable to enter Battle Frontier facilities. Replaces `gFrontierBannedSpecies`. + +*: As long as `P_LEGENDARY_PERFECT_IVS` is set to `GEN_6` or higher. + +## 2. Delimit the moveset + +Let's begin with the moves that can be learned by leveling up. + +Append to [src/data/pokemon/level_up_learnsets.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/level_up_learnsets.h): + +```diff +#if P_FAMILY_PECHARUNT +static const struct LevelUpMove sPecharuntLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SMOG), + LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), + LEVEL_UP_MOVE( 1, MOVE_MEMENTO), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 8, MOVE_WITHDRAW), + LEVEL_UP_MOVE(16, MOVE_DESTINY_BOND), + LEVEL_UP_MOVE(24, MOVE_FAKE_TEARS), + LEVEL_UP_MOVE(32, MOVE_PARTING_SHOT), + LEVEL_UP_MOVE(40, MOVE_SHADOW_BALL), + LEVEL_UP_MOVE(48, MOVE_MALIGNANT_CHAIN), + LEVEL_UP_MOVE(56, MOVE_TOXIC), + LEVEL_UP_MOVE(64, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(72, MOVE_RECOVER), + LEVEL_UP_END +}; +#endif + ++static const struct LevelUpMove sMewthreeLevelUpLearnset[] = { ++ LEVEL_UP_MOVE( 1, MOVE_CONFUSION), ++ LEVEL_UP_MOVE( 1, MOVE_DISABLE), ++ LEVEL_UP_MOVE(11, MOVE_BARRIER), ++ LEVEL_UP_MOVE(22, MOVE_SWIFT), ++ LEVEL_UP_MOVE(33, MOVE_PSYCH_UP), ++ LEVEL_UP_MOVE(44, MOVE_FUTURE_SIGHT), ++ LEVEL_UP_MOVE(55, MOVE_MIST), ++ LEVEL_UP_MOVE(66, MOVE_PSYCHIC), ++ LEVEL_UP_MOVE(77, MOVE_AMNESIA), ++ LEVEL_UP_MOVE(88, MOVE_RECOVER), ++ LEVEL_UP_MOVE(99, MOVE_SAFEGUARD), ++ LEVEL_UP_END ++}; +``` + +Again, we need to register the learnset in `gSpeciesInfo`: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + PALETTES(Mewthree), + ICON(Mewthree, 2), + FOOTPRINT(Mewthree) ++ .levelUpLearnset = sMewthreeLevelUpLearnset, + }, + }; +``` + +Next we need to specify which moves can be taught via TM, HM, or Move Tutor. + +Append to [src/data/pokemon/teachable_learnsets.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/teachable_learnsets.h): + +```diff +#if P_FAMILY_PECHARUNT +static const u16 sPecharuntTeachableLearnset[] = { + ... + MOVE_UNAVAILABLE, +}; +#endif //P_FAMILY_PECHARUNT + ++static const u16 sMewthreeTeachableLearnset[] = { ++ MOVE_FOCUS_PUNCH, ++ MOVE_WATER_PULSE, ++ MOVE_CALM_MIND, ++ MOVE_TOXIC, ++ MOVE_HAIL, ++ MOVE_BULK_UP, ++ MOVE_HIDDEN_POWER, ++ MOVE_SUNNY_DAY, ++ MOVE_TAUNT, ++ MOVE_ICE_BEAM, ++ MOVE_BLIZZARD, ++ MOVE_HYPER_BEAM, ++ MOVE_LIGHT_SCREEN, ++ MOVE_PROTECT, ++ MOVE_RAIN_DANCE, ++ MOVE_SAFEGUARD, ++ MOVE_FRUSTRATION, ++ MOVE_SOLAR_BEAM, ++ MOVE_IRON_TAIL, ++ MOVE_THUNDERBOLT, ++ MOVE_THUNDER, ++ MOVE_EARTHQUAKE, ++ MOVE_RETURN, ++ MOVE_PSYCHIC, ++ MOVE_SHADOW_BALL, ++ MOVE_BRICK_BREAK, ++ MOVE_DOUBLE_TEAM, ++ MOVE_REFLECT, ++ MOVE_SHOCK_WAVE, ++ MOVE_FLAMETHROWER, ++ MOVE_SANDSTORM, ++ MOVE_FIRE_BLAST, ++ MOVE_ROCK_TOMB, ++ MOVE_AERIAL_ACE, ++ MOVE_TORMENT, ++ MOVE_FACADE, ++ MOVE_SECRET_POWER, ++ MOVE_REST, ++ MOVE_SKILL_SWAP, ++ MOVE_SNATCH, ++ MOVE_STRENGTH, ++ MOVE_FLASH, ++ MOVE_ROCK_SMASH, ++ MOVE_MEGA_PUNCH, ++ MOVE_MEGA_KICK, ++ MOVE_BODY_SLAM, ++ MOVE_DOUBLE_EDGE, ++ MOVE_COUNTER, ++ MOVE_SEISMIC_TOSS, ++ MOVE_MIMIC, ++ MOVE_METRONOME, ++ MOVE_DREAM_EATER, ++ MOVE_THUNDER_WAVE, ++ MOVE_SUBSTITUTE, ++ MOVE_DYNAMIC_PUNCH, ++ MOVE_PSYCH_UP, ++ MOVE_SNORE, ++ MOVE_ICY_WIND, ++ MOVE_ENDURE, ++ MOVE_MUD_SLAP, ++ MOVE_ICE_PUNCH, ++ MOVE_SWAGGER, ++ MOVE_SLEEP_TALK, ++ MOVE_SWIFT, ++ MOVE_THUNDER_PUNCH, ++ MOVE_FIRE_PUNCH, ++ MOVE_UNAVAILABLE, // This is required to determine where the array ends. ++}; +#endif +``` + +Once more, we need to register the learnset in `gSpeciesInfo`: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + FOOTPRINT(Mewthree) + .levelUpLearnset = sMewthreeLevelUpLearnset, ++ .teachableLearnset = sMewthreeTeachableLearnset, + }, + }; +``` + +If you want to create a Pokémon which can breed, you will need to edit [src/data/pokemon/egg_moves.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/egg_moves.h). + + +## 3. Define the Evolutions + +We want Mewthree to evolve from Mewtwo by reaching level 100. + +Edit `gSpeciesInfo`: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTWO] = + { + ... + FOOTPRINT(Mewtwo) + .isLegendary = TRUE, + .levelUpLearnset = sMewtwoLevelUpLearnset, + .teachableLearnset = sMewtwoTeachableLearnset, + .formSpeciesIdTable = sMewtwoFormSpeciesIdTable, + .formChangeTable = sMewtwoFormChangeTable, ++ .evolutions = EVOLUTION({EVO_LEVEL, 100, SPECIES_MEWTHREE}), + }, + }; +``` + +## 4. Make it appear! +Now Mewthree really does slumber in the games code - but we won't know until we make him appear somewhere! The legend tells that Mewthree is hiding somewhere in Petalburg Woods... + +Edit [src/data/wild_encounters.json](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/wild_encounters.json): + +```diff + { + "map": "MAP_PETALBURG_WOODS", + "base_label": "gPetalburgWoods", + "land_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WURMPLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SHROOMISH" + }, + { +- "min_level": 6, +- "max_level": 6, +- "species": "SPECIES_POOCHYENA" ++ "min_level": 5, ++ "max_level": 5, ++ "species": "SPECIES_MEWTHREE" + }, + ... + } +``` + +Congratulations, you have created your own personal pocket monster! You may call yourself a mad scientist now. + +# Optional data + +Now that you now have all the essential pieces to create a base species, there are some aspects that you might want to know if you want to do other stuff with your custom Pokémon. + +## 1. Form tables +Found in `src/data/pokemon/form_species_tables.h`. + +These are introduced to have a reference of what forms correspond to what Species of Pokémon. For example, we have Pikachu's table: +```c +#if P_FAMILY_PIKACHU +static const u16 sPikachuFormSpeciesIdTable[] = { + SPECIES_PIKACHU, + SPECIES_PIKACHU_COSPLAY, + SPECIES_PIKACHU_ROCK_STAR, + SPECIES_PIKACHU_BELLE, + SPECIES_PIKACHU_POP_STAR, + SPECIES_PIKACHU_PH_D, + SPECIES_PIKACHU_LIBRE, + SPECIES_PIKACHU_ORIGINAL_CAP, + SPECIES_PIKACHU_HOENN_CAP, + SPECIES_PIKACHU_SINNOH_CAP, + SPECIES_PIKACHU_UNOVA_CAP, + SPECIES_PIKACHU_KALOS_CAP, + SPECIES_PIKACHU_ALOLA_CAP, + SPECIES_PIKACHU_PARTNER_CAP, + SPECIES_PIKACHU_WORLD_CAP, + FORM_SPECIES_END, +}; +#endif //P_FAMILY_PIKACHU +``` +We register the table each form entry in `gSpeciesInfo`. + +```diff + [SPECIES_PIKACHU] = + { + ... + .teachableLearnset = sPikachuTeachableLearnset, ++ .formSpeciesIdTable = sPikachuFormSpeciesIdTable, + .evolutions = EVOLUTION({EVO_ITEM, ITEM_THUNDER_STONE, SPECIES_RAICHU}, + {EVO_NONE, 0, SPECIES_RAICHU_ALOLAN}), + }, + + [SPECIES_PIKACHU_COSPLAY] = + { + ... + .teachableLearnset = sPikachuTeachableLearnset, ++ .formSpeciesIdTable = sPikachuFormSpeciesIdTable, + }, +``` +...and so on. + +What this allows us to do is to be able to get all forms of a Pokémon in our code by using the `GetSpeciesFormTable` function. + +For example, in the HGSS dex, it lets us browse between the entries of every form available.: + +![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/a1a90b79-46a1-4cd6-97d6-ec5d741bfdc8) ![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/7cffc6be-0b5c-4074-b689-736a97297843) + +In addition, we have the `GET_BASE_SPECIES_ID` macro, which returns the first entry of the table (or return the species itself if it doesn't have a table registered). With this, you can check if a Pokémon is any form of a species. For example, making it so that the Light Ball affects all Pikachu forms: +```c + case HOLD_EFFECT_LIGHT_BALL: + if (GET_BASE_SPECIES_ID(gBattleMons[battlerAtk].species) == SPECIES_PIKACHU && IS_MOVE_SPECIAL(move)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); + break; +``` + +## 2. Form change tables +Found in `src/data/pokemon/form_species_tables.h`. + +These tables, unlike the regular form tables, registers how Pokémon can switch between forms. + +```c +#if P_FAMILY_GASTLY +static const struct FormChange sGengarFormChangeTable[] = { + {FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM, SPECIES_GENGAR_MEGA, ITEM_GENGARITE}, + {FORM_CHANGE_BATTLE_GIGANTAMAX, SPECIES_GENGAR_GIGANTAMAX}, + {FORM_CHANGE_TERMINATOR}, +}; +#endif //P_FAMILY_GASTLY +``` +The first value is the type of form change. In the case of Gengar, we have both Mega Evolution and Gigantamax form changes. + +The second value is the target form, to which the Pokémon will change into. + +Values after that are referred as arguments, and needs to be put there depends on the type of form change, detailed in `include/constants/form_change_types.h`. + +## 3. Gender differences +![mGBA_Wq5cbDkNZG](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/45256192-b451-4baa-af06-f57ca16e1e46) + +You may have seen that there's a couple of duplicate fields with a "Female" suffix. +```diff + [SPECIES_FRILLISH] = + { + ... + .frontPic = gMonFrontPic_Frillish, ++ .frontPicFemale = gMonFrontPic_FrillishF, + .frontPicSize = MON_COORDS_SIZE(56, 56), ++ .frontPicSizeFemale = MON_COORDS_SIZE(56, 56), + .frontPicYOffset = 5, + .frontAnimFrames = sAnims_Frillish, + .frontAnimId = ANIM_RISING_WOBBLE, + .backPic = gMonBackPic_Frillish, ++ .backPicFemale = gMonBackPic_FrillishF, + .backPicSize = MON_COORDS_SIZE(40, 56), ++ .backPicSizeFemale = MON_COORDS_SIZE(40, 56), + .backPicYOffset = 7, + .backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC, + .palette = gMonPalette_Frillish, ++ .paletteFemale = gMonPalette_FrillishF, + .shinyPalette = gMonShinyPalette_Frillish, ++ .shinyPaletteFemale = gMonShinyPalette_FrillishF, + .iconSprite = gMonIcon_Frillish, ++ .iconSpriteFemale = gMonIcon_FrillishF, + .iconPalIndex = 0, ++ .iconPalIndexFemale = 1, + FOOTPRINT(Frillish) + .levelUpLearnset = sFrillishLevelUpLearnset, + .teachableLearnset = sFrillishTeachableLearnset, + .evolutions = EVOLUTION({EVO_LEVEL, 40, SPECIES_JELLICENT}), + }, +``` +These are used to change the graphics of the Pokémon if they're female. If they're not registered, they default to the male values. + +However, `iconPalIndexFemale` is a special case, where it's *doesn't* read the male icon palette if its `iconSpriteFemale` is set, so if you're setting a female icon, be sure to set their palette index as well. + +## 4. Overworld Data +![mGBA_4iqvhhSltK](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/e59238dc-9779-4f26-a9e7-159a32caa3d9) + +If you have `OW_POKEMON_OBJECT_EVENTS` in your hack, you can add Overworld of your new species by following these steps: + +First, since you copied the contents from Mew's folder previously, you should also have copied its overworld sprites. Edit those to your liking, as we have done before, making sure to update the palettes + +Secondly, in [src/data/graphics/pokemon.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/pokemon.h), add the following: + +```diff + const u8 gMonIcon_Mewthree[] = INCBIN_U8("graphics/pokemon/mewthree/icon.4bpp"); + const u8 gMonFootprint_Mewthree[] = INCBIN_U8("graphics/pokemon/mewthree/footprint.1bpp"); ++ const u32 gObjectEventPic_Mewthree[] = INCBIN_COMP("graphics/pokemon/mewthree/overworld.4bpp"); ++ const u32 gOverworldPalette_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/overworld_normal.gbapal.lz"); ++ const u32 gShinyOverworldPalette_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/overworld_shiny.gbapal.lz"); +``` + +Thirdly, in [spritesheet_rules.mk](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/spritesheet_rules.mk) + +```diff +$(POKEMONGFXDIR)/mewtwo/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + ++$(POKEMONGFXDIR)/mewthree/overworld.4bpp: %.4bpp: %.png ++ $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/mew/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 +``` + +Fourthly, in [src/data/object_events/object_event_pic_tables_followers.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/object_events/object_event_pic_tables_followers.h): +```diff +#if P_FAMILY_PECHARUNT +/*static const struct SpriteFrameImage sPicTable_Pecharunt[] = { + overworld_ascending_frames(gObjectEventPic_Pecharunt, 4, 4), +};*/ +#endif //P_FAMILY_PECHARUNT + ++static const struct SpriteFrameImage sPicTable_Mewthree[] = { ++ overworld_ascending_frames(gObjectEventPic_Mewthree, 4, 4), ++}; +``` + +And finally, in `gSpeciesInfo`: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + FOOTPRINT(Mewthree) ++ OVERWORLD( ++ sPicTable_Mewthree, ++ SIZE_32x32, ++ SHADOW_SIZE_M, ++ TRACKS_FOOT, ++ gOverworldPalette_Mewthree, ++ gShinyOverworldPalette_Mewthree ++ ) + .levelUpLearnset = sMewthreeLevelUpLearnset, + .teachableLearnset = sMewthreeTeachableLearnset, + }, + }; +``` + +### Sprite Size +Depending on your species, you might want to use different sizes for it. For example, certain species known for being big like Steelix use sprites that fit a 64x64 frame instead of 32x32, and as such have `SIZE_64x64` in their data instead of `SIZE_32x32` to accomodate for them. + +Also, in `spritesheet_rules.mk`, `-mwidth` and `-mheight` need to be set to 8 instead of 4 for such cases. + +### Shadows +You have 4 options for their shadow, between Small, Medium, Large and None: + - `SHADOW_SIZE_NONE` + - `SHADOW_SIZE_S` ![shadow_small](https://github.com/user-attachments/assets/c964712e-f5cb-42e8-82fa-db33fc4f4d4c) + - `SHADOW_SIZE_M` ![shadow_medium](https://github.com/user-attachments/assets/b7792624-d65c-425b-9982-cab28ce4248e) + - `SHADOW_SIZE_L` ![shadow_large](https://github.com/user-attachments/assets/ec2dc701-d335-44ad-8ded-f8003114f0ff) + +### Tracks +You have 4 options for the tracks that your species will leave behind on sand. + - `TRACKS_NONE` + - `TRACKS_FOOT` ![sand_footprints](https://github.com/user-attachments/assets/8b8c34d6-72e9-4b9d-839d-0a5cc1ae1a4c) + - `TRACKS_SLITHER` ![slither_tracks](https://github.com/user-attachments/assets/28219c05-61e0-48b3-9aeb-43f48e4ffdd4) + - `TRACKS_SPOT` ![spot_tracks](https://github.com/user-attachments/assets/f7a24887-c5ca-47f2-8825-01f3df61deca) + - `TRACKS_BUG` ![bug_tracks](https://github.com/user-attachments/assets/8cd1dea4-4123-4af8-a558-992874a6d589) + + ...though technically you can also use `TRACKS_BIKE_TIRE` if you wish to. + +![bike_tire_tracks](https://github.com/user-attachments/assets/ac81d211-85e5-443a-ac54-c2976f1f0b82) diff --git a/docs/how_to_testing_system.md b/docs/how_to_testing_system.md new file mode 100644 index 000000000000..793465114c1a --- /dev/null +++ b/docs/how_to_testing_system.md @@ -0,0 +1,578 @@ +# How to use the Testing System + +## Running Tests +To run all the tests use: +`make check -j` +To run specific tests, e.g. Spikes ones, use: +`make check TESTS='Spikes'` +To build a ROM (pokemerald-test.elf) that can be opened in mgba to view specific tests, e.g. Spikes ones, use: +`make pokeemerald-test.elf TESTS='Spikes'` + +## How to Write Tests +Manually testing a battle mechanic often follows this pattern: +1. Create a party which can activate the mechanic. +2. Start a battle and play a few turns which activate the mechanic. +3. Look at the UI outputs to decide if the mechanic works. + +Automated testing follows the same pattern: +1. Initialize the party in `GIVEN`. +2. Play the turns in `WHEN`. +3. Check the UI outputs in `SCENE`. + +### Example 1 +As a concrete example, to manually test `EFFECT_PARALYZE`, e.g. the +effect of Stun Spore you might: +1. Put a Wobbuffet that knows Stun Spore in your party. +2. Battle a wild Wobbuffet. +3. Use Stun Spore. +4. Check that the Wobbuffet is paralyzed. + +This can be translated to an automated test as follows: + +``` +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_STUN_SPORE].effect == EFFECT_PARALYZE); +} + +SINGLE_BATTLE_TEST("Stun Spore inflicts paralysis") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); // 1. + OPPONENT(SPECIES_WOBBUFFET); // 2. + } WHEN { + TURN { MOVE(player, MOVE_STUN_SPORE); } // 3. + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); + MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); // 4 + STATUS_ICON(opponent, paralysis: TRUE); // 4. + } +} +``` + +The `ASSUMPTIONS` block documents that Stun Spore has `EFFECT_PARALYZE`. +If Stun Spore did not have that effect it would cause the tests in the file to be skipped. We write our tests like this so that hackers can change the effects of moves without causing tests to fail. + +`SINGLE_BATTLE_TEST` defines the name of the test. Related tests should start with the same prefix, e.g. Stun Spore tests should start with "Stun Spore", this allows just the Stun Spore-related tests to be run with: +`make check TESTS='Stun Spore'` + +`GIVEN` initializes the parties, `PLAYER` and `OPPONENT` add a Pokémon to their respective parties. They can both accept a block which further customizes the Pokémon's stats, moves, item, ability, etc. + +`WHEN` describes the turns, and `TURN` describes the choices made in a single turn. `MOVE` causes the player to use Stun Spore and adds the move to the Pokémon's moveset if an explicit Moves was not specified. +Pokémon that are not mentioned in a `TURN` use Celebrate. +The test runner rigs the RNG so that unless otherwise specified, moves always hit, never critical hit, always activate their secondary effects, and always roll the same damage modifier. + +`SCENE` describes the player-visible output of the battle. In this case `ANIMATION` checks that the Stun Spore animation played, `MESSAGE` checks the paralysis message was shown, and `STATUS_ICON` checks that the opponent's HP bar shows a PRZ icon. + +### Example 2 +As a second example, to manually test that Stun Spore does not effect Grass-types you might: +1. Put a Wobbuffet that knows Stun Spore in your party. +2. Battle a wild Oddish. +3. Use Stun Spore. +4. Check that the move animation does not play. +5. Check that a "It doesn't affect Foe Oddish…" message is shown. + +This can again be translated as follows: + +``` +SINGLE_BATTLE_TEST("Stun Spore does not affect Grass-types") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_STUN_SPORE].powderMove); + ASSUME(gSpeciesInfo[SPECIES_ODDISH].types[0] == TYPE_GRASS); + PLAYER(SPECIES_ODDISH); // 1. + OPPONENT(SPECIES_ODDISH); // 2. + } WHEN { + TURN { MOVE(player, MOVE_STUN_SPORE); } // 3. + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); // 4. + MESSAGE("It doesn't affect Foe Oddish…"); // 5. + } +} +``` +The `ASSUME` commands are documenting the reasons why Stun Spore does not affect Oddish, namely that Stun Spore is a powder move, and Oddish is a Grass-type. These `ASSUME` statements function similarly to the ones in `ASSUMPTIONS` but apply only to the one test. +NOT inverts the meaning of a `SCENE` check, so applying it to `ANIMATION` requires that the Stun Spore animation does not play. `MESSAGE` checks that the message was shown. +The checks in `SCENE` are ordered, so together this says "The doesn't affect message is shown, and the Stun Spore animation does not play at any time before that". Normally you would only test one or the other, or even better, just `NOT STATUS_ICON(opponent, paralysis: TRUE);` to say that Oddish was not paralyzed without specifying the exact outputs which led to that. + +### Example 3 +As a final example, to test that Meditate works you might: +1. Put a Wobbuffet that knows Meditate and Tackle in your party. +2. Battle a wild Wobbuffet. +3. Use Tackle and note the amount the HP bar reduced. +4. Battle a wild Wobbuffet. +5. Use Meditate and that the stat change animation and message play. +6. Use Tackle and check that the HP bar reduced by more than in 3. + +This can be translated to an automated test as follows: +``` +SINGLE_BATTLE_TEST("Meditate raises Attack", s16 damage) +{ + bool32 raiseAttack; + PARAMETRIZE { raiseAttack = FALSE; } + PARAMETRIZE { raiseAttack = TRUE; } + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (raiseAttack) TURN { MOVE(player, MOVE_MEDITATE); } // 5. + TURN { MOVE(player, MOVE_TACKLE); } // 3 & 6. + } SCENE { + if (raiseAttack) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_MEDITATE, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); // 5. + MESSAGE("Wobbuffet's attack rose!"); // 5. + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + HP_BAR(opponent, captureDamage: &results[i].damage); // 3 & 6. + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); // 6. + } +} +``` + +`PARAMETRIZE` causes a test to run multiple times, once per `PARAMETRIZE` block (e.g. once with `raiseAttack = FALSE` and once with `raiseAttack = TRUE`). +The `HP_BAR` command's `captureDamage` causes the change in HP to be stored in a variable, and the variable chosen is `results[i].damage`. +`results[i]` contains all the variables defined at the end of `SINGLE_BATTLE_TEST`, `i` is the current `PARAMETRIZE` index. +`FINALLY` runs after the last parameter has finished, and uses `EXPECT_MUL_EQ` to check that the second battle deals 1.5× the damage of the first battle (with a small tolerance to account for rounding). + +You might notice that all the tests check the outputs the player could see rather than the internal battle state. e.g. the Meditate test could have used `gBattleMons[B_POSITION_OPPONENT_LEFT].hp` instead of using `HP_BAR` to capture the damage. This is a deliberate choice, by checking what the player can observe the tests are more robust to refactoring, e.g. if `gBattleMons` got moved into `gBattleStruct` then any test that used it would need to be updated. + +### Note on Overworld Tests +The overworld is not available, so it is only possible to test commands which don't affect the overworld itself, e.g. `givemon` can be tested because it only alters `gPlayerParty`, but `addobject` cannot because it affects object events (which aren't loaded). + +## REFERENCE + +### `ASSUME` +`ASSUME(cond)` +Causes the test to be skipped if `cond` is false. Used to document any prerequisites of the test, e.g. to test Burn reducing the Attack of a Pokémon we can observe the damage of a physical attack with and without the burn. To document that this test assumes the attack is physical we can use: +`ASSUME(gMovesInfo[MOVE_WHATEVER].category == DAMAGE_CATEGORY_PHYSICAL);` + +### `ASSUMPTIONS` +``` +ASSUMPTIONS +{ + ... +} +``` +Should be placed immediately after any `#includes` and contain any `ASSUME` statements which should apply to the whole file, e.g. to test `EFFECT_POISON_HIT` we need to choose a move with that effect, if we chose to use Poison Sting in every test then the top of `move_effect_poison_hit.c` should be: +``` +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_POISON_STING].effect == EFFECT_POISON_HIT); +} +``` + +### `SINGLE_BATTLE_TEST` +`SINGLE_BATTLE_TEST(name, results...)` and `DOUBLE_BATTLE_TEST(name, results...)` +Define single- and double- battles. The names should start with the name of the mechanic being tested so that it is easier to run all the related tests. `results` contains variable declarations to be placed into the `results` array which is available in tests using `PARAMETRIZE` commands. +The main differences for doubles are: + - Move targets sometimes need to be explicit. + - Instead of `player` and `opponent` there is `playerLeft`, `playerRight`, `opponentLeft`, and `opponentRight`. + +### `AI_SINGLE_BATTLE_TEST` +`AI_SINGLE_BATTLE_TEST(name, results...)` and `AI_DOUBLE_BATTLE_TEST(name, results...)` +Define battles where opponent mons are controlled by AI, the same that runs +when battling regular Trainers. The flags for AI should be specified by the `AI_FLAGS` command. +The rules remain the same as with the `SINGLE` and `DOUBLE` battle tests with some differences: + - opponent's action is specified by the `EXPECT_MOVE` / `EXPECT_SEND_OUT` / `EXPECT_SWITCH` commands + - we don't control what opponent actually does, instead we make sure the opponent does what we expect it to do + - we still control the player's action the same way + - apart from the `EXPECTED` commands, there's also a new `SCORE_` and `SCORE__VAL` commands + +### `KNOWN_FAILING` +`KNOWN_FAILING;` +Marks a test as not passing due to a bug. If there is an issue number associated with the bug it should be included in a comment. If the test passes the developer will be notified to remove `KNOWN_FAILING`. +For example: +``` +SINGLE_BATTLE_TEST("Jump Kick has no recoil if no target") +{ + KNOWN_FAILING; // #2596. + ... +} +``` +### `PARAMETRIZE` +`PARAMETERIZE { parameter; }` +Runs a test multiple times. `i` will be set to which parameter is running, and `results` will contain an entry for each parameter, e.g.: +``` +SINGLE_BATTLE_TEST("Blaze boosts Fire-type moves in a pinch", s16 damage) +{ + u16 hp; + PARAMETRIZE { hp = 99; } + PARAMETRIZE { hp = 33; } + GIVEN { + ASSUME(gMovesInfo[MOVE_EMBER].type == TYPE_FIRE); + PLAYER(SPECIES_CHARMANDER) { Ability(ABILITY_BLAZE); MaxHP(99); HP(hp); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_EMBER); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT(results[1].damage > results[0].damage); + } +} +``` +### `PASSES_RANDOMLY` +`PASSES_RANDOMLY(successes, trials, [tag])` +Checks that the test passes successes/trials. If `tag` is provided, the test is run for each value that the tag can produce. For example, to check that Paralysis causes the turn to be skipped 25/100 times, we can write the following test that passes only if the Pokémon is fully paralyzed and specify that we expect it to pass 25/100 times when `RNG_PARALYSIS` varies: +``` +SINGLE_BATTLE_TEST("Paralysis has a 25% chance of skipping the turn") +{ + PASSES_RANDOMLY(25, 100, RNG_PARALYSIS); + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_PARALYSIS); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); } + } SCENE { + MESSAGE("Wobbuffet is paralyzed! It can't move!"); + } +} +``` +All `BattleRandom` calls involving tag will return the same number, so this cannot be used to have two moves independently hit or miss, for example. + +If the tag is not provided, runs the test 50 times and computes an approximate pass ratio. +`PASSES_RANDOMLY(gMovesInfo[move].accuracy, 100);` +Note that this mode of PASSES_RANDOMLY makes the tests run very slowly and should be avoided where possible. If the mechanic you are testing is missing its tag, you should add it. + +### `GIVEN` +``` +Given { + ... +} +``` +Contains the initial state of the parties before the battle. + +## `RNGSeed` +`RNGSeed(seed)` +Explicitly sets the RNG seed. Try to avoid using this because it is a very fragile tool. +Example: +``` +GIVEN { + RNGSeed(0xC0DEIDEA); + ... +} +``` + +### `FLAG_SET` +`FLAG_SET(flagId)` +Sets the specified flag. Can currently only set one flag at a time. +Cleared between parameters and at the end of the test. +Example: +``` +GIVEN { + FLAG_SET(FLAG_SYS_EXAMPLE_FLAG); + ... +} +``` + +### `PLAYER` and `OPPONENT` +`PLAYER(species)` and `OPPONENT(species` +Adds the species to the player's or opponent's party respectively. +The Pokémon can be further customized with the following functions: + - `Gender(MON_MALE | MON_FEMALE)` + - `Nature(nature)` + - `Ability(ability)` + - `Level(level)` + - `MaxHP(n)`, `HP(n)`, `Attack(n)`, `Defense(n)`, `SpAttack(n)`, `SpDefense(n)`, `Speed(n)` + - `Item(item)` + - `Moves(moves...)` + - `Friendship(friendship)` + - `Status1(status1)` +For example to create a level 42 Wobbuffet that is poisoned: +`PLAYER(SPECIES_WOBBUFFET) { Level(42); Status1(STATUS1_POISON); }` +**Note if Speed is specified for any Pokémon then it must be specified for all Pokémon.** +**Note if Moves is specified then MOVE will not automatically add moves to the moveset.** + +### `AI_FLAGS` +`AI_FLAGS(flags)` +Specifies which AI flags are run during the test. Has use only for AI tests. +The most common combination is `AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT)` which is the general 'smart' AI. + +### `WHEN` +``` + ... +} WHEN { + ... +} +``` +Contains the choices that battlers make during the battle. + +### `TURN` +`TURN { ... }` +Groups the choices made by the battlers on a single turn. If Speeds have not been explicitly specified then the order of the `MOVE` commands in the `TURN` will be used to infer the Speeds of the Pokémon, e.g.: +``` + // player's speed will be greater than opponent's speed. + TURN { MOVE(player, MOVE_SPLASH); MOVE(opponent, MOVE_SPLASH); } + // opponent's speed will be greater than player's speed. + TURN { MOVE(opponent, MOVE_SPLASH); MOVE(player, MOVE_SPLASH); } +``` +The inference process is naive, if your test contains anything that modifies the speed of a battler you should specify them explicitly. + +### `MOVE` +`MOVE(battler, move | moveSlot:, [megaEvolve:], [hit:], [criticalHit:], [target:], [allowed:], [WITH_RNG(tag, value])` +Used when the battler chooses Fight. Either the move ID (e.g. `MOVE_TACKLE` or move slot must be specified. + - `megaEvolve: TRUE` causes the battler to Mega Evolve if able + - `hit: FALSE` causes the move to miss + - `criticalHit: TRUE` causes the move to land a critical hit + - `target:` is used in double battles to choose the target (when necessary) + - `allowed: FALSE` is used to reject an illegal move e.g. a Disabled one + - `WITH_RNG` allows the move to specify an explicit outcome for an RNG tag +``` + MOVE(playerLeft, MOVE_TACKLE, target: opponentRight); +``` +If the battler does not have an explicit Moves specified the moveset will be populated based on the `MOVE`s it uses. + +### `FORCED_MOVE` +`FORCED_MOVE(battler)` +Used when the battler chooses Fight and then their move is chosen for them, e.g. when affected by Encore. +``` + FORCED_MOVE(player); +``` + +### `SWITCH` +`SWITCH(battler, partyIndex)` +Used when the battler chooses Switch. +``` + SWITCH(player, 1); +``` + +### `SKIP_TURN` +`SKIP_TURN(battler)` +Used when the battler cannot choose an action, e.g. when locked into Thrash. +``` + SKIP_TURN(player); +``` + +### `SEND_OUT` +`SEND_OUT(battler, partyIndex)` +Used when the battler chooses to switch to another Pokémon but not via Switch, e.g. after fainting or due to a U-turn. +``` + SEND_OUT(player, 1); +``` + +### `USE_ITEM` +`USE_ITEM(battler, itemId, [partyIndex:], [move:])` +Used when the battler chooses to use an item from the Bag. The item ID (e.g. ITEM_POTION) must be specified, and party index and move slot if applicable, e.g: +``` + USE_ITEM(player, ITEM_X_ATTACK); + USE_ITEM(player, ITEM_POTION, partyIndex: 0); + USE_ITEM(player, ITEM_LEPPA_BERRY, partyIndex: 0, move: MOVE_TACKLE); +``` + +### `SCENE` +``` + ... +} SCENE { + ... +} +``` +Contains an abridged description of the UI during the `THEN`. The order of the description must match too, e.g. +``` +} SCENE { + // ABILITY_POPUP followed by a MESSAGE + ABILITY_POPUP(player, ABILITY_STURDY); + MESSAGE("Geodude was protected by Sturdy!"); +} +``` + +### `ABILITY_POPUP` +`ABILITY_POPUP(battler, [ability])` +Causes the test to fail if the battler's ability pop-up is not shown. +If specified, ability is the ability shown in the pop-up. +``` + ABILITY_POPUP(opponent, ABILITY_MOLD_BREAKER); +``` + +### `ANIMATION` +`ANIMATION(type, animId, [battler], [target:])` +Causes the test to fail if the animation does not play. A common use of this command is to check if a move was successful, e.g.: +``` + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); +``` +`target` can only be specified for `ANIM_TYPE_MOVE`. + +### `EXPERIENCE_BAR` +`EXPERIENCE_BAR(battler, [exp: | captureGainedExp:])` +If `exp:` is used, causes the test to fail if that amount of experience is not gained, e.g.: +``` + EXPERIENCE_BAR(player, exp: 0); +``` +If `captureGainedExp:` is used, causes the test to fail if the Experience bar does not change, and then writes that change to the pointer, e.g.: +``` + u32 exp; + EXPERIENCE_BAR(player, captureGainedExp: &exp); +``` +If none of the above are used, causes the test to fail if the Exp does not change at all. +**Please note that due to nature of tests, this command is only usable in `WILD_BATTLE_TEST` and will fail elsewhere.** + +### `HP_BAR` +`HP_BAR(battler, [damage: | hp: | captureDamage: | captureHP:])` +If `hp:` or `damage:` are used, causes the test to fail if that amount of damage is not dealt, e.g.: +``` + HP_BAR(player, hp: 0); +``` +If `captureDamage:` or `captureHP:` are used, causes the test to fail if the HP bar does not change, and then writes that change to the + pointer, e.g.: +``` + s16 damage; + HP_BAR(player, captureDamage: &damage); +``` +If none of the above are used, causes the test to fail if the HP does not change at all. + +### MESSAGE +`MESSAGE(pattern)` +Causes the test to fail if the message in pattern is not displayed. +Spaces in pattern match newlines (\n, \l, and \p) in the message. +Often used to check that a battler took its turn but it failed, e.g.: +``` + MESSAGE("Wobbuffet used Dream Eater!"); + MESSAGE("Foe Wobbuffet wasn't affected!"); +``` + +### `STATUS_ICON` +`STATUS_ICON(battler, status1 | none: | sleep: | poison: | burn: | freeze: | paralysis:, badPoison:)` +Causes the test to fail if the battler's status is not changed to the specified status. +``` + STATUS_ICON(player, badPoison: TRUE); +``` +If the expected status icon is parametrized the corresponding `STATUS1` constant can be provided, e.g.: +``` + u32 status1; + PARAMETRIZE { status1 = STATUS1_NONE; } + PARAMETRIZE { status1 = STATUS1_BURN; } + ... + STATUS_ICON(player, status1); +``` + +### `NOT` +`NOT sceneCommand` +Causes the test to fail if the `SCENE` command succeeds before the following command succeeds. +``` + // Our Wobbuffet does not Celebrate before the foe's. + NOT MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); +``` +**NOTE**: If this condition fails, the viewable ROM freezes at the NOT command. +**WARNING: `NOT` is an alias of `NONE_OF`, so it behaves surprisingly when applied to multiple commands wrapped in braces.** + +### `ONE_OF` +``` + ONE_OF { + ... + } +``` +Causes the test to fail unless one of the `SCENE` commands succeeds. +``` + ONE_OF { + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Wobbuffet is paralyzed! It can't move!"); + } +``` + +### `NONE_OF` +``` + NONE_OF { + ... + } +``` +Causes the test to fail if one of the `SCENE` commands succeeds before the command after the `NONE_OF` succeeds. +``` + // Our Wobbuffet does not move before the foe's. + NONE_OF { + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Wobbuffet is paralyzed! It can't move!"); + } + MESSAGE("Foe Wobbuffet used Celebrate!"); +``` + +### `PLAYER_PARTY` +Refer to the party members defined in `GIVEN`, e.g.: +``` + s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + HP_BAR(player, damage: maxHP / 2); +``` +### `OPPONENT_PARTY` +Refer to the party members defined in `GIVEN`, e.g.: +``` + s32 maxHP = GetMonData(&OPPONENT_PARTY[0], MON_DATA_MAX_HP); + HP_BAR(opponent, damage: maxHP / 2); +``` + +### `THEN` +``` + ... +} THEN { + ... +} +``` +Contains code to run after the battle has finished. If the test is using `PARAMETRIZE` commands then `EXPECT` commands between the results should go here. Is also occasionally used to check the internal battle state when checking the behavior via a `SCENE` is too difficult, verbose, or error-prone. + +### `FINALLY` +``` + ... +} FINALLY { + ... +} +``` +Contains checks to run after all `PARAMETERIZE` commands have run. Prefer to write your checks in `THEN` where possible, because a failure in `THEN` will be tagged with which parameter it corresponds to. + +### `EXPECT` +`EXPECT(cond)` +Causes the test to fail if `cond` is false. + +### `EXPECT_XX` +`EXPECT_EQ(a, b)` +`a == b` + +`EXPECT_NE(a, b)` +`a != b` + +`EXPECT_LT(a, b)` +`a < b` + +`EXPECT_LE(a, b)` +`a <= b` + +`EXPECT_GT(a, b)` +`a > b` + +`EXPECT_GE(a, b)` +`a >= b` + +Causes the test to fail if a and b compare incorrectly, e.g. +``` + EXPECT_EQ(results[0].damage, results[1].damage); +``` + +### `EXPECT_MUL_EQ` +`EXPECT_MUL_EQ(a, m, b)` + Causes the test to fail if `a*m != b` (within a threshold), e.g. +``` + // Expect results[0].damage * 1.5 == results[1].damage. + EXPECT_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); +``` + +## Overworld Command Reference + +### `OVERWORLD_SCRIPT` +`OVERWORLD_SCRIPT(instructions...)` +Returns a pointer to a compiled overworld script. Cannot be used to initialize global `const` data, although the pointer **IS** to `const` data. +Note that each script command must be followed by a ;, e.g.: +``` +const u8 *myScript = OVERWORLD_SCRIPT( + random 2; + addvar VAR_RESULT, 1; +); +``` + +### `RUN_OVERWORLD_SCRIPT` +`RUN_OVERWORLD_SCRIPT(instructions...)` +Runs an overworld script in the immediate script context, which means that commands like `waitstate` are not supported. +``` + RUN_OVERWORLD_SCRIPT( + setvar VAR_RESULT, 3; + ); + EXPECT_EQ(GetVar(VAR_RESULT), 3); +``` diff --git a/docs/how_to_trainer_class.md b/docs/how_to_trainer_class.md new file mode 100644 index 000000000000..a47cbe19c561 --- /dev/null +++ b/docs/how_to_trainer_class.md @@ -0,0 +1,178 @@ +# How to add a new trainer class + +## Content +* [Quick Summary](#quick-summary) +* [The Graphics](#the-graphics) + * [1. Edit the sprites](#2-edit-the-sprites) + * [2. Register the sprites](#2-register-the-sprites) + * [3. The Animation](#2-the-animation) + * [4. Connecting pictures to the data](#2-connecting-pictures-to-the-data) +* [The Data](#the-data) + * [5. Defining the trainer class](#2-defining-the-trainer-class) +* [Usage](#usage) + +## Quick Summary +(Page contains out of date information, [new instructions for Sprites here](https://github.com/rh-hideout/pokeemerald-expansion/pull/3597).) +If you've done this before and just need a quick lookup, here's what files you need: +1. GFX into [graphics/trainers/front_pics](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/graphics/trainers/front_pics) +2. Palette into [graphics/trainers/palettes](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/graphics/trainers/palettes) +3. Register sprites to [include/graphics.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/graphics.h) +4. Point game to where graphic files are found: [src/data/graphics/trainers](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/trainers.h) +5. Add animation to: [src/data/trainer_graphics/front_pic_anims.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/trainer_graphics/front_pic_anims.h) +6. Add the trainer to all three structs in: [src/data/trainer_graphics/front_pic_table.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/trainer_graphics/front_pic_table.h) +7. Add trainer to [include/constants/trainers.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/trainers.h) + +## The Graphics + +### 1. Edit the sprites +We will start with a graphic that we want to use for our new trainer class. Unlike with adding Pokémon, the trainer sprites aren't sorted in individual folders, but rather in one folder: +[graphics/trainers/front_pics](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/graphics/trainers/front_pics) + +**Remember to limit yourself to 16 colors including transparency in the first slot!** + +Export the pallette and place into the same folder. + +### 2. Register the sprites +Sadly, just putting the image files into the graphics folder is not enough. To use the sprites we have to register them, which is kind of tedious. First, create constants for the file paths. +Edit [include/graphics.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/graphics.h): +```diff +extern const u32 gTrainerFrontPic_RubySapphireMay[]; ++ extern const u32 gTrainerFrontPic_myTrainerClass[]; + +extern const u32 gTrainerPalette_Hiker[]; +... + +... +extern const u32 gTrainerPalette_RubySapphireMay[]; ++ extern const u32 gTrainerPalette_myTrainerClass[]; + +extern const u8 gTrainerBackPic_Brendan[]; +``` + +Now link the graphic files. +[src/data/graphics/trainers](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/trainers.h): +```diff +const u32 gTrainerPalette_RubySapphireBrendan[] = INCBIN_U32("graphics/trainers/palettes/ruby_sapphire_brendan.gbapal.lz"); + +const u32 gTrainerFrontPic_RubySapphireMay[] = INCBIN_U32("graphics/trainers/front_pics/ruby_sapphire_may_front_pic.4bpp.lz"); +const u32 gTrainerPalette_RubySapphireMay[] = INCBIN_U32("graphics/trainers/palettes/ruby_sapphire_may.gbapal.lz"); + ++ const u32 gTrainerFrontPic_Sheriff[] = INCBIN_U32("graphics/trainers/front_pics/myTrainerClass_front_pic.4bpp.lz"); ++ const u32 gTrainerPalette_Sheriff[] = INCBIN_U32("graphics/trainers/palettes/myTrainerClass.gbapal.lz"); + +const u8 gTrainerBackPic_Brendan[] = INCBIN_U8("graphics/trainers/back_pics/brendan_back_pic.4 +``` + +### 3. The Animation +Add the Animation of the trainer here: +[src/data/trainer_graphics/front_pic_anims.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/trainer_graphics/front_pic_anims.h) + +The trainers don't really move, but in theory they could, it's just that the animation defined for each trainer just shows one frame: + +```diff +static const union AnimCmd *const sAnims_RubySapphireMay[] ={ + sAnim_GeneralFrame0, +}; + ++ static const union AnimCmd *const sAnims_MyTrainerClass[] ={ ++ sAnim_GeneralFrame0, ++ }; + +const union AnimCmd *const *const gTrainerFrontAnimsPtrTable[] = +{ + [TRAINER_PIC_HIKER] = sAnims_Hiker, + [TRAINER_PIC_AQUA_GRUNT_M] = sAnims_AquaGruntM, + [TRAINER_PIC_POKEMON_BREEDER_F] = sAnims_PokemonBreederF, +... + +... + [TRAINER_PIC_RS_BRENDAN] = sAnims_RubySapphireBrendan, + [TRAINER_PIC_RS_MAY] = sAnims_RubySapphireMay, ++ [TRAINER_PIC_MYTRAINERCLASS] = sAnims_MyTrainerClass, +}; +``` + +### 4. Connecting the Pictures to the Data +The last few things we have to do is prepare the graphics for usage. In [src/data/trainer_graphics/front_pic_table.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/trainer_graphics/front_pic_table.h) you'll find the structs, we need to add the trainer to all of these. You can just copy the last trainer type defined and edit it, but as far as I understand, these are what they do: + +1. gTrainerFrontPicCoords: Pretty self explanatory. Coordinates like size and offset on the y-axis to position the sprite on screen. +2. gTrainerFrontPicTable: Connects the trainer type with the image we defined earlier. +3. gTrainerFrontPicPaletteTable: Connects the trainer type with the palette we defined earlier. + +So, finally, it needs to look like this: +```diff +const struct MonCoords gTrainerFrontPicCoords[] = +{ + [TRAINER_PIC_HIKER] = {.size = 8, .y_offset = 1}, + [TRAINER_PIC_AQUA_GRUNT_M] = {.size = 8, .y_offset = 1}, +... + +... + [TRAINER_PIC_RS_BRENDAN] = {.size = 8, .y_offset = 1}, + [TRAINER_PIC_RS_MAY] = {.size = 8, .y_offset = 1}, ++ [TRAINER_PIC_MYTRAINERCLASS] = {.size = 8, .y_offset = 1}, +}; + +#define TRAINER_SPRITE(trainerPic, sprite, size) [TRAINER_PIC_##trainerPic] = {sprite, size, TRAINER_PIC_##trainerPic} + +const struct CompressedSpriteSheet gTrainerFrontPicTable[] = +{ + TRAINER_SPRITE(HIKER, gTrainerFrontPic_Hiker, 0x800), + TRAINER_SPRITE(AQUA_GRUNT_M, gTrainerFrontPic_AquaGruntM, 0x800), + TRAINER_SPRITE(POKEMON_BREEDER_F, gTrainerFrontPic_PokemonBreederF, 0x800), + TRAINER_SPRITE(COOLTRAINER_M, gTrainerFrontPic_CoolTrainerM, 0x800), +... + +... + TRAINER_SPRITE(RS_BRENDAN, gTrainerFrontPic_RubySapphireBrendan, 0x800), + TRAINER_SPRITE(RS_MAY, gTrainerFrontPic_RubySapphireMay, 0x800), ++ TRAINER_SPRITE(MYTRAINERCLASS, gTrainerFrontPic_MyTrainerClass, 0x800), +}; + +#define TRAINER_PAL(trainerPic, pal) [TRAINER_PIC_##trainerPic] = {pal, TRAINER_PIC_##trainerPic} + +const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[] = +{ + TRAINER_PAL(HIKER, gTrainerPalette_Hiker), + TRAINER_PAL(AQUA_GRUNT_M, gTrainerPalette_AquaGruntM), + TRAINER_PAL(POKEMON_BREEDER_F, gTrainerPalette_PokemonBreederF), +... + +... + TRAINER_PAL(RS_BRENDAN, gTrainerPalette_RubySapphireBrendan), + TRAINER_PAL(RS_MAY, gTrainerPalette_RubySapphireMay), ++ TRAINER_PAL(MYTRAINERCLASS, gTrainerPalette_MyTrainerClass), +}; + +``` +### The Data +#### 5. Defining the trainer class +Finally, let's bring it all together by defining our new trainer class in [include/constants/trainers.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/trainers.h): + +```diff +#define TRAINER_PIC_RS_MAY 92 ++ #define TRAINER_PIC_MYTRAINERCLASS 93 + +#define TRAINER_BACK_PIC_BRENDAN 0 +#define TRAINER_BACK_PIC_MAY 1 +``` +Remember to count the number next to the trainer class up by one! + +## Usage +You can test your trainer type by going to [src/data/trainers](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/trainers.h) and changing a trainer type. For example: +```diff + [TRAINER_BRENDAN_PLACEHOLDER] = + { + .partyFlags = 0, + .trainerClass = TRAINER_CLASS_RS_PROTAG, + .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, +- .trainerPic = TRAINER_PIC_RS_BRENDAN, ++ .trainerPic = TRAINER_PIC_MYTRAINERCLASS, + .trainerName = _("BRENDAN"), + .items = {}, + .doubleBattle = FALSE, + .aiFlags = 0, + .partySize = ARRAY_COUNT(sParty_BrendanLinkPlaceholder), + .party = {.NoItemDefaultMoves = sParty_BrendanLinkPlaceholder}, + }, +``` diff --git a/docs/local_mdbook/index.md b/docs/local_mdbook/index.md new file mode 100644 index 000000000000..ef362dc45f77 --- /dev/null +++ b/docs/local_mdbook/index.md @@ -0,0 +1,2 @@ +## Running documentation website locally +- [Ubuntu WSL1/WSL2](/docs/local_mdbook/ubuntu_WSL.md) diff --git a/docs/local_mdbook/ubuntu_WSL.md b/docs/local_mdbook/ubuntu_WSL.md new file mode 100644 index 000000000000..88ee2468e65f --- /dev/null +++ b/docs/local_mdbook/ubuntu_WSL.md @@ -0,0 +1,51 @@ +Note: For further information beyond this very basic guide, please visit mdBook's [official documentation](https://rust-lang.github.io/mdBook/). + +## Running documentation website locally (Ubuntu WSL1/WSL2) +### Previous Requirements: +- Option 1: Install via Rust toolchain + - Install Rust toolchain if you don't have it via the `sudo apt install cargo` command. + - Install mdBook via the `cargo install mdbook` command. Once finished, this message will pop up, with {USER} being your Ubuntu + ``` + warning: be sure to add `/home/{USER}/.cargo/bin` to your PATH to be able to run the installed binaries + ``` + - Add `/home/{USER}/.cargo/bin` to your PATH (with {USER} being the Ubuntu username.) + - Run command `nano ~/.profile` to edit the file. + - Add the following lines, ***replacing {USER} with your Linux username.*** + ```diff + # set PATH so it includes user's private bin if it exists + if [ -d "$HOME/bin" ] ; then + PATH="$HOME/bin:$PATH" + fi + + # set PATH so it includes user's private bin if it exists + if [ -d "$HOME/.local/bin" ] ; then + PATH="$HOME/.local/bin:$PATH" + fi + + +# set PATH so it includes cargo bin if it exists + +if [ -d "/home/{USER}/.cargo/bin" ] ; then + + PATH="/home/{USER}/.cargo/bin:$PATH" + +fi + ``` + - Run the `source ~/.profile` command to refresh the path in the current session. +- Option 2: Install downloaded binaries directly + - TODO: Add documentation of this process. + +### Running the website +- Navigate to the `docs` folder on the repository. +- Run `mdbook serve`. Once started, you may now open the website on your browser by going to `http://127.0.0.1:3000`. +- Every change done to the `docs` folder will be reflected with an automatic refresh. +- To stop the server and go back to the terminal, press `Ctrl + C`. + +### Modifying the website +- The navigation menu on the left is handled by `docs/SUMMARY.md`. Every file added needs to be added somewhere here in order to become visible, otherwise you'll get a 404 error. +- Any Markdown files (.md extension) added to the `docs/` directory will automatically be read by mdBook. +- To add Markdown files that are not in the `docs/` directory, you may create an empty `.md` file and add the following ***without the "----"***: + ```md + {{ ----#include ../INSTALL.md}}` + ``` + This will include the `INSTALL.md` Markdown file from the root directory. + +Once you're set up, you can now check your changes before pushing them to your repo! :D + +We hope that this will make it easier for users to contribute to the documentation :) diff --git a/gflib/sprite.c b/gflib/sprite.c index 7823888cb529..9ba1662c9ddd 100644 --- a/gflib/sprite.c +++ b/gflib/sprite.c @@ -52,7 +52,6 @@ static void SortSprites(u32 *spritePriorities, s32 n); static u32 CreateSpriteAt(u32 index, const struct SpriteTemplate *template, s16 x, s16 y, u32 subpriority); static void ResetOamMatrices(void); static void ResetSprite(struct Sprite *sprite); -static void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, const struct SpriteFrameImage *images); static void ResetAllSprites(void); static void BeginAnim(struct Sprite *sprite); static void ContinueAnim(struct Sprite *sprite); @@ -75,7 +74,6 @@ static void AffineAnimCmd_end(u8 matrixNum, struct Sprite *sprite); static void AffineAnimCmd_frame(u8 matrixNum, struct Sprite *sprite); static void CopyOamMatrix(u8 destMatrixIndex, struct OamMatrix *srcMatrix); static u8 GetSpriteMatrixNum(struct Sprite *sprite); -static void SetSpriteOamFlipBits(struct Sprite *sprite, u8 hFlip, u8 vFlip); static void AffineAnimStateRestartAnim(u8 matrixNum); static void AffineAnimStateStartAnim(u8 matrixNum, u8 animNum); static void AffineAnimStateReset(u8 matrixNum); diff --git a/gflib/sprite.h b/gflib/sprite.h index 6a3084add254..937ed42ced5f 100644 --- a/gflib/sprite.h +++ b/gflib/sprite.h @@ -331,5 +331,7 @@ u8 SpriteTileAllocBitmapOp(u16 bit, u8 op); void ClearSpriteCopyRequests(void); void ResetAffineAnimData(void); u32 GetSpanPerImage(u32 shape, u32 size); +void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, const struct SpriteFrameImage *images); +void SetSpriteOamFlipBits(struct Sprite *sprite, u8 hFlip, u8 vFlip); #endif //GUARD_SPRITE_H diff --git a/graphics/battle_anims/sprites/beam.png b/graphics/battle_anims/sprites/beam.png new file mode 100644 index 0000000000000000000000000000000000000000..cce0a23a4c2951b215346f396b1507507a15b1bf GIT binary patch literal 383 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e_7YEDSN0bijKaDyQ(Rb*fI{LW zt`Q}{`DrEPiAAXl?mjL+V-(6#ixiCYObT0z;le!RLk zxyZZv*Y1P$ncuIQyl8N|z}&om-AKcMjkV(e%e~7FSo$Ib9C(=w7}XB2%wP~sVDf3; zG+>lwv}V+1}`-{yl(%&x`9K0QOSX&gF#S%iOrEeC7^+aOTdv;X$4U83P%Q* elnYE<1OJkYPN(I-ViM0_5DRAz|C${4tFacO8x{0q zF8T!&VNCLNclp1R{nJq(`<EQwELoyM)whc?AdYImMwNGGt{d`_@dRFMxWl60w+9T}0@`PntHC*N4+QhZ}^}>$} zUA~rjv!~t9`}SOM+UkYr&3y)LjI(~9{qUP7BI8+Dw6vz&+$DcDR-S24$Ul-Q=^9-1 zQIa9|sc+_Tmn)5tKZ_q6lh9AzaQjD~`#2D{M1rPkks_(7Pt=+oT3AAB|)swWlejMGPSdCo6WjMxJ&tP7oBydmNb4 zmFF(CiQ}k|hWAI)pA%Eoe(t%nxOC+~5p|{LR=w}tS_-O7YKkeUX$PFNrMEwteBxzf z`=Se78kbJq+jaGh{GOly|_W^~( zOI#yLg7ec#$`gxH8QgtbfW|14r4}g|>zNd`E_n!4!ckJ-=MI!H2C^Bv8Z_mB6id3J zuOkD)#(wTUiL5}rL4Z$)E0CVxJT1{6^1NsE9Gi+uh~=Qua?rf$T}1 zE{-7;bKXv`%{#2Xb2Rrm(~TI0nx+YN{^u1hS$OG);jJZkSHryjYWwql{#X~#Q2sY& zp&!f6sW%p6_VNlHZDQNlAhuuwd(@;Q0Sc#6W+@f+N0`bmvS`XBs&>grC2+FtoDz}X zE7q%`vPed6YL;%H^a`$zNw3}n%yhMA(X{yYZ{75j^-L2=jeO@asmL+rX-PT`c7Be>uGNp2^CJokY(FI)XYApu ze$wp3X4Ud$B7gPi_GR)v5)9jdFDuKxd9LzDyJp9oZRsB!@AS15rt^E2thD61^kgB& z>obYE8x=k;IcZaQ@Lu2-JXNj1Ie_Iq{0*X&hS3j3^P6Ix5ep^rs7ykeNw;N&Jv-(G1^&lK49K#VLV{6@ymTg8_T?CV)fbv{iZOEQr6<8Zh4pagJeI zWjyj@Oza6Mg!p8a}c_n=cbfOgCvX2DzvR_)^*b)HePr>?s7j7MbQ(; zRNR;4AwT*QMVUN+Xp@-OeXHbk#-_|U+@s%~8FluJd}mInfHfs_@j!^tusJqLs)N^) z^s6&SUZ<4;VF#X8LJd~f+iWZVMyWq=4uJhe16EF~y%>Tr%ygHWe5@-yH-Plh5R^^( zwRfjC3kw6SeP{#uH#x3X|tU887u(&=6Bbm; z)$i3f6#9NRAGj=>kM_7VBkg2aoz=lYlU?sP4)in3$3Ia&xtPO{3Rq*K5%@*k-CqEI zymIv%48U;7`564S$Z7{b&ByOlS^0>n`^1*@Nv*^EAS59rK=jh)LH-yF!}sIx11ZDd Ux%QAR^#A|>07*qoM6N<$g6eam;{X5v literal 0 HcmV?d00001 diff --git a/graphics/pokemon/articuno/galarian/overworld.png b/graphics/pokemon/articuno/galarian/overworld.png index 734f4802d9ac181e17817ad8d8a395d09aa2a3ab..51e46babdbde6230a5451f4b2d8b7c8650b2d90e 100644 GIT binary patch delta 1320 zcmV+@1=sq@3djnOF@G>nOjJcYxR(F`0C>pwpy2psMT*qE>6LH3DI6^5%;>(O#-e_# z%eB$}|Nl5RI2afh0001yIs$C~000nlQchC<|NsC0|NsC0|NsC0|NsBMP>VwV00gQ@ zL_t(oh2>a*a^ortj9OwDZ1ex0`&JTQ4C2yvb2Im5o;yw2V1J|C)k;8Kum9`C{I?PO z#>E|K3V)RW^S@V+`MquTV-%>(wT|*z=sqLi4HtdB@A2Pz3nAPTxK2R(-e;zJeBb97 zAESP}RLDRy&om0gp}U6^|4o5IBM>7f)Z3aafFI)&gg)!`3BLew(2ovzbsAe_1rP2@ zfklKe(lH= zk?!$N=x2{tVKyKC=nzcuypa^YPNesBLejY#0Zbwc1tAC=`;5Ph{}R6E@sc{4@msD& zhd=^)W|2UE*(f|`uPFdFihIN>xe4gTe}&)mc+H$cz<-*EIz)II1%*E}5pj=OgT&_! z3QQO9!TNaTC<)+!z&-9vQk$~xaRde=BQO*Pr6eU-EJD>GfS=OHRcmlAE~G$mz`!j4 zx3xP)$1c807!R@^*YLHHYzZ->F{)*pYP#wZaGe6ZoKz)DZk~^y1 z@(zvI31hdyjQ``50Mw>XcWY1=WKIe&v9kmh1Ai5MV;vTU$dibi(lKfma@Nc$1MM_j zG1GyhMeY=4N#ikAz$FYAx%9graVi!`UYYX4Vq+Z^hlp|#danOVo=WAxvYfV?U|K{m4Ns3IqQ!n}8)S zv=SIg25=F6R|#n2V+yK6Smi${4BJZ0Ku&w}5I-#>H=L-Ts&HaQf3&J}T|tF7d75 zW!zfsgMd0jud?HrcMMqx0HyBbLzvbhY6^R2ol_hj46-=jT-1Sx=M1sbCvzLu6!e`) z9C9`Mv&E|j7?*9bWXM@ho5C{yS*>>@DQDoPT~_GPIY#-;5Yaeweo z*3|noS_#BcH#*zqo{O5oGyYxhi$mn+MY`GV;&%Y8zQ(iZW;^x3HVy`Krh$Q004JMc zMZh|&cOWhdvV*@YQL@bw{7Rr-thfQ(sy`pWWmsj?=3>}T2lQOcqzI9M#4C@NM&KfE zDwx9K$7Z0{P2EgXckqU<9VJGC%74+$WV^@7wvMBI;vwmwuEz=cGiQl=ieL&)pQrdd z+>q=UZ~WzvvPTKqGx+`80M%pb;!sI}^hgq1k0WD;)89u5UTwtb`vs!5Vd%fR5DHW9 z?uL@2<)OGHcmadQGv3cGa=soh3N#X!&&&2%_vfO4{0Ikq(tq*bs^pt<{vpI{KY8*G ee69E2yZ!+({We$q8QPHm00006LH3DI6^6=;^+r#-e_# zc*yvm;P^N=I2afhYnlrp0000FbW%=J0RR90|NsC0|NsC0|NsBxjh?0e00gi}L_t(o zh2>a*j_f83Tq8CFlI8zDw__U!!Orb#`=nQ?oNo6nBrr1`8-K{_^?z+4{AmRLpoIxF z#Xrg*guky~2=8sX9-~P5M@s48iRYew*8qM)qwn|K{(EmR#*0Ge1JJ%tK(A3#+IKt0 z*IB($F)+H znXdkC=&i>a@v!;$SBGGb`;8>{Wgxk45|WNx31ARr$OxIhei;0t|3~%X@psK{^%wt`w~N9lyt*J0ul}JRZLnFn~Ib+G0n& zT3%B_yn?<<;e`KBV`~VAp2!|M_~_5QdH6?mYp&mxnBfpn&T5BS>PPT*=2G^jwe&;?>QK1aAToqh zDSy5r)u&A|6`2B`PX3DZ#owi*dHeU89HRIkk=Y1wh)TI)7w!ZQe#D?Qg@OODCP+Ln zv|<>K4B#UCJ_TU(uOa9TNh1G2aoJW%1Zvrbhr-=Le8Y(h>I#?S=zl<+&nJoyhtGg2 zv<&$4@t>prG$vw)WW}#*=@tzG3<3>Vy??N6X1zuwzZABG68JO5;8r2vGlLi${6c`C zX+Ir?fH*{2+ws^PLlpu*DSP=C&3Z&bVMoDqvICewWe1!OdBEa18+n*sH~6hzLNHe% zcF1Sow-z5F6ztKW_{UjKhr$-X0nK&N4 z0|~vKqn!Y3$Zgx)bJ0-P;y)QbJA{8;%;20EOaL{%*0brRJ9WMulmTy_?hGUYk`xHf zTKlTvUP}k#x{h6~o-9=D^&GnM+ zha2KOR#7#0Wv0001;w}I>c0004VQb$4nuFf3kkv=bf$iRU2@VEc~0B^!5 zfB*miCP_p=R9J=Wl|hz-APfZ!#AN0DuRA0VTI@C;{oc$h_#53+kp#qTTUlB8wLr>O zc#Hw?8$2aU3JN|gD0m2yE#M2ED*zQw^yC0A#0ayCXF=^9ERO}4@o0JED1sAS9M1$7 zTooPAdQ}00@FwtoPgSlM%HU8e7ln<+!L?IcO%-|?G~k}g+Ay5fLn#DpBh~VN7Xcy> z^UH8sKN^Iw5s-!%-PN0K_XAI~^F5mj2!=ERrz+T~Cn%{VnKzvTz5&4aY61kJVFOk^ zzov0F_@F>`iAhfkU9w0000007DOfr2qf`32;bRa{vGi!vFvd!vV){sAK>D0W3*GK~zY`?US)? zgD?<=jfBJsDe8{P3&ef_peH(IBwaf+$C^r2^P*jOm)_Y$#da`Lhe-L?@8iz*ONe`J zIZ2Vn`GYFsTiml@e>YQ?aJ4CwJmcf-d=)tk#4%40_ynE5x8Z5ULxq-Yn;asKUGuAaip>U&Q3sIDTzg^~W@zaEf>pX!}!ndOVfJ zIL4^>lQ|Vw9t(YV12Q)WV@QY`Hkr}<*`F^ZKfeG9R|}{H^S?bQp6L-OS4Tb~rQ%Pn gA!FU(JzZabZ%nKrfeE~7ssI2007*qoM6N<$f}ZNc*#H0l literal 1247 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_CgBeH`yR~lzQjEnx?oJHr&dI!FU|?nl@CkAK z|NsBP7cUMxD0p##p<;(e$IPh@G8!HvOgJ3aI@2v@g+oNMY)r6}o~^s9f`bCkgi$aW z0>dc;u219K56l<6o-U3d5v^~hJ zbK9O>Ir{O=)!CY3Qkwsv?%s5{o7W(|GrJS!?WY74}N12 z_4^*ZjbkfsmJI8G@3!oQY$>gTe~DWM4fbzSpw diff --git a/graphics/pokemon/bounsweet/overworld_shiny.pal b/graphics/pokemon/bounsweet/overworld_shiny.pal index c97f75961df5..769d9abd9e40 100644 --- a/graphics/pokemon/bounsweet/overworld_shiny.pal +++ b/graphics/pokemon/bounsweet/overworld_shiny.pal @@ -2,11 +2,11 @@ JASC-PAL 0100 16 255 255 255 -225 232 232 +247 240 184 216 192 248 232 200 0 160 128 240 -136 153 149 +200 192 128 224 104 128 200 112 152 176 64 104 diff --git a/graphics/pokemon/bruxish/overworld.png b/graphics/pokemon/bruxish/overworld.png index 18b2325a80c8bcff63230dad180aa5a88c541990..04757426e6ccfe11dbca043c33b9b45f78f60077 100644 GIT binary patch delta 385 zcmV-{0e=3M48{hKFaiKDkuo$0oANmY0008SlRg6>3f7&;%fa?85<*#%X#;=(+mq@8 zx_|1vAx-!O1m??)f8{rW=yJ^;^^VDyYhn480xw1psz3290pNy1q=zm{#N{v=7`V20s}*K3{m<)q7ohihn~$ f?Vh2j`!B?A9=I&8XZhQq00000NkvXXu0mjfzq`B$ literal 1559 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_CgBeH`yR~lzQjEnx?oJHr&dI!FU|?nl@CkAK z|NsAwFJHcXbbolqVac@@M@}EwyUY1S#g+}JN3AncdxGY9dr5^GRAlP-sEKO>O&A5E zAuyamK=9zZM+^*1M?GB}Ln2z=PQO@mSAoYRms@#3!@vLeyOmZR-^hAriRW_uu(VG_ z8}@d$T!@{fKCj|Yr~15%iJ!~${~T9*Xqsqwf?xY*ln006z72Xwck5p|#Bk`H(>b!@ z^e(odb%&3q|5?w(*HxU%esQPK1$|2%(XbEmPtV(NBsFV6!7HhTeFjAak1rT(G=Fqq zzQyx}%`b|cT`3M&$+=|SA<6mQ+ZCrzvGEUDqk70rwYt~k>5u!>RfiVl=Oi53{9~K5 zPMWpr_vgp#sVVa%Ss> z8t+E&#T-}X|Cq*5a9Ht@b9CH&)&SR~_s%0p@wdjij=wk*#>x3> zOPWLVg|`AzAALx3(H6XC_N-u^zHXgtX3Mob3wI@4wn;VKXTmI#{i5gTtfG(!7hSxy zv!}YRbqm$h`*Zjpd*7*in;3Q`%`H2d_V;#WCLH>2@xt%6)%w}L#P5Ay7Vy+LzO8xE zl4T*h>)waY%Tw+ZP}|y2x$ZXGahbrq6K_4Pyv`$`>vOI2c(wVRk{!tk7pi@F*589-ei4<$t?ig3e!sHN_jQUtq4Az3p7gmAEYSmt|90$|GcB zo(kVnJM?eM+Ru6Ed^)bHzQ5<%yZ*a#UBT4)$H%Sa6#N#d=;fE?`Lcb*)_<#_Zpl^} z|NAyku%^+ReXeQLmdo>#zs8Bre{^3UXm@(XtAE@dr8|UmX5O6t_XjA0db;|#taD0e F0sy1Mk?Q~e diff --git a/graphics/pokemon/bruxish/overworld_shiny.pal b/graphics/pokemon/bruxish/overworld_shiny.pal index 624b47c64a7d..7de5796528cc 100644 --- a/graphics/pokemon/bruxish/overworld_shiny.pal +++ b/graphics/pokemon/bruxish/overworld_shiny.pal @@ -5,13 +5,13 @@ JASC-PAL 248 244 244 232 208 136 225 220 64 -224 216 208 +248 248 248 196 203 194 200 160 80 232 56 40 104 208 152 59 105 101 -140 82 158 +56 160 104 75 74 26 56 160 104 105 44 76 diff --git a/graphics/pokemon/cursola/front.png b/graphics/pokemon/cursola/front.png index 2e4036381214f9435653aec22e26c869cfdbff17..5dd4cea7de0a60382d0071ee68d84310448e1fb2 100644 GIT binary patch delta 803 zcmV+;1Kj-o2Hysd7#0Wv0001;w}I>c0004VQb$4nuFf3kks&pI^78VFifhgQ00P}f zL_t(og{78>va28rh8q%?o~zdPf7_cC#jRqQ>5Q%XAKB^ab+Q1?-rQS|68?l$0B#t- zzuq9|DFQ&s4S|2V1JF}sFXp@l+%X^kEPrBv5lHrKBjEb4fz*>oH`l%Lz`ql?g&&KijD<=S)zpgQnFXU8z0jSRHVrd99*xzAt4^~UG zdE4R(!ZwjQ`H}$4a{rAU6DjKERPv{6}Ch> zAX^Gt-vVU%QFv_nq8=DQY{-zC%(r@yyk?Js0CFksS(ZSGgn{xR2?qdH&1dNeK$+iv zqGyVPA~lVF_$T_mx91`>0iar3+hkxi!2BLYro6}EW6Wn-%~#F( z8DN;lfnC@Gylz!~R8v@!z@K^4AeakbfHo#K=f(A)qS7y(I_p4fAzSHsPOO&(M zkm|E(v`(*#554+mgi;;Y^wqh#j(@j7_0-BQW^>bjz*$>K-*XN0nm6Ie@|yTPyhe`07*qoM6N;tV1mtWdJ_Nu delta 835 zcmV-J1HAm-2LA?-7zqRe00013M{MnpE;WDn@c2~zWrP3#010qNS#tmYE+YT{E+YYW zr9XB6000McNliru=LQD?6C9&xg)jgB0^&(TK~zY`g_gZ;+b|S`DR49jn6#Z;*RtTj zEfmojJ4lws4z9%RHV{8Zw*E|ggg!x#)oF*Uae*SumS*YRJVOs9Igw>a;b7S0$9sS7 zJ-j5$SY-&-JuLFNSpaIkPW_{00YD{Qi5>$M^(6&*57?{`(4~ZI0GPBR8tlJA;V4Z> z4)v{mo{e<+)=?Igw4pLC#B3oO(j4vqK@l}%F`tu7Ibajk4+9wO`64QTkYdrVmjEF1 zNje??N#RimnBj>}LvtKMX#&*%MC5-uh57H)m(2GLDf+7{RDZ}O_j8mo4r|tnEjWqLZLB$BP z)?TGmFtuQc+tL;9H_w2m9;6s(pEfHY&el-SP+-sJsg~FjYB>=Ys}r(EsWE@y={!{u z0+=l610ll6XgwKu)wbhtriB3}n{xuPSv$+J2aSscfS?b+oqnY$Z2*U5+gZh-CoFWosh^G zArK%c)}4dKwu;H6I5XW-j_TC_;N;uPm4XA2P_@gY;xOM88*z0Sjr0Dh-f(ql0^|*6 zS{@%t*4`QXwsHB2?0qk{<^b>ups=6kA2laTM@ve)wr7&(K+Qi^(-40&=y++lsUz)r zixFbd3CwYUye@#pN#{D_S@r^;lSTXLt1aGytRu(U**z|G_IBGAfPVf?boOvd_iez# zT^v8atJy^((ECR}@7|f7ncXx4k3_F;AG-m1^Z1u&*9@>9Pr$Ec;3@}xftZ#R1z|}9!pB-%KbpXBXC0(#KuUQW}dvx)_KY*j{{{af1x2>IlIjjHx N002ovPDHLkV1hU@dV&A| diff --git a/graphics/pokemon/cursola/shiny.pal b/graphics/pokemon/cursola/shiny.pal index 552b1077fc62..925984395018 100644 --- a/graphics/pokemon/cursola/shiny.pal +++ b/graphics/pokemon/cursola/shiny.pal @@ -2,16 +2,16 @@ JASC-PAL 0100 16 152 208 160 -184 184 184 +145 145 145 248 240 248 120 120 120 224 216 224 208 200 208 -144 136 144 +92 92 92 184 176 184 -224 96 144 +192 96 224 248 248 248 -248 160 192 +221 173 237 16 16 16 72 72 72 56 56 56 diff --git a/graphics/pokemon/darmanitan/galarian/overworld.png b/graphics/pokemon/darmanitan/galarian/overworld.png index dda43e6e075e81e0cda84e932ceb70ff8daf09b9..f6d78555e5bcf46abb9ae1e10b8bd0e2d29dc9a3 100644 GIT binary patch delta 30 ocmV+(0O9}Z1?vTnMH48%r~m)}c$?8rZ=nDG|K`-J_OV!#0@r;Hk^lez delta 30 ocmV+(0O9}Z1?vTnMH5}T(f|Mec$?8rZ=nDG|C2uO8?jiE0@e8rZ2$lO diff --git a/graphics/pokemon/darmanitan/galarian/overworld_normal.pal b/graphics/pokemon/darmanitan/galarian/overworld_normal.pal index f573721897cd..2036748fc693 100644 --- a/graphics/pokemon/darmanitan/galarian/overworld_normal.pal +++ b/graphics/pokemon/darmanitan/galarian/overworld_normal.pal @@ -6,14 +6,14 @@ JASC-PAL 167 167 167 215 215 215 10 34 40 -93 188 210 +40 192 168 0 0 0 120 155 209 79 111 160 255 255 255 -10 10 10 -11 11 11 -12 12 12 -13 13 13 -14 14 14 -15 15 15 +255 255 255 +255 255 255 +255 255 255 +255 255 255 +255 255 255 +255 255 255 diff --git a/graphics/pokemon/darmanitan/galarian/overworld_shiny.pal b/graphics/pokemon/darmanitan/galarian/overworld_shiny.pal index f573721897cd..e61043b14e69 100644 --- a/graphics/pokemon/darmanitan/galarian/overworld_shiny.pal +++ b/graphics/pokemon/darmanitan/galarian/overworld_shiny.pal @@ -6,14 +6,14 @@ JASC-PAL 167 167 167 215 215 215 10 34 40 -93 188 210 +72 160 216 0 0 0 -120 155 209 -79 111 160 +190 224 117 +74 105 37 +255 255 255 +255 255 255 +255 255 255 +255 255 255 +255 255 255 +255 255 255 255 255 255 -10 10 10 -11 11 11 -12 12 12 -13 13 13 -14 14 14 -15 15 15 diff --git a/graphics/pokemon/darumaka/galarian/back.png b/graphics/pokemon/darumaka/galarian/back.png index 94115f536adc13cf784b4068ddda0a3f869c423b..8aef0d7756517a5132535cb4b277f64f5bccd049 100644 GIT binary patch delta 455 zcmV;&0XY7y1n>ip7%&I}0001;w}I>c0004VQb$4nuFf3k0000mP)t-sn9!goU1$&x z5Gbm^Xxiu?lAw`TAAhB>4FCWEZb?KzR9J=WmC=%eAPhxIl$5~#|L=06xU3SS`qWwP zbbR6*2oU;uJ$dqf;=Q|v&of=eUB>6hU0#CA^yIz2yaWgOj=-;it2LAbTwcOGK|($i zMpnld@AIMK(0=jNF~&PLO*4`e6}~7&1f;d9WXD5MMt_BXUq^r(`OOd_QM3x8 z4qpruMa~4&Bl6(_ieu&X3R{3HPSr@DIJZAZ9X^K4Cs`3(7}?{z+$Kv918tba zTY`|2YbB}E;(sjz>0V*pGP{ARpmmdj?sYP;S`Z{QnhAZ%hfQw@(2#9GU^?d+4JqMJ zMCOTx1S&bcO4{NyD&S;1YvTejZX_*LHkx=t^=m#!5G3Ors04OHP|Y_LsWbgzNcQZ? xcX1p@Sc@4W`~F5KduJo(c60D96PXi(@X3k(1N002ovPDHLkV1n^J%eMdk delta 517 zcmV+g0{Z>%1Fi&+7(fIA00013M{Ml?0004VQb$4nuFf3k00004XF*Lt006O%3;baP z0000mP)t-sn9!goXkZW!5GcT?Xz0)&poo!3AAc312><{932;bRa{vGi!vFvd!vV){ zsAK>D0f$LMK~zY`?UONY!Y~kpQ%gvZSc-QTPILGb<1!Jx7R`}6;rx) zX$>1w@q~~7rTKHULkM=_rc#G?=^On%-#h0n-oO4(?D88w4qE-|c-U+6FXD)eTY+2F z4u5nMFly`aiYWy@2fBIw70_YYKX9J!oK24IBUbpF&vuRiy(o@{tnd}FX#zKlMe!Xk zHPc6_|6~K~R6t3U@K*yfi75Y}@^uNaUetl`3_NZ;Ux<~RG3EwqL10~p9P3Vq-36+n#yfu?r^{Ka`#&jR-i zAQuMkmOul5Y+gkO+5{9*?G&LNbpY^Td@SMuvcQ@JPO3?3sjjI#tb?%&1z?Y>k2==2 zC?K&Hf}nLDFsW};Sng`6ZQ~CPEgzeIc;9;A*8A5l%kw?~d4w8$(!|hQ00000NkvXX Hu0mjfTwc~B diff --git a/graphics/pokemon/darumaka/galarian/overworld_shiny.pal b/graphics/pokemon/darumaka/galarian/overworld_shiny.pal index 44a066b5bca5..409dc17fba7b 100644 --- a/graphics/pokemon/darumaka/galarian/overworld_shiny.pal +++ b/graphics/pokemon/darumaka/galarian/overworld_shiny.pal @@ -5,15 +5,15 @@ JASC-PAL 10 34 40 36 36 36 0 0 0 -93 188 210 +120 203 214 215 215 215 -56 134 152 -29 45 70 +32 146 160 +31 51 8 128 128 128 -120 155 209 -79 111 160 +182 212 119 +120 184 40 167 167 167 -55 72 127 +64 104 16 +255 255 255 +40 93 104 255 255 255 -80 108 152 -15 15 15 diff --git a/graphics/pokemon/darumaka/galarian/shiny.pal b/graphics/pokemon/darumaka/galarian/shiny.pal index 21bd015c8a54..f7748fd8d4ce 100644 --- a/graphics/pokemon/darumaka/galarian/shiny.pal +++ b/graphics/pokemon/darumaka/galarian/shiny.pal @@ -2,11 +2,11 @@ JASC-PAL 0100 16 152 208 160 -40 104 96 +40 93 104 16 16 16 -40 192 168 -104 232 208 -32 160 136 +40 170 192 +104 218 232 +32 146 160 184 184 192 232 232 224 64 104 16 diff --git a/graphics/pokemon/dialga/origin/overworld_shiny.pal b/graphics/pokemon/dialga/origin/overworld_shiny.pal new file mode 100644 index 000000000000..e6bfc48201b1 --- /dev/null +++ b/graphics/pokemon/dialga/origin/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +98 182 49 +0 0 0 +65 129 255 +189 32 16 +246 80 65 +57 121 180 +98 121 139 +32 64 106 +16 56 90 +24 64 106 +189 202 222 +32 89 148 +139 161 180 +156 210 246 +16 16 16 +24 40 49 diff --git a/graphics/pokemon/enamorus/overworld_shiny.pal b/graphics/pokemon/enamorus/overworld_shiny.pal new file mode 100644 index 000000000000..88fa42851ff7 --- /dev/null +++ b/graphics/pokemon/enamorus/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +41 165 49 +0 0 0 +164 133 41 +230 117 156 +189 60 90 +172 72 82 +238 234 255 +32 36 32 +57 60 57 +205 202 222 +148 32 24 +255 198 57 +16 16 16 +246 85 139 +82 80 90 +115 48 57 diff --git a/graphics/pokemon/enamorus/therian/overworld_shiny.pal b/graphics/pokemon/enamorus/therian/overworld_shiny.pal new file mode 100644 index 000000000000..c799ddfb8975 --- /dev/null +++ b/graphics/pokemon/enamorus/therian/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +80 80 88 +118 50 58 +232 232 248 +200 200 216 +224 116 156 +174 74 87 +16 16 16 +243 46 46 +199 46 41 +147 33 30 +243 84 143 +187 62 94 +247 238 76 +255 197 60 +0 0 0 diff --git a/graphics/pokemon/farfetchd/galarian/overworld.png b/graphics/pokemon/farfetchd/galarian/overworld.png index 343ece6bd68120ffe37d440cfdd7d708685e032d..bde1b5b7ecf99b8e08858dd3316c1150247279a6 100644 GIT binary patch delta 639 zcmV-_0)YML1?dHlQ5n_J#X)sBIWRF&L_yWk#TXP2DJ&`Nbp?fyYAAo*ma8xbg^MvY zl}O(IZ4cm2J0qaWUYxlQ*UZhglk82<)yLzmyY9N{uDkB~GetyS@gu?E`tORj&p9~b zOMbNcAl`}aP%&rBaG7V})#C@4EynGM)2{~k3|Dl>C0-OD#A-2UPfS;bxz-@$0Vk>~ z0Dpu+EEc&vK>(k&_Go|dkJz8t;YHx`^@yCAdjhJ8-3~CXneYm2V;kBCVj!CaW`WP& z0Rnz*Ifknp3d0B^Ky8gRt?hfH0`mC}gO0@mEL``$Le*f`foMdwpEMCb_PJ{6V$h!R zH})*5LkGuH48p5Zhaxi!f(G=tI+QnrUy}-*5#a+HCII@yq4j^6is>T3j-K+F#HZOm z4j6GM{>o@k_X1;BH*DmCQcBC7#h5O;BN9~TOAn@oIN-*;YXmjOmt_WsFqFO&gr{=> zA>9(B#QusnGz@CMm3vc6paTN0q3r_@uGq>4Kz)zQ5s2qBroZv5N!%g1D>=nXkV38w zml0{huseh5hRuI`>XH?}o#IY}bTsclZa6`KRLL^P0XJ@bjd>Nj6O+`2(FpK?_xWZ` zN}8~eC7=cJpS_-Hnh_k_)i#d<0utOx6IN;`5a9nDGAm>{J^z z^QnTrBfv(T{RN^&RnZqBGyR7};?K}EzHaa2lj6m}Z+_mMx$9095j`pL`HAhXZ+_Q* Zs(-t;D19o?kp%z%002ovPDHLkV1l&tJ<P%OYAAoplIt)CM1y6; zDkGu)|Jw`rk<1vdD_PuG7}w0^w4`o?U3on2y6djH?z-!)KT|~X6+aW4uK%uh`<#O_ zzT{`iPvTt&4;6F93?K6>yn6fuv&FbQar(_5pW%v5xx|YCgjg*G?TP8;FxMJ{JmEx@ z1>lcRh{YneCkWuv-XDKm{t^2#JG=^9z8#S>b5B53vD*RWH4}b9``o8KgBZxBfkoi+ zSAc+DTaMvshr%?&3{ZP#P4CAZsepX`!=PjF1Pj;wKcQ-H7(g^4J5HJiAp2Z3bv0QH2cLC}CcSBLV3@M}_GFe1ER!vw&%I<$X2Q!!m7IM7o*llV0I z#{nZQ#a|gM8X6eGx?>|Blu~;3EXH)*9g(2ISVk~4!~u8iT_dPLzAQ69grSV3AUvH5 z27=lej~2S8|G(Acb5V zt|QW?>2L1^JE+;D;dsgh-o1Mb}X8uKc4Cnl*+vk~A8AM-7m zlr&)_OF%2+KYKmZ)DW;G+aSES*?`3%KPdhWN9g@1HuI^ZHN7M-TTCnDboLEs16pgz zG5E%9ipvZU!mQ6P4jVS}E&Df}Pj0alAn7Y47hvJ#2)0|8tO2~lmnr2j;r;nJsCI1T zQw4uVfQ>r)3q+5qVk|^v`ZtTjpP|qAw!M>2iWdjJ`FVTht~*sk^rFb;7q488 diff --git a/graphics/pokemon/farfetchd/galarian/overworld_normal.pal b/graphics/pokemon/farfetchd/galarian/overworld_normal.pal index 0a555549b15c..3df22685d9f2 100644 --- a/graphics/pokemon/farfetchd/galarian/overworld_normal.pal +++ b/graphics/pokemon/farfetchd/galarian/overworld_normal.pal @@ -10,7 +10,7 @@ JASC-PAL 238 234 255 49 89 41 255 202 49 -0 0 0 +213 210 197 65 117 57 57 48 49 82 68 65 diff --git a/graphics/pokemon/farfetchd/galarian/overworld_shiny.pal b/graphics/pokemon/farfetchd/galarian/overworld_shiny.pal index 0a555549b15c..2d02e605e7b0 100644 --- a/graphics/pokemon/farfetchd/galarian/overworld_shiny.pal +++ b/graphics/pokemon/farfetchd/galarian/overworld_shiny.pal @@ -4,16 +4,16 @@ JASC-PAL 57 153 197 0 0 0 156 161 115 -180 174 156 +200 176 112 180 145 41 -115 93 90 +128 96 96 238 234 255 49 89 41 255 202 49 -0 0 0 -65 117 57 -57 48 49 -82 68 65 213 210 197 +65 117 57 +72 56 64 +96 72 80 +240 216 176 24 20 16 41 44 41 diff --git a/graphics/pokemon/giratina/origin/overworld.png b/graphics/pokemon/giratina/origin/overworld.png index cf022c4858307401eb420e320a17477ce618e677..a4de07e1cf22bd5b5c16a27b137b102f95f79595 100644 GIT binary patch delta 2061 zcmV+o2=e!>54I4H7#auz0000ahER`v3q3v`IukRCt{2TZ^`b^^Aq z*RWy3h7B7wY}l}2!-fqTHf-3iVZ(+E8#Zj%uwlc74I4IW*sx*4hW#rB(E7)p#2dqZ zhM#`2Ui^P&$i^>V;=v1lYw} z%rJk%py4;c0Zq8~;00deKQ?xoF`L652|VL%SU@-W=pc|kg~F`xVTcP8*ot9KvoN>| zfxG9w?Ep`2=D`y_!W&Ky{w5;O$z}Gg0$t-#@5Uy973dplG=-MdI>L$rDoB=hi`aC4 zTvZ{1Gbkkx=X@D|b31~+@qSJk^~(e3qKrF2sDxiofv>DE-?Jy0bYpfxpqoie4*m=5 ziTYb?;u~C0@UmhVd0Zob`Ut+p3%uEZ56wW}MH!bIP#8Y1ojCsjUfQqMkwkDtATj7A zoJ5@Y%Lu%lOU&POd@B>M-{#rV$FN%wT*E68c?iuwAeV7}laz5&DC1HH7D71ZuYxZq ziI3oHv>yb=NHl&tvqt11N8i4{7{H zUgZubF=&&22QKl6|I%E1n~=ogJ`rfMw(=}Oa{*ud@My-svL*uWC`c85sAqNXkzlDp zm_UkPPawQrM|0Bwc!9^J1AHTok{=CiXT*X2W&C%Y3LoMXd`m~nEb0wx?nAb8yNGLi zc&cTRL`_B@IOpI*V2wfia=-Sv~IF8Tw zi1a0YaqPrv<{j#BDkRs1iy6u(v51U;RPUjJZwCP;3QrN7=&RQen0PMWRm%V^E4W!b zf0;v-sknew_%42sL@O(N<+S^Snl@O^Y}jSuk4`Nvo}L_Cv_ zuZBVoHXX-(lpv>P%{WK(&@ETm=MKG*kh8_Vahz-Ppn)8+C4rnKhfq)W! zp4+dFGC}}{CZ6xME#9{6n0~dGj#qiX`M@7-Eg~#yxJU?|)Jsd`6<*;#f0h{;oOuz! zV!@K2@tepWzDkEdn6^44eB36Ljv}%_(%xxVc5mdF?Ebc9G8FmN74S`ix7To9yP2M; zU2wwR0As${q1DS0LL?A}Bq8Twys{I2ZsSWDei-j%HsRkNrV)dDz^j=1BX}Z^1qAFq z!=ZYr?D37y;SCog&OkNc5F8fx@(iO>93zM&Plk-K(OL{1>%2R_&f_xtK+35W{3k_ls(KQG}s z-{w}Kp1{NV9W;ESE>5?EdF*CwbajnS^RD1CZupBuBxJIJ0UY1sxwxuq6}-wgi|#}p zA1D)rcDt1X`tYRTvXupa((*}vE-)+dai^`{r|-qf@Mptk$)Sqi6J>LU!hSquQ4#Qv zMeTY=#C!3SK1si%1JXvh5j_%`STJte~`!fu!N!>~<%O_2OeEBI6uM%pmCsss!`_JRm6ucnRB= zoWOmb6+Z04dj%y1-J8U0w{OS%>C;#*KI;UNjH4Cu6axB*cfa6qV**_YU=C<{%icrP zBJ99N1zo&?i;7Dbp-f|cz4*KnWEqcNF0qo(ngaR^eqD(_zN^U0?ZT(C?#3$1kc~*#mJmPT21`jK2-*J0?%E z2tIZr6pB$frxM^N@ECtjAj|>E*Fuyv)Dw8Q*rl_apZM#=r+xxxhgL1X58yHUq9!nh zcYa{=1m1&V@Z9`?!BhCdM8Uj*;x9iNx{puiKH;ZPw;j-l4+h?T!ajjN+Yiy-jgJKW r8bZDJ|Cjv~{eAde=Kd1q|7QCK)$M#TCnBP900000NkvXXu0mjfjpF6` delta 1923 zcmV-}2YmRp5Umf87!3pi0002tcD;-M001YEGAn=Ituz7v00%)yL_t(|ob8yuZ`(!` z$0;4)S@aJ%sx!z;WPr}X<^twd7rW`;QA!;^n`|NnH}=v7s8e)G4LEG8MS>OJvLyiw zl=b2m$zWwGYN#^*sJ=TY^8J!%J6#I!Ef)DXlHd3E-n(a7R%V%HmRV+*WtLfHnPrw) zW|@CwmRV+*eV*Bazq!JtxMMj^dCcw8_-7fy*s`X}pb^wvFC@pR3EW`$nzOn(M&N)? zkjrWm6(LW7=-Do|rk8UqvewE!C?G$4s$7jdf%8MfDz(+snl)PBfD;m2Mj)JeI_e;~ z+9zIV#d#F%*W8tYPgH@o!$9D8EQ3r`J2Wb0A6s=PV z4yaE-m;^&UMFK6u@{isu9*q$=;1i@_3U8`FZ23FFWq8+9?*f{0l=h?OAKJ212N1Rp z35Fbgvs02)o?Kt-dR(B<1nwJsR0YZcp30iwKz&I_azIW4i~~<~00(lGRh$Pm-Z_8H z$OsQPJV`Aup7WsTtj#gCQcdh=Tz+G)7(~0B<0yJh%ixR@;oBjcP`EFbL4Mh#j!WCD zhD{L`I3jwByUiUqYjezj+rnM^9Ts7MLkb8l3FAay{$&(J`)!L06e7$DK;cL!gFIcW zxs;YiL|Eo}ncwlaz~$T$SzCfO$5Mabj_5$3aU`S^M7Y5s@JS%^pNJ7=&zumsrXu%f z-Cdz=Yea-)?x_@Qa0j5xEgc^&vo^>a5T3wNM&V*j@CbuIYXMT^LwO)jQ~`Ze;z%v? zTyfUjTbZ;b8pa5VoQYGqG|ySq221Ve4J}dbfG;@!iW_H~`6DWTBiIPYK;VA_KMLe0 z5KrI@UlZwEp-f=%Ds=}$&R)Ol0r%N& z{e&ngu)@_k&DSZl?YTj6sXbQa%tyIQxEe07)jdoET2hSACkKXHdC!nUkTZn1i|zvd zq3u+@%(Wmp)F$2TmqlO=Y}kM3h8%o=HFB8@9I#3iI`4Me!UzXMt|clI+*{` z1R|NM7!(#s_i$zk^n)D3s3CDR0HD@`A}h6jnlAmoCIJhpDS{=g6(L_Uh_E5PP<2S) zSgk^S{pMk%%Ji{(OydeeJORAvmFIh{Us;#LL@PpxYek5e!XSw-)2Dw3U`a1=edIxF z_GG7+=re^tR;Q#`=pNCjgByg7kmOB^*=STMf>OA()^id%KQsPO$vqroc6ug&eQiJQ0m)l5n1gS`njU>%o=zVz_Hpt|gTs z?Zg__8b#iHwb6um{~)ABg=u{DciY~o@TQUpCn$7pz>iJ$8sGQjQ36U> z;<^L3R_NBpgE)WgpU?*iIu|c)cH>U5!E?bhj}AEG#)P)dF$Z9$t(aog_;wxy#8M@dhDrwyz=|&+lCc!|B#FA6v>y zh&68N6bm0A$-|R3Ws|@(KKni7_@BMxs|xb+?a`b)Tjqbs^yjP|UX5e>eXTq^C7Hwx z=Ir<4<0#(!qitR=p3m;u_7?}eKKH=&Dlf^!INZNRZ$Otgb=zizshmb}4F7VS(7mrO z!E;-u#|LrP@4>j7uam9j{>8Y3R;%B(UTkka->a@ZG&~@cKcKI8mGVBXe_2T5)&@i; zY(~BQK1_e3{ex!Xf*j$S_R5v*XQib{W0j?I*n(J<{^fu?w|r4<6?bshj3G%5xXSg5 za?6P}ZI~>UH6+0jF}yy3Z%2P0t9=!NJh|E?94?Zhpd8eyd>NyOBLb3+B(G zX&h_r-evlZMypHVd=2h)Kaj?V5RK&^5Tb0Mr4g5=aWJ@f_sF|E=N4eU-arO{X&fga zM+!{i%xv2(j1!l}2R1VPsr=T+^f({?k8Di*Q@F7^T!8=o>|c928$@gCpgI5m002ov JPDHLkV1kMLs_*~+ diff --git a/graphics/pokemon/guzzlord/overworld.png b/graphics/pokemon/guzzlord/overworld.png index f9e52bd083253e54a274ecf503c5d489cb18da41..f8e2dd5fe50a5ee03991eec027348821b6f79303 100644 GIT binary patch delta 1083 zcmV-B1jPH#4%!ZoP6IPHJ+V>c0)J8XGdlnP1PDn)K~z|U?N`x~q#z8G5hQTr|9|&7 zAt*Yab6d5w_prD+&NMFFNfU5ce%o*RZNKgRY0T~N75L{HJKnGV4*z^h(I@%vF?|7E zo-_2_8RW>Emc;n{0{onz@6I5{h=0yFqfum%EAa%rw5JR`;Y9cR=D0CTF@J3v_-$L# zA((?J%Tip>tY6`#Z*NZ-dcx_!TvJ>bvJhr^tzmsp{Tc$X2w)0f0Gqy!-zh_-aH+7} z-DeO%q&sun;mQyiobwyrTC_KbG|Yad8U zek$M&uM8#1I6V`4p@tIxhJV2*xEa7z-$4-0h%pA7>JbE>4TmRrx!|2Z?V?ecRfl`L zGK4>f;SO>*U-E^Q79o5N;Hs|@lnhCHg`!-NCUDQd1V89#RFZmYX!Iw%l#I|i+Td{q zmv7|oJs%y0@UG91W(W+eB~9S6&w*u#(~*H9QQ=6DN-WEJ6FkuzUw<-OKpv5@<~&^D z@@KHlP#Ha{J)}{*1Zs%ybD+@r(o!N&c@MJSo0wpNV{H+8XV}c^;e3{)wMqW~D?JM@ z8^gC!|Au!GvzMr7u~UXM$l~G3RdE$aLtGcf;I}n{nZw~-UN;~35O51ify~MaBjBjF zxr-C?06&Upu2Ipc6o1txLX0DrYC*2J3LN1&0*Y(_!~D_%4B@)vi0}g(v#aqXJ@nq? z$e-aw!UBV$D%c#ULDm^B{xMtx4)7ME5I}KVU$57S&!THrXR>#=<1ZdFhSB(m!*&4^ zybfQ8@|H6M6vH&gSSO^jzzshHcKFUOppwESdSJqw74QHK+s2>&Zg-9i=37iLRy%f2Oy z6THF_i$oj3g5rkSCIp3}@YVf`c9`OO0&un}gBcTghE?Ag<~{{lLv)e~KP@Fv^A3SS zoXkN%(oY*F`G3D)Xao&s>oCI`f6&3Ur!`S`Fw|Q*!S={*a;^-Mome%A=p-Z4Y*E&q_+69N~zO2rj86Nr!md#mxq<*sUB6<^IuRk9Ous5V`Fzi#1U`LnLr|SSbPdjLr8&PliMvut%q#nN#>;zVPG+fTPzE=(T zDZboxcr0(-D8sZ(o|^TS-|$Kdl{arK595qF`~_ZYS#T+*25bNT002ovPDHLkV1m*L B3;F;6 delta 1072 zcmV-01kd~04$lsdP6InXMzK-l0)ICq@*4mE1N})vK~z|U?N`xq;~)$)F&K$M|NpzU z5@6#P>|AF$y@x`bI9XA4r3I5^`E9@LxBa&Nr-`(eufRXw#L52p@9@tzj-K_+NB#o5 zJXh$uD=1Nf7Z$vK0e-H~cUMqi#6K5Yu~HP$SCR?*)}AW#h|dc9h*yRjd4Jo$Z`;_W z5D6|XOLoDk{th>NdwZ(T6V4Cjn&QS#l(5ii4eN`_#}G(VfKUhnxa#Zpohp>Ge~fpAZe;s&6NVx){Y6wL;nL`ZPhfJ>#9g5(8=M zrvmQq!cen}%L|EDYPbMk8h^}!n*m((9R%Tw7-PU?9zg=ybQmei8{P@D5X;JJceuw3 zL->OP?jVQjr5|Kz8N&MjF8T^Vt&rwdDe4Pb0rv__@Pm$Jh0R+-qd(y}C#2TV29Gvr!_ zl+W<2X+c)7E3`FYNwyWQ{;9YM9N;ZSA%Nn#zFw~t@7bPRoyo3n$6q~G8OF*_9kvUY z;AQ$ul(qztIrHu>#`bN&3OD=^*x@_BfSnXJv5p0ERv-g7NPj0ln#J2PweRE;9M7{% z+m=@EnAKUfT=*pyyUC?6+^>V+F7Sk_H);X& z6hn+%fi=T$7F%n03z*_1!+O5)J_oXnF&)Et3oka<`#PjsB~)2f?&k?iV2>X|kzvaA zcofei=8atonBXM@T~A*)A!t7{JoHsq4`*daFMz0SB7efvpK~5?Ev*rh%-oWD9$5lr zcnLu-r~J}S3=e%3E=x;?ybV~DBv%*KUz2f;(=rU0000cThfNq57`RJ<{DK+&!$ECX?bVHKN-O|oI1~;5 diff --git a/graphics/pokemon/moltres/galarian/overworld_normal.pal b/graphics/pokemon/moltres/galarian/overworld_normal.pal index ef0bee86ea90..ca9a549d1065 100644 --- a/graphics/pokemon/moltres/galarian/overworld_normal.pal +++ b/graphics/pokemon/moltres/galarian/overworld_normal.pal @@ -12,8 +12,8 @@ JASC-PAL 249 181 225 120 200 248 160 224 248 -11 11 11 -12 12 12 -13 13 13 -14 14 14 -15 15 15 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/moltres/galarian/overworld_shiny.pal b/graphics/pokemon/moltres/galarian/overworld_shiny.pal index ef0bee86ea90..8330f2687abb 100644 --- a/graphics/pokemon/moltres/galarian/overworld_shiny.pal +++ b/graphics/pokemon/moltres/galarian/overworld_shiny.pal @@ -5,15 +5,15 @@ JASC-PAL 0 0 0 0 0 0 61 0 25 -24 24 24 -56 56 56 -173 28 86 -235 88 147 -249 181 225 +229 185 8 +248 208 48 +240 80 32 +240 128 48 +248 232 104 120 200 248 160 224 248 -11 11 11 -12 12 12 -13 13 13 -14 14 14 -15 15 15 +255 255 255 +255 255 255 +255 255 255 +255 255 255 +255 255 255 diff --git a/graphics/pokemon/morelull/overworld.png b/graphics/pokemon/morelull/overworld.png index 6d164768a6902a4a5f6556909a928b46e24af0b3..5f85740da2f6f8a4c662c096d45936cfd91e617d 100644 GIT binary patch delta 403 zcmV;E0c`$@3AqE1Fn<6rP)t-s|NsBySw(czAdqARqt$0LZwg*_Z^90003uNkl7`22)G_|8EPnxhb@v z887T)dU*)!nluEL%jI&pTrSr~chX93)%`{iCS1+!0WCK07k@5PT+Ph}FmXY`RooT; z0AR`~aIvApHHh5D45;!*p?1E8$jkCjp z=R9hl@M8vuH!N_<726hLgFG~;@=D!Xj9cT%-+8a$aK^9K7aWnAZ}i}}zsdpMJmM+N zYEb7Fpz|$K!hiHLD^WNed~#glT!F$T@CA=u^LOxa&bM=(Q^6zBBQ((X+5iGRdBNwr zfy%kRfpb8j0h#jz(mLJ)5(Cf-1pb>A@YUQJP{6X6U0Q%}kp>vgcY{&`Eg&i=@`6Q6 x*mj-_N)FY4`U>Z%`FuAh-;fy4di@^I3y6Ul{S~)TFAM+x002ovPDHLkV1hudzdQf{ literal 1163 zcmeAS@N?(olHy`uVBq!ia0vp^2Y^_CgBeH`yR~lzQjEnx?oJHr&dI!FU|?nl@CkAK z|NsB9$1lHLx_Rf)i%&<+9XWDj|Bddd}!hQ;K(D60G{ zRVy{!IU))QeqHZ2om~C3YQq%1^5S}j$>Kk_!ez>fzcWoaG9g3kJ8MJ76fdu(U!)^q z*mMpFZ~Q9toyCFS0I$oH)%k@tKRigXJ)e58U2wvoomnnfhvI6xyB|I%3~+dwdmu>Q zs&tsebFWhN6%xti4&BZ@5scro&VAlfsWRu^^RJBRj~?9)D}Qy}-13q<`>rFdTkChv z|0HXXSl6q=w!E3YFM5uw^h)MgGP91|fABUY@3~d_Vg3(`MK=7n!@#sR^}zQX4JViG zYxZ_{#bh;|Z%ySM)+KBSx&lwk*FM<2(|m!$&zbXYG4yP{cA#>f?h4TjOi9ky*w2I= y+V^?Sf^7>W1Ee2XmCn!Ser3Ld%_ROg^DoxrqEeOe(m$qvQiP|gpUXO@geCw3Ajt9n diff --git a/graphics/pokemon/morelull/overworld_normal.pal b/graphics/pokemon/morelull/overworld_normal.pal index 52cbf93f9338..6efa8c740b27 100644 --- a/graphics/pokemon/morelull/overworld_normal.pal +++ b/graphics/pokemon/morelull/overworld_normal.pal @@ -6,11 +6,11 @@ JASC-PAL 245 210 217 220 210 232 242 196 206 -196 196 196 +184 131 178 191 196 122 158 158 158 171 152 193 -184 131 178 +196 196 255 146 150 89 224 124 140 120 120 120 diff --git a/graphics/pokemon/morelull/overworld_shiny.pal b/graphics/pokemon/morelull/overworld_shiny.pal index 87d1e9509a6d..7f3068c45510 100644 --- a/graphics/pokemon/morelull/overworld_shiny.pal +++ b/graphics/pokemon/morelull/overworld_shiny.pal @@ -2,11 +2,11 @@ JASC-PAL 0100 16 255 255 255 -176 112 64 -240 144 120 +230 227 233 +186 57 24 220 210 232 -208 120 24 -196 196 196 +209 134 54 +240 192 72 191 196 122 158 158 158 112 40 24 diff --git a/graphics/pokemon/mr_mime/galarian/overworld.png b/graphics/pokemon/mr_mime/galarian/overworld.png index 122bda4a1306a594dc5d24e86ba01c9727dcb55e..fd95946076a2b9c7833996e53e5c485dd14ba1b4 100644 GIT binary patch delta 566 zcmV-60?GZJ1)c?vNFRrGb^rhX_Tu6H|Nl8TIi%k5zP`S3s=jDwXi*?IvXN&me?;My z_kY~kK$C1W9M&I`CgrG#I)4W+H>X>cM~@yodi3c3iR=~)vPP+CYof7@QQQ4LID$g$y`VRv_i^yO$He1IXJ>wsynJAGP2 zyZ2&}hsgn!lit$ntPeD_3DR!u4xlP_t0%Si)jEOzYo%GM>=O(Pa>B|A*&8&bA%rr3 zSXg{zfD)U+CqMOrV?#-iWpPS|<^)DGcpm~qmTSh2<%)5npus78<0ZK_e~t|`MaN!t z*Uo=TL-O8J%*R2hmys5$JQd0wUu_*oXr z0j>n?`T?3xbkOq4-6MkeTP`p--+ZnE0w%;C{k^^bAq*lf{RW=>3;+NC07*qoM6N<$ Eg3l!nq5uE@ delta 566 zcmV-60?GZJ1)c?vNFT47nE(I)_Tu6H|Nl8TIi%k5zP`S3s=jDwXbn!6?2%_Lf1q&d z`#s6Z5*bt8_x(pk8d=1U zW5WuWQFhMNA-t;EB*Kdra%^~=s({fRj3{Y$b%;aNx|hFc2}6zzm;B);doZHpNIuR{ zA3(p>&=Q6m8?FS;=~)w)P})d8fBtCl)B=kba%_0baI`yfdOG?DA7IF_p>L19JAkU_ z2tiEpFgd_-(tCP?^?`;?>9BSOP!+p9kXpiS9YKJ#((Fz435EtaVReP<4Vu#!V;w*& zEWSEGjV<9Pf9eOvhMFSF;?xYy3Cw5=Ax26p*Nh#@72`xvgG=~@*W}(fe>Suf9S7N6 zZ{|OzF^3Q+mB)irk4H%)ksOyWXUkG1%Kn&;Mi~_ zNr6+cXE39J^eL-SQqk3V##ZnP4~pM7Hk^tvb17_>sW_#r%s9!=jjPZELyiq1y)1|P z@-S1Z(2uD8Qqmh%>YL7*f503=jtwHYEZL9VQw@%&?(j}cdoVlzLyiqwy)9CsMlV8z zdDwQ7D%TgrI-OVa^8Kng?4Wx>p1_U6_n?`T?3RbkOrF!y|(ETP`rT-h8bC0w%<7{k^^bBjF+&e~UZ=3;+NC07*qoM6N<$ Eg8iWr5C8xG diff --git a/graphics/pokemon/mr_mime/galarian/overworld_normal.pal b/graphics/pokemon/mr_mime/galarian/overworld_normal.pal index 0166ba80d517..9783b2507f18 100644 --- a/graphics/pokemon/mr_mime/galarian/overworld_normal.pal +++ b/graphics/pokemon/mr_mime/galarian/overworld_normal.pal @@ -7,7 +7,7 @@ JASC-PAL 89 106 134 59 49 48 53 69 94 -175 154 153 +135 118 118 0 0 0 246 226 225 255 255 255 @@ -16,4 +16,4 @@ JASC-PAL 190 190 190 113 170 190 104 104 104 -15 15 15 +255 255 255 diff --git a/graphics/pokemon/mr_mime/galarian/overworld_shiny.pal b/graphics/pokemon/mr_mime/galarian/overworld_shiny.pal index 0166ba80d517..b2ee5a4fd19c 100644 --- a/graphics/pokemon/mr_mime/galarian/overworld_shiny.pal +++ b/graphics/pokemon/mr_mime/galarian/overworld_shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -197 44 44 +128 63 60 0 0 0 15 20 29 -89 106 134 +112 96 136 59 49 48 -53 69 94 -175 154 153 +96 72 104 +114 93 92 0 0 0 246 226 225 255 255 255 57 57 57 -164 222 242 +144 176 208 190 190 190 -113 170 190 +112 136 184 104 104 104 -15 15 15 +255 255 255 diff --git a/graphics/pokemon/palkia/origin/overworld_shiny.pal b/graphics/pokemon/palkia/origin/overworld_shiny.pal new file mode 100644 index 000000000000..8a6f0c4ab8e6 --- /dev/null +++ b/graphics/pokemon/palkia/origin/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +32 97 0 +0 0 0 +246 80 65 +172 161 180 +255 238 238 +246 161 156 +131 121 148 +16 16 16 +197 190 213 +246 194 189 +164 80 164 +205 137 197 +106 97 24 +222 218 246 +65 72 74 +82 80 90 diff --git a/graphics/pokemon/pincurchin/shiny.pal b/graphics/pokemon/pincurchin/shiny.pal index dd03c31a28fb..a2b0a156a7c3 100644 --- a/graphics/pokemon/pincurchin/shiny.pal +++ b/graphics/pokemon/pincurchin/shiny.pal @@ -13,7 +13,7 @@ JASC-PAL 248 136 40 248 240 40 192 88 16 -0 0 0 -0 0 0 +173 255 239 +20 255 210 0 0 0 0 0 0 diff --git a/graphics/pokemon/ponyta/galarian/overworld.png b/graphics/pokemon/ponyta/galarian/overworld.png index ac613865766b406f7a743c17bad7381f62e11239..683780312b2bae83528b1b921dae2d0c72fa92f7 100644 GIT binary patch delta 696 zcmV;p0!RJR1>yyeHh-AVpnFJrgLzsYARye+x5aJ6L2+u;nbp0zy&R63?&|*l003&< z-g9w5=DOzg^4^Wcd71zK0$@o*K~z|U?U&uI+#n2uVqB6LKNUtY^`!}4I0P!icEG^4fgeoF4I%fq8VCVA z7*{kEpF@GeoHFt8(F#{E7$ z<9rlp>-uWFT=N%426(xa0gkEXSPG@j-OM7E^P#fG_k`j&d^7-QrUiUX7#t^`bYtxCXM$;<7nyW{ z!$!v1$mM9|gA9~*WN`$>D0s@VZGiE$z|Qz1!8Wkq2BJuz!I*@xe;T?+gADYz#S;jF z3p*dQ+9TN?j|BH05mrzi=0|6*B9m%=n+RO29x;E8=TFA}UR*Qn43nNBZn3{I{>{zA e4!$Ad--%y-L?(TD`=;Lj0000srHR@s5a0i8`(v`FXLbcU+1|7h zX7=hs`BA`ZO1Is1+ikbqcH94AL{w5Km-&Z=oeM%-=85XQOMekp;EaE2*jo0zx(a8U z_F8MH*>jljkBxFQ+g$-uZW4Wc6OId}5*I+oPlY>03L>slshU95OB@$mkziB+Ay2B5 zGsD9ZFykBa<(z4|#&J9}DS(hCZIt=(GgET}%y<#WSwzYu&P-@>&Yr>Qzv6F!Daelhm&VRUHWlO-GJR0+4XTYz#D-`Y} zG7fHJ^464RXb$-wClsTeaYa9t73yUZVFkUaOFV2jK_0&#`$Q{*7b?J zmHCsyW615Ax{s$&``*oMVm%)!e|>k5Aj79X8TZkXI}TQ7tpx&Soc4Y){`%9wPhkBf zaFoE4uYbJ}UNJ5PCE|}sj8SlWPBCqkQ0j*3PVf zz?>CNdG!-u=;L7h;ov8bP=RPtXmB=RoS&JU(ZB;UE=2;7VB+9|)@CHf>){aoBSHkr z!~N*&UF1@mZxeyZoAKv*{$%~{;O6Ojxbzfpi6Z@#^pHSD`Z1H1lbIafMnBi=Z z)SuGvoDIZkAl*3m)JhOvH46bPN>|UofMBxk23_oPR@F*2{_!FXMzjjpo_2He0j~}Z zJb``Erv)8?HywQXca1)wt|#1gYp1-+<-5Qc4#rXD%||-vqr-3bLz9pKF##Ww!U8mZ z-JbJ+yR(vx9EguN3_&AOgzB9L^MwB4`CI~g&)y7}JKydGeEoafn8k`H@x0CsVQfP? zZ^Y9cvhXXsEc^(URyDZVdi%3YEohO(06Q6CBq#}s`x-fl1o5E*i11u8c*VqZcR6aE zBrm`~wHBw-fsV=S@iVVulhBaLk->g@NnL{^B>XvIlrpoe;I!Pj_Wlv;>vKE00000NkvXXu0mjf Djb`~;Ex>6tkZfg?zZ-~*{tb7J zK$#-!^SvzX6R_?dtc!&Yfe0AJ%Xka0NdgCt*mr@zw2fR8w z@C5crpB8io-gNNk-!=M#x}I>~t)22Nmq&p!9E_vPn~!wTM~4siQOBvo{0g&bPY(U;kb=X0aklJg>7u7~9a! z8}YPFL{AaX(&adkDU&dcsoi!;7<#7}M0000J2eAf_7#0Wv0001UMu)cm0004VQb$4nuFf3kks%|0=y$LH0000000000 z000000000000jwHwEzGDuSrBfR9J=WSJ`62APkEk3GM&?@O%K_uyM0>Z((cNA`p_z z)opvqQ=W3Cz#s8{FOC2R>joaaV6 zV#F5@brb)9AG>3JUwr8O9fPhwtPTW68X-=BEO@Z+Pxzx0qrYR&7bsvEL&cFnNNyWM zO)>YSqU&22bOn|M!GIaBO|0&=L26LttNd$&D}lf>Z!`#8KjCr4KQ$P-{+}C!vb;ut zWxZ4O_DSGg^XT9`e`B!QPXq_Z|JoF^4D#~Q1k|O1d*1Cd z9D=z9$=zrG1E>n9Axuf|S4LlgWA)bIL;sAs{Kdd4o~RuS1l0f=1j1p!X#`E+r9bi< z353ue!5F6~3S0crci|WRU|^WZqL8Q1tiKr4Gn6OsD6mWc)F&Z+^BDY20jBB>uiJ2k zxBQ*KQN){nw|R<&Vqj$uOo2sTOeg297W{T{J-B$oKN%bxV09n^QM)W;g9#hV1`_QG zg8-t+!;?N*i5E=kj}?N8d;Fb)Vqn%^3{qYLjQSI&vlT#TPdoy`=Lx(Lvj+M=iq12! zfi>>&H$r%?C54s)=`V&ygo?RjkA9)G7WB+o#aGQ3tA0w>!Q*S}CVq>b z4=G~?iGvi!H3F4?5Wpjh102V(_`#&%_xST^Yw;h`F)VAp-U&JZC_&tM9dCKkb1M<-n>5YgX`2YX_07*qoM6N<$ Ef+}ia^Z)<= delta 922 zcmV;L17-ZN2EzxC7zqRe0002CwraMKE+c;c0000000000000000000000000@G#7* z0009{Nkl!NaG15(pS24YkP@_j2Y510D1A;4>*6aj65xSz(wr!s0qWuL6}G-Ftt-jCLc} zIqw1v8fS%p=dU2!ZS3xW=_0JN8OZbf_Uo@kR|z#*^EEwJ z^ST(A?jP1sxGv(gr$^B-R81F&_Gc-3&?AFSc?tR<(l%CT%Q5VO)p@C`);#Ednm2s| zZ@mRbxzpZ$#DpnPbiXi+7%YD#@QPOZQ-bQR!xv_>62fZ3+klZd%mOk7fskH^@JaD5 zTAg)@6T=O;m0LTWzKdArc9lyps)@xh6ytg!q5(drVs%9B)UM ztV+L)`Vev(ph*p54CuEB7aR0WkV#`Dp(=>?V|tX=L%NG1AS7mg!l*Bm#H4YVNQh1Y zz4f&A?NEVE6GrsC5#E$vZ93LWU@`%F4(87~M*wr*PcOUBWoKummuFr+Y<0ba3SG|E zIJAT}VeSu8Mo-P?3uk|jbqsa)+kx@}6uO-6{^h@p{Dju_t0q9G@|M70Ge9U-i7X2; z>Hp6i=u#dKyq9_YAVJHA`aWM4Xj{X&kfFzWx|9cndvfS2Aj$^2t!FI=R6arbxB!#& w7!R2mY9h)AZ}{0!{?&9XKl+(-J0_2Rae)b&nk+CZ00000Nks-uM6N<$f=6eejsO4v diff --git a/graphics/pokemon/regieleki/overworld_normal.pal b/graphics/pokemon/regieleki/overworld_normal.pal index 1c69e174c2c9..f6bab934e8ca 100644 --- a/graphics/pokemon/regieleki/overworld_normal.pal +++ b/graphics/pokemon/regieleki/overworld_normal.pal @@ -10,7 +10,7 @@ JASC-PAL 208 168 8 248 248 192 248 152 192 -0 0 0 +232 119 176 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/regieleki/overworld_shiny.pal b/graphics/pokemon/regieleki/overworld_shiny.pal index 52fc33ef18e8..ae43ceece95b 100644 --- a/graphics/pokemon/regieleki/overworld_shiny.pal +++ b/graphics/pokemon/regieleki/overworld_shiny.pal @@ -9,8 +9,8 @@ JASC-PAL 172 164 205 172 172 106 238 246 172 -230 238 49 -0 0 0 +248 152 192 +232 119 176 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/runerigus/shiny.pal b/graphics/pokemon/runerigus/shiny.pal index 6166d5bfd632..8fd4e72f0644 100644 --- a/graphics/pokemon/runerigus/shiny.pal +++ b/graphics/pokemon/runerigus/shiny.pal @@ -10,7 +10,7 @@ JASC-PAL 216 208 208 184 88 208 144 40 168 -168 56 208 +56 208 174 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/samurott/hisuian/overworld.png b/graphics/pokemon/samurott/hisuian/overworld.png index 6dd47d57773cb2526046401c53de0d4d3040207b..7d4db0b87d2c2c0d20004de530cfd9318e49a060 100644 GIT binary patch delta 1045 zcmV+w1nT>g3d{(Q7#0Wv0001UMu)cm0004VQb$4nuFf3kks%iY4i+$xJ05?oxxUK) z00YWNL_t(oh3%N(mf|1`g(Wluu;Tl_?cPwU6qM-BnVtEuoKvmd5Wa*!(bMUF`>4@R z16a)fr2NYxumCCl@(2t-m49^r79jn62^ke)0IL4Y5m<{bdiO8K5@jRnIvK zF4etz8xT9grjtOY7hxKJTXb2V%d;Yx0d6{G2OvmL%o(%P=q4Zr#@;{@kR9OBt9h6K z)^V^zbI^@)+-hckRd-&p+-3-O-Zi=jNJtA*n4v{Leh!Ex5i%Aj4B~$}^UP}x~Ub^@UKq84@>#VO&OJoM9 zOBC^?kdvg0jYcCpF4H-n8c>WoV5Ckq0aFOtQEo%@3AO-H;aK59kg-fM?&LI7`3z7? zY=MDlxG-N`i5Y-eWzK&k=sE@>>d3b2gHncd_$EFZeR`bLz?G+ zL?xbm!sY;jc#n|zJwP2#_Z5Gx^4aU2;~Pc`5FgbeZ{bB&@4iid1xV*oXi4NZJ#HmV zkwxAC)X~TJ(Z&9s;DG@evoU;|>8>fSOOIrRoYc zsha_^z3VJ>fE}=e*pDBjuv;(wvN|p()&95=N&_h4X(p(Itk&1U{loSFc;`C+?tZj$ z$f(s^xIOjZ(RBcf9RZ&7aJH`N6&IYuE&xhObqD0W#wdTGKTJ>+rQVE1b_Z0x8{w04 zGg1)?UosMYI8I^lwSdweCRBHq^>V@GV9*`7YE~OS=`ySd z(DL;e9+3yf(C>gWX86sY^2(R?+x_l^pXvV}U;OvxulpbK_|t!a{gd_wn3Xn~TdaZe P00000NkvXXu0mjfiEZHp delta 1247 zcmV<51R(p&2$Twt7zqRe0002CwraMKE*Aq37%`DZ9)Af0l`sGR1fNMnK~#9!&6a;m z8)X>BpL?&AGJaj@0Ku(XPkzT`U8m?!Mj_eM#TX14jDNUhGei^PrXiVfGv1QIs4iJWA^sXJ!AA_FnU9T&59Bhlk`2Nw}bI)_1 z=icx0+<*JN0RPj0?lq9SSD>J@%ToEZeUnmJb>q-lPgMy-PUjj+euh!n<@CR-fl6~? zIHJ&;Sii{KpG0b@3h7m~EN=OLzP|*8tH-N=C^G9^sd@*J#YpBZMMit~z=}W%6ut(A zS80OQ00LR8LkkGe4ntF* zhA3`WB9R)H#5zfEPJ$*7zy#vUSezuK0R;FXv<0z%GOdXODj+=cRX@PRQ?w=!U?dg5 zNPofYbXEh1N86|!iy7b(36ww!JSTvU7ov4?RaHO`h8!#jti!DZ#8cY$XH*O=iYHJ5 z19aq>>WR^9yMW;}fkvhiJS==+p)`PaypjACMA=QmemTK1Abg$uuB)ug=+XuxbN7L2amjyV&p?Oz6{nGf9Nxu%S$Gx8zR8qORMyAhAR=`2KGZJ zFKqMXg8PBL^iolXuI=Z)A*~QN#iN%W{RN0yXVZeaQf5xK^fY*%AeRA!R0B(`zkd}f z2#pzMc?}?hr#In_$)CI!3`q$Tz#b5U+dOfzdz{=j_Mk0|Tn^;IwyW#vZG#h=uTEmo#^fI>9MAgC>Tnlk*#^){WcP%1P+H>!Zbw!6Z@N0& z&E8nme5JJB0mqBYa+{*M90x#S#D9A-W?#1unE^&P4~@G1(;}c?j5QMr0D60Wg}C8_ z>$g90nX9bc@U6Vm6`1DRo_52`#%nQP{d;%@Td$Ze$h%E>(_Gij73BBvzP0kx8L;30 zvZl4>2=;T+!ThO)>sEMSXGAK!UmrMjR3Dv^rXHTOe{cjGR6cb#cB%olHAJF*+Tnl{nC3$7Q zAPGn$$$pg6@vCR5w{y4bmw+`t0ensl%c_CLJ^onWyQ8t@1!D|27ys5Nfy$sV2Z&l3 z;E;e_S#cnBIm&v-A$=gRz<;ym!hPI^&*EjmI&EH@6`#jNMm39WiV%`OUM)qthyt#x zVo+j?-=@<4c10Jp?rx9Cf>~r7cMy#JipC<&?O~+UQ!T&MO$iP6YRyk zi~H$!+9Pj*$Mqr*8b6HN7pjBdFGu2jX=H~dcjWfnS@KcUnNc`VB}5ysy{N31QP_$7 zhe@JysiM->75vhv;PrOw5Pz1&s18%iT@E0t`5CDJ5DowN_y?ir6SM__iYx#C002ov JPDHLkV1n)APv-yt diff --git a/graphics/pokemon/samurott/hisuian/overworld_normal.pal b/graphics/pokemon/samurott/hisuian/overworld_normal.pal index e6be3b5f562f..15854747e9f5 100644 --- a/graphics/pokemon/samurott/hisuian/overworld_normal.pal +++ b/graphics/pokemon/samurott/hisuian/overworld_normal.pal @@ -6,7 +6,7 @@ JASC-PAL 0 0 0 238 238 255 189 189 197 -16 24 49 +14 22 48 189 49 49 32 24 32 41 49 74 diff --git a/graphics/pokemon/samurott/hisuian/overworld_shiny.pal b/graphics/pokemon/samurott/hisuian/overworld_shiny.pal index 827453552a4a..494b52f0aa8c 100644 --- a/graphics/pokemon/samurott/hisuian/overworld_shiny.pal +++ b/graphics/pokemon/samurott/hisuian/overworld_shiny.pal @@ -8,7 +8,7 @@ JASC-PAL 189 189 197 16 24 49 180 164 156 -197 189 197 +84 80 84 222 213 222 139 115 106 238 238 246 diff --git a/graphics/pokemon/sawsbuck/summer/overworld_shiny.pal b/graphics/pokemon/sawsbuck/summer/overworld_shiny.pal index 34f7d0f0b44b..4d2a5df53cdc 100644 --- a/graphics/pokemon/sawsbuck/summer/overworld_shiny.pal +++ b/graphics/pokemon/sawsbuck/summer/overworld_shiny.pal @@ -5,13 +5,13 @@ JASC-PAL 0 0 0 8 136 64 27 81 44 -40 19 12 -199 170 85 -233 219 172 -176 104 32 +238 222 164 +74 16 8 +84 35 16 +178 114 49 128 64 16 -207 124 25 -141 98 51 +183 167 84 +255 255 255 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/slowking/galarian/overworld.png b/graphics/pokemon/slowking/galarian/overworld.png index 5babfe384b6e99ffc44d02d1f10ced3fde735854..4ff3b7f4b70518426ee559b0e61a19810be7adb6 100644 GIT binary patch delta 690 zcmV;j0!{ts1?2^hKYzCCi00<@oSk!8P;t4lBEoCVqmI9xi+T#DIamkVZ$={b%9gE3_*KZiqs{vxuu!(+Uhgp;H{$q0A>Z4F0)93>fw| z5}0$s?Lv>b3V%tKqk%^__c+5*;L8OEV8SSC4~@sAL@1A_> z-w|?nza*%Pyfh_i33yx%5J8qg8wO^)tt*K|u}ACLo`2-ymH<)F3+(ZJ05b&gX&9LC zbrpvr`tQ$ikzjXj@_FpP&u<6tw(-n>$suSBT|(fWcJ$|Qkr0OvxOV07*qoM6N<$f|cf2;{X5v delta 693 zcmV;m0!sbm1?UBkKYzu_)#m2*oSk!8P;=oFbsroa_Ec<_WQqWcLjHC2U!H#Yx?6f8Is{!qm?ad zG7Rr{$2;EfKSfI4%2UW=x(aFyRIlcP;fs`^HIh1-Z?gGp-MMU5#!8#=VI$>0xN+VmP{T;Z^I|43-C z)Wj_yq)Z@a?tdcG;fNb_S9rC!!m-64un3Q$Wj|_Sx@F*uppJ85_x-Q%_P8Tgcw&>N zT9V<6(} zQr*J-KF2A+*K6a`8#FO}CaAYtjSO@-1Q;!i_8JF{)5S5TMC-cE&AX>D{R;-x_XyKD z2@W_dZs+4n*(1tJYBRR)_i>VpZ zJdXGKIA-+=IN}StjQzD-;jlQ~r%a#Oo0T!O3`&PRe~${tdp)iTKAxBU`i=YRp%^nf zW-3n8rw7D5`v&mdqPH45vmm1N#zngM=XnY0qb@Zxa@YP(-AVA9M2G(RA*%nm{tx&& b{(bxa!!kBqO<;Gz00000NkvXXu0mjf4UAbw diff --git a/graphics/pokemon/slowking/galarian/overworld_normal.pal b/graphics/pokemon/slowking/galarian/overworld_normal.pal index aa19348aaa07..7b64228b1da7 100644 --- a/graphics/pokemon/slowking/galarian/overworld_normal.pal +++ b/graphics/pokemon/slowking/galarian/overworld_normal.pal @@ -4,16 +4,16 @@ JASC-PAL 41 194 156 49 52 74 16 129 8 -197 202 213 +182 235 136 230 230 246 156 157 115 90 80 115 189 210 139 -148 109 115 +49 52 74 98 36 74 0 0 0 131 121 139 -164 165 180 +82 64 128 131 76 106 189 174 189 131 113 180 diff --git a/graphics/pokemon/slowking/galarian/overworld_shiny.pal b/graphics/pokemon/slowking/galarian/overworld_shiny.pal index aa19348aaa07..9a2bdbc76e5f 100644 --- a/graphics/pokemon/slowking/galarian/overworld_shiny.pal +++ b/graphics/pokemon/slowking/galarian/overworld_shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 41 194 156 -49 52 74 -16 129 8 -197 202 213 +60 52 140 +166 48 112 +215 117 170 230 230 246 156 157 115 -90 80 115 +80 91 138 189 210 139 -148 109 115 -98 36 74 +49 52 74 +128 39 93 0 0 0 131 121 139 -164 165 180 -131 76 106 +82 64 128 +154 70 116 189 174 189 -131 113 180 +112 140 196 diff --git a/graphics/pokemon/slowpoke/galarian/overworld.png b/graphics/pokemon/slowpoke/galarian/overworld.png index 277a1f3a87ffd23d53bf5128ad5ad2d58f02c70d..38352ce27eaf0768de8915ee6db295d718f7735d 100644 GIT binary patch delta 541 zcmV+&0^H?@0 z)=wD@{K{4yZ*f@14EVtDHZL1ccrNjax6lljoc%e+HC7UY<-jj^jY;geT3|BBd*NMP zgdyjDOsnYGxJ9}g#US!2t4&fGsPg5^*OVePCjZRZF1piyOpEUZF~=C`*-D_#adYVL zha6*yR2G1vLA=jJ;MbfJE9X^hkpowHh%3yc4>Rafj0b*MfE1L<5@7dt&e7sEKEzZM zL2Utxv&3Apg_@il=F-|++#dI>ix{afG0|CQB|dA_z|I#nz#_ktdI@ZN`CdM<7>STa zN%DHcmG43H9z}lhQ!^;rR<8EAK#r{$ED2WL7!l;k!1h<;HHccj%i_CVD%&(y7SxTh f;r6Od{C}!1dlMOiWBjv600000NkvXXu0mjfw9^Ps delta 545 zcmV++0^a@p1cC*SHUofwfRQ;QBi$d8qyPW{2}wjjR9J=WmH}?VAPhxgr-lT$|9NK{ z5+#{|k$@S00QiVMEQI;>YB*F*f9L0?Lg$E{W5&0t>xJw8p{%-VeOS993oG@Y@En@=sdgy9+~6pGC#xIC2P1(FXNP->*#&NL0BJ6+ zF)zp#&;3%kULzJ~gT(cjMO-5?66kO>=+s|5fhre!Iv=@7QNN=5TnsMcN{>3zA0GH( zF2GV@`;_s(uWXg^R)=NGP!61K^Sl9vmlD5Z3(G*4i$4IVv5_Dy2Y$h8h-wc?f!Uz! zMR$3B7WtGCui|Ir7HM))gCwVHHc4)v!k05&V+`Dw@-u6@=uZDJdwe%YDTKh!S^{lO zn?pxG

7yvLGG}(tWN%x26kGsEfjy+!D zV~AM+%@*i!k(#TvP?d|rlv`Vh+v2Wv5fe9TCPhB0C}(XN*!f}xSoD`tD}jwK-^<4q z0~7YBNnVe*@I8p#qa<&6S_XC7!p$C6D6uVrIl;m!BSKOc-2Pg;1TpJ(S$y|PW1H&A jjG9q4Twm3Q|4;P=($g7@`2r4`00000NkvXXu0mjfH}(Q) diff --git a/graphics/pokemon/slowpoke/galarian/overworld_shiny.pal b/graphics/pokemon/slowpoke/galarian/overworld_shiny.pal index 39773f539fa4..ee20b0579754 100644 --- a/graphics/pokemon/slowpoke/galarian/overworld_shiny.pal +++ b/graphics/pokemon/slowpoke/galarian/overworld_shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -128 128 128 +152 208 160 66 63 0 -96 40 48 -173 166 8 -239 229 9 +80 72 0 +136 120 16 +171 144 18 0 0 0 -204 109 117 -240 152 160 +200 176 0 +248 216 0 160 168 176 104 80 16 208 168 96 240 216 144 232 232 248 -13 13 13 -14 14 14 -15 15 15 +255 255 255 +255 255 255 +255 255 255 diff --git a/graphics/pokemon/sneasel/hisuian/overworld.png b/graphics/pokemon/sneasel/hisuian/overworld.png index 7f4c335a9e8f96797384e9172ec08d38bbdc31e3..a830d0c0e8db9e6bb97665cb824e98a4b6ffd6b8 100644 GIT binary patch delta 616 zcmV-u0+;=(1@#1w7=H)@0001UMu)cm0004VQb$4nuFf3k0000mP)t-sn9!g~N@5TY z5JnS5VsoUVz1}%WQgK0%dyBOH|NlodVWfNB%`r;$v_a;J5Mdc%aPaC50005=NklzuU-9?SGx8XRzXSKKMAyqQA>3PW+*uz!ksWbaIfU_FR7z$5r^a=^$C%2qkAu z9aen59iu!9{!LkN4X_<%@Yo^)1(%0Ee~VOnSAW~8>nr{}Q*o{E_GSj(wrB+kE^-~R zV2_uabn0zY>>I4Ol^C_g8%BGy;vgRi=CAlp$m<&ASATPL2y`3-7(KKpZ-_7~ft9nj*UJIL9x4%c{)!Kw3Up{RAmylUrQGiVt)u(U6Lkeyc#%2Zyy#y;h3}P2sp(ulbBU-Nk5N)z+6GvPZ_tdSW z1@_;$ieWzn=_U^zs+xlp2jXrJ>dq?Hrdu5Jf&UBdXaY9;7Jj$B3Q)_;6dEa(3W1LCw~!dd+5m?yc867g=O(j zyL%8%EtW;JXq%{&RX2Z3GIWv|W_s+!eT0GEyd*P|nalw6qaXd~$I*qP@-3(8iY9#z z>qA2;^NkzOro#eR4#`qR#i&%s8(7C3HtF6FD{+~%+7O(3Nz$|f%Rk+Q(g_eadW|-< zB#*CijAG}!(SO2lH~4Unr!94-+>t_a_#n+Xj7O(-ZhX4h}dZ??lZ@tz3{UIv;2HIHXJ2N%rCd1SmMH?TIM zV&bFF6_^9JX7h|k5S#_Ln;HS@c&1FT0k)z0fNR`{7={80Vzon)Dft=w+Ni9I-3 zs;nud$bVsvZr(%C;u$wE5YC8FME&2ec&Qj~RIx|9Bm-Vz| zUA{%_zGcYL$BD%3{{{Upf~>O#2wlUTSJ9UKzZjg={{Vsr`XO>iT*?3d002ovPDHLk FV1h0cNJ{_! diff --git a/graphics/pokemon/sneasel/hisuian/overworld_normal.pal b/graphics/pokemon/sneasel/hisuian/overworld_normal.pal index e909571475d7..3a4e58b0eb3b 100644 --- a/graphics/pokemon/sneasel/hisuian/overworld_normal.pal +++ b/graphics/pokemon/sneasel/hisuian/overworld_normal.pal @@ -4,16 +4,16 @@ JASC-PAL 152 208 160 74 74 98 16 16 16 -32 24 32 +70 19 70 98 115 164 164 189 222 57 74 82 -74 49 90 +113 65 145 123 139 180 255 255 255 -90 98 106 +71 53 97 164 123 222 205 49 74 246 180 65 230 139 16 -131 148 172 +97 25 97 diff --git a/graphics/pokemon/sneasel/hisuian/overworld_shiny.pal b/graphics/pokemon/sneasel/hisuian/overworld_shiny.pal index e2b78ba4413f..580e24ee3ed1 100644 --- a/graphics/pokemon/sneasel/hisuian/overworld_shiny.pal +++ b/graphics/pokemon/sneasel/hisuian/overworld_shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -82 82 82 +48 48 48 16 16 16 -189 156 49 -98 115 123 +87 68 9 +47 66 69 131 148 156 57 74 82 -230 205 82 -115 131 131 +255 212 0 +79 110 110 255 255 255 -90 82 98 +50 39 61 90 82 98 230 205 82 -156 172 238 -156 172 238 -131 148 172 +135 149 204 +112 128 193 +204 170 0 diff --git a/graphics/pokemon/sneasler/overworld.png b/graphics/pokemon/sneasler/overworld.png index 29f5dc9d48c78cf9a1a38db6c753b7240ec4aa12..b81dedda541b2316facb35115c0682b065c5e970 100644 GIT binary patch delta 865 zcmV-n1D^b)2&V^-7#0Wv0001UMu)cm0004VQb$4nuFf3kks&{SB}qg(a-Z?L*{O6ODDY4XEDr3zs?EPRt`&s z2omWghaXz#Y1fc{@Y)ER@lu|1JVQ#y4LPhOeSsH=s4<}P^ouC_Tb*kSjQJIwM{p!{ z@C_cXe;h}YXcuAMsXPg^VLhYkpfSJn9cg{N)WLI3n}fbDD0Cao*pqH@bkxEvrYM~8 zGr|`XT8HiwI(W`$-J$Ob3imhwJz4`b?+v(1U)w?^Cg?nWhmY6hIp!|!1kN~Z`!~<< z_r9@#wh?MB7;rAPcq@>S0hONuF*h3;)Hy5NIc6MFOqk z(Y8>{%Y@W_Y9k4pP&FZE653{fy#PQPw{z*I#bt+3Qv7~2cHgqQv3A@7$ES?9%pPYk=Dt}Xz9&p{DB9-rrLrrw%O4} z676os`LVm1*{&6D3O>kYKl|PH-t3z3vx zGdi5+fAL{g4YIU>0SM(NKR9cKOJKhlJARA6QeF%9PdNbFSG%r3mT@vA2xXA~jMoET zzqH1VT!STy2Jb%F+>4>G+kJol3yb%c3BpzgixL?QD_H%U<=vn&CDTt?)%(052ASK5 z-1fG$hj9pt1ok-W$Y28Go|J=ZoZ^3nyzd@lh#doaVsPR}2#W;hkbw**3E&P&=K?rl zXlGsTAajQVJht<*6L=|$1n@0`@lFCAo`cK2mHY$u#yT@Q4Vm1zO%@4ZnE+oR7LRdb*r$Y_rpi+_`=h?Yc_%&Pi%K&32rL$}Zx$NwbJL}iIf6{1z!c);yg_XRk zVee}vO|yGaiXAKK8uJovT`Y|e)G?(ow102Pg@#NRY=TKW-DRk4ltpLLYAOY=9G#h6 zFHIocnM3>8S(-N`*9j@kV{ea5%$11LJ+sO40(?uic#g6uI_j;11i6{Z zRyU;Sq?lN=p_}A#qby*p43u?qf?S`@T1n||St!|4n-+R&#C`QF)RcdW^mP_Q$$0{l z>~=dw={%^ifV}4|q3;<1WgP(Q8L1}I%H58Gu&AhSGgy?IcM>5{Gv)hJ2S+9CxOj$H9OCFJ> zXKOG;TZ56@3iunHzo80&ceJCnDGmJwpdn}BI>5>OC^n?<85Bc9tpwb*7)lEy>`XA+ zvU&{nd`_)XucT>2c>?b6%1~s(C!XHpZ=F1OQgy2xkBQ delta 21 dcmZo?X=j-b!j*4rbo}`7XOrG5Z;V^X2moG=33&hj diff --git a/graphics/pokemon/stunfisk/galarian/overworld_normal.pal b/graphics/pokemon/stunfisk/galarian/overworld_normal.pal index 9070fb58ea90..5d6a48cd7699 100644 --- a/graphics/pokemon/stunfisk/galarian/overworld_normal.pal +++ b/graphics/pokemon/stunfisk/galarian/overworld_normal.pal @@ -11,9 +11,9 @@ JASC-PAL 255 255 255 0 0 0 119 108 95 -111 59 50 +168 20 20 199 199 199 -12 12 12 -13 13 13 -14 14 14 -15 15 15 +255 255 255 +255 255 255 +255 255 255 +255 255 255 diff --git a/graphics/pokemon/stunfisk/galarian/overworld_shiny.pal b/graphics/pokemon/stunfisk/galarian/overworld_shiny.pal index 9070fb58ea90..7fe680b775a3 100644 --- a/graphics/pokemon/stunfisk/galarian/overworld_shiny.pal +++ b/graphics/pokemon/stunfisk/galarian/overworld_shiny.pal @@ -5,13 +5,13 @@ JASC-PAL 29 32 27 59 64 56 95 102 90 -142 172 96 -157 146 133 -205 246 140 +168 160 56 +160 128 112 +240 224 80 255 255 255 0 0 0 119 108 95 -111 59 50 +168 20 20 199 199 199 12 12 12 13 13 13 diff --git a/graphics/pokemon/unown/b/overworld.png b/graphics/pokemon/unown/b/overworld.png index b2500cca0cd4b49f896564dd672d1c9c03929b08..1e8ab69c117e625fc102b25ca591dbbf8f8ccd85 100644 GIT binary patch delta 393 zcmZ3@w3vB`sf3l26xHjcEt2NyChFo>79MwA5SrR}8R%`D`i2xK!RdAqwXbg;^L06E7!T^vIy=DfXf zkoS-Q59@`B=3Om}36m8zGb~~*NcbD~VS zt?ViO)1@2&zHDE{%f?VEFX6!BGJ$Ew(}&8^tZm0d9^^Y5tJrz*_E(Fqj0-<1)Z}Vg Rw}3qB>FVdQ&WS0Z2>|ZEiopN? delta 272 zcmZ3?yqal(O1(jVPl)T;vupk{{D+`>_wN1w|6f2rV9Amt#l^)zK|ydSIAb#J*RKo= z4BI?i978JRyq)69)oQ@gvisD@Cl3u{rUZO{Bq%3$`&U?6lkA~rPRRnpxd!p|2ZDlD zhG>0Ndig0{k7t7uqu8cBjqVHT<>IXwTXo7Ao-e<-CL!^%*_oT2OWw_vWLyv@#VE_L zCuHq+HU=&xnF-8qI0ZOb`8*h1m!Gda8XNhZS(^0*6U#3d8|E*CyOlL2XvfbhW_wY7 zYd>Sa7xT|NJo64PZWL&IXwDHI`DbGDJf`sf3l26xc12r}j2;FC2JsTth?3y^w370~qErTVAC~|>cZIUl zA_ZeTlfu>|4}nTJN(%hkfilKGHiK7#raX{hNq6*hWMJ6X&;2Kn705RT@Ck7}dv*wfo#SkZ+91l4pvzYAm@{(i(^Q|oVQZ~ z`I-y_Ty~qk5U^>u#}cfc@PwhR;=lHeBQE9X6PIp0r z{4bAXPx~&#JaJc1+eyw9ue2LZ|23@PlHkx>dSgz5al<@D3m$`378XX19c&9)`5rX# z90+rGb$oVY;(~Yjs_z+IEIfG4uwa$Tw)R(z+6@2JrX_fNnaiS3D|&Ep>Vq?KOxGBi z49_wN1w|6f2rV9Amt#l^)zK|ydSIAb#J*RKo= z49`7X978JRyqyxrcgTRp`S;Yxz8%S5k~dW`91#>au9hRDa_-u?TjGnR{U`|foy$7$ z(gh&+@6izaoB8iP$ELOKW;@l#*;lu&-RrmNZ&Udll@$RcGgIr=Yn?L;kbm*>guy*# z)z@;@gbkSXv`=|C>#1?FLXczQO<{wNzg-U0?4QZRmbA0@G3O4(4{?k$KF(!T;BYvg z%%EGsz@NfU#mIU2sE@>skY~aSe=pU@GKMppC};fB(3su8cr`w-=X!&5I>!wrD-NeQ zuMf}nw>=p5;@pomq3^~USUn!G3o(`0F<3JmWM_CT{jdEi)0Y?Z)~CMQUI6qogQu&X J%Q~loCIDTgnLq#l diff --git a/graphics/pokemon/unown/d/overworld.png b/graphics/pokemon/unown/d/overworld.png index 426e517d5df4b06d05a19b2288a0f406a055e7e9..d8796d020083830aa2f931832747b577d60fac67 100644 GIT binary patch delta 417 zcmX@bw3~T?N`sf3l26x4wX~S8qP279MwA5SrR}8R%`D`i2xK!RdAqwXbg;^L06F(PT^vIy=DfXf zkoS-Q4{Jbr^A0WM18S~`j4tdC4*b)eaPQB5aZdsDB|p-9KEG1ic(X^+IPJ`j#Rd7( zCO`l7c_qKa(;aqay|u!J@&niYPL!6t z5#@D9k+tHo>UwtTc}gs=mmNBoUcm66x_wN1w|6f2rV9Amt#l^)zK|ydSIAb#J*RKo= z3|Bo}978JRyuD(`cUXakHNbz4PFEFA+ly}I5L>6K$>L`J--~%zyB?bD{Gpj8XIs+I zE>Ueg5r=XM#qZCT8#0{SxsRcqQD+jnz_DNn7e5oJ0}L7WPFBkK>I{3?d0uS{DPX(c{#EPY?TEc6mcKvP9`_{vqQ*4= qGXv%fzx<41?gq2%iRF9!_Ar))=4_9Zeb55*B7>)^pUXO@geCyKqKF~@ diff --git a/graphics/pokemon/unown/e/overworld.png b/graphics/pokemon/unown/e/overworld.png index 741a5ef42e1427da054fe295f6bf44ff6257375a..34fd50f0040e92fcedfb2417da1470b5c77d5949 100644 GIT binary patch delta 396 zcmdnUw2XOzN`sf3l26xPMP2TIfWS*7{p6lBT9nv(@M${i&7cfeOv11JIm^)LpEW)^Z$1hN^EyxmZR_X4 z;MmgpCoEXn!hc(tgWZD$7KI56*IqWUHGVOEB~;Jwq;9h;i`zbCiwFNqWZBOB%J?Pd zaP4~a%4mkJRZ;Q>7$&4neI3**d!U9PYyN?A<{uoSUo?C)*Z7_0c4(sL)n_M!)~{V% zxRLS8KGtIlW)e4E|7Y0J`0hBD`y+-3UZJ;(;ux+^k1jiVxo&6c?XNb!82VG>k~yuV Rn?U~cboFC(S?83{1OP$si!%TK delta 278 zcmZ3+ypd^wO1(jVPl)T;vupk{{D+`>_wN1w|6f2rV9Amt#l^)zK|ydSIAb#J*RKo= z40}9X978JRyq)66b=ZK1rS{Wlr9EbK!w_Et-rf<q-V@91VEv?qfpx*HZT5FJGDrA3ycf3E+05~!k#WWUM&15>!hJmQ zHhY=b1SD$XSXepI)tK}cjyY6rG+|hL@QThX)`FVWMDrNg_StjReZMHbq9-YRI=}vH R1E5bBJYD@<);T3K0RWj8d`$oV diff --git a/graphics/pokemon/unown/exclamation_mark/overworld.png b/graphics/pokemon/unown/exclamation_mark/overworld.png index 4271c7ab99a223d67cfe3431f957ca0a2ffc1213..96073167d0ab7a66365f64460cfef042896a1ed8 100644 GIT binary patch delta 334 zcmew({DNtMay>K`y~{$!fU_3=HBWt`Q}{`DrEPiAAXl?mjL7e(nlo zsYMFLdM1UfOCAE1aFi7IxdUa4fouk^22FV&#ggvm>&U>cv7h@-A}f$@5a1KydiLxZ zATuFjf`dndhJnM27e99F*Z~xQf_fMOPBRO+C;~Z*N#5=*3>~bp9zafyr;B4q#hkZO z4ssqg;BkG*t70yzaPNrg-35{h+TZMVI#>9xzQ;pxL4EbKr|ie3d8kc3nUXi9s4#Zb zqqdA#xx;N68?Q?KmoYefdOxdjyuLxNp>RaB>7kH-X!qa~|C-LQES+6?x_f@;gh@RL~E3(Nt<=?9}dyGzp2>fGzT(J1^S366F9XF+9)mFd#26D2etDnm{ Hr-UW|@49qP delta 2547 zcmVaB^>EX>4U6ba`-PAZ2)IW&i+q+O3ysmLsVV zM*p)4FM$XM0+z$`oY{ew?@LNmUDe(8%-B{+$`nZg5#J+F*#G?Fgn#goR&&VawX{+q zuiSFe&P9!{S9`uC=I8r)&G#*Se`^o=aYJcJoYU*4_jmtJyMO(7;A0LM-`hid-_iOW zNInOCUg^$!uh-W_(yp&|$?t*MeqEGS{p(W4d!YI5_$=l9$)C%5o$l}Ot-;CCGA2r@ zJ4uSqcYduPy*`~!;agLtpCo%)THutDz6T>A-@^Mi$M`it-;(@s6@JdX_TML8`@2W_ zDVOD)BQAb>Lx1e2_VhWwew{ddu1LS%sQqK8Uz2>!s^{!ibUha`THcI$k}V&@&~cFR z^gLELoR4ws&(Sz)>~RA5f|-M3N)rW@6C}%$E=Trro-$ct)~(K2b!vLrYI1El)5R&@ zLymfCX{8E&Q+EKfob+=o^32dHSkp(c6qS0feC} z2b-2UV1MOo@W*q7L*0^PGb`p+gEi|Vm0YZp;^mrL_vG2li@R5E-fOD4S}oOUt*!Q^ zE#ZOIO7m7*YrSjeOw<{x)4$U)bfl4ojWT@H(MF%pXXa_MOrLeO*_W=gu!&Wcue#dm zTf)XEcHXwj_FZ?|{lK-8PCjy=V=g$otlhWE zwh`-)Y`k-1A?a9IrO%TMKWXL21m#gJNPnFk(}1j}PJ^`g^(0o@+9qYS7;tagt_hrKlo@hC{5FSp)3r3$ zIeEV6ZW_eqMt1~v(>zxhi^s}BZ%;rmT3&gdotB=w;OB1exud4GAz zUi-N+lvZ@s-7}-38SSg4HA_aOV6<7fl?X|PZMZK>yFH&3c3C{Lt>k_6CK+C@xnXp5 z#_G)h{Dvf(V!5PQ9dqKxPzABo+gqrFfi$=?0);lmK6XA%nN4Fo)a$PZ4Y}VNbVo6Tq|q1mC!7+ z&4wUzTbtyq+@C2MQ$7TVg3XK)Mk?Nwx;cjvtl643V~LD0m9v|k4bFRCcH*tKTx z{iJ+|jZKYX)}ir`7m6<{?q1sEOioR1@VSyyLfFsBP~g$tVeHB?(pNNkkDOA zKREo_jnNbAqE|^e2h+~e3xBtt2zItIx+8ep0ljXYGMpalt*ix7N?kZQagNGPZNhOU&Pk>tt2xp}T4<|vG+}+ONE8}_^B~y=u1PZ%Ceynh*53)img@{?p z7zh7~y`5I$^)NJB^?xO3>SIq-LwhCimZLezDjA=cLR>aaMS1Mz*x=RG$!AqFaDY{C z2Ed^tUY@Y`M%t*el2=GnXC&CB=eud$gOa_mTPpDlaAhg$F?dhcqZ^fggy|S#AI~>J zBj3G;y#V55sT6;B%kJSimBvpyLVMs!^t}POPy`m{!rs6OgMX4oHVv~bwtlgL<2ZOa zo3%xy&$k9@*M?-|6P6DPcQ$TfBO6q+zNoXOj=aM#HXII_WHgi`x1)-Azo z=dTMUdq-rC#lF7#P0YZF;)}C^y%UmTTkaz3+Xw`wkEqWu{qOT zX0oed;1xZHAVlk^%q(M0l9KQoU-$6w{Vv9{yzBlP{eNoCVt`L1o@ItvCEg&O-mDs& z_ld)-D67Qh#A7C1kob}7ipy`D3l0lBGi;_)^Tc6dvCzRv2eYE75l<0ERZXXSA>*>j zd5g1FuCdlV`3r+NePx;JG>4GDB9w#001yhOn+2G&CRU;0RR60|Nj90-rnB-|NjsW z5TvA}b8~Z2Qd0i_|Nj90{{a900RR60|Nj90lMVIt00009a7bBm000XU000XU0RWnu z7ytkO2XskIMF->t7!wI1K`x$P0001WNkl1+cp%wvN=*BwH-#@H-Lk|bG(GI(y)`GPvP)A>R)kNkI_*D*VQ=>hm)Z;vY;25M_g z9hG_%DEJUO4jeeZTo2qAn5zN9wmWrzdK?H2$N~ACm)_rX9bVFrRju6ZN@4&2002ov JPDHLkV1nyS@;3kg diff --git a/graphics/pokemon/unown/f/overworld.png b/graphics/pokemon/unown/f/overworld.png index ea3332e941fec718005c262d0c32954bf0900999..789e65cc1de3569feefe0d28839ad5b68b3f9dc3 100644 GIT binary patch delta 393 zcmZ3>w3vB`sf3l26xZk{W3)n6GH7{p6lBT9nv(@M${i&7cfeOv11JIm^)LpEW)^Z$1hN^EyxmT z=4<_(T=oo!tD4Sz332z+Sj^6Rt&AvVc=G4gzU~$4jp`S4T#1^lJi&|QgfFw0O9Fd| z!_AqDnGVg9Dnu4+s=Jk4?;xhRb(Jdf2KJ1*lkFtLa!mI+a(rWW7s2E)L1F`c0QVEe zV|DNBJBs*c$TWUdaIR;Y5Sw+p{LBeE%h|^n3Z+gyww2)Bb7#@*uTCGCS)VBczGdP0 Q4f3p~tDnm{C#HlZ0JtcK-v9sr delta 274 zcmZ3?yq0N#O1(jVPl)T;vupk{{D+`>_wN1w|6f2rV9Amt#l^)zK|ydSIAb#J*RKo= z3_Cns978JRyq#jm$E?W168kfCxyJbg4r2TrpIS7|pL=goRY84itsu~L=wY}?-Q8Cz_Kl)h%oP`UPe`^?*-3~yHp8ocsY9m?;Z zz+A^*&G1t>z~%t++80_5IlF(Va@ah&%f;r$_>IB7?ZDn=j68D~OU_SfaC*jnU_8VQzITG%ZSOq!_fju}8MuMo N@O1TaS?83{1OP*`sf3l26x9>%AA6Z;t$7{p6lBT9nv(@M${i&7cfeOv11JIm^)LpEW)^Z$1hN^EyxmmdKI;Vst0H_&-v;Y7A delta 289 zcmZ3*yoYImO1(jVPl)T;vupk{{D+`>_wN1w|6f2rV9Amt#l^)zK|ydSIAb#J*RKo= z497iP978JRyq)66b=ZK1rS#Kjr`V%C1XeKaYn#vEz#>qvg^6h%>kR$rf4R2y zygO>Zuw0EPQhu(|WPfMhugna09<1zh;B4qV&$h!+<^jWjV`e?uU!4B=`{${mH62n~ dB0uGib0-O9@=vZc+Y0m)gQu&X%Q~loCIBbmhu;7I diff --git a/graphics/pokemon/unown/h/overworld.png b/graphics/pokemon/unown/h/overworld.png index 9abe3e40010435444e7dbc9a94ce90c5dc9e9f40..a5f030dbd6011979dd9f59efdf4dafb53f69dd14 100644 GIT binary patch delta 407 zcmX@ew2^s&N`sf3l26xUdBID7o1~YU=S~HjVKAuPb(=;EJ|f?_i+jEb5|%! zEmAPnGbwCc@(`$mqolyk9VlZAWHWd*XvzaAmUKs7M+SzC{oH>NS%G|m0G|-ovuD=; znF$#a96Ta43>;p(__1Th4xk7O)WaAsnpwz25y)mt@^*J&=wOxg0CKK+x;TbZ%y~QI zF7F`&o|d`1MWK=mW{fjg1!No8zr{C(cnHk*j=8ej%W@_EJI(JWe{S>$2ZHN$Q;f`h zPGXXlRBL2Xj!!w^tMKXfZ&8V#atW`eJb!wXi>v2P{USq#2PJD}Jv(qBp5ca+kGUr{Icg1P9tH-8s z-q&1rdLiSp0NsLv<_AO>%5{Acp0qQ3-w?3sN=3z+b_R2)XS+_wN1w|6f2rV9Amt#l^)zK|ydSIAb#J*RKo= z3}-xD978JRyqyxr)odW(@?Bef@}=ZA?vX_emz1Z-?dEivJ@=~55q(AFx}0NYj4!S^ zaRmfQr(E&-IjJKzOOKIhX1)HTt=uND@Ao=9b8lEb`P$2~JRB+e5=0rlRhoAnb9k1| zz@T5bGy7L>V!}t=@*2Jk$6sguH)OfB>RR~$L5H2Q7+91TUOm?4IIx*vga#svmHf3VP>aiQszsN=O<9A{U{v%CFVdQ&MBb@0C6;o+5i9m diff --git a/graphics/pokemon/unown/i/overworld.png b/graphics/pokemon/unown/i/overworld.png index 39aa3b8572199448f2de292cce8c0766a7b9300b..b360c0faac3b951477fff43841dfdd94048a9ed0 100644 GIT binary patch delta 350 zcmZo?`pGmwrJlXS)7O>#1qYj;n&BFoTy6#i2JsTth?3y^w370~qErTVAC~|>cZIUl zA_ZeTlfu>|4}nTJN(%hkfilKGHiK7#raX{hNq6*hWMJ6X&;2Kn705RT@Ck7}dv*wfo#SkZ+91l4pvzYAZM{tWVwMTHS(=j#=cN2`~{iUJJaAhaUEe4$j2kzZr+4F8c`-A6Sw*B9j X=Ta@bJdf+S0>}%Vu6{1-oD!M<sJN_ zhDn|-jv*Cu-cH%bbwGi~#rS7x&@V|@l^c7%2z%M@?mNrMvxv_rZ}*&??R-KzWAvtH zE4H4re7bnwh1r)m*$WPy(p}G$5@jpRP$zHM$fO<4z}mBWMndAVn6tVL9^a3OCOlXq zb%CuQ>7l9sBiD^8X4W^X0>|Il2l|Koa=FJhftBNmWrc79^XdiC26xW0KX`6(OMeaj Y$>o8kJr2)J2Re_z)78&qol`;+0Faexw*UYD diff --git a/graphics/pokemon/unown/j/overworld.png b/graphics/pokemon/unown/j/overworld.png index af240eafd38ac6c7c4f941c00b56c9393bae28ac..e1c88938d7bbae3950aec4c44a287cf120d62234 100644 GIT binary patch delta 372 zcmbQo)XzLYrJlXS)7O>#1qYj;23r@?(=G-E2JsTth?3y^w370~qErTVAC~|>cZIUl zA_ZeTlfu>|4}nTJN(%hkfilKGHiK7#raX{hNq6*hWMJ6X&;2Kn705RT@Ck7}dv*wfo#SkZ+91l4pvzYAZN3ui(^Q|oVQmF zavnC|VGYP;KD~okMLMNLq_lAo&jsi2@e8lN;{Kx9>g4!eZOMS{k%6q)y`P ztdgbK=l6?m`?o8HQ{(ooJ=}sa0m>HVcF%SwxN(({!7Y~|Yp3nJYNoE4Kliam&*r&s z`dt>klE49mGd1jtf5b9A+uWJ>V50BlFDEn>yjsuNu<^YkpUIB09SU!Q9SXc7p4%VE wX4tTdS%ky=!$SsUm(R2K9$Y?fZ<+lmZsr#0-O_OuDj<(}y85}Sb4q9e05T|o_W%F@ delta 258 zcmeBYp2svnrQRUGC&cya*){(e{zK5cd-wkT|1TgQuw==S;^N|sJN_ zhLxT!jv*Cu-cGs5*^E$UF<*ttLZT(!i;rAvZV zhG>0VxFySA>MGN^xQPGzWElgh`)YR!+iYlbPmord?2r(Axxs;-LI3lv8KR5LhFN`sf3l26xO-9~Y#|#Dr2JsTth?3y^w370~qErTVAC~|>cZIUl zA_ZeTlfu>|4}nTJN(%hkfilKGHiK7#raX{hNq6*hWMJ6X&;2Kn705RT@Ck7}dv*wfo#SkZ+91l4pvzYAZMGWi(^Q|oVQaB z@*Xnaaed7DNQkY0*UD)^B*R5Uiw*y|4xIhBaE3$miYN8Ie{P(w`!qw^|Ewpyd za>aVRALjnnI~rKy-u+zWxL%*Hp}+miW?qf`pY$A<=M?DKoMXzAd9p<79)m2y-2CsW z`Wa3r1zjy=sAGOmYkH6AB$L1mdq$>>icEiHr@TCsb&^3vPifbpxeXt$E=V_9e}ZYg ycWUfKhFS(Wg$vI({xELX5ij2`|MI1}!&MBgJ!JR4ExfY}_wN1w|6f2rV9Amt#l^)zK|ydSIAb#J*RKo= z3~M}H978JRyq#jrcgR4%CHCz}r6YzhE{iWH_cd5Jo|E=@Dk&`H9OQEA<*~7;T-sRsqe_Hb>fblSVb z+<`se@mnuvCYM0d*oONI22D21y^LIM?l&@RUC8v;`ar=VgTe~DWM4fa3p#d diff --git a/graphics/pokemon/unown/l/overworld.png b/graphics/pokemon/unown/l/overworld.png index b11096a1ab728da126eb4716749078ff2a215c94..dbbe738b8bb2ca7fefaa52ac05f16f66ce0dbbf9 100644 GIT binary patch delta 377 zcmZ3+G=+JBN`sf3l26xO2lJ4m1$iT3%pZiZDE0Avx;1l9{_UsxU zGa+MwgGYphfy0XzKX&Zc0Th9OdKd#nGYh#W0@;j7-tI089jvk*K+X8H&F zlf~9gQ2Qt?lrVF7_`yaae{YVm9}Xu6)hOVlPr+FpYoLZ^{&U^&8`oiHt>2 zzPXMpGA|kg-ydka&t$S~wj^g?&Wbi=Z$`oD9ELBo+|L*uZWO7R@TFLRt>0exUHVq` z1#S<5KkR(IAZ-T6wR{F124#VD-@=`X%>M?LU9FYgzf2)#2FQ1wu6{1-oD!M_wN1w|6f2rV9Amt#l^)zK|ydSIAb#J*RKo= z3>!UN978JRyuEUe^RNLAYrtHaNDbM;?H@ies4BPkOsIUF{Kfu6A$M!jKi_SO(`D4t zX8Nd2KKVyy>7rxW0fOZc49_>#$FnjPzDegWyQR>aTWQtcko`fHC8gojrab-a%4`>f z8;`l`Fof;6)y%`8!Ep7`goF8vhd=G;J2CNVU0$8s2VRLQl^;x{8Eg!)J}?S2|2^ID z{5j()$r-G^aZ>lCzB61mZ*X!*RESx-zwO}um-9cd{r(V8yrbNZ73g{fPgg$|mUT`E FO#m^Hd_n*K diff --git a/graphics/pokemon/unown/m/overworld.png b/graphics/pokemon/unown/m/overworld.png index 0d5f60e297013c1b355d5085da527a88198dc32a..19524911541f4c12e51ba4c796a79f4a62e85aa0 100644 GIT binary patch delta 402 zcmdnbw1#`sf3l26xEw$#T11JIm^)LpEW)^Z$1hN^EyxmWO|B$^*$a*Z8yFTbe>nJ0dxC;X^70$4b&5~_z43m3G*e{JGBB9V#NO~> z^Ze;I8U#HbA9pzK|LO)yQ}wYuF6_JNcqf!5yxLiRXChz8pCtzwA8dI3$RlLIbA5&s z-dD@G+spmg)$Hf-+-Gn3{I+fmvx$J>F^yWr80G`(crG~b27LW49CBbSgVZu@Y2gb3 ziwjeBE@il|okPGrlu5jXF^2I3Z=tU1g6F#%(j&KBx~`LbyPUByDrd#(_wN1w|6f2rV9Amt#l^)zK|ydSIAb#J*RKo= z45vI@978JRyq)66*KEMUQhVxjz}5604Pg)CzH)}fAE`sf3l26xZSm9dr|o87U=S~HjVKAuPb(=;EJ|f?_i+jEb5|%! zEmAPnGbwCc@(`$mqolyk9VlZAWHWd*XvzaAmUKs7M+SzC{oH>NS%G|m0G|-ovuD=; znF$#a96Ta43>;p(__1Th4xk7O)WaAsnpwz25y)mt@^*J&=wOxg0CH}5x;TbZ%z1m| zBIh9k0k#LH*>;-oEs*XI4!Oj7gzrJ~@AVHtUElxv=Hw#K@`t}M`&6y3r_+^7An<8* z%MZEhhqAszi8R*bGqSv2d-&iru{RH1>)a@QvO-F!USsW(-g~U!4AI38?wV;aIH=7` zm!Go4$l-2D5JQvE{QisV;SDU>68hHJS!AEFyBmGrfW z2AtaY;j|XRv>9y-r%JvY{3*!5b70Tg2vY`u?Ya%74Kgyk3_mIkvc6_0{WAZ->SL>w j89Yw!UQuKIH&iswYrEo8rLzpjK>^_D>gTe~DWM4fo2{8F delta 296 zcmdnSe3)s1O1(jVPl)T;vupk{{D+`>_wN1w|6f2rV9Amt#l^)zK|ydSIAb#J*RKo= z4Cg#u978JRyuA|0b;y8+?SakL6lWVZdAE%FN0mF&1@^3++2#FDZ>h6D%OC#c64iL? zYeKF{6FpQutzNRnZu_BEFSov^XZo7P$TENJ<-6C!bT(LVhn<@f>ddlq>X{XKI~Z@w z5{}o8WMnWpS^e!`>I(jVnSERi0r!ee+JWRQ*VxSzHCu3m-JM}xDKm>;L)CvisSnW& z6;@Bq@p=3zwY$l|a9_fafkB30+WkD)Y==L&m+Kt(`q&t1d`Pt|FKf><0}t_ iplb22@0aaA#cchtl;3&fsaHV1F?hQAxvX`sf3l26x9pUE9M^YIW7{p6lBT9nv(@M${i&7cfeOv11JIm^)LpEW)^Z$1hN^Eyxm3>$W&tLy%xye+{MvJ$Yw;cCE$&*kSIaIlIJLPxh~dHMnL9r1GB{PvaLd@|b8|uL z=2pw;(aQad74dP`*B)S!bai>ob%XgqaBM=OSi+z8>IDZDGkAQSET!I{a_L7(!hg-z zpO+f0_P%;xZVaO}!@KPvt$}h(n{>~I9jIj8Y0uA?XCkuIt^MTR4aN6*#J1a?_`kw@ ZL%H(RKhw_oGH?UE=jrO_vd$@?2>@c&l!O2P delta 290 zcmZ3(yq9T$O1(jVPl)T;vupk{{D+`>_wN1w|6f2rV9Amt#l^)zK|ydSIAb#J*RKo= z3@1EY978JRyq)6BcgTRpW$&kxT1O1`tXLz%P{?v*W1&M<^6ndsu^T>y#QM0;obE5$ z5VSHxYpR*z=an)BZ?E&d$eF=hZ^G5+Gyi*Z;7WLgSt32{s~XvNGWjvw$zRE}*@m^_?fE!`V3j97ZCH1#UfBJtxc;VP{yJ$f ebGwuOSBO6pZ8le&bKL^yD+W(jKbLh*2~7Y?$A{Jc diff --git a/graphics/pokemon/unown/p/overworld.png b/graphics/pokemon/unown/p/overworld.png index f3699ebdcdbaf109114d2873dd3c3bce8692e251..fc497afc096bb23b98d7a1153690247114024526 100644 GIT binary patch delta 365 zcmbQn)WJMKrJlXS)7O>#1qYj;E_1v5QwIhH2JsTth?3y^w370~qErTVAC~|>cZIUl zA_ZeTlfu>|4}nTJN(%hkfilKGHiK7#raX{hNq6*hWMJ6X&;2Kn705RT@Ck7}dv*wfo#SkZ+91l4pvzYAZLxIi(^Q|oVQmF zavnC|VGXEcKD~okMLMNLq_lAo&jsi2@e7wbeYN*!oyYad{N}Oqf_<)9Q@xf3RW2`m z`;qId)cXkxw|CWWvAo)qqiFGsJN_ zhJ~Ikjv*Cu-d;J#*| zn|w0m-IOk=^$xCg7Bb8H{wBgwd}N=j;*E@Eo^6Rm42{`sf3l26xJ+XuDgEANx7{p6lBT9nv(@M${i&7cfeOv11JIm^)LpEW)^Z$1hN^Eyxm+EE(Y$XU}ik97f zI^nf^)lG&OXF_v&LYXrb^qNN|um>g{Ug~`$y5Up3f$hA-5f;bi-4Q!G0xkQbAe(0&c^+Z)-gPOtP^&HcbZ$OHlqiV-6xUbSCs?K1hG^uWMbG` zTq5JpySjYJC+57F%Y_!qH&gih>uUE0+k{)ozl+S#V|4g_GXL1xnR)7eWfuIOcjx(c b_bNu&my%~_wN1w|6f2rV9Amt#l^)zK|ydSIAb#J*RKo= z3`aa&978JRyq$88?~sCk%l9quZmZ^BbT&S8_Xlg+m(8yFcV&|@x61j49YZ!i2l;qC#~Yw0&4 zUd2Z+8dx&;O+ToUc;NCcHns`t{TdkCnOG7F;$N^hwaPPeUFox7eY|krho{o5PfoL| zaBJ{(`>Sr17W&5gBTKvIdGz~3XB(!PN|)s`zW8x2{PDY)?-c&Z9LV>7{qeWBvMob? XvR}31lm$^hA2E2k`njxgN@xNAt1FDM diff --git a/graphics/pokemon/unown/question_mark/overworld.png b/graphics/pokemon/unown/question_mark/overworld.png index e4d210288364040bd08298e5864d79e4640eac28..743b7edbfe9ddbb1eed54c6d3c880e4b17f192cd 100644 GIT binary patch delta 379 zcmdlgI+b~Xay>L4EGspZGs8FffRhxJHx&=ckpFCl;kLxcj&S__-^T zr4}g|>zNd`E_n!4!ckJ-=MI!H2C^Bv8Z_mB6id3JuOkD)#(wTUiL5}rL4Z$)>)Eqw zfXsx92@W0+8U_w8Ui{dxV+T+K3hH4DIL$2Nq6p+LCV9KNFm$lWdH^{)JzX3_D(1YM za*+410*`AVv(F{QLu@OA11zPtFn_u5H#}qgpOE{GUxH5l|CZCvE~LoPfBf;sKRSUz z@&blp1}r;sLL|Ija%-H~;3(1+vzt>yZ>zani-yBLosx^80Xq)Za2>YNaCmlCpXrIh zRIX&-CDm>X@e2fgY1kApiSTSvov>-Cq#3K^y1R{E-ELYX<|y@UTxGP4b$5)^9BYy|gdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O3ysk|Qe) zM*p*lSpo=zU^##w;_hIUKZmrdx~jWp?jy!ocDhJ15&9mI!~XXlC;W?-#9l*DYqi%J zd6ize48FAZdiCcs#qxYUul2sf|KG-gd|VKQGUxpI*T#GPV1HbH-0-nRn%~DmdtZ_E zeo*>+@bk)d<@?>g2FbX*##4DesPEU8+M9h1b-o|8-V>it-tY1m*6Vct58noiEV;5! z7TG!F_X$5agOn8g1#mB<6HPS`!ar?d>QW< z`KMggcaHe-+kXp5e;Uu9>&w@L^Jhfz{le)VkNP#q=Xg73zjilDC8PDts3+O!<1tK} zq&z>jRSx5=e7EQ594(HxfZSo`mk^OCSoa(#|A)y$gegg2qaZ;f|QbTm0;53uFXA`p1Gn@MWEL$Br+O4~k#Wv&zy{m#wz?8ZMq4oAB!9 z&AX4C!p13f*}Cht-FDyOz_pW4IeO}`(@sC*6MwZgs=pk61GV%SnC4snI1R%6r%wkKW$VKjA7P}w{6@t`@P4ILP1H!VC=t-a0{Xp(7;TE+0 zCEVoCkP8>O{|9mb=zhiRH>mk|s$+g|yDGdnjT!Zw(ucG#WHu~=ul&V-eh&Zi#sWY< z5r1ph88~Ms-lb?8x%RX$QVLe-l(MwVEp3@6$?hhLypLJ?I@RlB&ICXF6QT0wEu^lE zN1^>)zT2$$p7Sj;-?$SVX1eQ~aHut8-HgrePjLw>ZgwUD$3uyE$)Fe|LFeym+y!6h;| zVY_GiNV2!GlGT&9`_%-cYv6^Yqf2+g%QpcKf694^OIDkte5_O%)wX@@;HKF%&3}eW z&sw%o#-81<(A9@g>_ponA-(4{q4Xk(q_Wl_vyeFUg!`s&I!2i^i=wkPPbh1<&ZQt# ztH-n1{*0xry2oBQHHRolYP&{jdqa*HS~|)`)mAq14PuC^SMh4)bV+U2x(Vm3$vgS^M@hglnK%td+sgPNE zQiKOxR9Z8o-f55VaL0nzv2hgjW0GW)sZSOLQ*}-E)9_F~%TUaSjWRIlhPe6AIYF*4 z=dkL%Edx$y>inkY@P#@g;D22(M|hpjDZ08+e>$KdhBB@(4cK_amkM2NyADD5K>TUW ze4(NuY>j)FB=mb^v^8z#Ni9jp0XH+k!`$K~{yf-R7>5X(+c{7D^9&ku-=4EcozC9w zm4;03*%vw*6bN18GEY9k3Yxr9)2Iih)H$6xP^*&E)>hSS)VK~0U4Qqr*u2_s$dafp zI&iXeTCS7_4TqWo6LxD8PD~Wv)JGz_Mp>i@&%lsxu1}$6^xB*znby@N;dkz0KU6`q zwwkCqsR2r(7-QiTKTyk~?LtYL@yVxBi!fJ(oGY{ZKn->(PEHX$0lL%BcB~lG@Lc!S z5FFNl3!U4LmLNICS7eO$t#C6;P;g+=DcvCa|~N}|)# zMelGSqa84)!%Qc}vij^9?#EYw#C>SKNrLZq;3l16kp}_-gi;0i4a{S7<@d!^5(%RA z^U%S@@UcT9A5H`h0|k$Jk`>r-u8T#a%Z`Z!E0}{W2M$9z!GA0h&S3MVZE&(R7p>n% zCgC<74+I@V#zf+R#utgt3A?h+&lu_=O;d&62XEMA-i9plI|AMWIw7o?{w1XYt6Rp@ z+%h<#H#&^FLAn|ztr*3o_kj_Wo(8P#dg^ZMu+Bijx#^6irc>8il`64q^S0&zkU(1O*QVlUWcf8k3HBJ;)XY7)0004nX+uL$Nkc;*aB^>EX@6{G004NLeUUv#!$25@-==Cs zDh};X#34g<5DTIrj#`BxR0y>~s}3fY{y~$5q{YQia4k6avsiU-an{wrRS*P!K%5+% z6kVjm?~+1`7!U65;l1yDx%&k&SHR1B%Wo4StZ^ep5Ck)ocD>ttSGC*=fqx#>7 zoC^*MJTq*jQ}e`OVzJP{N(Zx|sS!^RM^#Oyd?Dkq%6W^kR<5zuJ^2fRIelfB>okXu zz#^6)L4<-DN+_d>80|VK7E*K`_wWxoeu-QPxqnJv0{s+H%Yvm^=+@xR} z=zg*7k6|FN3pDGt{e5iP%@e@?3|#4Lf29G;e3D*oYtbWMU>mr&ZfnXOaJd6So($QP z9m!8q$mfCgGy0}15V{5W*4)0e&T;wxq^VcQ8{ps&7%5Qpy2rbFJNx!;O{;%DT$FO2 zFMo9fZvX%QFi=cXMa|8u{{a900RR60|K8r-|Ns9G5D=uKq;qp~Qc_a?0RR60|Nj90 z{{a900RR60|C0^%^#A|>32;bRa{vGf6951U69E94oEQKA00(qQO+^Rf1{f0uIaSDd z0ssI2rb$FWR7l6|)JqD(Fbo7xuY9u7bAMY;EgAcANPJpq`QEcYd3W$?H*8p%a^m-ePF`|*5kly2kTLw;3x4E o+5y^qz}X-SgztG>{C)pXPGz%X>6?rePXGV_07*qoM6N<$f*8#1qYj;zS-kh&JP(F7{p6lBT9nv(@M${i&7cfeOv>405 zA!CArM}&rf!;2R`cI?;z6oG+y7z0K#3%Mu)*^Eiv?k)@+tg;?J&T3B=$B>FSZ?9bB zY!2XIy^zBExk7e9UXrJ{MrlJ`$$wF;e^c&USdt{jweyGYx+g1ExJ>n08nkkc^5K2+ zHvfHmGq0gF(w{et<#vs6`h!Eurf(=`I8#$=vz#F%GsJN_ zhWVZ@jv*Cu-d-`}I&8qh8sKXcsbSm3u3XYENx4OC_r0cl4qdMUG+yL8J+rSi3|tzt zGDItV$=bJ;uj}QvF>-CT)jU(k@#>q2`i214!+V(%p6%PO!Vu}EWKbB`sf3l26x1JzY^JPR2Z7{p6lBT9nv(@M${i&7cfeOv11JIm^)LpEW)^Z$1hN^EyxmUpI z75nSY_>5)7_czL>oDVoz6`ud$c(*jBI%y5F^S9HFYfjfU$1_b}_>?zud2(yQrpl;Q z3mAg-$M%aht<+E7@7k2bKK*y{+Qy|K_t{r4TCdgnuF%L(x2u`Ki{XFdiQ{jd^|iR0 zO$)L$;+*l*eDZ^P-}HOgO*e?ga4PH)yuzU0Cx5cr{R6K;jf~8RcdKWwW2ob`-1M(_ jAH$9Y=ACg*>}C9y3x~_wN1w|6f2rV9Amt#l^)zK|ydSIAb#J*RKo= z3}-!E978JRyuD(`cUXbPA<%!0&Z;V&wi8O#SCw5X9nVF({gHim$uIO{n)DwgA;Fo3 z$;W!^xp;qRvi}Wiuw;DJTDzoPiYY>n@r335=B-nzwR5gBMsMT(Q*(CqU8V^PpGxGa zqZKu(-lU83Fle6MyH;SzqHkx!6U04Ue@@J6U9f7eX_MiC)wAw2vB+3dF|pTicj#^3 z_GsOjbH;xQ8KgOw6eO6pCU`Mi{F=b?qy6%;nhKWt40p~SY#1qYj;p~P$6!jB9L4B{oO5hcO-X(i=}MX3z#J}v=%?h0k8 zMGD4xCWWm_9s-qcloa^617(bXYzD6eO?e>2lJ4m1$iT3%pZiZDE0Avx;1l9{_UsxU zGa+MwgGYphfy0XzKX&Zc0Th9OdKd#nGYh#W0@;j7-tI089jvk*K+aT87srr_Id7*N zUv{lAn%J?gmZkQZ$dyMEbbhluah zTVq0X|0_-CyZY(lfft+~q!vvt>t42cmLGG4Vf9?LAMygnmpAV5{eOg6flJQ$vHadr PkkdU~{an^LB{Ts5b~SWm delta 232 zcmey!)WS4DrQRUGC&cya*){(e{zK5cd-wkT|1TgQuw==S;^N|sJN_ zhJH^M$B>FSZ>JpOY%maDd7ql8E_k^-P}k0{_n2}_ab<&u2=@;zj>nfB?k%%VWq09^ VIs2EP$Q`sf3l26xBc5BozWFmSFo>79MwA5SrR}8R%`D`i2xK!RdAqwXbg;^L06BX-T^vIy=DeM9 zkoS-QkLz3BM?!23z7A=OF6<8u{L`NB&FPQxV~?p5Cj6-`ivJxSwNdXJ1@OJK3C|-1ZW*Eqep00i_>zopr E09{&*t^fc4 delta 272 zcmbQqyqal(O1(jVPl)T;vupk{{D+`>_wN1w|6f2rV9Amt#l^)zK|ydSIAb#J*RKo= z4BI?i978JRyq)66b=ZK1rS#Hir6^Sk_{U9_h}%qJn;M=;GKy~cu*P9S%&7-#Nwv-4VqD+;9$5H+yZjJmqprrR zo8oRZA~$x}wzn$svwE@L;*WS%sc}Qf#{K)$wmrX1TmCQme^OfGW!~|u=Ch1IFK{w= My85}Sb4q9e0A_ZC2mk;8 diff --git a/graphics/pokemon/unown/v/overworld.png b/graphics/pokemon/unown/v/overworld.png index 0bb8dba96c8ee604ff3aa40de9017de606116df2..c1fd90ff23d7ed51db049589440d237cca8d4bee 100644 GIT binary patch delta 360 zcmbQh)XY3VrJlXS)7O>#1qYj;k;QL6re6#U4B{oO5hcO-X(i=}MX3z#J}v=%?h0k8 zMGD4xCWWm_9s-qcloa^617(bXYzD6eO?e>2lJ4m1$iT3%pZiZDE0Avx;1l9{_UsxU zGa+MwgGYphfy0XzKX&Zc0Th9OdKd#nGYh#W0@;j7-tI089jvk*K+bYc7srr_Id7+& z=500*aJep9@l(XXiZNHJV?l$=rF!lIXM3j3Re931MOn{(@z>3%DHA-Jjx*HJefm^|2aAd#cx#^McP4DWaAiYFdmjnuy+*!b@L`xx#CA5Yvj z5?yk;pljuVNV%J-vt!blO6vEy^`AZSn4jfVzg%$Rqox0Tv$!bSHAp1?FgrQRUGC&cya*){(e{zK5cd-wkT|1TgQuw==S;^N|sJN_ zhS{Djjv*Cu-cB*(I-(%rveqUtqKK#4V20fr!9#M@zR%C8*Prm}Iv}4T*KFr%xYR>M zsMF=wlcIZ$=f!Lrrn2lU$gRzdk4}7gvn982zNgBQd97g%HE*`XH;9MSX16jN|1p2< z0R!2eTHcQT-Z<;9md@%vy+TjhG47tU%`@-m({orN9(>&K;F++B&-zE7UTE+7JM)z+ h$FuW(wRQZb#6wp_+5Z$5F$TJm!PC{xWt~$(699={bRqx% diff --git a/graphics/pokemon/unown/w/overworld.png b/graphics/pokemon/unown/w/overworld.png index d49a4cf96cb94452d43965c5f6cc87e14eefb037..8c424c88b9a1aa91f2fdce0459aa68d25c3b219d 100644 GIT binary patch delta 358 zcmeBYYGj_EQqNxE>Fdh=f`d)aSWm36?G*z9gLsK+L`iUdT1k0gQ7VJGk4u1`yFyuN zk%F##t%t9`TKsIBNx4R2N2dk_Hkh9d&#WAE}&f6)D ze9aCV3=i46Z?WH)f8znWRILO5-~ZxA;<#?7Ogu8fBr%V~G4!aj`_~Ti2ef7LjRA+LBm*MRC?_Xpe z9>2<%l(zZ4to5P`z_>|7cIHL%V;LZ?c)I$ztaD0e0sv`>fTI8a delta 243 zcmZoFSZ>Jb?H5l-?8b3`@l2dm6`9e?5(PrCKO}8AKE`=wSdzbx@xAG8SaTH*Y zKcxS=Gw$BkWJPXXrwi`QA!l;#I!On-maK^_C}Gn#e%cY(X8ZTz^X;l7OcUM&ZAwB($NJKd|hp)ElcJ9M=o5CNk*yw#Q gFWB?z{ulW$ecRaJ|K9z7fX-y_boFyt=akR{0G^0&f&c&j diff --git a/graphics/pokemon/unown/x/overworld.png b/graphics/pokemon/unown/x/overworld.png index e1621d278bd6be49e0b8f4b04d1f21761dbceecb..4de8713939353ce73e3fd8749c8713c802d9c594 100644 GIT binary patch delta 371 zcmbQq)W#1qYj;iONpVpT-Of4B{oO5hcO-X(i=}MX3z#J}v=%?h0k8 zMGD4xCWWm_9s-qcloa^617$$U8N3=a<$)ASx}&cn1H;CC?mvmFK)ykMPl)T;vul9N zgp3Ie9uXP_4liE(*s)^=Py`0*VGJ0}EaajHWHTmtySp%Su*!M>Ih#CP978JRyq$cI zx7mQlbuMp`2YZHj0*h8TV+h-e#=qeTJCE8=>b(`LYJcS6XJvcAlP-<|ERF&(ZLep4 z`d*uxdvK2B`MV4(cdDe|}?>likmw|3s;=I*JFMxlKRSJ^bt$%l%JeT%gSl#ZH%vQPow{$@M@^tlcS?83{1OUfefsJN_ zh9#aZjv*Cu-cB~;I&8q>YWg!p?Tdumnd3LT`vt0+=9s@q^HkXCIjt$~gu?#?>g+C4 zR6HlCoV?y}|I)eVbAB~#UAQ*5jQOs?sm``b+KD&s-+srj_zss(to-NBJP+o>XF2yR z_;Ou%oLhFN`sf3l26xQ_+tXPIxddFo>79MwA5SrR}8R%`D`i2xK!RdAqwXbg;^T9JI~T#WAE}&f6&m zd7BM*T<7v8d9Y`gC$MOhGlsCeX#5-Ap!{#zn`MFg9zTQl?#ut1Tw@Rz4g}Xzj~w^@ z`TdVa?SUDV{mYqjdWse?eqivq{MgR&fW~%)$Jd`0*c^0{dh+sFNR2~P?Y5iDT^;94 zFEDX2{V>yB-^gKbK!Tx_BZoC0@_v@;j!jCB*6FYqY@Wq%;hB^Kv&a8@uI%E+hxw!a v-e>IGd9t4I%H$|{<_Be0tBQS_UstKV?ah*RU)&Mw0P>rstDnm{r-UW|jCq3+ delta 259 zcmbQlJfCTTO1(jVPl)T;vupk{{D+`>_wN1w|6f2rV9Amt#l^)zK|ydSIAb#J*RKo= z468g{978JRyq)66)oQ@wvia0W7aKQm)hm1dD4(!ze7^N`8B^!qU*b+|yJqm5X=Za0 z;c9hSc-`aG<1f{5!O|PlJhOvq8d~H0LKyfR?DqXmWY``sf3l26xGl5mp^H~@e7{p6lBT9nv(@M${i&7cfeOv11JIm^)LpEW)^Z$1hN^Eyxm(It?!vYD)f#zEIycxhCX8^OWDaV;)Vn@NHkX8VFv88`-bW zd{@fKI)n8>8Uw?IgG@|vmswbn&N;9wxGy$^)llt0{R)P6sjh;?414D|aCF4nb2x3Xw8+@1G&DMOUYp64uA80?oaF{m*7xT~(PfaSs53$nWXSBi6PN=*E8 zm!Z9#^T6AuPemE7Fcg0=33$%6p#R6x<+`cy%jFqgl=CqBcvaDS=>NvJHM8W{Z*?68 Qd62==)z4*}6H`JH0Oq5KIRF3v delta 286 zcmZ3?ypw5yO1(jVPl)T;vupk{{D+`>_wN1w|6f2rV9Amt#l^)zK|ydSIAb#J*RKo= z3`aa&978JRyq#jr$7IOkvi;M^u#V(_HEs*tWf%*aZ1pcZG}mC8#-@4s=j6&lq10Jz zAW*mT!osYHzxYHGbQ?A@)iWd9Zze#7#N(r)*ovyb?`P~xWLe1Kkq<8G~?uFcZ-kp z`TPvq&#=LsS-wwGYbP0l+XkKw1k5t diff --git a/graphics/pokemon/weezing/galarian/overworld.png b/graphics/pokemon/weezing/galarian/overworld.png index 883a3637decdd256a36a0668c0d15aed30f5dcd0..869fd482d1af89003af74c8cd6e850de2530ff31 100644 GIT binary patch delta 1196 zcmV;d1XKHz3YH3xJOh-Gl#xFt1jV_6Q;}*Pe|SkmK~z|Ut(c3Fq#z7MMH?g9E&u~h;#4g)+dbn6;U)xxou+o1zu#};ar-Gfo;!}-Ie6Vh{l983uj{$arKov6&s7bK zr+G%>b+-L$w~E*EtlYK)w3`vo=O_A~@yjJqH%5w$4LCr3ys~lX*ASQjoTdNSjo=c{ zf5EqaMstpM2s9Lq_?;Ym%&<=2k*u29Q*|5W> z7H3@%;5ZIItEChu93yo;wsUBE_we=XoFLTnDy(%UfrF21$6=vqksMgdg%ggbO3 zUXss-fT>x)8Mg&oL@2Ucu7MH@i9^lrF2}ZkZzfndI#NzPQwUUfmjKr+;Hl(|WyCz_ zZzjQ%*W*YWDlVP9$bygpfGowr;kW{1r*IFDG8Ebcd<$%F9V%o2+!pMAgD&S5f4t_M z0|?R!N)8%e(5!$AFA35C8U>nsba)!-78qg~z?KD&^CU2aB7hD0JUKN9N(0mds&m=n zX{aO+H$5~lMF!hu{MS5tlmeh$@W9onNzf&*EKty?>T>mz1O^X)JBle`7;t=qUKb}c z1z-$X{N9FAEJk2n;>T77kk5Zwe*;l7Oc8s?O8A+F7`$IR)~5)JWql2JCLq)Wno6k0 zxydZkG*iHUUmLvT4zo*b@wZjhcfjocjRJke1J5!~GgipYNB_ee;~htji!^^**}em= zR)S2m{e=he?H8Wr7HznIPgE(wko;%Y0)Y`}S&f0k*EPR}%U zsXudm$8)3e4xgs7G97WY@rp1tn4W5(3^?x%nk8JHA8Z@Ax7^+OG})a1I$UhTJ?I8e zz6+i?Zw=_1zepjy8r*yCn9#&V-0K!OHiq|{WAq#tCKs0%9SJjo0jI+vE>jwU*ZBRG zdB<^!@Kl{hy#!ml?MGZTfA_FRfw~>40G>Iy-*Icf;CAon%$Xl{M;y0mtWI8nHoNp|YXZN0CMiy{C9^&)i63+v8 z=5E2F!mWjW@K;|P=to?QXp(i6;9ghW3Z6NxDe)cUR#)a|!11-Zf6<9bKA}qRh|7Hh z>nznbwaUp8cgZ)Vc%vyU?;8UiVE_DnANq&W6sikf#dH079@kw;6xLUc2aXVTW?GvV zBdwRIY!xq8DXJsSsL}J)>3HT@_v=Q5vKCsOl}e~~!xPct0Y?QPNE77NryBiIbF*n(Sy5{wx9Tri4^f6I&OmbqQ& zDC)$R)O@=5b)#~;NYV&)fRg75(}jVL8igXO_Tt%XOa8nb7$-KyE1`Cf>q?e-H(=Ji zqpOgqsi$c3Jw(f4|?(<5nCIe6V>{l9A9*Y#X|Ez0}zT-CsM z@*a&>Z~M1y6|d*nxa|q(HzQ!oPxSBc%VkkFMv9FMI6!^8vT^R$5tsw?(*GPra0wXT ze_KGOIY&H38VX1JE{;A*zMe6X77b7web3d=2X&+VDA2h|KL<#WQvaH_0=flk1#|;Q z5nDh3U+2kiDTm3N;$nVb{Ds`2EWk!qsTAm(^3|b(me&IM1#ATL1M~@7aM%(X4*1gJ ztSbQ=#{p>NYk|TsQWsK>7XtbPYy{W>e=Z`#=0Gij9RuLvTaSw_Px?0spwTDXp(F8< zeRc#a-2yfoiUO`86j`p+K#7ISq2+g%W7{Bf6RaE^DJP#f1ggACfa@0UQuEF-VjlH3 zlVHm0abyk+m(D?CLCgU_kz(O+TmiCExCh7?iv0q<1$MX&6^j6F3--UkkaLScfAh`( zMCk=J2MsW4RzQZA1nB^s0?j@KJP&mXjHwP_D*`Ba7MNlczy@QUotgyY0onr9xg7C4 zR2GPv9-5dUgKabZTV6cM0Z=b^;Of*Q=n_~LDCkrTxq8Y1V*tP%#gs5iI6gwJ-U-bC z7=s?ax1k)15m=V^vDE>T^Pks1f6@$7!~u#DeuPZP;6oIL(uL&;%#I`_l35_^6 znPr-03K;NfgSXsacB%PrTNQmL+z!ww&{sV2Eb}yDh5SMaKio0iarEe=h1<&Zop7}h zWUB37cqHG!^E9Wl)1k)g#^{m96htBBCtC$?I#0MHI9-UVtuC_(=WSZ1e>pil)7Yi{ z%=sP9jm|rKnkve4#@Qw)!qi}TnuRjqyft{pl|*nh4gB0@3~__6Ps|a^KxvA?>Wa9I512uE-yL~76ubehecebGz72l`z`a1 z;}#L9I*|qmwtCyoxNPpxe@lV79hv~1Il13)Yr)|55a`TV9(HFOw`#0TUYc4gp?+IF zb1IOq?}<`O$J8bP&zz##F)XC?1tHY+_snyUk*l0s5;C$TMmTe04gWdC~p4QK2kP>yuL5UOC2`Mj+Q8-sf6~qt(1nNZG-i@`sIz zOYci%0vc|*UpEpbfBtEPBfGsVI^1G`+GqruAr@P4t5AXwgP)5=k@0VNb=@+zD;-6h z7?YMS7r$;)ju%ND!46RKQenO@@KK{uWYu20xNXUw*8}6k#&{*v4su<|a_Px#Fi=cXMVZs35D*X`A|^1k-c&yxq*%t(!G4R1Z`w3B|IkA>K+Rlx*f%*r%FNPK zKOO)804X%__5c6|rb$FWRCt{2T#I(%It+}2vB636|DStjWJ9~Rl*UqMch8BsKnaX2 zjUIl$cA5@3CQkV6hR6YV2|N{7hbgx4RY=RWv2ftCR2fdYeD0zAckmUN}fg#?zA ziX(s{c*z&z4wjzMok7j%!~)_=m*@Ni@j(Jvfdr>kavxuSF^MX^tH94HnN&3CocR0b zT6PRCS2BnUOr$UsC55UbS^r{V0e{yg6%fS-2}GtL%cuY|_Pd5QB^f-G@;n0`cm$j1 zQ-)7vGyp?*xQ2ek_kld4@PwIEPp3A0h}df=sV^vq;&&iWTBOhCgkei}R!$j);9|>* zu>t^rYA&HQlE3sqJZ!&m#weY`auy>{&ZV;l9qD?_Ur-RmPeB4L0W4a0Z&4Z|W)_Ck z0(j0U)3XG4ppy{A?+-89a<{+>xxt;hFPB;X`MS4CJrpksv-wAnS((q}HeK zyHvwh{tk5)bVQcWNE7OfBS8fh!B3pu2j80qNi3I(G$>5Jlt!L4l2_rw1d72@(hCN} z)T0#&q*mnKk*hKT zT`Qk*_+bLCnhQoJf9W)Soa)0XSC8b2HADUq8SU3!kB<|GQcC~=SLb=gz2ezW>$$r! z^9RvKWjgo|;9)ERmn?&sjH4fCgz$S1D77nS@aj7TRj_9!%++<4?Z?AoZay1<*aY$U zPvYYQV($1L&SPk)wrX=L@Z*_)TJww+GUux52tWwG1A$@ztQJ7;#{g=}X12i}#|tZG zHUjxLk7|hGcOkGTaFWLck_+b_ZvaAg){WE!1TK}o4kvIBZxST1SCKb*NMEE**13vD zM-*qh= zT)t#^E7dCa$MGg&J=~vxA$*WP^e@c)#A7w!!lxOVsI^kbZ{Vq7kvY$@c$;txA0^PR z{pPa3wjO~l7{!CXPN0{;7(Py5MgG;gYGf7(b-^GW1TIp*pFaR0e3(EEU1@|5-j&S3 z0Qm8`tP5%g_uc@+@KFLeGVyC90#aiEh~O=QYp?z>JA~NbrbyfAEe$+L473FCtVin&@Bi3MP0{gS%1B`(x$*BHZd1!L*wJjw~;qXc5^>ElNN zU>^zHGT1EPm#nsW^ck-McvMS_K(_?(tbe5-EVjL0dDz6r*tLXx73e z-5Tqs18_@Td0U(%(2#!rIeff<1Pm}0AWVAz>|kZ#cRaR>zOMlofie~V+8zvmvFL*L z_)CC3VgnUKQPO>n0M{_fU;vi80mjAHwjNlt5brEXWW;@rK7|5cb5N)Nl+ND*p!X}= zg`KNsFx#1q9jvg62YN6w*gb>XxC{R0-betaoAY{aMAIlA3_!W{pnEX48xRga$o&v` zd+6x-qpRXyzckhnl$&39S2h@cX*lA$Aa4qOKL8Ef4w7%zhTJ0I4bd!d1R%ByjmWPD z;GqX&ZrOJW+Iqam_^A0000XtQTzl9zIYG+I(o{blx$OPYdVwV00vb_L_t(|ob8$cZ|f=yg@c8J1SI_bfBSq4?Y6G%f=}+Z7k>?w{!a%ku(0zwiS6&k6Vp>W3CiG|`1>58n0@XZpbM8z-R1i~DrH993vm zz(-smJskaDf4w$yZ+QBp4?U&(xi@`a`HdIQBK?a0mKP^%O28*}AZjgvPvOS^w4vaG ze+Zv7eV2$Vzg-}p-X=b20B7R&%J{QQ3HaSY*g+lp7LE{p#KkT^Kh53y*@%AG-{GwU zEWdFA${0WKaTbz+-!3_ClLCIjn|{Ie(Drr$R|VBUiI6bvy`;zAeW>827mNmz=CrU%HUBHI7r zO9@#10s*B*x)l5<(@*MeisQ$8`&qURn-cID-ws2!K9GWT@O1;wN4?kkbq%!xCZKj; zsHZ6%anY+~BFAr}fMTJwTBoqUkv{3z?}}Sxl&K;#CEzn2!2_NW>KCH;=IX9pf0Ubs z>hrF3q^GcTBlg!n!?OZn{4@-pSPb4J8=viWbths7wW%UBC*XG+Kq`usL+21g^1Y4X zVR;PQl2(i)T@O1S-=`17(*hzis9}0P+^|X325@NRj*g&+!ZtMkCIx)t_cU-lgmj$2 zwE#myRE-jweHGM`X6Mg5h`ISIe+0A$SpigBzr>EM7eR~fjCln7!Z&G2QUZSH;S|)T zQRFK;MpjDC>37BZGM*POjyl&e$O1mMQ61;xcMAB)Fab)@8W60Fvy}A5CKXM)tU}n_ zcm6q^)FbmrPvJC;7Ehhge&kG3n!<-wTegTIQ=zl1|;XW23 zwUyLTX%$P5=>Smt1pO)Nqjsc|kTlHH7wAX0~e^|aZ!U@Rntbk3|uE@aR<1GXCszb2uz6@mfjSs-)uimtP zg4w(2gM@nEcA{^s&9C0B;u!&L-8Fbm0?-1=QS=$&$P)ZH6s(4O6(D(1Kx|=%@ggn( zXaQ{-JJ=xhN>D>-B~V4`KA9s-W?O z2|x`=_45aS;%NbK>kKD+_-Mp0Aj?ZVs*XWDdIP}mtbn*P_=AZ+$Xoyz-ZD6oBY@yp z0dao|pnDR-Jdn#!aJ*eKx27g|P2G9~U5W*j!Lbp=^0a`6{2@gSrU>a%FrEfV2zazF zcBpb*MuHD`3nJ?ze~NuT$5N8zX#s8M)nZ}v1|aAfBI_~&+pK^&px6Ik+J}&Q{74lX zr{4@WUISnQ-pThy8lJ<3c6GiQe&VH0^T9raK?UI6iUVf_>_Z?36##r7^gsc*k7oyO zrN5uwgtXd;f_xR0Lkmk;6ZvT zP#-}ip!@z9e?x&809}K=W>i;9!nv(k3tJf8SUsJ4;xK-WvG*0Cc!-B;U?Wbqj)bqI=>90JjWf?AHVEv_-K=K}^r5h2U> zB>|wEEO@$UGvA;!Px# delta 1663 zcmV-_27vkV4V4X$7&in10002tcD;-M0004VQb$4nuFf3k00004XF*Lt006O%3;baP z0000jP)t-snbV~Z5D+ypG?70Qe;J0WCddBZ;NZ&4(sy-tY!3aP00009a7bBm000id z000id0mpBsWB>pK@kvBMRA}Dqn!#(^RvgFQPxw6EFLCA8QH`aRWJ^q;=~%BZ^_=!7 zNVc<5S03w0CX2hR7em>4bqOmz%7-50?BE^}hv?&A8oNyfe~@u>Z2j(==Dy;h?eLUbC5SdSr|UX7Th>FlT_K2W&0R~y z0Xw=4`WwMTgfFmzX}D4lbnjn$2c-e9UbP$bS~?C+2kvp$ikCHqU2ve|q~S_I=;&*w zhe+pj?8pSWoo3bEUdNPN?=an&ugAN1@fNxqe&DINLJ;r~G_-&Ee-5{DPOc*{M5oh$ z4Ro%vR2;frA=I6GtIVuzbgOXD>89ceL1=ET>D8MjE1`@@kgOod+!j_Tq%gyu6_KtwY2O*uw*@We0AMR?jg|~e;s`zuY1Y<1c%+4+rUSS zMx&G8Y1F#uxLUB*eqyb+d>{RO+p?Z|TqgJc@7cJ`S!#Z%XMNk#cif#zz1Al^o|Y>G zYrUuVUEd$}1Fz8Q$^_34t&hUVF->8+=5{?t`vme zqc&<$j{gZ&lX&&(NKe&+s6e|%q6ah0IxVXDD3Hw>QjHWLC^IX$NZGhtBUo(a*|7!9jD#vU7zXTegb9+_Ics-EX}zgY2BK%EEo) z99$(>4C0rZ17a~Cj-iS(EfRv`>|80>e-*r>PZ9{u!?kGSMdR#TDQHA{5&cXH4*hd* zZ8E~ie>gi=3Bn}Wn~WG$MMVIbi#_ZsjsVG3f?6a3QagY_F%&&+S(;^K;9yJ^!crui zN~yR~(1>0>pOQTU!!R7qh2cv0!b)oivi8d2qWLUV!kGmt{2uSgAB8MYHgSd)7gjgWB5erVJ0F^Pt z#Ry*qhG=fF8H!h=yucY9fXAz37KEuWGU))v_&Pd9d4OY_My5P~am+4L+rP|VN(B&t zf0b**=Z(3MLEp$quf;cNb1D-QJVIWQ2k^)}EFe6j?zE8*q&{C7nPMMNWq47URfJ*k zjf|O7p)RmwPFWhkAHT`BE+9}H08>N$FZ$K4*_EYGo*8p++ zuURkI$@L_uv~et0kOq(@KLcd{MF25?b@J#Hk}s6nSOBpRc>u*_l+oj#H^AEgJwS2< z$^sNTCVzB5_6VFifZ`l^`_M@`l$ZnI2l;0aa@1MP>i=1c{SC$1`IrC82FCyZ002ov JPDHLkV1mp~6~O=i diff --git a/graphics/pokemon/xerneas/overworld_neutral.png b/graphics/pokemon/xerneas/overworld_neutral.png new file mode 100644 index 0000000000000000000000000000000000000000..9d40b9ff59f4f138d640088bc72a66e56324c4b0 GIT binary patch literal 1753 zcmV;~1}6E5P)Px#Fi=cXMVZs35D*X`A|^1k-c&yxq*%t(!G4R1Z`w3B|IkA>K+Rlx*f%*r%FNPK zKOVX4{nC5}C;$Ke5Oh*bQvm<}|NsC0|NsC0|NsC0|G-d-LjV85TOho+VJ*$M5@W{9hAwQ{UREZvK@Ouy~%pkKcF$|MEBR zov8N4+CFe)4J>}+2vq%Ko^Ds53dzf*Nx%m)csFlY`r8_MNcXWX*1+O7o>nt=$o{@EelI7&wj~glB;bHKy!!vK zPB-^Cx?^4bw|q$fi{Cf`b>z?fb{EnCf4t?oh#a8pJT^H+0tqmQHwMi>-9h1g^pc{- z4*GT**YEh_@GOBg%drEzYdKyt82Ts*_`V-=Rmd1?0y(4|EmVN6)+>qF8m2rj zhwt3&`ry!PKCF)P5cXy4{rS(}Sptzi4GFXt2OpXppZ&F&vm=GtR1p$HFZfFd1sq{~ z85_Zm;^A=&-jY>}q@52R-@gtY3QrRV*Pw>ke3-ClHU+peH^(w)M`4>v0Anl_%HI5^pq?}zzj7lM#@|7pd&mo*!R<%=+IkUm|IUaUY4B$kN$2z) z9KrW(6!8j+5tZ6w`m5r78=fa{A9b!}APexhjp{f@zc-X^_o+r>!&9cZ`m$T)KT`d_EgO||1Ed_lyqK*{aii96EcH zOX2SzQ1ejG;W>5?XUOCxlswyjl6Y?*+aR!cGdVXiiRTFf_(g&Tp^_W6QBx2*2#wO)2340Px~07;Rk0|`7jky@NUJkRq-;%^~PndtX@Eae<` z0EM^st@bbi{dt-K7T=X{1af$^5w-`}U163;1!D1tz@u6U)gu;xEPmr1u*Iu4s)r@6 zrErN6$l_i4(b|0Xb{C!@(EF}|j|70CeQ9uNq1s zJ&WB$of%4g0uL2cN-I*sJp_ek33TlE4O!sl_~KPC6hkcD_!|U98RYOhf!X3O=TpN~ z>}kf&;Elj4$@q&qfWp%RV(JVdV(_7)kPe9BwVu^-$gWWbaCnwL%nba=ctA4e00!?7 zoXHFz@GOCt-yIm<#8Ag`84Qk(i{^T20&k&PPq9`?jE2BL6pN<`gy&B!dNM`G?qbo+ z7ZKdr7r#`!P9uRAe1wo~6U8}Rpp|6tG=ZLawYVFj4iM`hvb7O7mPIIJ*H$kF1%pTK z;8vn^56;_8;%Nd0zAEbgK_lmK_G1+&zNV4F3*6RfE5Tia#*+k!FEv-;98i$IpziE} zYwE6RR+TJtfXB^-k2|Xg%EfG8}DtwRE3B1(g_i|DD#km(rG5iP> zT&F(_cf2{k6F!LVN*eB?26uJ78ot77oyLoQi-K~%Q%eBO64+BflyU&R(0QVOJo7n# z_tFz_fLkte-vxV(2U4PKJl5?5Ry~9B102ubhZU#i@up7XtS;bt74Gm!2OxN(5j>F5 z3e+>m2@KDV91#^Y$qMyEQa9j04N|nk2ukBP=|2}x}P3E4^t-{P@e`k7jw7u zhP4tB-9>?9mXFyt$^pIyQ3;?}{KEnI9Jwy2TqA-}&UEfz#lP4aufeEb;T`0`T{MB7 zN~pu+zIc5WqHUHBI3PW0(9@aM4WJ!BEuSLq4jm(Y^i+F{p}C5nxcQYAWs?rrragWO z@}c189niu3Ao(#iwJZ?c5#5r21GqMnkso)!hbx#{mVdXP_v1;n$QKNVB0`q$TO2?c v@!_G(yh2wKJyQEg`43HAvSi7U|44oTt50iX*Jn0q00000NkvXXu0mjfUWGz> literal 0 HcmV?d00001 diff --git a/graphics/pokemon/xerneas/overworld_normal.pal b/graphics/pokemon/xerneas/overworld_normal.pal index cfa83f54653c..6ba56fe6c6b9 100644 --- a/graphics/pokemon/xerneas/overworld_normal.pal +++ b/graphics/pokemon/xerneas/overworld_normal.pal @@ -16,4 +16,4 @@ JASC-PAL 55 57 65 202 204 210 84 63 30 -0 0 0 +185 236 253 diff --git a/graphics/pokemon/xerneas/overworld_shiny.pal b/graphics/pokemon/xerneas/overworld_shiny.pal index 6b1dbf99418e..6ba56fe6c6b9 100644 --- a/graphics/pokemon/xerneas/overworld_shiny.pal +++ b/graphics/pokemon/xerneas/overworld_shiny.pal @@ -3,7 +3,7 @@ JASC-PAL 16 153 211 165 16 16 16 -53 51 52 +32 34 38 48 181 222 84 63 30 164 88 198 @@ -11,9 +11,9 @@ JASC-PAL 139 138 111 218 52 55 255 208 67 -25 134 171 -38 199 254 -224 224 224 +55 64 205 +92 123 216 +55 57 65 202 204 210 -119 117 119 -0 0 0 +84 63 30 +185 236 253 diff --git a/graphics/pokemon/yamask/galarian/back.png b/graphics/pokemon/yamask/galarian/back.png index 06f46eae0b55482ec952861f2499431c5bf440b6..ddc858a8d21d8d055b5c07146b12449b0eda9662 100644 GIT binary patch delta 310 zcmZo+zQ;5{LX3l%fq`M}_Qp3rim^Dz-HBn{IhmIe?PTlMn$I|}W5F&K*w|$B>BDw^KZY4jXW=oL%(4-ZCmFdfSH91(Sqp=dWX2d1IRb$3GSk zo6Iv2yt=Wx`*!$VIC{6T`@tl0j&(mv85jC9JP^6VtuSf5!#W3T)niQETw3$%mxr%V z-?6!V2d5No!fc?Q@2A}m!JDRLmukUeWP(68nhi8G)OwTx> z3p3|0J(}&X;eNzf%ZXeM>X!DhZs7D#t&U>cv7h@-BI`sw+4>U> z9tU>pcyQy!g@lX=6&*k&aPUj|gglVLS>O>_%)r2R7=#&*=dVZs3f}c}aSZV|{`S&o z-ev4N zhPeB!yTUqQ-B+!BjrD;Cwly;JFd2m~WGtv=%u!OFB`dPi!YL$$!`n=7PN9EJ&$Z6q z9a~wv78!m?;5*}Dc0svRw!`?>_NjBN3|5FH{8g0Mk=c;`W~cjSQ4YDswQQU@%Nwk? z)L7R@UpUO}&VD+9;k~y^erozG2ZpBsMX?OoUHdwlk|KYd|Mb#&i>S8#zxu-K46(^)D_M6d0baelF{r5}E*sK!)A` diff --git a/graphics/pokemon/yamask/galarian/overworld.png b/graphics/pokemon/yamask/galarian/overworld.png index 718654dd3829b1417b7c4934f1a10df0ebfb8a96..54276f9a041015ce66650cd9df234470c67a3a84 100644 GIT binary patch delta 36 scmX@ea*$<$t7MWvsjs_7Lqo&s*yuw$c6QX&Z?-Utw4ZQwW87m#02-zcNB{r; delta 36 scmX@ea*$<$t7N!#hOfIvLqo&s*yuw$c6QX&Z?-V|_jdQ1jd70|0U?_afB*mh diff --git a/graphics/pokemon/yamask/galarian/overworld_normal.pal b/graphics/pokemon/yamask/galarian/overworld_normal.pal index 0e811796801c..af4005de75b0 100644 --- a/graphics/pokemon/yamask/galarian/overworld_normal.pal +++ b/graphics/pokemon/yamask/galarian/overworld_normal.pal @@ -6,14 +6,14 @@ JASC-PAL 24 24 24 56 56 56 159 83 188 -87 43 104 +98 48 117 77 71 72 128 128 128 235 93 91 194 184 185 136 126 127 179 56 54 -12 12 12 -13 13 13 -14 14 14 -15 15 15 +255 255 255 +255 255 255 +255 255 255 +255 255 255 diff --git a/graphics/pokemon/yamask/galarian/overworld_shiny.pal b/graphics/pokemon/yamask/galarian/overworld_shiny.pal index 0e811796801c..7cc24b4ab811 100644 --- a/graphics/pokemon/yamask/galarian/overworld_shiny.pal +++ b/graphics/pokemon/yamask/galarian/overworld_shiny.pal @@ -3,17 +3,17 @@ JASC-PAL 16 140 78 78 0 0 0 -24 24 24 -56 56 56 -159 83 188 -87 43 104 +40 40 72 +72 72 128 +24 216 152 +24 128 88 77 71 72 128 128 128 -235 93 91 +209 105 192 194 184 185 136 126 127 -179 56 54 -12 12 12 -13 13 13 -14 14 14 -15 15 15 +173 55 152 +255 255 255 +255 255 255 +255 255 255 +255 255 255 diff --git a/graphics/pokemon/yamask/galarian/shiny.pal b/graphics/pokemon/yamask/galarian/shiny.pal index 7ab1ad8cb25e..276ff7ab1432 100644 --- a/graphics/pokemon/yamask/galarian/shiny.pal +++ b/graphics/pokemon/yamask/galarian/shiny.pal @@ -8,10 +8,10 @@ JASC-PAL 24 128 88 24 216 152 16 64 48 -200 64 72 +173 55 152 192 184 184 224 216 216 -208 96 104 +209 105 192 144 120 136 0 0 0 0 0 0 diff --git a/graphics/pokemon/zacian/crowned_sword/overworld.png b/graphics/pokemon/zacian/crowned_sword/overworld.png index b8069ecd51e5386ff36aa8be110d183f5db769dc..887fa22ebd2b4b800d2024da826cb226cd441b2d 100644 GIT binary patch delta 1128 zcmV-u1eg2B3C0PKZGS{bL_t(oh3%M)a@;Bmg>4Uifw3+F>GbPha z;!iP0;vnoU%fIn&{Fg?gh2kIZzdfRbK>Mt4#{c$+)>0(;fJQg3$S+PRpqVFH%Q=- ztFl;k237}w*AmaTTrOTFSQh5QEc%f^p=-p2UujjClPX*}4GR3sAuY@Pj(eWB63=*( zClkb|6T~PJ41W?h@jiitk|w%c^r}mjF=$mA1wZ| zTM=>LzT3;5?IF-|->V*ZbhsbK>IvzxRz=cRdDT}utH6l*ia@@VSWR}~{R;Tz^6GFO zF?{?Ak0m;4u0nEJVWjy^aKfuT>-C7VG2ovZnEqxm>whoYcP_`3+GwQ3z+%O@bD6x< z?cfrybGG;)+r*-8l@b%3Ei&V~K6ofvgAZe)IH*hD!n*{#gKSD6goN)Fjw3Rs7){{d zQjeWSv~ICPA|5t?8E*nh6^NTxfu-}@r}u%EcN8>c@C41s8JtN54W zVZIqZReu<#qs0OdHe2p2f+Ot0?R^vD4+15%2##91Kab!c1O4O=7+#ylAIAvJ`(rm)P##gxC!K?vyiskgMZ5s903G@My`}10#}?jsL;BS?|9J= z{U-b}2e>wxs%2v?ah&L zcguj&%edmqEAilwbHX9fuDC4*t@geGn!t%)60n*asX`H`S*%oA#GA`9IPIcg6<)4J zC4b5es8cq9laIJC1m(7UtjuW{H?^x>x8E;%6}gf2zZ3T3xzks1(pt5)uY{uz;b*2tM5ZC z6-lZsBgvwb`az)tS+jGGn(&0nXXKY-P(nAV?EcQ zOn$;ad3%hQ@MDN=QMKU?s?)WI0fXrGx@~aTrX?N+ZNo*zGlF(P1|RN$gZCD1cVUnP z=wB4h5yd^cRd3;*g}&?bqAYG2Mff uCxOjxALV_XQThm*W>~6HSzey=)r*000073CIbMZGT2dL_t(oh3%M$a^xTkL~VylFc$y+x7!l<1P@6zRl8fYq%sGO zn3iaSooV{t{a!OiX7uNog0{mov0wO5{1-VA-603Nw2 zi)CkEbujRn;t`kb>}7&!VouDW9|2^#j=1nEEehA93TIB81V3{~TV;R8EzVntN4(0D z31ZX$$7Eef(wJMT6%ZtA3Sp`PqR|N7c#cHw>Z&$!qmluco zi00#Gc+AmJbrpis3?s}VzyUA%tpAV`#>RkOOz`1vCV#X3!hPd%^prv)B?cDD&Yjcb zC2u>I0UKwF535Zq`esQn(b*y+zUhO9qBW7Cu~8h<1aRR^0Nz11r4T~GyM^P3%xR1U zuye`B#v@9%SRxU33&4n1fw>68#f!k)cIqR z?r=14c{}(nFqje|QWTvFZ~ zDR;LBIK7O^&b$(LZaD`W677u3qS0*cE1&_K_$2_V!I3Hyff~h3xsEuvEQ8Z38fM}7 zYJXIs^<|9{zul|sCpaWBEy$FTXQcTkzGj_5FmKGto4%N9*>f6&rhWZWZYC1mjK9@u$n@nd=g zS%CII;XER{ho|Z#Tr@3R8*YPcgSU(8-cob*O}g{xF#!C$|AzzVm`=aB%z68I>+RER w(DWp*`t7Z}_xR12+oJZ@c#te27bwNRz_38WVanV!SFhbW PFeAaX_(H(OEEN_2CR!VT delta 60 zcmV-C0K@-|362SnIWZ|fln@*_q?sv{93bA(Ak8c})zWH8ND!>9y%;QF0000WFmsfh Stku@u&B8hDrC2kuY9s`+wHSl| diff --git a/graphics/pokemon/zamazenta/crowned_shield/overworld_normal.pal b/graphics/pokemon/zamazenta/crowned_shield/overworld_normal.pal index 54124216e5e8..0906c9bf9416 100644 --- a/graphics/pokemon/zamazenta/crowned_shield/overworld_normal.pal +++ b/graphics/pokemon/zamazenta/crowned_shield/overworld_normal.pal @@ -6,7 +6,7 @@ JASC-PAL 16 28 57 164 153 41 148 28 32 -222 210 32 +232 48 56 205 44 57 213 210 106 74 72 16 diff --git a/graphics/pokemon/zamazenta/crowned_shield/overworld_shiny.pal b/graphics/pokemon/zamazenta/crowned_shield/overworld_shiny.pal index 54124216e5e8..57e6bf2744d5 100644 --- a/graphics/pokemon/zamazenta/crowned_shield/overworld_shiny.pal +++ b/graphics/pokemon/zamazenta/crowned_shield/overworld_shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 131 129 131 -41 64 148 +200 48 104 16 28 57 164 153 41 -148 28 32 -222 210 32 -205 44 57 -213 210 106 -74 72 16 +168 48 144 +232 80 192 +232 80 192 +224 208 152 +107 67 47 172 174 189 -24 44 98 +200 48 104 0 0 0 -32 48 115 +160 40 64 148 157 172 213 214 222 -205 194 57 +192 152 96 diff --git a/graphics/pokemon/zapdos/galarian/overworld.png b/graphics/pokemon/zapdos/galarian/overworld.png index 648884dbe6a61c0b9916ec243f200c0a6fb72bb7..47321a67f4362237d457a62d1c122e39b5633277 100644 GIT binary patch delta 845 zcmV-T1G4;z2$Khp7#0Wv0001UMu)cm0004VQb$4nuFf3kks&{S5lKWrR9J=Wn2nO# zAPj_!z`_lF|L5(lu#<)#>pbnvO=p4=CzDTxl@NlvW%;yE`?OE{XD!Iz@tKV3v{?h3UDyNM|j$sd3<@}qX8TaftUI{E)o;QfRh5V zkptI!dE=u293IktiV%k|*MG^OkC!>gs~y7Qrf@aBPQrA}P2U=)A$GVZd?U9PzN_5g z7yvvXzIGqP$>Erm1Txj{ai%yq1)}vy?(wB^q)6o>1yf#1!Q`fx6&3?=9%sYaO27$b zQCY5T@(V~$aW-V7th!l*H(jO8QlCpk-wAhAOWbdArfA|6V~eoPLo>pkJj>Ga#C~^VTErcd zx}9Z@2hmK8N_7ZVxX0@d%ufhI=Xkf1d~(UbY*I6esBo+7kNDVS4PB*oIg(06^}MyE z-s4pv=7`dNBE#Jq7_Sx`7fuhdvy?|E+_3fCL7!7$&dQcE_1)snC_$WJB$#u$2K;a^ zwjBK{Hkky0NEUqWBY4e)*}}atk|}Dwj942*Phd@{AzUd7C+-_3MsJPvJQSY*m5Q%(!;2Hvn9;8&F|tXuS=0 z;%m--S;n=OQk_7O=Qaz(HX(Cxz$uVMjP$U7i#$?i;-J)ZYAba3yu%keBphR#3*Cu= ziBPA1$W1t|t!zU9_PZ=o2Th#4Ck{M$UtnHVXLQD$ybOAN3K!WX0_yKm2c=LM-b2g> z4_+qPtdntczGCnaKK-MjvFinzgBQ=A0h-Dz+pq-Y*faR*KV81-`C9CTr{ymj{D18? XtQ{NHbg64-00000NkvXXu0mjfO6i$Q delta 965 zcmV;$13LVZ2Z{)g7zqRe0002CwraMKE4AWQZd zr)!90m1b@pX2+wDQYgXOUN+VSn!fih+0*`x6}rbVw!vU~%EIW_%MypNb)|JBxonHK z65q*Av1B{C>14^4RT)|+d+LFOe|M6<)2H)&0(jHjw3lm0on`!b0_0};^#nj=OPzmV zKLC~hO+|f0L!MNp0!A$GL$QQ}%(+X92Ay%EP2UF0Fr4XR{)h&MIOQL^0uux}IpGzJ zHrxX#G8{DzfDwUrv1x_RBW`d>rH!S1nB{!7sU1fGM9oul@z~jX)+;?YJv-`*8)OF_ zwV*X`L!$Af-D8myO_>KE=a(sBG5LvcL+Y4bb4SAN}Yp)222f*HpR#ipnhoQDOPWc2sr%L_jc z$5KYaG4lXYtG3!?>*=3^q{c0abAuClbk>C=GeSC~M0%3t$ozuPOQ#k$Pf>rq{EI*xvTlaq-%Zu(^TeOi-c-T%f?*i?T*`EJ+sUG@*rr@KSp7}E{ zDwfxUXgRpUxXqo^*9g8%ZO^c`a*FIwv5Y&rV}sgk6K=kWE-ba2znl!q1v83U^)e!7 zmgO&{WP2N{gsNut{9C3S8vb2-w9f7S(dsA6n=+|~Hym?!5y^n$L7smm+pAxg?ki7O zr#Nw?x$2v*B1S(PQn)K@w9 z8b)veAtz6$z3%RYMjvcYr@C}tCL37Jo~u2u7mluv_E7HURt9nV1&5t9&dk5B)W_S& z&DDR>e>TP&u+=RLv9o_`%reMker1;|y#3QrXmRJjwz)?obE{^UN~EePs_}HIHt|*O zGl*0y{(Z1DvF<+h{E|krVL$tw?DbyZr{bqaN_&WPh)pdaMFAIGz_Cf zQcbBQ=#iQLwat`+Z?6^>qx z8$N*$>bBi>+ikbqcH94AM4NN&UsGI~@&R*Vo*na4eG4N7qo0VLIWYT~{0`=K#)%4v zLwM&U@S!qJ5PeJ`q!j8`gcY#DdL2XB2gl=_J200fPfP+0qeVhPm=oe zXUUH-c0k($qQHdZ;ouE@1t=+tePdjxCf*!x#=-+Ic?P?V1J!JRt=3osDM($7j4+kvG}3~ zJ;DGOz3y@a)bL}l^?V-m#=RQ_|q%z!ZjgjY(yQCEG6`dwyfdX_K^*+GKVS!z) z>z|Qm7@Qp-J!Q=?Rgctlu>z#v_(7Uu>A`NSHWcv57pyc!5;d^#Q~HBOlFOu%r@K@+ z&wwYn>3>5EE&(@*?xP+R^5LSfNdb89iFFELb40AY{`!8CgU~r3hUP);mgp?2Zk5DK zK#b2EYcpn91&p2>Uz}v2+5-j{B9yYDhpUq;9J226sa$odUS0ui3J|@IsOjvJnyUX6 z;QoHV5Rt6_6NhP2K0&#TYOEuCm78w#j{&FwigpR8=Bk;MM%x7qaPqz&uGKk1{d{PU zpb+rbMyLt=L_TyIPq+b2=vz;ZPrD9lE+`;b0l4e)j?t~8p#Gs87yzr>9?(*E_D`XR v0$%WIPnYrnbM>OUTxJi<k} delta 733 zcmV<30wVq12EGQ6ZGXH;L_t(oh3%GsZW|#ChR@i5Ax-oCZ@b@+cF|#=tu`&vVkP91 z-v^(;7>?s*FMHX`UiPy8#fXj&!oQ|in(+a1Vk|*qsy>C0fRQI6i$oEg$ z*{iU)`@l1T-5 zs>0)O&MU@Hnr2Ij0#_-aIq%agV4FZT4UI!+fLfKSHGj^110^D=9rVZ&P@dmkF;XaP zZZR$iTq?zs+zDI)njFwo2yy5#NbXb0}nBc1dcvI8$ zEsP7;0DnLD)H^A$ITC7%efYe|myA?^6k2>LvDglB`1gPehrlTz$TU`2157NPFHNct zB523tkfCcvH6)W1S7F?AW|!p+;9&qs@g*k%JD^Me`v4RXK@u;)2F6E#>&4awhb$vS z)jtF~Aay`>0nI|QcVD($&;iFC)E$u57M%0?npW|8#Y=jNAiVjrcOT%r15O=mpv%?2 zhxHH)kh}!E>+_DUcSQ7Xo2;d}4 diff --git a/graphics/pokemon/zigzagoon/galarian/overworld_shiny.pal b/graphics/pokemon/zigzagoon/galarian/overworld_shiny.pal index 6b74af8455e5..0277759a9e2a 100644 --- a/graphics/pokemon/zigzagoon/galarian/overworld_shiny.pal +++ b/graphics/pokemon/zigzagoon/galarian/overworld_shiny.pal @@ -4,16 +4,16 @@ JASC-PAL 52 87 191 31 43 44 36 36 36 -52 52 52 -96 101 106 -62 64 66 +82 9 36 +200 24 88 +144 8 48 163 164 163 245 245 246 0 0 0 178 179 178 -113 119 125 -238 150 178 -217 74 127 -110 59 81 +140 17 62 +152 248 240 +16 232 208 +46 79 75 64 72 80 168 184 208 diff --git a/graphics/pokemon/zorua/hisuian/overworld.png b/graphics/pokemon/zorua/hisuian/overworld.png index 9d98e3fd7af9a6d62940ded1900dca40083d2ed3..1bc82dd88a3c624983f46b21685bda34daa453a3 100644 GIT binary patch delta 649 zcmV;40(Sk)2GIqO7#0Wv0001UMu)cm0004VQb$4nuFf3kks&{SPf0{UR9J=WmeFqP zAPhvq00z_j|L?tHl6KX^kW{HuT`BHM)Z-mICYUVC6Hh$x#1l_E@x<>%yFsrcT*$Z= ze{G;m`JDEQ*DPgDuPt!Wp_}#JG;nHgo*_aU#@K!w20VlyUEdava7bJEial-#=-g!B z3gAn?;ryr6@R}HZfKiD9ju?xGgjdKSB}TZMxQfer0xUs9F%ZC}@9_n-))-orQT?RE zBaWC-p+>BlOG?iAoyS_?a`vZ`q6$EjPvIb7Tsjv%mm?-#m}`f|L?6b5QK* z$9w_HqB*P0o_@-uDC<{mZ{FPB{7pZvTR`=c4*fajOE2z!GhBfgw_Pb}+I{a1C%tp| z;@&V`7s!L<&$%U7Z%Z2spi_^_YAj6+yt#XufE{@8Po4e0!WW=fg>7KactLahiFVGLXMB-N0}2jnbw`DgD`{5Ey8rDeY~C6?1K+umVGYjp zgDD?1yDdI{<7_b7Yr_uNofO6qLxjg+!aUm?q?}XjwVz_&c)t^lTL5e)Y%r+KI8|Gp zg`-I~X1Mk!T8!bi#S0VG{Wz&xWMbf>a zJKXpanF=b`SL4Ksy>_YoTb$S;%g2A2W+pa;Ca4~(U&NNHr~@I7BiV_p91M9_`MG8v z&^JSzi01p~;M}n0jV+R;REi!fgn2z*wO7D~8CdOacm);_dA+~kHKcUYP7BQvJES_! zl3iqhGZ0sQ(G!>qBF(`e5Hpx@PCF6~+*qn-@*UczvRNRpho19V^U)2=mScZw03JEE z32)jS(44L)7@N!~7`_8p;LdtEJl||c^hT_ZNEeK3dJP%CPgCGzMape7thDI`n5sLG z?%Q>^jZFqWP?6#qA95>{aAIAFXEl=-{|J}b=`{FZ^Ocl=NB2gd;?ZmnV!b^rhX07*qoM6N<$ Ef~qNZW&i*H diff --git a/graphics/types/battle_icons1.pal b/graphics/types/battle_icons1.pal new file mode 100644 index 000000000000..972dfd02af2c --- /dev/null +++ b/graphics/types/battle_icons1.pal @@ -0,0 +1,15 @@ +JASC-PAL +0100 +12 +120 152 128 +49 49 49 +255 255 255 +164 82 57 +172 189 32 +184 160 90 +213 180 90 +98 98 180 +180 90 164 +172 164 148 +172 172 197 +152 172 246 diff --git a/graphics/types/battle_icons1.png b/graphics/types/battle_icons1.png new file mode 100644 index 0000000000000000000000000000000000000000..c47b07f1171a309220fe403e7ed17b544dce61b2 GIT binary patch literal 354 zcmeAS@N?(olHy`uVBq!ia0vp^96-E)gBeJ&&AV#_q!^2X+?^QKos)S9f0+Ah^6AeDr5qSvozYT0U{!x$`s_r#^L~O? zW`;68@OaH&_v*B4*$Iv5&s|*w(yuXeG{_swkC``BYN3?2$6ECzR%;a2T$7x3-fpK2 zw`)VQ%vH99|B6*k<|Py^@Yg%OV literal 0 HcmV?d00001 diff --git a/graphics/types/battle_icons2.pal b/graphics/types/battle_icons2.pal new file mode 100644 index 000000000000..bddf49ad9547 --- /dev/null +++ b/graphics/types/battle_icons2.pal @@ -0,0 +1,15 @@ +JASC-PAL +0100 +12 +120 152 128 +49 49 49 +255 255 255 +240 82 48 +120 200 80 +248 197 49 +80 120 136 +123 98 230 +248 115 164 +57 156 255 +90 205 230 +246 180 246 diff --git a/graphics/types/battle_icons2.png b/graphics/types/battle_icons2.png new file mode 100644 index 0000000000000000000000000000000000000000..44aa4f89547f478a290231112e03bd84f350a08e GIT binary patch literal 372 zcmeAS@N?(olHy`uVBq!ia0vp^96-E)gBeJ&&AV#_q!^2X+?^QKos)S9%Lb!>Ej>Uc_m{DK*PN@0NW zNPrqp{F$eVV~9oX*+~b5njCnX4YfG_{QrMTEphh)*Y7EA%lmU~y*2PL&)#)cl~Kxp z!IERaWLAYID;xWC%9j?$eC*AdA1ZV};4{aCCrl!1c&{l7|6f;|Grv9M#7Uhdjs6y$ zGhY@M>?)gc>-e`yFYyM(vV;e(KVEcyW|W>Ye|kyVjwuaK7z8*qp3hmScV6;#`s8yB zY&Rw}_zHyodQqSi96QT++j%9)ga_;kyc`1Lo)&ZKm)+^(*_kc*uP*H+Qv<_C?~dro zBk$AS%{>(|{aMf3&E9MR8$NG+Qmi1Wad_8vzv-E=vp%1;t6yfmv6;^}dj^LH(8mm( Lu6{1-oD!MpalaceFlags) * 8 >= MAX_BATTLER #define F_DYNAMIC_TYPE_IGNORE_PHYSICALITY (1 << 6) // If set, the dynamic type's physicality won't be used for certain move effects. #define F_DYNAMIC_TYPE_SET (1 << 7) // Set for all dynamic types to distinguish a dynamic type of Normal (0) from no dynamic type. -#define GET_MOVE_TYPE(move, typeArg) do { \ - if (gBattleStruct->dynamicMoveType) \ - typeArg = gBattleStruct->dynamicMoveType & DYNAMIC_TYPE_MASK; \ - else \ - typeArg = gMovesInfo[move].type; \ -} while(0) - #define IS_MOVE_PHYSICAL(move)(GetBattleMoveCategory(move) == DAMAGE_CATEGORY_PHYSICAL) #define IS_MOVE_SPECIAL(move)(GetBattleMoveCategory(move) == DAMAGE_CATEGORY_SPECIAL) #define IS_MOVE_STATUS(move)(gMovesInfo[move].category == DAMAGE_CATEGORY_STATUS) @@ -832,18 +826,18 @@ STATIC_ASSERT(sizeof(((struct BattleStruct *)0)->palaceFlags) * 8 >= MAX_BATTLER #define IS_BATTLER_OF_BASE_TYPE(battlerId, type)((GetBattlerType(battlerId, 0, TRUE) == type || GetBattlerType(battlerId, 1, TRUE) == type || (GetBattlerType(battlerId, 2, TRUE) != TYPE_MYSTERY && GetBattlerType(battlerId, 2, TRUE) == type))) #define IS_BATTLER_TYPELESS(battlerId)(GetBattlerType(battlerId, 0, FALSE) == TYPE_MYSTERY && GetBattlerType(battlerId, 1, FALSE) == TYPE_MYSTERY && GetBattlerType(battlerId, 2, FALSE) == TYPE_MYSTERY) -#define SET_BATTLER_TYPE(battlerId, type) \ -{ \ - gBattleMons[battlerId].type1 = type; \ - gBattleMons[battlerId].type2 = type; \ - gBattleMons[battlerId].type3 = TYPE_MYSTERY; \ +#define SET_BATTLER_TYPE(battlerId, type) \ +{ \ + gBattleMons[battlerId].types[0] = type; \ + gBattleMons[battlerId].types[1] = type; \ + gBattleMons[battlerId].types[2] = TYPE_MYSTERY; \ } -#define RESTORE_BATTLER_TYPE(battlerId) \ -{ \ - gBattleMons[battlerId].type1 = gSpeciesInfo[gBattleMons[battlerId].species].types[0]; \ - gBattleMons[battlerId].type2 = gSpeciesInfo[gBattleMons[battlerId].species].types[1]; \ - gBattleMons[battlerId].type3 = TYPE_MYSTERY; \ +#define RESTORE_BATTLER_TYPE(battlerId) \ +{ \ + gBattleMons[battlerId].types[0] = gSpeciesInfo[gBattleMons[battlerId].species].types[0]; \ + gBattleMons[battlerId].types[1] = gSpeciesInfo[gBattleMons[battlerId].species].types[1]; \ + gBattleMons[battlerId].types[2] = TYPE_MYSTERY; \ } #define IS_BATTLER_PROTECTED(battlerId)(gProtectStructs[battlerId].protected \ @@ -1138,6 +1132,13 @@ static inline u32 GetBattlerSide(u32 battler) return GetBattlerPosition(battler) & BIT_SIDE; } +static inline struct Pokemon* GetBattlerData(u32 battlerId) +{ + u32 index = gBattlerPartyIndexes[battlerId]; + + return (GetBattlerSide(battlerId) == B_SIDE_OPPONENT) ? &gEnemyParty[index] : &gPlayerParty[index]; +} + static inline struct Pokemon *GetSideParty(u32 side) { return (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; @@ -1148,4 +1149,9 @@ static inline struct Pokemon *GetBattlerParty(u32 battler) return GetSideParty(GetBattlerSide(battler)); } +static inline bool32 IsDoubleBattle(void) +{ + return gBattleTypeFlags & BATTLE_TYPE_DOUBLE; +} + #endif // GUARD_BATTLE_H diff --git a/include/battle_ai_switch_items.h b/include/battle_ai_switch_items.h index b52e792612e9..3c70132afe8f 100644 --- a/include/battle_ai_switch_items.h +++ b/include/battle_ai_switch_items.h @@ -5,5 +5,6 @@ void GetAIPartyIndexes(u32 battlerId, s32 *firstId, s32 *lastId); void AI_TrySwitchOrUseItem(u32 battler); u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd); bool32 ShouldSwitch(u32 battler, bool32 emitResult); +bool32 IsMonGrounded(u16 heldItemEffect, u32 ability, u8 type1, u8 type2); #endif // GUARD_BATTLE_AI_SWITCH_ITEMS_H diff --git a/include/battle_anim.h b/include/battle_anim.h index ce9749685ef6..351dbbd45496 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -194,7 +194,6 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 attributeId); bool8 IsBattlerSpritePresent(u8 battlerId); void ClearBattleAnimBg(u32 bgId); u8 GetAnimBattlerSpriteId(u8 wantedBattler); -bool8 IsDoubleBattle(void); u8 GetBattleBgPaletteNum(void); u8 GetBattlerSpriteBGPriorityRank(u8 battlerId); void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*spriteCallback)(struct Sprite *)); @@ -253,6 +252,7 @@ void AnimParticleBurst(struct Sprite *); void AnimPowerAbsorptionOrb(struct Sprite *sprite); void AnimNeedleArmSpike(struct Sprite *); void AnimTask_CompressTargetHorizontally(u8 taskId); +void AnimTask_CompressTargetHorizontallyFast(u8 taskId); void AnimSporeParticle(struct Sprite *sprite); void AnimAbsorptionOrb(struct Sprite *sprite); void AnimPetalDanceSmallFlower(struct Sprite *sprite); diff --git a/include/battle_controllers.h b/include/battle_controllers.h index a670113bc791..50860a7285d4 100644 --- a/include/battle_controllers.h +++ b/include/battle_controllers.h @@ -125,9 +125,7 @@ struct ChooseMoveStruct u8 currentPp[MAX_MON_MOVES]; u8 maxPp[MAX_MON_MOVES]; u16 species; - u8 monType1; - u8 monType2; - u8 monType3; + u8 monTypes[3]; struct ZMoveData zmove; }; @@ -312,6 +310,11 @@ void ActionSelectionDestroyCursorAt(u8 cursorPos); void InitMoveSelectionsVarsAndStrings(u32 battler); void MoveSelectionCreateCursorAt(u8 cursorPos, u8 arg1); void MoveSelectionDestroyCursorAt(u8 cursorPosition); +void PlayerHandleChooseMove(u32 battler); +void HandleInputChooseMove(u32 battler); +void HandleInputChooseTarget(u32 battler); +void HandleMoveSwitching(u32 battler); +void HandleChooseMoveAfterDma3(u32 battler); // recorded player controller void SetControllerToRecordedPlayer(u32 battler); diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 0c9f72c276a0..6bdb88b28f5b 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -843,5 +843,7 @@ extern const u8 BattleScript_EffectUpperHand[]; extern const u8 BattleScript_EffectTidyUp[]; extern const u8 BattleScript_EffectSpicyExtract[]; extern const u8 BattleScript_DamageToQuarterTargetHP[]; +extern const u8 BattleScript_EffectFickleBeam[]; +extern const u8 BattleScript_FickleBeamDoubled[]; #endif // GUARD_BATTLE_SCRIPTS_H diff --git a/include/battle_tower.h b/include/battle_tower.h index 074fccf3a5f5..45c9d683ff7b 100644 --- a/include/battle_tower.h +++ b/include/battle_tower.h @@ -27,9 +27,9 @@ struct BattleFrontierTrainer }; extern const u8 gTowerMaleFacilityClasses[30]; -extern const u8 gTowerMaleTrainerGfxIds[30]; +extern const u16 gTowerMaleTrainerGfxIds[30]; extern const u8 gTowerFemaleFacilityClasses[20]; -extern const u8 gTowerFemaleTrainerGfxIds[20]; +extern const u16 gTowerFemaleTrainerGfxIds[20]; extern const struct TrainerMon gBattleFrontierMons[]; extern const struct BattleFrontierTrainer gBattleFrontierTrainers[]; extern const struct TrainerMon gSlateportBattleTentMons[]; diff --git a/include/battle_util.h b/include/battle_util.h index 8eadf47c983c..e11e8890c3a3 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -268,5 +268,6 @@ u8 GetBattlerType(u32 battler, u8 typeIndex, bool32 ignoreTera); bool8 CanMonParticipateInSkyBattle(struct Pokemon *mon); bool8 IsMonBannedFromSkyBattles(u16 species); void RemoveBattlerType(u32 battler, u8 type); +u32 GetMoveType(u32 move); #endif // GUARD_BATTLE_UTIL_H diff --git a/include/config/battle.h b/include/config/battle.h index 881e8a27156d..ebe979824c93 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -110,7 +110,7 @@ #define B_BURN_HIT_THAW GEN_LATEST // In Gen6+, damaging moves with a chance of burn will thaw the target, regardless if they're fire-type moves or not. #define B_HEALING_WISH_SWITCH GEN_LATEST // In Gen5+, the mon receiving Healing Wish is sent out at the end of the turn. // Additionally, in gen8+ the Healing Wish's effect will be stored until the user switches into a statused or hurt mon. -#define B_DEFOG_CLEARS_TERRAIN GEN_LATEST // In Gen8+, Defog also clears active Terrain. +#define B_DEFOG_EFFECT_CLEARING GEN_LATEST // In Gen6+, Defog clears Spikes, Toxic Spikes, Stealth Rock and Sticky Web from both sides. In Gen8+, Defog also clears active Terrain. #define B_STOCKPILE_RAISES_DEFS GEN_LATEST // In Gen4+, Stockpile also raises Defense and Sp. Defense stats. Once Spit Up / Swallow is used, these stat changes are lost. #define B_TRANSFORM_SHINY GEN_LATEST // In Gen4+, Transform will copy the shiny state of the opponent instead of maintaining its own shiny state. #define B_TRANSFORM_FORM_CHANGES GEN_LATEST // In Gen5+, Transformed Pokemon cannot change forms. @@ -219,7 +219,7 @@ #define B_FAST_HP_DRAIN TRUE // If set to TRUE, HP bars will move faster. #define B_FAST_EXP_GROW TRUE // If set to TRUE, EXP bars will move faster. #define B_SHOW_TARGETS TRUE // If set to TRUE, all available targets, for moves hitting 2 or 3 Pokémon, will be shown before selecting a move. -#define B_SHOW_CATEGORY_ICON TRUE // If set to TRUE, it will show an icon in the summary showing the move's category. +#define B_SHOW_CATEGORY_ICON TRUE // If set to TRUE, it will show an icon in the summary and move relearner showing the move's category. #define B_HIDE_HEALTHBOX_IN_ANIMS TRUE // If set to TRUE, hides healthboxes during move animations. #define B_EXPANDED_MOVE_NAMES TRUE // If set to FALSE, move names are decreased from 16 characters to 12 characters. #define B_WAIT_TIME_MULTIPLIER 16 // This determines how long text pauses in battle last. Vanilla is 16. Lower values result in faster battles. @@ -251,26 +251,31 @@ #define B_TRY_CATCH_TRAINER_BALL GEN_LATEST // In Gen4+, trying to catch a Trainer's Pokémon does not consume the Poké Ball. // Animation Settings -#define B_NEW_SWORD_PARTICLE TRUE // If set to TRUE, it updates Swords Dance's particle. -#define B_NEW_LEECH_SEED_PARTICLE TRUE // If set to TRUE, it updates Leech Seed's animation particle. -#define B_NEW_HORN_ATTACK_PARTICLE TRUE // If set to TRUE, it updates Horn Attack's horn particle. -#define B_NEW_ROCKS_PARTICLE TRUE // If set to TRUE, it updates rock particles. -#define B_NEW_LEAF_PARTICLE TRUE // If set to TRUE, it updates leaf particle. -#define B_NEW_EMBER_PARTICLES TRUE // If set to TRUE, it updates Ember's fire particle. -#define B_NEW_MEAN_LOOK_PARTICLE TRUE // If set to TRUE, it updates Mean Look's eye particle. -#define B_NEW_TEETH_PARTICLE TRUE // If set to TRUE, it updates Bite/Crunch teeth particle. -#define B_NEW_HANDS_FEET_PARTICLE TRUE // If set to TRUE, it updates chop/kick/punch particles. -#define B_NEW_SPIKES_PARTICLE TRUE // If set to TRUE, it updates Spikes particle. -#define B_NEW_FLY_BUBBLE_PARTICLE TRUE // If set to TRUE, it updates Fly's 'bubble' particle. -#define B_NEW_CURSE_NAIL_PARTICLE TRUE // If set to TRUE, it updates Curse's nail. -#define B_NEW_BATON_PASS_BALL_PARTICLE TRUE // If set to TRUE, it updates Baton Pass' Poké Ball sprite. -#define B_NEW_MORNING_SUN_STAR_PARTICLE TRUE // If set to TRUE, it updates Morning Sun's star particles. -#define B_NEW_IMPACT_PALETTE TRUE // If set to TRUE, it updates the basic 'hit' palette. -#define B_NEW_SURF_PARTICLE_PALETTE TRUE // If set to TRUE, it updates Surf's wave palette. +#define B_NEW_SWORD_PARTICLE FALSE // If set to TRUE, it updates Swords Dance's particle. +#define B_NEW_LEECH_SEED_PARTICLE FALSE // If set to TRUE, it updates Leech Seed's animation particle. +#define B_NEW_HORN_ATTACK_PARTICLE FALSE // If set to TRUE, it updates Horn Attack's horn particle. +#define B_NEW_ROCKS_PARTICLE FALSE // If set to TRUE, it updates rock particles. +#define B_NEW_LEAF_PARTICLE FALSE // If set to TRUE, it updates leaf particle. +#define B_NEW_EMBER_PARTICLES FALSE // If set to TRUE, it updates Ember's fire particle. +#define B_NEW_MEAN_LOOK_PARTICLE FALSE // If set to TRUE, it updates Mean Look's eye particle. +#define B_NEW_TEETH_PARTICLE FALSE // If set to TRUE, it updates Bite/Crunch teeth particle. +#define B_NEW_HANDS_FEET_PARTICLE FALSE // If set to TRUE, it updates chop/kick/punch particles. +#define B_NEW_SPIKES_PARTICLE FALSE // If set to TRUE, it updates Spikes particle. +#define B_NEW_FLY_BUBBLE_PARTICLE FALSE // If set to TRUE, it updates Fly's 'bubble' particle. +#define B_NEW_CURSE_NAIL_PARTICLE FALSE // If set to TRUE, it updates Curse's nail. +#define B_NEW_BATON_PASS_BALL_PARTICLE FALSE // If set to TRUE, it updates Baton Pass' Poké Ball sprite. +#define B_NEW_MORNING_SUN_STAR_PARTICLE FALSE // If set to TRUE, it updates Morning Sun's star particles. +#define B_NEW_IMPACT_PALETTE FALSE // If set to TRUE, it updates the basic 'hit' palette. +#define B_NEW_SURF_PARTICLE_PALETTE FALSE // If set to TRUE, it updates Surf's wave palette. // Poké Ball animation and sounds #define B_ENEMY_THROW_BALLS GEN_LATEST // In GEN_6+, enemy Trainers throw Poké Balls into battle instead of them just appearing on the ground and opening. #define B_ENEMY_THROW_BALLS_SOUND GEN_LATEST // In GEN_5+, enemy Trainer's Poké Balls make a sound when thrown to send out a Pokémon. This can only be used when B_ENEMY_THROW_BALLS is set to GEN_6 or later. #define B_PLAYER_THROW_BALLS_SOUND GEN_LATEST // In GEN_5+, the player's Poké Balls make a sound when thrown to send out a Pokémon. +#define SHOW_TYPES_NEVER 0 +#define SHOW_TYPES_ALWAYS 1 +#define SHOW_TYPES_CAUGHT 2 +#define B_SHOW_TYPES SHOW_TYPES_NEVER // When defined as SHOW_TYPES_ALWAYS, after selecting "Fight" in battle, the types of all Pokemon are revealed. Whe defined as SHOW_TYPES_OWN, types are only revealed if the player owns the mon in question. + #endif // GUARD_CONFIG_BATTLE_H diff --git a/include/config/pokemon.h b/include/config/pokemon.h index 7bf9450cbbbe..89e72cec17f5 100644 --- a/include/config/pokemon.h +++ b/include/config/pokemon.h @@ -51,6 +51,7 @@ #define P_TWO_FRAME_FRONT_SPRITES TRUE // In Pokémon Emerald, Pokémon front sprites always consist of two frames. This config can revert it to only use the first frame, as is the case in the other Gen 3 games. #define P_ONLY_OBTAINABLE_SHINIES FALSE // If TRUE, Pokémon encountered in the Battle Pyramid won't be shiny. #define P_NO_SHINIES_WITHOUT_POKEBALLS FALSE // If TRUE, Pokémon encountered when the player is out of Poké Balls won't be shiny +#define P_SHOW_DYNAMIC_TYPES FALSE // If TRUE, moves with dynamic type changes will be reflected as their current type in battle/summary screens. // Learnset helper toggles #define P_LEARNSET_HELPER_TEACHABLE TRUE // If TRUE, teachable_learnsets.h will be populated by tools/learnset_helpers/teachable.py using the included JSON files based on available TMs and tutors. diff --git a/include/constants/battle.h b/include/constants/battle.h index 1f11adbd5f4e..39d52d3a45ac 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -89,7 +89,6 @@ #define BATTLE_TWO_VS_ONE_OPPONENT ((gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gTrainerBattleOpponent_B == 0xFFFF)) #define BATTLE_TYPE_HAS_AI (BATTLE_TYPE_TRAINER | BATTLE_TYPE_FIRST_BATTLE | BATTLE_TYPE_SAFARI | BATTLE_TYPE_ROAMER | BATTLE_TYPE_INGAME_PARTNER) - // Battle Outcome defines #define B_OUTCOME_WON 1 #define B_OUTCOME_LOST 2 diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index 389cd7e1271d..54573a4868bc 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -412,6 +412,10 @@ #define ANIM_TAG_TERA_CRYSTAL (ANIM_SPRITES_START + 398) #define ANIM_TAG_TERA_SHATTER (ANIM_SPRITES_START + 399) #define ANIM_TAG_DREEPY_SHINY (ANIM_SPRITES_START + 400) +#define ANIM_TAG_BLOOD_MOON (ANIM_SPRITES_START + 401) +#define ANIM_TAG_BEAM (ANIM_SPRITES_START + 402) +#define ANIM_TAG_RED_EXPLOSION (ANIM_SPRITES_START + 403) +#define ANIM_TAG_PURPLE_CHAIN (ANIM_SPRITES_START + 404) // battlers #define ANIM_ATTACKER 0 diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 5ccf6554d2e5..daba634f5e1a 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -712,15 +712,16 @@ #define STRINGID_FOGISDEEP 710 #define STRINGID_FOGLIFTED 711 #define STRINGID_PKMNMADESHELLGLEAM 712 -#define STRINGID_SUNLIGHTISHARSH 713 -#define STRINGID_ITISHAILING 714 -#define STRINGID_ITISSNOWING 715 -#define STRINGID_ISCOVEREDWITHGRASS 716 -#define STRINGID_MISTSWIRLSAROUND 717 -#define STRINGID_ELECTRICCURRENTISRUNNING 718 -#define STRINGID_SEEMSWEIRD 719 +#define STRINGID_FICKLEBEAMDOUBLED 713 +#define STRINGID_SUNLIGHTISHARSH 714 +#define STRINGID_ITISHAILING 715 +#define STRINGID_ITISSNOWING 716 +#define STRINGID_ISCOVEREDWITHGRASS 717 +#define STRINGID_MISTSWIRLSAROUND 718 +#define STRINGID_ELECTRICCURRENTISRUNNING 719 +#define STRINGID_SEEMSWEIRD 720 -#define BATTLESTRINGS_COUNT 720 +#define BATTLESTRINGS_COUNT 721 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 8095367c9779..9179d628b292 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -243,71 +243,74 @@ #define F_SUMMARY_SCREEN_FLIP_SPRITE 0x80 -// Evolution types #define EVOLUTIONS_END 0xFFFF // Not an actual evolution, used to mark the end of an evolution array. #define EVO_NONE 0xFFFE // Not an actual evolution, used to generate offspring that can't evolve into the specified species, like regional forms. -#define EVO_FRIENDSHIP 1 // Pokémon levels up with friendship ≥ 220 -#define EVO_FRIENDSHIP_DAY 2 // Pokémon levels up during the day with friendship ≥ 220 -#define EVO_FRIENDSHIP_NIGHT 3 // Pokémon levels up at night with friendship ≥ 220 -#define EVO_LEVEL 4 // Pokémon reaches the specified level -#define EVO_TRADE 5 // Pokémon is traded -#define EVO_TRADE_ITEM 6 // Pokémon is traded while it's holding the specified item -#define EVO_ITEM 7 // specified item is used on Pokémon -#define EVO_LEVEL_ATK_GT_DEF 8 // Pokémon reaches the specified level with attack > defense -#define EVO_LEVEL_ATK_EQ_DEF 9 // Pokémon reaches the specified level with attack = defense -#define EVO_LEVEL_ATK_LT_DEF 10 // Pokémon reaches the specified level with attack < defense -#define EVO_LEVEL_SILCOON 11 // Pokémon reaches the specified level with a Silcoon personality value -#define EVO_LEVEL_CASCOON 12 // Pokémon reaches the specified level with a Cascoon personality value -#define EVO_LEVEL_NINJASK 13 // Pokémon reaches the specified level (special value for Ninjask) -#define EVO_LEVEL_SHEDINJA 14 // Pokémon reaches the specified level (special value for Shedinja) -#define EVO_BEAUTY 15 // Pokémon levels up with beauty ≥ specified value -#define EVO_LEVEL_FEMALE 16 // Pokémon reaches the specified level, is female -#define EVO_LEVEL_MALE 17 // Pokémon reaches the specified level, is male -#define EVO_LEVEL_NIGHT 18 // Pokémon reaches the specified level, is night -#define EVO_LEVEL_DAY 19 // Pokémon reaches the specified level, is day -#define EVO_LEVEL_DUSK 20 // Pokémon reaches the specified level, is dusk (5-6 P.M) -#define EVO_ITEM_HOLD_DAY 21 // Pokémon levels up, holds specified item at day -#define EVO_ITEM_HOLD_NIGHT 22 // Pokémon levels up, holds specified item at night -#define EVO_MOVE 23 // Pokémon levels up, knows specified move -#define EVO_FRIENDSHIP_MOVE_TYPE 24 // Pokémon levels up with friendship ≥ 220, knows move with specified type -#define EVO_MAPSEC 25 // Pokémon levels up on specified mapsec -#define EVO_ITEM_MALE 26 // specified item is used on a male Pokémon -#define EVO_ITEM_FEMALE 27 // specified item is used on a female Pokémon -#define EVO_LEVEL_RAIN 28 // Pokémon reaches the specified level during rain in the overworld -#define EVO_SPECIFIC_MON_IN_PARTY 29 // Pokémon levels up with a specified Pokémon in party -#define EVO_LEVEL_DARK_TYPE_MON_IN_PARTY 30 // Pokémon reaches the specified level with a Dark Type Pokémon in party -#define EVO_TRADE_SPECIFIC_MON 31 // Pokémon is traded for a specified Pokémon -#define EVO_SPECIFIC_MAP 32 // Pokémon levels up on specified map -#define EVO_LEVEL_NATURE_AMPED 33 // Pokémon reaches the specified level, it has a Hardy, Brave, Adamant, Naughty, Docile, Impish, Lax, Hasty, Jolly, Naive, Rash, Sassy, or Quirky nature. -#define EVO_LEVEL_NATURE_LOW_KEY 34 // Pokémon reaches the specified level, it has a Lonely, Bold, Relaxed, Timid, Serious, Modest, Mild, Quiet, Bashful, Calm, Gentle, or Careful nature. -#define EVO_CRITICAL_HITS 35 // Pokémon performs specified number of critical hits in one battle -#define EVO_SCRIPT_TRIGGER_DMG 36 // Pokémon has specified HP below max, then player interacts trigger -#define EVO_DARK_SCROLL 37 // interacts with Scroll of Darkness -#define EVO_WATER_SCROLL 38 // interacts with Scroll of Waters -#define EVO_ITEM_NIGHT 39 // specified item is used on Pokémon, is night -#define EVO_ITEM_DAY 40 // specified item is used on Pokémon, is day -#define EVO_ITEM_HOLD 41 // Pokémon levels up, holds specified item -#define EVO_LEVEL_FOG 42 // Pokémon reaches the specified level during fog in the overworld -#define EVO_MOVE_TWO_SEGMENT 43 // Pokémon levels up, knows specified move, has a personality value with a modulus of 0 -#define EVO_MOVE_THREE_SEGMENT 44 // Pokémon levels up, knows specified move, has a personality value with a modulus of 1-99 -#define EVO_LEVEL_FAMILY_OF_THREE 45 // Pokémon reaches the specified level in battle with a personality value with a modulus of 0 -#define EVO_LEVEL_FAMILY_OF_FOUR 46 // Pokémon reaches the specified level in battle with a personality value with a modulus of 1-99 -#define EVO_USE_MOVE_TWENTY_TIMES 47 // Pokémon levels up after having used a move for at least 20 times -#define EVO_RECOIL_DAMAGE_MALE 48 // Pokémon levels up after having suffered specified amount of non-fainting recoil damage as a male -#define EVO_RECOIL_DAMAGE_FEMALE 49 // Pokémon levels up after having suffered specified amount of non-fainting recoil damage as a female -#define EVO_ITEM_COUNT_999 50 // Pokémon levels up after trainer has collected 999 of a specific item -#define EVO_DEFEAT_THREE_WITH_ITEM 51 // Pokémon levels up after having defeat 3 Pokémon of the same species holding the specified item -#define EVO_OVERWORLD_STEPS 52 // Pokémon levels up after having taken a specific amount of steps in the overworld (or as the party lead if OW_FOLLOWERS_ENABLED is FALSE) without switching - -// Evolution 'modes,' for GetEvolutionTargetSpecies -#define EVO_MODE_NORMAL 0 -#define EVO_MODE_CANT_STOP 1 -#define EVO_MODE_TRADE 2 -#define EVO_MODE_ITEM_USE 3 -#define EVO_MODE_ITEM_CHECK 4 // If an Everstone is being held, still want to show that the stone *could* be used on that Pokémon to evolve -#define EVO_MODE_BATTLE_SPECIAL 5 -#define EVO_MODE_OVERWORLD_SPECIAL 6 -#define EVO_MODE_BATTLE_ONLY 7 // This mode is only used in battles to support Tandemaus' unique requirement + +enum EvolutionMethods { + EVO_FRIENDSHIP, // Pokémon levels up with friendship ≥ 220 + EVO_FRIENDSHIP_DAY, // Pokémon levels up during the day with friendship ≥ 220 + EVO_FRIENDSHIP_NIGHT, // Pokémon levels up at night with friendship ≥ 220 + EVO_LEVEL, // Pokémon reaches the specified level + EVO_TRADE, // Pokémon is traded + EVO_TRADE_ITEM, // Pokémon is traded while it's holding the specified item + EVO_ITEM, // specified item is used on Pokémon + EVO_LEVEL_ATK_GT_DEF, // Pokémon reaches the specified level with attack > defense + EVO_LEVEL_ATK_EQ_DEF, // Pokémon reaches the specified level with attack = defense + EVO_LEVEL_ATK_LT_DEF, // Pokémon reaches the specified level with attack < defense + EVO_LEVEL_SILCOON, // Pokémon reaches the specified level with a Silcoon personality value + EVO_LEVEL_CASCOON, // Pokémon reaches the specified level with a Cascoon personality value + EVO_LEVEL_NINJASK, // Pokémon reaches the specified level (special value for Ninjask) + EVO_LEVEL_SHEDINJA, // Pokémon reaches the specified level (special value for Shedinja) + EVO_BEAUTY, // Pokémon levels up with beauty ≥ specified value + EVO_LEVEL_FEMALE, // Pokémon reaches the specified level, is female + EVO_LEVEL_MALE, // Pokémon reaches the specified level, is male + EVO_LEVEL_NIGHT, // Pokémon reaches the specified level, is night + EVO_LEVEL_DAY, // Pokémon reaches the specified level, is day + EVO_LEVEL_DUSK, // Pokémon reaches the specified level, is dusk (5-6 P.M) + EVO_ITEM_HOLD_DAY, // Pokémon levels up, holds specified item at day + EVO_ITEM_HOLD_NIGHT, // Pokémon levels up, holds specified item at night + EVO_MOVE, // Pokémon levels up, knows specified move + EVO_FRIENDSHIP_MOVE_TYPE, // Pokémon levels up with friendship ≥ 220, knows move with specified type + EVO_MAPSEC, // Pokémon levels up on specified mapsec + EVO_ITEM_MALE, // specified item is used on a male Pokémon + EVO_ITEM_FEMALE, // specified item is used on a female Pokémon + EVO_LEVEL_RAIN, // Pokémon reaches the specified level during rain in the overworld + EVO_SPECIFIC_MON_IN_PARTY, // Pokémon levels up with a specified Pokémon in party + EVO_LEVEL_DARK_TYPE_MON_IN_PARTY, // Pokémon reaches the specified level with a Dark Type Pokémon in party + EVO_TRADE_SPECIFIC_MON, // Pokémon is traded for a specified Pokémon + EVO_SPECIFIC_MAP, // Pokémon levels up on specified map + EVO_LEVEL_NATURE_AMPED, // Pokémon reaches the specified level, it has a Hardy, Brave, Adamant, Naughty, Docile, Impish, Lax, Hasty, Jolly, Naive, Rash, Sassy, or Quirky nature. + EVO_LEVEL_NATURE_LOW_KEY, // Pokémon reaches the specified level, it has a Lonely, Bold, Relaxed, Timid, Serious, Modest, Mild, Quiet, Bashful, Calm, Gentle, or Careful nature. + EVO_CRITICAL_HITS, // Pokémon performs specified number of critical hits in one battle + EVO_SCRIPT_TRIGGER_DMG, // Pokémon has specified HP below max, then player interacts trigger + EVO_DARK_SCROLL, // interacts with Scroll of Darkness + EVO_WATER_SCROLL, // interacts with Scroll of Waters + EVO_ITEM_NIGHT, // specified item is used on Pokémon, is night + EVO_ITEM_DAY, // specified item is used on Pokémon, is day + EVO_ITEM_HOLD, // Pokémon levels up, holds specified item + EVO_LEVEL_FOG, // Pokémon reaches the specified level during fog in the overworld + EVO_MOVE_TWO_SEGMENT, // Pokémon levels up, knows specified move, has a personality value with a modulus of 0 + EVO_MOVE_THREE_SEGMENT, // Pokémon levels up, knows specified move, has a personality value with a modulus of 1-99 + EVO_LEVEL_FAMILY_OF_THREE, // Pokémon reaches the specified level in battle with a personality value with a modulus of 0 + EVO_LEVEL_FAMILY_OF_FOUR, // Pokémon reaches the specified level in battle with a personality value with a modulus of 1-99 + EVO_USE_MOVE_TWENTY_TIMES, // Pokémon levels up after having used a move for at least 20 times + EVO_RECOIL_DAMAGE_MALE, // Pokémon levels up after having suffered specified amount of non-fainting recoil damage as a male + EVO_RECOIL_DAMAGE_FEMALE, // Pokémon levels up after having suffered specified amount of non-fainting recoil damage as a female + EVO_ITEM_COUNT_999, // Pokémon levels up after trainer has collected 999 of a specific item + EVO_DEFEAT_THREE_WITH_ITEM, // Pokémon levels up after having defeat 3 Pokémon of the same species holding the specified item + EVO_OVERWORLD_STEPS, // Pokémon levels up after having taken a specific amount of steps in the overworld +}; + +enum EvolutionMode { + EVO_MODE_NORMAL, + EVO_MODE_CANT_STOP, + EVO_MODE_TRADE, + EVO_MODE_ITEM_USE, + EVO_MODE_ITEM_CHECK, // If an Everstone is being held, still want to show that the stone *could* be used on that Pokémon to evolve + EVO_MODE_BATTLE_SPECIAL, + EVO_MODE_OVERWORLD_SPECIAL, + EVO_MODE_BATTLE_ONLY, // This mode is only used in battles to support Tandemaus' unique requirement +}; #define MON_PIC_WIDTH 64 #define MON_PIC_HEIGHT 64 @@ -332,6 +335,10 @@ // Used as a signal for givemon to generate a default ability by personality. #define NUM_ABILITY_PERSONALITY 0xFF +#if P_LEGENDARY_PERFECT_IVS >= GEN_6 #define LEGENDARY_PERFECT_IV_COUNT 3 +#else +#define LEGENDARY_PERFECT_IV_COUNT 0 +#endif #endif // GUARD_CONSTANTS_POKEMON_H diff --git a/include/data.h b/include/data.h index 69c1a19a3c49..88111eb5c020 100644 --- a/include/data.h +++ b/include/data.h @@ -110,7 +110,9 @@ struct TypeInfo u16 maxMove; u16 teraTypeRGBValue; // Most values pulled from the Tera type icon palette. u16 damageCategory:2; // Used for B_PHYSICAL_SPECIAL_SPLIT <= GEN_3 - u16 padding:14; + u16 useSecondTypeIconPalette:1; + u16 isSpecialCaseType:1; + u16 padding:12; const u32 *const paletteTMHM; //u16 enhanceItem; //u16 berry; diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index c606eef8d304..29249712b6e5 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -130,7 +130,7 @@ struct MapEvents struct MapConnection { u8 direction; - u32 offset; + s32 offset; u8 mapGroup; u8 mapNum; }; diff --git a/include/graphics.h b/include/graphics.h index 01de060b790d..1ec04f00562d 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -2724,6 +2724,8 @@ extern const u32 gBattleAnimSpritePal_AuraSphere[]; extern const u32 gBattleAnimSpritePal_AvalancheRocks[]; extern const u32 gBattleAnimSpriteGfx_NewPokeball[]; extern const u32 gBattleAnimSpritePal_NewPokeball[]; +extern const u32 gBattleAnimSpriteGfx_Beam[]; +extern const u32 gBattleAnimSpritePal_Beam[]; extern const u32 gBattleAnimSpriteGfx_BerryEaten[]; extern const u32 gBattleAnimSpritePal_BerryEaten[]; extern const u32 gBattleAnimSpriteGfx_BerryNormal[]; @@ -2732,6 +2734,8 @@ extern const u32 gBattleAnimSpriteGfx_BigRock[]; extern const u32 gBattleAnimSpritePal_BigRock[]; extern const u32 gBattleAnimSpriteGfx_BlacephalonHead[]; extern const u32 gBattleAnimSpritePal_BlacephalonHead[]; +extern const u32 gBattleAnimSpriteGfx_BloodMoon[]; +extern const u32 gBattleAnimSpritePal_BloodMoon[]; extern const u32 gBattleAnimSpritePal_BlueFlare[]; extern const u32 gBattleAnimSpriteGfx_Branch[]; extern const u32 gBattleAnimSpritePal_Branch[]; @@ -2825,12 +2829,16 @@ extern const u32 gBattleAnimSpriteGfx_PoisonColumn[]; extern const u32 gBattleAnimSpritePal_PoisonColumn[]; extern const u32 gBattleAnimSpriteGfx_PowerTrick[]; extern const u32 gBattleAnimSpritePal_PowerTrick[]; +extern const u32 gBattleAnimSpriteGfx_PurpleChain[]; +extern const u32 gBattleAnimSpritePal_PurpleChain[]; extern const u32 gBattleAnimSpriteGfx_PurpleDrake[]; extern const u32 gBattleAnimSpritePal_PurpleDrake[]; extern const u32 gBattleAnimSpriteGfx_QuickGuard[]; extern const u32 gBattleAnimSpritePal_QuickGuard[]; extern const u32 gBattleAnimSpriteGfx_RazorShell[]; extern const u32 gBattleAnimSpritePal_RazorShell[]; +extern const u32 gBattleAnimSpriteGfx_RedExplosion[]; +extern const u32 gBattleAnimSpritePal_RedExplosion[]; extern const u32 gBattleAnimSpriteGfx_RocksSmall[]; extern const u32 gBattleAnimSpriteGfx_NewRocks[]; extern const u32 gBattleAnimSpritePal_NewRocks[]; @@ -3363,4 +3371,9 @@ extern const u8 gMailTilemap_Retro[]; extern const u8 gMonMarkingsMenu_Gfx[]; extern const u16 gMonMarkingsMenu_Pal[]; +extern const u32 gBattleIcons_Gfx1[]; +extern const u32 gBattleIcons_Gfx2[]; +extern const u32 gBattleIcons_Pal1[]; +extern const u32 gBattleIcons_Pal2[]; + #endif //GUARD_GRAPHICS_H diff --git a/include/move_relearner.h b/include/move_relearner.h index 51b476d25fd1..903c80ac7a5e 100644 --- a/include/move_relearner.h +++ b/include/move_relearner.h @@ -3,5 +3,6 @@ void TeachMoveRelearnerMove(void); void MoveRelearnerShowHideHearts(s32); +void MoveRelearnerShowHideCategoryIcon(s32); #endif //GUARD_MOVE_RELEARNER_H diff --git a/include/palette.h b/include/palette.h index 15c92cc2a7ad..13c06b007801 100644 --- a/include/palette.h +++ b/include/palette.h @@ -54,33 +54,31 @@ struct PaletteFadeControl extern struct PaletteFadeControl gPaletteFade; extern u32 gPlttBufferTransferPending; -extern u8 ALIGNED(4) gPaletteDecompressionBuffer[]; extern u16 ALIGNED(4) gPlttBufferUnfaded[PLTT_BUFFER_SIZE]; extern u16 ALIGNED(4) gPlttBufferFaded[PLTT_BUFFER_SIZE]; -void LoadCompressedPalette(const u32 *src, u16 offset, u16 size); -void LoadPalette(const void *src, u16 offset, u16 size); -void FillPalette(u16 value, u16 offset, u16 size); +void LoadCompressedPalette(const u32 *src, u32 offset, u32 size); +void LoadPalette(const void *src, u32 offset, u32 size); +void FillPalette(u32 value, u32 offset, u32 size); void TransferPlttBuffer(void); -u8 UpdatePaletteFade(void); +u32 UpdatePaletteFade(void); void ResetPaletteFade(void); -bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targetY, u16 blendColor); -void PaletteStruct_ResetById(u16 id); +bool32 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targetY, u32 blendColor); void ResetPaletteFadeControl(void); void InvertPlttBuffer(u32 selectedPalettes); void TintPlttBuffer(u32 selectedPalettes, s8 r, s8 g, s8 b); void UnfadePlttBuffer(u32 selectedPalettes); -void BeginFastPaletteFade(u8 submode); -void BeginHardwarePaletteFade(u8 blendCnt, u8 delay, u8 y, u8 targetY, u8 shouldResetBlendRegisters); -void BlendPalettes(u32 selectedPalettes, u8 coeff, u16 color); -void BlendPalettesUnfaded(u32 selectedPalettes, u8 coeff, u16 color); +void BeginFastPaletteFade(u32 submode); +void BeginHardwarePaletteFade(u32 blendCnt, u32 delay, u32 y, u32 targetY, u32 shouldResetBlendRegisters); +void BlendPalettes(u32 selectedPalettes, u8 coeff, u32 color); +void BlendPalettesUnfaded(u32 selectedPalettes, u8 coeff, u32 color); void BlendPalettesGradually(u32 selectedPalettes, s8 delay, u8 coeff, u8 coeffTarget, u16 color, u8 priority, u8 id); -void TintPalette_GrayScale(u16 *palette, u16 count); -void TintPalette_GrayScale2(u16 *palette, u16 count); -void TintPalette_SepiaTone(u16 *palette, u16 count); -void TintPalette_CustomTone(u16 *palette, u16 count, u16 rTone, u16 gTone, u16 bTone); +void TintPalette_GrayScale(u16 *palette, u32 count); +void TintPalette_GrayScale2(u16 *palette, u32 count); +void TintPalette_SepiaTone(u16 *palette, u32 count); +void TintPalette_CustomTone(u16 *palette, u32 count, u16 rTone, u16 gTone, u16 bTone); -static inline void SetBackdropFromColor(u16 color) +static inline void SetBackdropFromColor(u32 color) { FillPalette(color, 0, PLTT_SIZEOF(1)); } diff --git a/include/pokemon.h b/include/pokemon.h index b299ab7d61e5..dcdbf43decff 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -323,9 +323,7 @@ struct BattlePokemon /*0x17*/ u32 abilityNum:2; /*0x18*/ s8 statStages[NUM_BATTLE_STATS]; /*0x20*/ u16 ability; - /*0x22*/ u8 type1; - /*0x23*/ u8 type2; - /*0x24*/ u8 type3; + /*0x22*/ u8 types[3]; /*0x25*/ u8 pp[MAX_MON_MOVES]; /*0x29*/ u16 hp; /*0x2B*/ u8 level; @@ -439,11 +437,11 @@ struct SpeciesInfo /*0xC4*/ u32 isHisuianForm:1; u32 isPaldeanForm:1; u32 cannotBeTraded:1; - u32 allPerfectIVs:1; + u32 perfectIVCount:3; // This species will always generate with the specified amount of perfect IVs. u32 dexForceRequired:1; // This species will be taken into account for Pokédex ratings even if they have the "isMythical" flag set. u32 tmIlliterate:1; // This species will be unable to learn the universal moves. u32 isFrontierBanned:1; // This species is not allowed to participate in Battle Frontier facilities. - u32 padding4:14; + u32 padding4:11; // Move Data /* 0x80 */ const struct LevelUpMove *levelUpLearnset; /* 0x84 */ const u16 *teachableLearnset; @@ -798,7 +796,7 @@ u8 GetItemEffectParamOffset(u32 battler, u16 itemId, u8 effectByte, u8 effectBit u8 *UseStatIncreaseItem(u16 itemId); u8 GetNature(struct Pokemon *mon); u8 GetNatureFromPersonality(u32 personality); -u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem, struct Pokemon *tradePartner); +u16 GetEvolutionTargetSpecies(struct Pokemon *mon, enum EvolutionMode mode, u16 evolutionItem, struct Pokemon *tradePartner); bool8 IsMonPastEvolutionLevel(struct Pokemon *mon); u16 NationalPokedexNumToSpecies(u16 nationalNum); u16 NationalToHoennOrder(u16 nationalNum); @@ -882,5 +880,6 @@ const u8 *GetMoveName(u16 moveId); const u8 *GetMoveAnimationScript(u16 moveId); void UpdateDaysPassedSinceFormChange(u16 days); void TrySetDayLimitToFormChange(struct Pokemon *mon); +u32 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler); #endif // GUARD_POKEMON_H diff --git a/include/random.h b/include/random.h index cb4e636e14d5..cd7e26b58920 100644 --- a/include/random.h +++ b/include/random.h @@ -197,6 +197,7 @@ enum RandomTag RNG_TRACE, RNG_FICKLE_BEAM, RNG_AI_ABILITY, + RNG_AI_HASBADODDS, RNG_SHELL_SIDE_ARM, }; diff --git a/include/strings.h b/include/strings.h index ec175ab251d0..7ad99aad56bd 100644 --- a/include/strings.h +++ b/include/strings.h @@ -324,19 +324,6 @@ extern const u8 gText_SelectorArrow3[]; extern const u8 gText_YesNo[]; // main menu/birch speech text -extern const u8 gText_SaveFileErased[]; -extern const u8 gText_SaveFileCorrupted[]; -extern const u8 gJPText_No1MSubCircuit[]; -extern const u8 gText_BatteryRunDry[]; -extern const u8 gText_MainMenuNewGame[]; -extern const u8 gText_MainMenuOption[]; -extern const u8 gText_MainMenuContinue[]; -extern const u8 gText_MainMenuMysteryGift2[]; -extern const u8 gText_MainMenuMysteryEvents[]; -extern const u8 gText_MainMenuMysteryGift[]; -extern const u8 gText_WirelessNotConnected[]; -extern const u8 gText_MysteryGiftCantUse[]; -extern const u8 gText_MysteryEventsCantUse[]; extern const u8 gText_Birch_Welcome[]; extern const u8 gText_ThisIsAPokemon[]; extern const u8 gText_Birch_MainSpeech[]; @@ -346,52 +333,6 @@ extern const u8 gText_Birch_WhatsYourName[]; extern const u8 gText_Birch_SoItsPlayer[]; extern const u8 gText_Birch_YourePlayer[]; extern const u8 gText_Birch_AreYouReady[]; -extern const u8 gText_ContinueMenuPlayer[]; -extern const u8 gText_ContinueMenuTime[]; -extern const u8 gText_ContinueMenuPokedex[]; -extern const u8 gText_ContinueMenuBadges[]; -extern const u8 gText_BirchBoy[]; -extern const u8 gText_BirchGirl[]; -extern const u8 gText_DefaultNameStu[]; -extern const u8 gText_DefaultNameMilton[]; -extern const u8 gText_DefaultNameTom[]; -extern const u8 gText_DefaultNameKenny[]; -extern const u8 gText_DefaultNameReid[]; -extern const u8 gText_DefaultNameJude[]; -extern const u8 gText_DefaultNameJaxson[]; -extern const u8 gText_DefaultNameEaston[]; -extern const u8 gText_DefaultNameWalker[]; -extern const u8 gText_DefaultNameTeru[]; -extern const u8 gText_DefaultNameJohnny[]; -extern const u8 gText_DefaultNameBrett[]; -extern const u8 gText_DefaultNameSeth[]; -extern const u8 gText_DefaultNameTerry[]; -extern const u8 gText_DefaultNameCasey[]; -extern const u8 gText_DefaultNameDarren[]; -extern const u8 gText_DefaultNameLandon[]; -extern const u8 gText_DefaultNameCollin[]; -extern const u8 gText_DefaultNameStanley[]; -extern const u8 gText_DefaultNameQuincy[]; -extern const u8 gText_DefaultNameKimmy[]; -extern const u8 gText_DefaultNameTiara[]; -extern const u8 gText_DefaultNameBella[]; -extern const u8 gText_DefaultNameJayla[]; -extern const u8 gText_DefaultNameAllie[]; -extern const u8 gText_DefaultNameLianna[]; -extern const u8 gText_DefaultNameSara[]; -extern const u8 gText_DefaultNameMonica[]; -extern const u8 gText_DefaultNameCamila[]; -extern const u8 gText_DefaultNameAubree[]; -extern const u8 gText_DefaultNameRuthie[]; -extern const u8 gText_DefaultNameHazel[]; -extern const u8 gText_DefaultNameNadine[]; -extern const u8 gText_DefaultNameTanja[]; -extern const u8 gText_DefaultNameYasmin[]; -extern const u8 gText_DefaultNameNicola[]; -extern const u8 gText_DefaultNameLillie[]; -extern const u8 gText_DefaultNameTerra[]; -extern const u8 gText_DefaultNameLucy[]; -extern const u8 gText_DefaultNameHalie[]; extern const u8 gText_BirchInTrouble[]; extern const u8 gText_ConfirmStarterChoice[]; diff --git a/include/tilesets.h b/include/tilesets.h index c7cc8edac961..b495b6c52cb2 100644 --- a/include/tilesets.h +++ b/include/tilesets.h @@ -7,4 +7,7 @@ extern const u16 gTilesetPalettes_General[][16]; extern const struct Tileset * const gTilesetPointer_SecretBase; extern const struct Tileset * const gTilesetPointer_SecretBaseRedCave; +extern const struct Tileset gTileset_Building; +extern const struct Tileset gTileset_BrendansMaysHouse; + #endif //GUARD_tilesets_H diff --git a/include/type_icons.h b/include/type_icons.h new file mode 100644 index 000000000000..1d6a312f072e --- /dev/null +++ b/include/type_icons.h @@ -0,0 +1,18 @@ +#ifndef GUARD_TYPE_ICONS_H +#define GUARD_TYPE_ICONS_H + +void LoadTypeIcons(u32); + +#define TYPE_ICON_TAG 0x2720 +#define TYPE_ICON_TAG_2 0x2721 +#define NUM_FRAMES_HIDE_TYPE_ICON 10 + +#define tMonPosition data[0] +#define tBattlerId data[1] +#define tHideIconTimer data[2] +#define tVerticalPosition data[3] + +#define TYPE_ICON_1_FRAME(monType) ((monType - 1) * 2) +#define TYPE_ICON_2_FRAME(monType) ((monType - 11) * 2) + +#endif // GUARD_TYPE_ICONS_H diff --git a/ld_script.ld b/ld_script.ld deleted file mode 100644 index a0c069c96574..000000000000 --- a/ld_script.ld +++ /dev/null @@ -1,1391 +0,0 @@ -ENTRY(Start) - -gNumMusicPlayers = 4; -gMaxLines = 0; -gInitialMainCB2 = CB2_InitCopyrightScreenAfterBootup; - -MEMORY -{ - EWRAM (rwx) : ORIGIN = 0x2000000, LENGTH = 256K - IWRAM (rwx) : ORIGIN = 0x3000000, LENGTH = 32K - ROM (rx) : ORIGIN = 0x8000000, LENGTH = 32M -} - -SECTIONS { - - .ewram ORIGIN(EWRAM) : AT (__ewram_lma) - ALIGN(4) - { - __ewram_start = .; - *(.ewram*) - __ewram_end = .; - } > EWRAM - - .ewram.sbss (NOLOAD) : - ALIGN(4) - { - INCLUDE "sym_ewram.ld" - src/*.o(.sbss); - gflib/*.o(.sbss); - - *libc.a:impure.o(.data); - *libc.a:locale.o(.data); - *libc.a:mallocr.o(.data); - } > EWRAM - - .iwram ORIGIN(IWRAM) : AT (__iwram_lma) - ALIGN(4) - { - __iwram_start = .; - *(.iwram*); - __iwram_end = .; - } > IWRAM - - .iwram.bss (NOLOAD) : - ALIGN(4) - { - /* .bss starts at 0x3000000 */ - INCLUDE "sym_bss.ld" - src/*.o(.bss); - gflib/*.o(.bss); - data/*.o(.bss); - - /* .bss.code starts at 0x3001AA8 */ - src/m4a.o(.bss.code); - - /* COMMON starts at 0x30022A8 */ - INCLUDE "sym_common.ld" - *libc.a:sbrkr.o(COMMON); - } > IWRAM - - /* BEGIN ROM DATA */ - . = 0x8000000; - - .text : - ALIGN(4) - { - src/rom_header.o(.text); - src/rom_header_gf.o(.text.*); - src/rom_header_rhh.o(.text.*); - src/crt0.o(.text); - src/main.o(.text); - gflib/malloc.o(.text); - gflib/dma3_manager.o(.text); - gflib/gpu_regs.o(.text); - gflib/bg.o(.text); - gflib/blit.o(.text); - gflib/window.o(.text); - gflib/text.o(.text); - gflib/sprite.o(.text); - gflib/string_util.o(.text); - src/link.o(.text); - src/AgbRfu_LinkManager.o(.text); - src/link_rfu_3.o(.text); - src/link_rfu_2.o(.text); - src/union_room.o(.text); - src/mystery_gift_menu.o(.text); - src/union_room_player_avatar.o(.text); - src/wireless_communication_status_screen.o(.text); - src/union_room_battle.o(.text); - src/mystery_gift.o(.text); - src/mystery_gift_view.o(.text); - src/mystery_gift_server.o(.text); - src/mystery_gift_client.o(.text); - src/mystery_gift_link.o(.text); - src/wonder_news.o(.text); - src/union_room_chat.o(.text); - src/berry_crush.o(.text); - src/berry_powder.o(.text); - src/dodrio_berry_picking.o(.text); - src/pokemon_jump.o(.text); - src/minigame_countdown.o(.text); - src/rtc.o(.text); - src/main_menu.o(.text); - src/battle_controllers.o(.text); - src/decompress.o(.text); - src/digit_obj_util.o(.text); - src/battle_bg.o(.text); - src/battle_main.o(.text); - src/battle_util.o(.text); - src/battle_z_move.o(.text); - src/battle_script_commands.o(.text); - src/battle_util2.o(.text); - src/battle_controller_player.o(.text); - src/battle_gfx_sfx_util.o(.text); - src/battle_controller_opponent.o(.text); - src/battle_ai_switch_items.o(.text); - src/battle_controller_link_opponent.o(.text); - src/battle_debug.o(.text); - src/pokemon.o(.text); - src/trig.o(.text); - src/random.o(.text); - src/util.o(.text); - src/daycare.o(.text); - src/egg_hatch.o(.text); - src/battle_interface.o(.text); - src/battle_anim_smokescreen.o(.text); - src/pokeball.o(.text); - src/load_save.o(.text); - src/trade.o(.text); - src/berry_blender.o(.text); - src/play_time.o(.text); - src/new_game.o(.text); - src/overworld.o(.text); - src/fieldmap.o(.text); - src/metatile_behavior.o(.text); - src/field_camera.o(.text); - src/field_door.o(.text); - src/field_player_avatar.o(.text); - src/event_object_movement.o(.text); - src/follower_helper.o(.text); - src/field_message_box.o(.text); - src/event_object_lock.o(.text); - src/text_window.o(.text); - src/script.o(.text); - src/scrcmd.o(.text); - src/field_control_avatar.o(.text); - src/event_data.o(.text); - src/coord_event_weather.o(.text); - src/field_tasks.o(.text); - src/clock.o(.text); - src/reset_rtc_screen.o(.text); - src/start_menu.o(.text); - src/tileset_anims.o(.text); - src/palette.o(.text); - src/sound.o(.text); - src/battle_anim.o(.text); - src/battle_anim_mons.o(.text); - src/task.o(.text); - src/reshow_battle_screen.o(.text); - src/battle_anim_status_effects.o(.text); - src/title_screen.o(.text); - src/field_weather.o(.text); - src/field_weather_effect.o(.text); - src/field_screen_effect.o(.text); - src/battle_setup.o(.text); - src/cable_club.o(.text); - src/trainer_see.o(.text); - src/wild_encounter.o(.text); - src/field_effect.o(.text); - src/scanline_effect.o(.text); - src/option_menu.o(.text); - src/pokedex.o(.text); - src/trainer_card.o(.text); - src/frontier_pass.o(.text); - src/pokemon_storage_system.o(.text); - src/pokemon_icon.o(.text); - src/script_movement.o(.text); - src/fldeff_cut.o(.text); - src/mail_data.o(.text); - src/map_name_popup.o(.text); - src/item_menu_icons.o(.text); - src/battle_anim_mon_movement.o(.text); - src/item.o(.text); - src/contest.o(.text); - src/shop.o(.text); - src/fldeff_escalator.o(.text); - src/berry.o(.text); - src/script_menu.o(.text); - src/naming_screen.o(.text); - src/money.o(.text); - src/contest_effect.o(.text); - src/record_mixing.o(.text); - src/secret_base.o(.text); - src/tv.o(.text); - src/contest_util.o(.text); - src/script_pokemon_util.o(.text); - src/field_poison.o(.text); - src/pokemon_size_record.o(.text); - src/fldeff_misc.o(.text); - src/field_special_scene.o(.text); - src/rotating_gate.o(.text); - src/safari_zone.o(.text); - src/contest_link.o(.text); - src/item_use.o(.text); - src/battle_anim_effects_1.o(.text); - src/battle_anim_effects_2.o(.text); - src/battle_anim_water.o(.text); - src/battle_anim_fire.o(.text); - src/battle_anim_electric.o(.text); - src/battle_anim_ice.o(.text); - src/battle_anim_fight.o(.text); - src/battle_anim_poison.o(.text); - src/battle_anim_flying.o(.text); - src/battle_anim_psychic.o(.text); - src/battle_anim_bug.o(.text); - src/battle_anim_rock.o(.text); - src/battle_anim_ghost.o(.text); - src/battle_anim_dragon.o(.text); - src/battle_anim_dark.o(.text); - src/battle_anim_ground.o(.text); - src/battle_anim_normal.o(.text); - src/battle_anim_utility_funcs.o(.text); - src/battle_anim_new.o(.text); - src/battle_intro.o(.text); - src/bike.o(.text); - src/easy_chat.o(.text); - src/mon_markings.o(.text); - src/mauville_old_man.o(.text); - src/mail.o(.text); - src/menu_helpers.o(.text); - src/dewford_trend.o(.text); - src/heal_location.o(.text); - src/region_map.o(.text); - src/image_processing_effects.o(.text); - src/decoration.o(.text); - src/slot_machine.o(.text); - src/contest_painting.o(.text); - src/battle_ai_main.o(.text); - src/battle_ai_util.o(.text); - src/trader.o(.text); - src/starter_choose.o(.text); - src/wallclock.o(.text); - src/fldeff_rocksmash.o(.text); - src/fldeff_dig.o(.text); - src/pokeblock.o(.text); - src/fldeff_flash.o(.text); - src/post_battle_event_funcs.o(.text); - src/time_events.o(.text); - src/birch_pc.o(.text); - src/hof_pc.o(.text); - src/field_specials.o(.text); - src/battle_records.o(.text); - src/pokedex_area_screen.o(.text); - src/evolution_scene.o(.text); - src/roulette.o(.text); - src/pokedex_cry_screen.o(.text); - src/coins.o(.text); - src/landmark.o(.text); - src/fldeff_strength.o(.text); - src/battle_transition.o(.text); - src/battle_controller_link_partner.o(.text); - src/battle_message.o(.text); - src/cable_car.o(.text); - src/math_util.o(.text); - src/palette_util.o(.text); - src/confetti_util.o(.text); - src/save.o(.text); - src/mystery_event_script.o(.text); - src/field_effect_helpers.o(.text); - src/contest_ai.o(.text); - src/battle_anim_sound_tasks.o(.text); - src/battle_controller_safari.o(.text); - src/fldeff_sweetscent.o(.text); - src/battle_anim_effects_3.o(.text); - src/move_relearner.o(.text); - src/fldeff_softboiled.o(.text); - src/decoration_inventory.o(.text); - src/roamer.o(.text); - src/battle_tower.o(.text); - src/use_pokeblock.o(.text); - src/battle_controller_wally.o(.text); - src/player_pc.o(.text); - src/intro.o(.text); - src/reload_save.o(.text); - src/field_region_map.o(.text); - src/battle_anim_throw.o(.text); - src/hall_of_fame.o(.text); - src/credits.o(.text); - src/lottery_corner.o(.text); - src/diploma.o(.text); - src/berry_tag_screen.o(.text); - src/mystery_event_menu.o(.text); - src/save_failed_screen.o(.text); - src/braille_puzzles.o(.text); - src/pokeblock_feed.o(.text); - src/clear_save_data_screen.o(.text); - src/intro_credits_graphics.o(.text); - src/evolution_graphics.o(.text); - src/bard_music.o(.text); - src/fldeff_teleport.o(.text); - src/battle_tv.o(.text); - src/pokemon_animation.o(.text); - src/recorded_battle.o(.text); - src/battle_controller_recorded_opponent.o(.text); - src/battle_controller_recorded_player.o(.text); - src/trainer_pokemon_sprites.o(.text); - src/lilycove_lady.o(.text); - src/battle_dome.o(.text); - src/battle_palace.o(.text); - src/match_call.o(.text); - src/menu.o(.text); - src/battle_factory_screen.o(.text); - src/apprentice.o(.text); - src/frontier_util.o(.text); - src/battle_arena.o(.text); - src/battle_factory.o(.text); - src/battle_pike.o(.text); - src/rotating_tile_puzzle.o(.text); - src/battle_pyramid.o(.text); - src/item_menu.o(.text); - src/list_menu.o(.text); - src/dynamic_placeholder_text_util.o(.text); - src/save_location.o(.text); - src/item_icon.o(.text); - src/party_menu.o(.text); - src/battle_tent.o(.text); - src/braille.o(.text); - src/multiboot.o(.text); - src/berry_fix_graphics.o(.text); - src/battle_controller_player_partner.o(.text); - src/mirage_tower.o(.text); - src/berry_fix_program.o(.text); - src/pokemon_summary_screen.o(.text); - src/pokedex_area_region_map.o(.text); - src/battle_pyramid_bag.o(.text); - src/pokenav.o(.text); - src/pokenav_main_menu.o(.text); - src/pokenav_list.o(.text); - src/pokenav_menu_handler.o(.text); - src/pokenav_menu_handler_gfx.o(.text); - src/pokenav_match_call_list.o(.text); - src/pokenav_match_call_gfx.o(.text); - src/pokenav_region_map.o(.text); - src/pokenav_conditions.o(.text); - src/pokenav_conditions_gfx.o(.text); - src/pokenav_conditions_search_results.o(.text); - src/pokenav_ribbons_list.o(.text); - src/pokenav_ribbons_summary.o(.text); - src/pokenav_match_call_data.o(.text); - src/menu_specialized.o(.text); - src/ereader_helpers.o(.text); - src/faraway_island.o(.text); - src/ereader_screen.o(.text); - src/trainer_hill.o(.text); - src/rayquaza_scene.o(.text); - src/walda_phrase.o(.text); - src/contest_link_util.o(.text); - src/gym_leader_rematch.o(.text); - src/battle_transition_frontier.o(.text); - src/international_string_util.o(.text); - src/pokemon_sprite_visualizer.o(.text); - src/expansion_intro.o(.text); - } > ROM =0 - - script_data : - ALIGN(4) - { - data/event_scripts.o(script_data); - data/battle_anim_scripts.o(script_data); - data/battle_scripts_1.o(script_data); - data/field_effect_scripts.o(script_data); - data/battle_scripts_2.o(script_data); - data/contest_ai_scripts.o(script_data); - data/mystery_event_script_cmd_table.o(script_data); - } > ROM =0 - - lib_text : - ALIGN(4) - { - src/libgcnmultiboot.o(.text); - src/m4a_1.o(.text); - src/m4a.o(.text); - src/agb_flash.o(.text); - src/agb_flash_1m.o(.text); - src/agb_flash_mx.o(.text); - src/siirtc.o(.text); - src/librfu_stwi.o(.text); - src/librfu_intr.o(.text); - src/librfu_rfu.o(.text); - src/librfu_sio32id.o(.text); - src/libisagbprn.o(.text); - *libagbsyscall.a:ArcTan2.o(.text); - *libagbsyscall.a:BgAffineSet.o(.text); - *libagbsyscall.a:CpuFastSet.o(.text); - *libagbsyscall.a:CpuSet.o(.text); - *libagbsyscall.a:Div.o(.text); - *libagbsyscall.a:LZ77UnCompVram.o(.text); - *libagbsyscall.a:LZ77UnCompWram.o(.text); - *libagbsyscall.a:MultiBoot.o(.text); - *libagbsyscall.a:ObjAffineSet.o(.text); - *libagbsyscall.a:RLUnCompVram.o(.text); - *libagbsyscall.a:RLUnCompWram.o(.text); - *libagbsyscall.a:RegisterRamReset.o(.text); - *libagbsyscall.a:SoftReset.o(.text); - *libagbsyscall.a:Sqrt.o(.text); - *libagbsyscall.a:VBlankIntrWait.o(.text); - *libgcc.a:_call_via_rX.o(.text); - *libgcc.a:_divdi3.o(.text); - *libgcc.a:_divsi3.o(.text); - *libgcc.a:_dvmd_tls.o(.text); - *libgcc.a:_fixunsdfsi.o(.text); - *libgcc.a:_fixunssfsi.o(.text); - *libgcc.a:_modsi3.o(.text); - *libgcc.a:_muldi3.o(.text); - *libgcc.a:_udivdi3.o(.text); - *libgcc.a:_udivsi3.o(.text); - *libgcc.a:_umodsi3.o(.text); - *libgcc.a:dp-bit.o(.text); - *libgcc.a:fp-bit.o(.text); - *libgcc.a:_lshrdi3.o(.text); - *libgcc.a:_negdi2.o(.text); - *libc.a:memcpy.o(.text); - *libc.a:memset.o(.text); - *libc.a:strcmp.o(.text); - *libc.a:strcpy.o(.text); - *libc.a:impure.o(.text); - *libc.a:vsprintf.o(.text); - *libc.a:vfprintf.o(.text); - *libc.a:wsetup.o(.text); - *libc.a:dtoa.o(.text); - *libc.a:fflush.o(.text); - *libc.a:findfp.o(.text); - *libc.a:freer.o(.text); - *libc.a:mtrim.o(.text); - *libc.a:fvwrite.o(.text); - *libc.a:fwalk.o(.text); - *libc.a:locale.o(.text); - *libc.a:makebuf.o(.text); - *libc.a:mallocr.o(.text); - *libc.a:mbtowc_r.o(.text); - *libc.a:memchr.o(.text); - *libc.a:memmove.o(.text); - *libc.a:mlock.o(.text); - *libc.a:mprec.o(.text); - *libc.a:s_isinf.o(.text); - *libc.a:s_isnan.o(.text); - *libc.a:sbrkr.o(.text); - *libc.a:stdio.o(.text); - *libc.a:strlen.o(.text); - *libc.a:syscalls.o(.text); - *libc.a:writer.o(.text); - *libc.a:callocr.o(.text); - *libc.a:closer.o(.text); - *libc.a:errno.o(.text); - *libc.a:fstatr.o(.text); - *libc.a:libcfunc.o(.text); - *libc.a:lseekr.o(.text); - *libc.a:readr.o(.text); - } > ROM =0 - - .rodata : - ALIGN(4) - { - src/rom_header.o(.rodata); - src/rom_header_gf.o(.rodata); - src/main.o(.rodata); - gflib/bg.o(.rodata); - gflib/window.o(.rodata); - gflib/text.o(.rodata); - gflib/sprite.o(.rodata); - gflib/io_reg.o(.rodata); - gflib/string_util.o(.rodata); - src/link.o(.rodata); - src/link.o(.rodata.str1.4); - src/AgbRfu_LinkManager.o(.rodata); - src/link_rfu_3.o(.rodata); - src/link_rfu_2.o(.rodata); - src/link_rfu_2.o(.rodata.str1.4); - src/union_room.o(.rodata); - src/mystery_gift_menu.o(.rodata); - src/union_room_player_avatar.o(.rodata); - src/wireless_communication_status_screen.o(.rodata); - src/union_room_battle.o(.rodata); - src/mystery_gift.o(.rodata); - src/mystery_gift_view.o(.rodata); - src/mystery_gift_server.o(.rodata); - src/mystery_gift_client.o(.rodata); - src/mystery_gift_scripts.o(.rodata); - src/wonder_news.o(.rodata); - src/union_room_chat.o(.rodata); - src/berry_crush.o(.rodata); - src/berry_powder.o(.rodata); - src/dodrio_berry_picking.o(.rodata); - src/pokemon_jump.o(.rodata); - src/minigame_countdown.o(.rodata); - src/rtc.o(.rodata); - src/main_menu.o(.rodata); - src/battle_controllers.o(.rodata); - src/digit_obj_util.o(.rodata); - src/data.o(.rodata); - src/battle_bg.o(.rodata); - src/battle_main.o(.rodata); - src/battle_util.o(.rodata); - src/battle_z_move.o(.rodata); - src/battle_script_commands.o(.rodata); - src/battle_controller_player.o(.rodata); - src/battle_anim_smokescreen.o(.rodata); - src/battle_controller_opponent.o(.rodata); - src/battle_ai_switch_items.o(.rodata); - src/battle_controller_link_opponent.o(.rodata); - src/battle_debug.o(.rodata); - src/pokemon.o(.rodata); - src/trig.o(.rodata); - src/util.o(.rodata); - src/daycare.o(.rodata); - src/egg_hatch.o(.rodata); - src/battle_gfx_sfx_util.o(.rodata); - src/battle_interface.o(.rodata); - src/pokeball.o(.rodata); - src/trade.o(.rodata); - src/berry_blender.o(.rodata); - src/new_game.o(.rodata); - src/overworld.o(.rodata); - src/tilesets.o(.rodata); - data/maps.o(.rodata); - src/fieldmap.o(.rodata); - src/metatile_behavior.o(.rodata); - src/field_door.o(.rodata); - src/field_player_avatar.o(.rodata); - src/event_object_movement.o(.rodata); - src/follower_helper.o(.rodata); - src/text_window.o(.rodata); - src/scrcmd.o(.rodata); - src/field_control_avatar.o(.rodata); - src/coord_event_weather.o(.rodata); - src/field_tasks.o(.rodata); - src/reset_rtc_screen.o(.rodata); - src/start_menu.o(.rodata); - src/tileset_anims.o(.rodata); - src/palette.o(.rodata); - src/sound.o(.rodata); - src/battle_anim.o(.rodata); - src/battle_anim_mons.o(.rodata); - data/map_events.o(.rodata); - src/reshow_battle_screen.o(.rodata); - src/battle_anim_status_effects.o(.rodata); - src/title_screen.o(.rodata); - src/field_weather.o(.rodata); - src/field_weather_effect.o(.rodata); - src/field_screen_effect.o(.rodata); - src/battle_setup.o(.rodata); - src/cable_club.o(.rodata); - src/trainer_see.o(.rodata); - src/wild_encounter.o(.rodata); - src/field_effect.o(.rodata); - src/scanline_effect.o(.rodata); - src/option_menu.o(.rodata); - src/pokedex.o(.rodata); - src/trainer_card.o(.rodata); - src/frontier_pass.o(.rodata); - src/pokemon_storage_system.o(.rodata); - src/pokemon_icon.o(.rodata); - src/fldeff_cut.o(.rodata); - src/map_name_popup.o(.rodata); - src/item_menu_icons.o(.rodata); - src/battle_anim_mon_movement.o(.rodata); - src/item.o(.rodata); - src/contest.o(.rodata); - src/shop.o(.rodata); - src/fldeff_escalator.o(.rodata); - src/berry.o(.rodata); - src/script_menu.o(.rodata); - src/naming_screen.o(.rodata); - src/money.o(.rodata); - src/contest_effect.o(.rodata); - src/record_mixing.o(.rodata); - src/secret_base.o(.rodata); - src/tv.o(.rodata); - src/contest_util.o(.rodata); - src/script_pokemon_util.o(.rodata); - src/pokemon_size_record.o(.rodata) - src/fldeff_misc.o(.rodata); - src/field_special_scene.o(.rodata); - src/rotating_gate.o(.rodata); - src/contest_link.o(.rodata); - src/item_use.o(.rodata); - src/battle_anim_effects_1.o(.rodata); - src/battle_anim_effects_2.o(.rodata); - src/battle_anim_water.o(.rodata); - src/battle_anim_fire.o(.rodata); - src/battle_anim_electric.o(.rodata); - src/battle_anim_ice.o(.rodata); - src/battle_anim_fight.o(.rodata); - src/battle_anim_poison.o(.rodata); - src/battle_anim_flying.o(.rodata); - src/battle_anim_psychic.o(.rodata); - src/battle_anim_bug.o(.rodata); - src/battle_anim_rock.o(.rodata); - src/battle_anim_ghost.o(.rodata); - src/battle_anim_dragon.o(.rodata); - src/battle_anim_dark.o(.rodata); - src/battle_anim_ground.o(.rodata); - src/battle_anim_normal.o(.rodata); - src/battle_anim_utility_funcs.o(.rodata); - src/battle_anim_new.o(.rodata); - src/battle_intro.o(.rodata); - src/bike.o(.rodata); - src/easy_chat.o(.rodata); - src/mon_markings.o(.rodata); - src/mauville_old_man.o(.rodata); - src/mail.o(.rodata); - src/menu_helpers.o(.rodata); - src/heal_location.o(.rodata); - src/region_map.o(.rodata); - src/image_processing_effects.o(.rodata); - src/decoration.o(.rodata); - src/slot_machine.o(.rodata); - src/contest_painting.o(.rodata); - src/battle_ai_main.o(.rodata); - src/battle_ai_util.o(.rodata); - src/trader.o(.rodata); - src/starter_choose.o(.rodata); - src/wallclock.o(.rodata); - src/pokeblock.o(.rodata); - src/fldeff_flash.o(.rodata); - src/time_events.o(.rodata); - src/field_specials.o(.rodata); - src/battle_records.o(.rodata); - src/pokedex_area_screen.o(.rodata); - src/evolution_scene.o(.rodata); - src/roulette.o(.rodata); - src/pokedex_cry_screen.o(.rodata); - src/landmark.o(.rodata); - src/battle_transition.o(.rodata); - src/battle_controller_link_partner.o(.rodata); - src/battle_message.o(.rodata); - src/cable_car.o(.rodata); - src/save.o(.rodata); - src/field_effect_helpers.o(.rodata); - src/contest_ai.o(.rodata); - src/battle_anim_sound_tasks.o(.rodata); - src/battle_controller_safari.o(.rodata); - src/battle_anim_effects_3.o(.rodata); - src/move_relearner.o(.rodata); - src/roamer.o(.rodata); - src/battle_tower.o(.rodata); - src/use_pokeblock.o(.rodata); - src/battle_controller_wally.o(.rodata); - src/player_pc.o(.rodata); - src/intro.o(.rodata); - src/field_region_map.o(.rodata); - src/battle_anim_throw.o(.rodata); - src/hall_of_fame.o(.rodata); - src/credits.o(.rodata); - src/lottery_corner.o(.rodata); - src/diploma.o(.rodata); - src/strings.o(.rodata); - src/berry_tag_screen.o(.rodata); - src/mystery_event_menu.o(.rodata); - src/save_failed_screen.o(.rodata); - src/braille_puzzles.o(.rodata); - src/pokeblock_feed.o(.rodata); - src/clear_save_data_screen.o(.rodata); - src/intro_credits_graphics.o(.rodata); - src/evolution_graphics.o(.rodata); - src/bard_music.o(.rodata); - src/battle_tv.o(.rodata); - src/pokemon_animation.o(.rodata); - src/battle_controller_recorded_opponent.o(.rodata); - src/battle_controller_recorded_player.o(.rodata); - src/trainer_pokemon_sprites.o(.rodata); - src/lilycove_lady.o(.rodata); - src/battle_dome.o(.rodata); - src/battle_palace.o(.rodata); - src/match_call.o(.rodata); - src/menu.o(.rodata); - src/battle_factory_screen.o(.rodata); - src/apprentice.o(.rodata); - src/frontier_util.o(.rodata); - src/battle_arena.o(.rodata); - src/battle_factory.o(.rodata); - src/battle_pike.o(.rodata); - src/rotating_tile_puzzle.o(.rodata); - src/battle_pyramid.o(.rodata); - src/item_menu.o(.rodata); - src/list_menu.o(.rodata); - src/save_location.o(.rodata); - src/item_icon.o(.rodata); - src/party_menu.o(.rodata); - src/battle_tent.o(.rodata); - src/braille.o(.rodata); - src/multiboot.o(.rodata); - src/berry_fix_graphics.o(.rodata); - src/battle_controller_player_partner.o(.rodata); - src/mirage_tower.o(.rodata); - src/berry_fix_program.o(.rodata); - src/pokemon_summary_screen.o(.rodata); - src/pokedex_area_region_map.o(.rodata); - src/battle_pyramid_bag.o(.rodata); - src/pokenav.o(.rodata); - src/pokenav_main_menu.o(.rodata); - src/pokenav_list.o(.rodata); - src/pokenav_menu_handler.o(.rodata); - src/pokenav_menu_handler_gfx.o(.rodata); - src/pokenav_match_call_list.o(.rodata); - src/pokenav_match_call_gfx.o(.rodata); - src/pokenav_region_map.o(.rodata); - src/pokenav_conditions_gfx.o(.rodata); - src/pokenav_conditions_search_results.o(.rodata); - src/pokenav_ribbons_list.o(.rodata); - src/pokenav_ribbons_summary.o(.rodata); - src/pokenav_match_call_data.o(.rodata); - src/menu_specialized.o(.rodata); - src/ereader_helpers.o(.rodata); - src/faraway_island.o(.rodata); - src/ereader_screen.o(.rodata); - src/trainer_hill.o(.rodata); - src/rayquaza_scene.o(.rodata); - src/walda_phrase.o(.rodata); - src/gym_leader_rematch.o(.rodata); - src/battle_transition_frontier.o(.rodata); - src/text_input_strings.o(.rodata); - src/fonts.o(.rodata); - src/international_string_util.o(.rodata); - src/mystery_event_msg.o(.rodata); - data/mystery_gift.o(.rodata); - src/m4a_tables.o(.rodata); - data/sound_data.o(.rodata); - src/pokemon_sprite_visualizer.o(.rodata); - src/expansion_intro.o(.rodata); - } > ROM =0 - - song_data : - ALIGN(4) - { - sound/songs/midi/mus_dummy.o(.rodata); - sound/songs/midi/se_use_item.o(.rodata); - sound/songs/midi/se_pc_login.o(.rodata); - sound/songs/midi/se_pc_off.o(.rodata); - sound/songs/midi/se_pc_on.o(.rodata); - sound/songs/midi/se_select.o(.rodata); - sound/songs/se_win_open.o(.rodata); - sound/songs/se_wall_hit.o(.rodata); - sound/songs/midi/se_door.o(.rodata); - sound/songs/midi/se_exit.o(.rodata); - sound/songs/midi/se_ledge.o(.rodata); - sound/songs/midi/se_bike_bell.o(.rodata); - sound/songs/midi/se_not_effective.o(.rodata); - sound/songs/midi/se_effective.o(.rodata); - sound/songs/midi/se_super_effective.o(.rodata); - sound/songs/midi/se_ball_open.o(.rodata); - sound/songs/midi/se_faint.o(.rodata); - sound/songs/midi/se_flee.o(.rodata); - sound/songs/midi/se_sliding_door.o(.rodata); - sound/songs/midi/se_ship.o(.rodata); - sound/songs/midi/se_bang.o(.rodata); - sound/songs/midi/se_pin.o(.rodata); - sound/songs/midi/se_boo.o(.rodata); - sound/songs/midi/se_ball.o(.rodata); - sound/songs/midi/se_contest_place.o(.rodata); - sound/songs/midi/se_a.o(.rodata); - sound/songs/midi/se_i.o(.rodata); - sound/songs/midi/se_u.o(.rodata); - sound/songs/midi/se_e.o(.rodata); - sound/songs/midi/se_o.o(.rodata); - sound/songs/midi/se_n.o(.rodata); - sound/songs/midi/se_success.o(.rodata); - sound/songs/midi/se_failure.o(.rodata); - sound/songs/midi/se_exp.o(.rodata); - sound/songs/midi/se_bike_hop.o(.rodata); - sound/songs/midi/se_switch.o(.rodata); - sound/songs/midi/se_click.o(.rodata); - sound/songs/midi/se_fu_zaku.o(.rodata); - sound/songs/midi/se_contest_condition_lose.o(.rodata); - sound/songs/midi/se_lavaridge_fall_warp.o(.rodata); - sound/songs/midi/se_ice_stairs.o(.rodata); - sound/songs/midi/se_ice_break.o(.rodata); - sound/songs/midi/se_ice_crack.o(.rodata); - sound/songs/midi/se_fall.o(.rodata); - sound/songs/midi/se_unlock.o(.rodata); - sound/songs/midi/se_warp_in.o(.rodata); - sound/songs/midi/se_warp_out.o(.rodata); - sound/songs/midi/se_repel.o(.rodata); - sound/songs/midi/se_rotating_gate.o(.rodata); - sound/songs/midi/se_truck_move.o(.rodata); - sound/songs/midi/se_truck_stop.o(.rodata); - sound/songs/midi/se_truck_unload.o(.rodata); - sound/songs/midi/se_truck_door.o(.rodata); - sound/songs/midi/se_berry_blender.o(.rodata); - sound/songs/midi/se_card.o(.rodata); - sound/songs/midi/se_save.o(.rodata); - sound/songs/midi/se_ball_bounce_1.o(.rodata); - sound/songs/midi/se_ball_bounce_2.o(.rodata); - sound/songs/midi/se_ball_bounce_3.o(.rodata); - sound/songs/midi/se_ball_bounce_4.o(.rodata); - sound/songs/midi/se_ball_trade.o(.rodata); - sound/songs/midi/se_ball_throw.o(.rodata); - sound/songs/midi/se_note_c.o(.rodata); - sound/songs/midi/se_note_d.o(.rodata); - sound/songs/midi/se_note_e.o(.rodata); - sound/songs/midi/se_note_f.o(.rodata); - sound/songs/midi/se_note_g.o(.rodata); - sound/songs/midi/se_note_a.o(.rodata); - sound/songs/midi/se_note_b.o(.rodata); - sound/songs/midi/se_note_c_high.o(.rodata); - sound/songs/midi/se_puddle.o(.rodata); - sound/songs/midi/se_bridge_walk.o(.rodata); - sound/songs/midi/se_itemfinder.o(.rodata); - sound/songs/midi/se_ding_dong.o(.rodata); - sound/songs/midi/se_balloon_red.o(.rodata); - sound/songs/midi/se_balloon_blue.o(.rodata); - sound/songs/midi/se_balloon_yellow.o(.rodata); - sound/songs/midi/se_breakable_door.o(.rodata); - sound/songs/midi/se_mud_ball.o(.rodata); - sound/songs/midi/se_field_poison.o(.rodata); - sound/songs/midi/se_escalator.o(.rodata); - sound/songs/midi/se_thunderstorm.o(.rodata); - sound/songs/midi/se_thunderstorm_stop.o(.rodata); - sound/songs/midi/se_downpour.o(.rodata); - sound/songs/midi/se_downpour_stop.o(.rodata); - sound/songs/midi/se_rain.o(.rodata); - sound/songs/midi/se_rain_stop.o(.rodata); - sound/songs/midi/se_thunder.o(.rodata); - sound/songs/midi/se_thunder2.o(.rodata); - sound/songs/midi/se_elevator.o(.rodata); - sound/songs/midi/se_low_health.o(.rodata); - sound/songs/midi/se_exp_max.o(.rodata); - sound/songs/midi/se_roulette_ball.o(.rodata); - sound/songs/midi/se_roulette_ball2.o(.rodata); - sound/songs/midi/se_taillow_wing_flap.o(.rodata); - sound/songs/midi/se_shop.o(.rodata); - sound/songs/midi/se_contest_heart.o(.rodata); - sound/songs/midi/se_contest_curtain_rise.o(.rodata); - sound/songs/midi/se_contest_curtain_fall.o(.rodata); - sound/songs/midi/se_contest_icon_change.o(.rodata); - sound/songs/midi/se_contest_icon_clear.o(.rodata); - sound/songs/midi/se_contest_mons_turn.o(.rodata); - sound/songs/midi/se_shiny.o(.rodata); - sound/songs/midi/se_intro_blast.o(.rodata); - sound/songs/midi/se_mugshot.o(.rodata); - sound/songs/midi/se_applause.o(.rodata); - sound/songs/midi/se_vend.o(.rodata); - sound/songs/midi/se_orb.o(.rodata); - sound/songs/se_dex_scroll.o(.rodata); - sound/songs/se_dex_page.o(.rodata); - sound/songs/midi/se_pokenav_on.o(.rodata); - sound/songs/midi/se_pokenav_off.o(.rodata); - sound/songs/midi/se_dex_search.o(.rodata); - sound/songs/midi/se_egg_hatch.o(.rodata); - sound/songs/midi/se_ball_tray_enter.o(.rodata); - sound/songs/midi/se_ball_tray_ball.o(.rodata); - sound/songs/midi/se_ball_tray_exit.o(.rodata); - sound/songs/midi/se_glass_flute.o(.rodata); - sound/songs/se_m_thunderbolt.o(.rodata); - sound/songs/se_m_thunderbolt2.o(.rodata); - sound/songs/se_m_harden.o(.rodata); - sound/songs/se_m_nightmare.o(.rodata); - sound/songs/se_m_vital_throw.o(.rodata); - sound/songs/se_m_vital_throw2.o(.rodata); - sound/songs/se_m_bubble.o(.rodata); - sound/songs/se_m_bubble2.o(.rodata); - sound/songs/se_m_bubble3.o(.rodata); - sound/songs/se_m_rain_dance.o(.rodata); - sound/songs/midi/se_m_cut.o(.rodata); - sound/songs/se_m_string_shot.o(.rodata); - sound/songs/se_m_string_shot2.o(.rodata); - sound/songs/se_m_rock_throw.o(.rodata); - sound/songs/midi/se_m_gust.o(.rodata); - sound/songs/midi/se_m_gust2.o(.rodata); - sound/songs/midi/se_m_double_slap.o(.rodata); - sound/songs/se_m_double_team.o(.rodata); - sound/songs/midi/se_m_razor_wind.o(.rodata); - sound/songs/se_m_icy_wind.o(.rodata); - sound/songs/se_m_thunder_wave.o(.rodata); - sound/songs/midi/se_m_comet_punch.o(.rodata); - sound/songs/midi/se_m_mega_kick.o(.rodata); - sound/songs/midi/se_m_mega_kick2.o(.rodata); - sound/songs/se_m_crabhammer.o(.rodata); - sound/songs/midi/se_m_jump_kick.o(.rodata); - sound/songs/se_m_flame_wheel.o(.rodata); - sound/songs/se_m_flame_wheel2.o(.rodata); - sound/songs/se_m_flamethrower.o(.rodata); - sound/songs/midi/se_m_fire_punch.o(.rodata); - sound/songs/se_m_toxic.o(.rodata); - sound/songs/se_m_sacred_fire.o(.rodata); - sound/songs/se_m_sacred_fire2.o(.rodata); - sound/songs/se_m_ember.o(.rodata); - sound/songs/midi/se_m_take_down.o(.rodata); - sound/songs/se_m_blizzard.o(.rodata); - sound/songs/se_m_blizzard2.o(.rodata); - sound/songs/midi/se_m_scratch.o(.rodata); - sound/songs/midi/se_m_vicegrip.o(.rodata); - sound/songs/midi/se_m_wing_attack.o(.rodata); - sound/songs/midi/se_m_fly.o(.rodata); - sound/songs/midi/se_m_sand_attack.o(.rodata); - sound/songs/midi/se_m_razor_wind2.o(.rodata); - sound/songs/se_m_bite.o(.rodata); - sound/songs/midi/se_m_headbutt.o(.rodata); - sound/songs/se_m_surf.o(.rodata); - sound/songs/se_m_hydro_pump.o(.rodata); - sound/songs/se_m_whirlpool.o(.rodata); - sound/songs/midi/se_m_horn_attack.o(.rodata); - sound/songs/midi/se_m_tail_whip.o(.rodata); - sound/songs/se_m_mist.o(.rodata); - sound/songs/se_m_poison_powder.o(.rodata); - sound/songs/midi/se_m_bind.o(.rodata); - sound/songs/se_m_dragon_rage.o(.rodata); - sound/songs/se_m_sing.o(.rodata); - sound/songs/se_m_perish_song.o(.rodata); - sound/songs/midi/se_m_pay_day.o(.rodata); - sound/songs/se_m_dig.o(.rodata); - sound/songs/se_m_dizzy_punch.o(.rodata); - sound/songs/se_m_self_destruct.o(.rodata); - sound/songs/se_m_explosion.o(.rodata); - sound/songs/se_m_absorb_2.o(.rodata); - sound/songs/se_m_absorb.o(.rodata); - sound/songs/se_m_screech.o(.rodata); - sound/songs/se_m_bubble_beam.o(.rodata); - sound/songs/se_m_bubble_beam2.o(.rodata); - sound/songs/se_m_supersonic.o(.rodata); - sound/songs/se_m_belly_drum.o(.rodata); - sound/songs/se_m_metronome.o(.rodata); - sound/songs/se_m_bonemerang.o(.rodata); - sound/songs/se_m_lick.o(.rodata); - sound/songs/se_m_psybeam.o(.rodata); - sound/songs/se_m_faint_attack.o(.rodata); - sound/songs/midi/se_m_swords_dance.o(.rodata); - sound/songs/midi/se_m_leer.o(.rodata); - sound/songs/se_m_swagger.o(.rodata); - sound/songs/se_m_swagger2.o(.rodata); - sound/songs/se_m_heal_bell.o(.rodata); - sound/songs/se_m_confuse_ray.o(.rodata); - sound/songs/se_m_snore.o(.rodata); - sound/songs/se_m_brick_break.o(.rodata); - sound/songs/se_m_giga_drain.o(.rodata); - sound/songs/se_m_psybeam2.o(.rodata); - sound/songs/se_m_solar_beam.o(.rodata); - sound/songs/se_m_petal_dance.o(.rodata); - sound/songs/se_m_teleport.o(.rodata); - sound/songs/se_m_minimize.o(.rodata); - sound/songs/se_m_sketch.o(.rodata); - sound/songs/se_m_swift.o(.rodata); - sound/songs/se_m_reflect.o(.rodata); - sound/songs/se_m_barrier.o(.rodata); - sound/songs/se_m_detect.o(.rodata); - sound/songs/se_m_lock_on.o(.rodata); - sound/songs/se_m_moonlight.o(.rodata); - sound/songs/se_m_charm.o(.rodata); - sound/songs/se_m_charge.o(.rodata); - sound/songs/se_m_strength.o(.rodata); - sound/songs/se_m_hyper_beam.o(.rodata); - sound/songs/se_m_waterfall.o(.rodata); - sound/songs/se_m_reversal.o(.rodata); - sound/songs/se_m_acid_armor.o(.rodata); - sound/songs/se_m_sandstorm.o(.rodata); - sound/songs/se_m_tri_attack.o(.rodata); - sound/songs/se_m_tri_attack2.o(.rodata); - sound/songs/se_m_encore.o(.rodata); - sound/songs/se_m_encore2.o(.rodata); - sound/songs/se_m_baton_pass.o(.rodata); - sound/songs/se_m_milk_drink.o(.rodata); - sound/songs/se_m_attract.o(.rodata); - sound/songs/se_m_attract2.o(.rodata); - sound/songs/se_m_morning_sun.o(.rodata); - sound/songs/se_m_flatter.o(.rodata); - sound/songs/se_m_sand_tomb.o(.rodata); - sound/songs/se_m_grasswhistle.o(.rodata); - sound/songs/se_m_spit_up.o(.rodata); - sound/songs/se_m_dive.o(.rodata); - sound/songs/se_m_earthquake.o(.rodata); - sound/songs/se_m_twister.o(.rodata); - sound/songs/se_m_sweet_scent.o(.rodata); - sound/songs/se_m_yawn.o(.rodata); - sound/songs/se_m_sky_uppercut.o(.rodata); - sound/songs/se_m_stat_increase.o(.rodata); - sound/songs/se_m_heat_wave.o(.rodata); - sound/songs/se_m_uproar.o(.rodata); - sound/songs/se_m_hail.o(.rodata); - sound/songs/se_m_cosmic_power.o(.rodata); - sound/songs/se_m_teeter_dance.o(.rodata); - sound/songs/se_m_stat_decrease.o(.rodata); - sound/songs/se_m_haze.o(.rodata); - sound/songs/se_m_hyper_beam2.o(.rodata); - sound/songs/midi/se_rg_door.o(.rodata); - sound/songs/midi/se_rg_card_flip.o(.rodata); - sound/songs/midi/se_rg_card_flipping.o(.rodata); - sound/songs/midi/se_rg_card_open.o(.rodata); - sound/songs/midi/se_rg_bag_cursor.o(.rodata); - sound/songs/midi/se_rg_bag_pocket.o(.rodata); - sound/songs/midi/se_rg_ball_click.o(.rodata); - sound/songs/midi/se_rg_shop.o(.rodata); - sound/songs/midi/se_rg_ss_anne_horn.o(.rodata); - sound/songs/midi/se_rg_help_open.o(.rodata); - sound/songs/midi/se_rg_help_close.o(.rodata); - sound/songs/midi/se_rg_help_error.o(.rodata); - sound/songs/midi/se_rg_deoxys_move.o(.rodata); - sound/songs/midi/se_rg_poke_jump_success.o(.rodata); - sound/songs/midi/se_rg_poke_jump_failure.o(.rodata); - sound/songs/midi/se_pokenav_call.o(.rodata); - sound/songs/midi/se_pokenav_hang_up.o(.rodata); - sound/songs/midi/se_arena_timeup1.o(.rodata); - sound/songs/midi/se_arena_timeup2.o(.rodata); - sound/songs/midi/se_pike_curtain_close.o(.rodata); - sound/songs/midi/se_pike_curtain_open.o(.rodata); - sound/songs/midi/se_sudowoodo_shake.o(.rodata); - sound/songs/midi/mus_littleroot_test.o(.rodata); - sound/songs/midi/mus_gsc_route38.o(.rodata); - sound/songs/midi/mus_caught.o(.rodata); - sound/songs/midi/mus_victory_wild.o(.rodata); - sound/songs/midi/mus_victory_gym_leader.o(.rodata); - sound/songs/midi/mus_victory_league.o(.rodata); - sound/songs/midi/mus_c_comm_center.o(.rodata); - sound/songs/midi/mus_gsc_pewter.o(.rodata); - sound/songs/midi/mus_c_vs_legend_beast.o(.rodata); - sound/songs/midi/mus_route101.o(.rodata); - sound/songs/midi/mus_route110.o(.rodata); - sound/songs/midi/mus_route120.o(.rodata); - sound/songs/midi/mus_petalburg.o(.rodata); - sound/songs/midi/mus_oldale.o(.rodata); - sound/songs/midi/mus_gym.o(.rodata); - sound/songs/midi/mus_surf.o(.rodata); - sound/songs/midi/mus_petalburg_woods.o(.rodata); - sound/songs/midi/mus_level_up.o(.rodata); - sound/songs/midi/mus_heal.o(.rodata); - sound/songs/midi/mus_obtain_badge.o(.rodata); - sound/songs/midi/mus_obtain_item.o(.rodata); - sound/songs/midi/mus_evolved.o(.rodata); - sound/songs/midi/mus_obtain_tmhm.o(.rodata); - sound/songs/midi/mus_lilycove_museum.o(.rodata); - sound/songs/midi/mus_route122.o(.rodata); - sound/songs/midi/mus_oceanic_museum.o(.rodata); - sound/songs/midi/mus_evolution_intro.o(.rodata); - sound/songs/midi/mus_evolution.o(.rodata); - sound/songs/midi/mus_move_deleted.o(.rodata); - sound/songs/midi/mus_encounter_girl.o(.rodata); - sound/songs/midi/mus_encounter_male.o(.rodata); - sound/songs/midi/mus_abandoned_ship.o(.rodata); - sound/songs/midi/mus_fortree.o(.rodata); - sound/songs/midi/mus_birch_lab.o(.rodata); - sound/songs/midi/mus_b_tower_rs.o(.rodata); - sound/songs/midi/mus_encounter_swimmer.o(.rodata); - sound/songs/midi/mus_cave_of_origin.o(.rodata); - sound/songs/midi/mus_obtain_berry.o(.rodata); - sound/songs/midi/mus_awaken_legend.o(.rodata); - sound/songs/midi/mus_slots_jackpot.o(.rodata); - sound/songs/midi/mus_slots_win.o(.rodata); - sound/songs/midi/mus_too_bad.o(.rodata); - sound/songs/midi/mus_roulette.o(.rodata); - sound/songs/midi/mus_link_contest_p1.o(.rodata); - sound/songs/midi/mus_link_contest_p2.o(.rodata); - sound/songs/midi/mus_link_contest_p3.o(.rodata); - sound/songs/midi/mus_link_contest_p4.o(.rodata); - sound/songs/midi/mus_encounter_rich.o(.rodata); - sound/songs/midi/mus_verdanturf.o(.rodata); - sound/songs/midi/mus_rustboro.o(.rodata); - sound/songs/midi/mus_poke_center.o(.rodata); - sound/songs/midi/mus_route104.o(.rodata); - sound/songs/midi/mus_route119.o(.rodata); - sound/songs/midi/mus_cycling.o(.rodata); - sound/songs/midi/mus_poke_mart.o(.rodata); - sound/songs/midi/mus_littleroot.o(.rodata); - sound/songs/midi/mus_mt_chimney.o(.rodata); - sound/songs/midi/mus_encounter_female.o(.rodata); - sound/songs/midi/mus_lilycove.o(.rodata); - sound/songs/midi/mus_route111.o(.rodata); - sound/songs/midi/mus_help.o(.rodata); - sound/songs/midi/mus_underwater.o(.rodata); - sound/songs/midi/mus_victory_trainer.o(.rodata); - sound/songs/midi/mus_title.o(.rodata); - sound/songs/midi/mus_intro.o(.rodata); - sound/songs/midi/mus_encounter_may.o(.rodata); - sound/songs/midi/mus_encounter_intense.o(.rodata); - sound/songs/midi/mus_encounter_cool.o(.rodata); - sound/songs/midi/mus_route113.o(.rodata); - sound/songs/midi/mus_encounter_aqua.o(.rodata); - sound/songs/midi/mus_follow_me.o(.rodata); - sound/songs/midi/mus_encounter_brendan.o(.rodata); - sound/songs/midi/mus_ever_grande.o(.rodata); - sound/songs/midi/mus_encounter_suspicious.o(.rodata); - sound/songs/midi/mus_victory_aqua_magma.o(.rodata); - sound/songs/midi/mus_cable_car.o(.rodata); - sound/songs/midi/mus_game_corner.o(.rodata); - sound/songs/midi/mus_dewford.o(.rodata); - sound/songs/midi/mus_safari_zone.o(.rodata); - sound/songs/midi/mus_victory_road.o(.rodata); - sound/songs/midi/mus_aqua_magma_hideout.o(.rodata); - sound/songs/midi/mus_sailing.o(.rodata); - sound/songs/midi/mus_mt_pyre.o(.rodata); - sound/songs/midi/mus_slateport.o(.rodata); - sound/songs/midi/mus_mt_pyre_exterior.o(.rodata); - sound/songs/midi/mus_school.o(.rodata); - sound/songs/midi/mus_hall_of_fame.o(.rodata); - sound/songs/midi/mus_fallarbor.o(.rodata); - sound/songs/midi/mus_sealed_chamber.o(.rodata); - sound/songs/midi/mus_contest_winner.o(.rodata); - sound/songs/midi/mus_contest.o(.rodata); - sound/songs/midi/mus_encounter_magma.o(.rodata); - sound/songs/midi/mus_intro_battle.o(.rodata); - sound/songs/midi/mus_abnormal_weather.o(.rodata); - sound/songs/midi/mus_weather_groudon.o(.rodata); - sound/songs/midi/mus_sootopolis.o(.rodata); - sound/songs/midi/mus_contest_results.o(.rodata); - sound/songs/midi/mus_hall_of_fame_room.o(.rodata); - sound/songs/midi/mus_trick_house.o(.rodata); - sound/songs/midi/mus_encounter_twins.o(.rodata); - sound/songs/midi/mus_encounter_elite_four.o(.rodata); - sound/songs/midi/mus_encounter_hiker.o(.rodata); - sound/songs/midi/mus_contest_lobby.o(.rodata); - sound/songs/midi/mus_encounter_interviewer.o(.rodata); - sound/songs/midi/mus_encounter_champion.o(.rodata); - sound/songs/midi/mus_credits.o(.rodata); - sound/songs/midi/mus_end.o(.rodata); - sound/songs/midi/mus_b_frontier.o(.rodata); - sound/songs/midi/mus_b_arena.o(.rodata); - sound/songs/midi/mus_obtain_b_points.o(.rodata); - sound/songs/midi/mus_register_match_call.o(.rodata); - sound/songs/midi/mus_b_pyramid.o(.rodata); - sound/songs/midi/mus_b_pyramid_top.o(.rodata); - sound/songs/midi/mus_b_palace.o(.rodata); - sound/songs/midi/mus_rayquaza_appears.o(.rodata); - sound/songs/midi/mus_b_tower.o(.rodata); - sound/songs/midi/mus_obtain_symbol.o(.rodata); - sound/songs/midi/mus_b_dome.o(.rodata); - sound/songs/midi/mus_b_pike.o(.rodata); - sound/songs/midi/mus_b_factory.o(.rodata); - sound/songs/midi/mus_vs_rayquaza.o(.rodata); - sound/songs/midi/mus_vs_frontier_brain.o(.rodata); - sound/songs/midi/mus_vs_mew.o(.rodata); - sound/songs/midi/mus_b_dome_lobby.o(.rodata); - sound/songs/midi/mus_vs_wild.o(.rodata); - sound/songs/midi/mus_vs_aqua_magma.o(.rodata); - sound/songs/midi/mus_vs_trainer.o(.rodata); - sound/songs/midi/mus_vs_gym_leader.o(.rodata); - sound/songs/midi/mus_vs_champion.o(.rodata); - sound/songs/midi/mus_vs_regi.o(.rodata); - sound/songs/midi/mus_vs_kyogre_groudon.o(.rodata); - sound/songs/midi/mus_vs_rival.o(.rodata); - sound/songs/midi/mus_vs_elite_four.o(.rodata); - sound/songs/midi/mus_vs_aqua_magma_leader.o(.rodata); - sound/songs/midi/mus_rg_follow_me.o(.rodata); - sound/songs/midi/mus_rg_game_corner.o(.rodata); - sound/songs/midi/mus_rg_rocket_hideout.o(.rodata); - sound/songs/midi/mus_rg_gym.o(.rodata); - sound/songs/midi/mus_rg_jigglypuff.o(.rodata); - sound/songs/midi/mus_rg_intro_fight.o(.rodata); - sound/songs/midi/mus_rg_title.o(.rodata); - sound/songs/midi/mus_rg_cinnabar.o(.rodata); - sound/songs/midi/mus_rg_lavender.o(.rodata); - sound/songs/midi/mus_rg_heal.o(.rodata); - sound/songs/midi/mus_rg_cycling.o(.rodata); - sound/songs/midi/mus_rg_encounter_rocket.o(.rodata); - sound/songs/midi/mus_rg_encounter_girl.o(.rodata); - sound/songs/midi/mus_rg_encounter_boy.o(.rodata); - sound/songs/midi/mus_rg_hall_of_fame.o(.rodata); - sound/songs/midi/mus_rg_viridian_forest.o(.rodata); - sound/songs/midi/mus_rg_mt_moon.o(.rodata); - sound/songs/midi/mus_rg_poke_mansion.o(.rodata); - sound/songs/midi/mus_rg_credits.o(.rodata); - sound/songs/midi/mus_rg_route1.o(.rodata); - sound/songs/midi/mus_rg_route24.o(.rodata); - sound/songs/midi/mus_rg_route3.o(.rodata); - sound/songs/midi/mus_rg_route11.o(.rodata); - sound/songs/midi/mus_rg_victory_road.o(.rodata); - sound/songs/midi/mus_rg_vs_gym_leader.o(.rodata); - sound/songs/midi/mus_rg_vs_trainer.o(.rodata); - sound/songs/midi/mus_rg_vs_wild.o(.rodata); - sound/songs/midi/mus_rg_vs_champion.o(.rodata); - sound/songs/midi/mus_rg_pallet.o(.rodata); - sound/songs/midi/mus_rg_oak_lab.o(.rodata); - sound/songs/midi/mus_rg_oak.o(.rodata); - sound/songs/midi/mus_rg_poke_center.o(.rodata); - sound/songs/midi/mus_rg_ss_anne.o(.rodata); - sound/songs/midi/mus_rg_surf.o(.rodata); - sound/songs/midi/mus_rg_poke_tower.o(.rodata); - sound/songs/midi/mus_rg_silph.o(.rodata); - sound/songs/midi/mus_rg_fuchsia.o(.rodata); - sound/songs/midi/mus_rg_celadon.o(.rodata); - sound/songs/midi/mus_rg_victory_trainer.o(.rodata); - sound/songs/midi/mus_rg_victory_wild.o(.rodata); - sound/songs/midi/mus_rg_victory_gym_leader.o(.rodata); - sound/songs/midi/mus_rg_vermillion.o(.rodata); - sound/songs/midi/mus_rg_pewter.o(.rodata); - sound/songs/midi/mus_rg_encounter_rival.o(.rodata); - sound/songs/midi/mus_rg_rival_exit.o(.rodata); - sound/songs/midi/mus_rg_dex_rating.o(.rodata); - sound/songs/midi/mus_rg_obtain_key_item.o(.rodata); - sound/songs/midi/mus_rg_caught_intro.o(.rodata); - sound/songs/midi/mus_rg_photo.o(.rodata); - sound/songs/midi/mus_rg_game_freak.o(.rodata); - sound/songs/midi/mus_rg_caught.o(.rodata); - sound/songs/midi/mus_rg_new_game_instruct.o(.rodata); - sound/songs/midi/mus_rg_new_game_intro.o(.rodata); - sound/songs/midi/mus_rg_new_game_exit.o(.rodata); - sound/songs/midi/mus_rg_poke_jump.o(.rodata); - sound/songs/midi/mus_rg_union_room.o(.rodata); - sound/songs/midi/mus_rg_net_center.o(.rodata); - sound/songs/midi/mus_rg_mystery_gift.o(.rodata); - sound/songs/midi/mus_rg_berry_pick.o(.rodata); - sound/songs/midi/mus_rg_sevii_cave.o(.rodata); - sound/songs/midi/mus_rg_teachy_tv_show.o(.rodata); - sound/songs/midi/mus_rg_sevii_route.o(.rodata); - sound/songs/midi/mus_rg_sevii_dungeon.o(.rodata); - sound/songs/midi/mus_rg_sevii_123.o(.rodata); - sound/songs/midi/mus_rg_sevii_45.o(.rodata); - sound/songs/midi/mus_rg_sevii_67.o(.rodata); - sound/songs/midi/mus_rg_poke_flute.o(.rodata); - sound/songs/midi/mus_rg_vs_deoxys.o(.rodata); - sound/songs/midi/mus_rg_vs_mewtwo.o(.rodata); - sound/songs/midi/mus_rg_vs_legend.o(.rodata); - sound/songs/midi/mus_rg_encounter_gym_leader.o(.rodata); - sound/songs/midi/mus_rg_encounter_deoxys.o(.rodata); - sound/songs/midi/mus_rg_trainer_tower.o(.rodata); - sound/songs/midi/mus_rg_slow_pallet.o(.rodata); - sound/songs/midi/mus_rg_teachy_tv_menu.o(.rodata); - sound/songs/midi/ph_trap_blend.o(.rodata); - sound/songs/midi/ph_trap_held.o(.rodata); - sound/songs/midi/ph_trap_solo.o(.rodata); - sound/songs/midi/ph_face_blend.o(.rodata); - sound/songs/midi/ph_face_held.o(.rodata); - sound/songs/midi/ph_face_solo.o(.rodata); - sound/songs/midi/ph_cloth_blend.o(.rodata); - sound/songs/midi/ph_cloth_held.o(.rodata); - sound/songs/midi/ph_cloth_solo.o(.rodata); - sound/songs/midi/ph_dress_blend.o(.rodata); - sound/songs/midi/ph_dress_held.o(.rodata); - sound/songs/midi/ph_dress_solo.o(.rodata); - sound/songs/midi/ph_fleece_blend.o(.rodata); - sound/songs/midi/ph_fleece_held.o(.rodata); - sound/songs/midi/ph_fleece_solo.o(.rodata); - sound/songs/midi/ph_kit_blend.o(.rodata); - sound/songs/midi/ph_kit_held.o(.rodata); - sound/songs/midi/ph_kit_solo.o(.rodata); - sound/songs/midi/ph_price_blend.o(.rodata); - sound/songs/midi/ph_price_held.o(.rodata); - sound/songs/midi/ph_price_solo.o(.rodata); - sound/songs/midi/ph_lot_blend.o(.rodata); - sound/songs/midi/ph_lot_held.o(.rodata); - sound/songs/midi/ph_lot_solo.o(.rodata); - sound/songs/midi/ph_goat_blend.o(.rodata); - sound/songs/midi/ph_goat_held.o(.rodata); - sound/songs/midi/ph_goat_solo.o(.rodata); - sound/songs/midi/ph_thought_blend.o(.rodata); - sound/songs/midi/ph_thought_held.o(.rodata); - sound/songs/midi/ph_thought_solo.o(.rodata); - sound/songs/midi/ph_choice_blend.o(.rodata); - sound/songs/midi/ph_choice_held.o(.rodata); - sound/songs/midi/ph_choice_solo.o(.rodata); - sound/songs/midi/ph_mouth_blend.o(.rodata); - sound/songs/midi/ph_mouth_held.o(.rodata); - sound/songs/midi/ph_mouth_solo.o(.rodata); - sound/songs/midi/ph_foot_blend.o(.rodata); - sound/songs/midi/ph_foot_held.o(.rodata); - sound/songs/midi/ph_foot_solo.o(.rodata); - sound/songs/midi/ph_goose_blend.o(.rodata); - sound/songs/midi/ph_goose_held.o(.rodata); - sound/songs/midi/ph_goose_solo.o(.rodata); - sound/songs/midi/ph_strut_blend.o(.rodata); - sound/songs/midi/ph_strut_held.o(.rodata); - sound/songs/midi/ph_strut_solo.o(.rodata); - sound/songs/midi/ph_cure_blend.o(.rodata); - sound/songs/midi/ph_cure_held.o(.rodata); - sound/songs/midi/ph_cure_solo.o(.rodata); - sound/songs/midi/ph_nurse_blend.o(.rodata); - sound/songs/midi/ph_nurse_held.o(.rodata); - sound/songs/midi/ph_nurse_solo.o(.rodata); - } > ROM =0 - - lib_rodata : - SUBALIGN(4) - { - src/m4a.o(.rodata); - src/agb_flash.o(.rodata); - src/agb_flash_1m.o(.rodata); - src/agb_flash_mx.o(.rodata); - src/agb_flash_le.o(.rodata); - src/siirtc.o(.rodata); - src/librfu_rfu.o(.rodata); - src/librfu_sio32id.o(.rodata); - *libgcc.a:_divdi3.o(.rodata); - *libgcc.a:_udivdi3.o(.rodata); - *libc.a:memcpy.o(.rodata); - *libc.a:memset.o(.rodata); - *libc.a:strcmp.o(.rodata); - *libc.a:strcpy.o(.rodata); - *libc.a:impure.o(.rodata); - *libc.a:vsprintf.o(.rodata); - *libc.a:vfprintf.o(.rodata); - *libc.a:wsetup.o(.rodata); - *libc.a:dtoa.o(.rodata); - *libc.a:fflush.o(.rodata); - *libc.a:findfp.o(.rodata); - *libc.a:freer.o(.rodata); - *libc.a:mtrim.o(.rodata); - *libc.a:fvwrite.o(.rodata); - *libc.a:fwalk.o(.rodata); - *libc.a:locale.o(.rodata); - *libc.a:makebuf.o(.rodata); - *libc.a:mallocr.o(.rodata); - *libc.a:mbtowc_r.o(.rodata); - *libc.a:memchr.o(.rodata); - *libc.a:memmove.o(.rodata); - *libc.a:mlock.o(.rodata); - *libc.a:mprec.o(.rodata); - *libc.a:s_isinf.o(.rodata); - *libc.a:s_isnan.o(.rodata); - *libc.a:sbrkr.o(.rodata); - *libc.a:stdio.o(.rodata); - *libc.a:strlen.o(.rodata); - *libc.a:syscalls.o(.rodata); - *libc.a:writer.o(.rodata); - *libc.a:callocr.o(.rodata); - *libc.a:closer.o(.rodata); - *libc.a:errno.o(.rodata); - *libc.a:fstatr.o(.rodata); - *libc.a:libcfunc.o(.rodata); - *libc.a:lseekr.o(.rodata); - *libc.a:readr.o(.rodata); - src/libisagbprn.o(.rodata); - } > ROM =0 - - multiboot_data : - ALIGN(4) - { - data/multiboot_ereader.o(.rodata); - data/multiboot_berry_glitch_fix.o(.rodata); - data/multiboot_pokemon_colosseum.o(.rodata); - } > ROM =0 - - gfx_data : - ALIGN(4) - { - src/graphics.o(.rodata); - } > ROM =0 - - extra : - ALIGN(4) - { - src/*.o(.text); - gflib/*.o(.text); - src/*.o(.rodata); - gflib/*.o(.rodata); - data/*.o(.rodata); - } > ROM = 0 - - .data.iwram : - ALIGN(4) - { - __iwram_lma = .; - . = . + (__iwram_end - __iwram_start); - } > ROM = 0 - - .data.ewram : - ALIGN(4) - { - __ewram_lma = .; - . = . + (__ewram_end - __ewram_start); - } > ROM = 0 - - __rom_end = .; - - /* DWARF debug sections. - Symbols in the DWARF debugging sections are relative to the beginning - of the section so we begin them at 0. */ - - /* DWARF 1 */ - .debug 0 : { *(.debug) } - .line 0 : { *(.line) } - - /* GNU DWARF 1 extensions */ - .debug_srcinfo 0 : { *(.debug_srcinfo) } - .debug_sfnames 0 : { *(.debug_sfnames) } - - /* DWARF 1.1 and DWARF 2 */ - .debug_aranges 0 : { *(.debug_aranges) } - .debug_pubnames 0 : { *(.debug_pubnames) } - - /* DWARF 2 */ - .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } - .debug_abbrev 0 : { *(.debug_abbrev) } - .debug_line 0 : { *(.debug_line) } - .debug_frame 0 : { *(.debug_frame) } - .debug_str 0 : { *(.debug_str) } - .debug_loc 0 : { *(.debug_loc) } - .debug_macinfo 0 : { *(.debug_macinfo) } - - /* Discard everything not specifically mentioned above. */ - /DISCARD/ : - { - *(*); - } -} diff --git a/spritesheet_rules.mk b/spritesheet_rules.mk index a50f48c70762..03e6b8a3b104 100644 --- a/spritesheet_rules.mk +++ b/spritesheet_rules.mk @@ -2976,6 +2976,9 @@ $(POKEMONGFXDIR)/noivern/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/xerneas/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 8 -mheight 8 +$(POKEMONGFXDIR)/xerneas/active/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 8 -mheight 8 + $(POKEMONGFXDIR)/yveltal/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 8 -mheight 8 diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 63bab46ec92d..b0229cd9266d 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -174,7 +174,7 @@ static u32 GetAiFlags(u16 trainerId) flags = GetTrainerAIFlagsFromId(trainerId); } - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { flags |= AI_FLAG_DOUBLE_BATTLE; } @@ -224,7 +224,7 @@ void BattleAI_SetupFlags(void) { AI_THINKING_STRUCT->aiFlags[B_POSITION_PLAYER_RIGHT] = GetAiFlags(gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)); } - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsAiVsAiBattle()) + else if (IsDoubleBattle() && IsAiVsAiBattle()) { AI_THINKING_STRUCT->aiFlags[B_POSITION_PLAYER_RIGHT] = AI_THINKING_STRUCT->aiFlags[B_POSITION_PLAYER_LEFT]; } @@ -275,7 +275,7 @@ u32 BattleAI_ChooseMoveOrAction(void) { u32 ret; - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!IsDoubleBattle()) ret = ChooseMoveOrAction_Singles(sBattler_AI); else ret = ChooseMoveOrAction_Doubles(sBattler_AI); @@ -323,7 +323,7 @@ void Ai_InitPartyStruct(void) // Save first 2 or 4(in doubles) mons CopyBattlerDataToAIParty(B_POSITION_PLAYER_LEFT, B_SIDE_PLAYER); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) CopyBattlerDataToAIParty(B_POSITION_PLAYER_RIGHT, B_SIDE_PLAYER); // If player's partner is AI, save opponent mons @@ -826,7 +826,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) return score; SetTypeBeforeUsingMove(move, battlerAtk); - GET_MOVE_TYPE(move, moveType); + moveType = GetMoveType(move); if (gMovesInfo[move].powderMove && !IsAffectedByPowder(battlerDef, aiData->abilities[battlerDef], aiData->holdEffects[battlerDef])) RETURN_SCORE_MINUS(10); @@ -2050,7 +2050,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } /*if (AI_THINKING_STRUCT->aiFlags[battlerAtk] == AI_SCRIPT_CHECK_BAD_MOVE //Only basic AI - && IS_DOUBLE_BATTLE) //Make the regular AI know how to use Protect minimally in Doubles + && IsDoubleBattle()) //Make the regular AI know how to use Protect minimally in Doubles { u8 shouldProtect = ShouldProtect(battlerAtk, battlerDef, move); if (shouldProtect == USE_PROTECT || shouldProtect == PROTECT_FROM_FOES) @@ -2749,7 +2749,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) u32 predictedMove = aiData->predictedMoves[battlerDef]; SetTypeBeforeUsingMove(move, battlerAtk); - GET_MOVE_TYPE(move, moveType); + moveType = GetMoveType(move); // check what effect partner is using if (aiData->partnerMove != 0) @@ -4056,7 +4056,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(DECENT_EFFECT); // Force 'em out next turn break; default: - if (move != MOVE_BESTOW && aiData->items[battlerAtk] == ITEM_NONE) + if (gMovesInfo[gCurrentMove].effect != EFFECT_BESTOW && aiData->items[battlerAtk] == ITEM_NONE) { switch (aiData->holdEffects[battlerDef]) { @@ -5047,10 +5047,10 @@ static s32 AI_PreferBatonPass(u32 battlerAtk, u32 battlerDef, u32 move, s32 scor static s32 AI_HPAware(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { u32 effect = gMovesInfo[move].effect; - u32 moveType = gMovesInfo[move].type; + u32 moveType = 0; SetTypeBeforeUsingMove(move, battlerAtk); - GET_MOVE_TYPE(move, moveType); + moveType = GetMoveType(move); if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) { diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index a0a44cb98d46..e1e25b527920 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -82,17 +82,17 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult) return FALSE; // Double Battles aren't included in AI_FLAG_SMART_MON_CHOICE. Defaults to regular switch in logic - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) return FALSE; opposingPosition = BATTLE_OPPOSITE(GetBattlerPosition(battler)); opposingBattler = GetBattlerAtPosition(opposingPosition); // Gets types of player (opposingBattler) and computer (battler) - atkType1 = gBattleMons[opposingBattler].type1; - atkType2 = gBattleMons[opposingBattler].type2; - defType1 = gBattleMons[battler].type1; - defType2 = gBattleMons[battler].type2; + atkType1 = gBattleMons[opposingBattler].types[0]; + atkType2 = gBattleMons[opposingBattler].types[1]; + defType1 = gBattleMons[battler].types[0]; + defType2 = gBattleMons[battler].types[1]; // Check AI moves for damage dealt for (i = 0; i < MAX_MON_MOVES; i++) @@ -148,8 +148,8 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult) playerMove = gBattleMons[opposingBattler].moves[i]; if (playerMove != MOVE_NONE && gMovesInfo[playerMove].power != 0) { - struct SimulatedDamage dmg = AI_CalcDamage(playerMove, opposingBattler, battler, &effectiveness, FALSE, weather, DMG_ROLL_HIGHEST); - if (dmg.expected > maxDamageTaken) + damageTaken = AI_CalcDamage(playerMove, opposingBattler, battler, &effectiveness, FALSE, weather, DMG_ROLL_HIGHEST).expected; + if (damageTaken > maxDamageTaken) maxDamageTaken = damageTaken; } } @@ -172,7 +172,7 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult) return FALSE; // Start assessing whether or not mon has bad odds - // Jump straight to swtiching out in cases where mon gets OHKO'd + // Jump straight to switching out in cases where mon gets OHKO'd if (((getsOneShot && gBattleMons[opposingBattler].speed > gBattleMons[battler].speed) // If the player OHKOs and outspeeds OR OHKOs, doesn't outspeed but isn't 2HKO'd || (getsOneShot && gBattleMons[opposingBattler].speed <= gBattleMons[battler].speed && maxDamageDealt < gBattleMons[opposingBattler].hp / 2)) && (gBattleMons[battler].hp >= gBattleMons[battler].maxHP / 2 // And the current mon has at least 1/2 their HP, or 1/4 HP and Regenerator @@ -180,7 +180,7 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult) && gBattleMons[battler].hp >= gBattleMons[battler].maxHP / 4))) { // 50% chance to stay in regardless - if (Random() % 2 == 0) + if (!RandomPercentage(RNG_AI_HASBADODDS, 50)) return FALSE; // Switch mon out @@ -203,7 +203,7 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult) return FALSE; // 50% chance to stay in regardless - if (Random() % 2 == 0) + if (!RandomPercentage(RNG_AI_HASBADODDS, 50)) return FALSE; // Switch mon out @@ -242,7 +242,7 @@ static bool32 ShouldSwitchIfWonderGuard(u32 battler, bool32 emitResult) struct Pokemon *party = NULL; u16 move; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) return FALSE; opposingPosition = BATTLE_OPPOSITE(GetBattlerPosition(battler)); @@ -318,7 +318,7 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler, bool32 emitResult) if (IS_MOVE_STATUS(gLastLandedMoves[battler])) return FALSE; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { battlerIn1 = battler; if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))]) @@ -707,7 +707,7 @@ static bool32 HasSuperEffectiveMoveAgainstOpponents(u32 battler, bool32 noRng) } } } - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!IsDoubleBattle()) return FALSE; opposingBattler = GetBattlerAtPosition(BATTLE_PARTNER(opposingPosition)); @@ -765,7 +765,7 @@ static bool32 FindMonWithFlagsAndSuperEffective(u32 battler, u16 flags, u32 modu if (IS_MOVE_STATUS(gLastLandedMoves[battler])) return FALSE; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { battlerIn1 = battler; if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))]) @@ -846,7 +846,7 @@ static bool32 CanMonSurviveHazardSwitchin(u32 battler) // Battler will faint to hazards, check to see if another mon can clear them if (hazardDamage > battlerHp) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { battlerIn1 = battler; if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))]) @@ -881,7 +881,9 @@ static bool32 CanMonSurviveHazardSwitchin(u32 battler) for (j = 0; j < MAX_MON_MOVES; j++) { aiMove = GetMonData(&party[i], MON_DATA_MOVE1 + j, NULL); - if (aiMove == MOVE_RAPID_SPIN || aiMove == MOVE_DEFOG || aiMove == MOVE_MORTAL_SPIN || aiMove == MOVE_TIDY_UP) + if (MoveHasAdditionalEffectSelf(aiMove, MOVE_EFFECT_RAPID_SPIN) + || (B_DEFOG_EFFECT_CLEARING >= GEN_6 && gMovesInfo[aiMove].effect == EFFECT_DEFOG) + || gMovesInfo[aiMove].effect == EFFECT_TIDY_UP) { // Have a mon that can clear the hazards, so switching out is okay return TRUE; @@ -1023,7 +1025,7 @@ bool32 ShouldSwitch(u32 battler, bool32 emitResult) availableToSwitch = 0; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { battlerIn1 = battler; if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))]) @@ -1140,7 +1142,7 @@ void AI_TrySwitchOrUseItem(u32 battler) s32 monToSwitchId = AI_DATA->mostSuitableMonId[battler]; if (monToSwitchId == PARTY_SIZE) { - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!IsDoubleBattle()) { battlerIn1 = GetBattlerAtPosition(battlerPosition); battlerIn2 = battlerIn1; @@ -1236,8 +1238,8 @@ static u32 GetBestMonTypeMatchup(struct Pokemon *party, int firstId, int lastId, u16 species = GetMonData(&party[i], MON_DATA_SPECIES); uq4_12_t typeEffectiveness = UQ_4_12(1.0); - u8 atkType1 = gBattleMons[opposingBattler].type1; - u8 atkType2 = gBattleMons[opposingBattler].type2; + u8 atkType1 = gBattleMons[opposingBattler].types[0]; + u8 atkType2 = gBattleMons[opposingBattler].types[1]; u8 defType1 = gSpeciesInfo[species].types[0]; u8 defType2 = gSpeciesInfo[species].types[1]; @@ -1318,7 +1320,7 @@ static u32 GetBestMonDmg(struct Pokemon *party, int firstId, int lastId, u8 inva return bestMonId; } -static bool32 IsMonGrounded(u16 heldItemEffect, u32 ability, u8 type1, u8 type2) +bool32 IsMonGrounded(u16 heldItemEffect, u32 ability, u8 type1, u8 type2) { // List that makes mon not grounded if (type1 == TYPE_FLYING || type2 == TYPE_FLYING || ability == ABILITY_LEVITATE @@ -1337,7 +1339,7 @@ static bool32 IsMonGrounded(u16 heldItemEffect, u32 ability, u8 type1, u8 type2) // Gets hazard damage static u32 GetSwitchinHazardsDamage(u32 battler, struct BattlePokemon *battleMon) { - u8 defType1 = battleMon->type1, defType2 = battleMon->type2, tSpikesLayers; + u8 defType1 = battleMon->types[0], defType2 = battleMon->types[1], tSpikesLayers; u16 heldItemEffect = ItemId_GetHoldEffect(battleMon->item); u32 maxHP = battleMon->maxHP, ability = battleMon->ability, status = battleMon->status1; u32 spikesDamage = 0, tSpikesDamage = 0, hazardDamage = 0; @@ -1404,7 +1406,7 @@ static s32 GetSwitchinWeatherImpact(void) if (holdEffect != HOLD_EFFECT_SAFETY_GOGGLES && ability != ABILITY_MAGIC_GUARD && ability != ABILITY_OVERCOAT) { if ((gBattleWeather & B_WEATHER_HAIL) - && (AI_DATA->switchinCandidate.battleMon.type1 != TYPE_ICE || AI_DATA->switchinCandidate.battleMon.type2 != TYPE_ICE) + && (AI_DATA->switchinCandidate.battleMon.types[0] != TYPE_ICE || AI_DATA->switchinCandidate.battleMon.types[1] != TYPE_ICE) && ability != ABILITY_SNOW_CLOAK && ability != ABILITY_ICE_BODY) { weatherImpact = maxHP / 16; @@ -1412,9 +1414,9 @@ static s32 GetSwitchinWeatherImpact(void) weatherImpact = 1; } else if ((gBattleWeather & B_WEATHER_SANDSTORM) - && (AI_DATA->switchinCandidate.battleMon.type1 != TYPE_GROUND && AI_DATA->switchinCandidate.battleMon.type2 != TYPE_GROUND - && AI_DATA->switchinCandidate.battleMon.type1 != TYPE_ROCK && AI_DATA->switchinCandidate.battleMon.type2 != TYPE_ROCK - && AI_DATA->switchinCandidate.battleMon.type1 != TYPE_STEEL && AI_DATA->switchinCandidate.battleMon.type2 != TYPE_STEEL + && (AI_DATA->switchinCandidate.battleMon.types[0] != TYPE_GROUND && AI_DATA->switchinCandidate.battleMon.types[1] != TYPE_GROUND + && AI_DATA->switchinCandidate.battleMon.types[0] != TYPE_ROCK && AI_DATA->switchinCandidate.battleMon.types[1] != TYPE_ROCK + && AI_DATA->switchinCandidate.battleMon.types[0] != TYPE_STEEL && AI_DATA->switchinCandidate.battleMon.types[1] != TYPE_STEEL && ability != ABILITY_SAND_VEIL && ability != ABILITY_SAND_RUSH && ability != ABILITY_SAND_FORCE)) { weatherImpact = maxHP / 16; @@ -1465,7 +1467,7 @@ static u32 GetSwitchinRecurringHealing(void) // Items if (ability != ABILITY_KLUTZ) { - if (holdEffect == HOLD_EFFECT_BLACK_SLUDGE && (AI_DATA->switchinCandidate.battleMon.type1 == TYPE_POISON || AI_DATA->switchinCandidate.battleMon.type2 == TYPE_POISON)) + if (holdEffect == HOLD_EFFECT_BLACK_SLUDGE && (AI_DATA->switchinCandidate.battleMon.types[0] == TYPE_POISON || AI_DATA->switchinCandidate.battleMon.types[1] == TYPE_POISON)) { recurringHealing = maxHP / 16; if (recurringHealing == 0) @@ -1499,7 +1501,7 @@ static u32 GetSwitchinRecurringDamage(void) // Items if (ability != ABILITY_MAGIC_GUARD && ability != ABILITY_KLUTZ) { - if (holdEffect == HOLD_EFFECT_BLACK_SLUDGE && AI_DATA->switchinCandidate.battleMon.type1 != TYPE_POISON && AI_DATA->switchinCandidate.battleMon.type2 != TYPE_POISON) + if (holdEffect == HOLD_EFFECT_BLACK_SLUDGE && AI_DATA->switchinCandidate.battleMon.types[0] != TYPE_POISON && AI_DATA->switchinCandidate.battleMon.types[1] != TYPE_POISON) { passiveDamage = maxHP / 8; if (passiveDamage == 0) @@ -1524,7 +1526,7 @@ static u32 GetSwitchinRecurringDamage(void) // Gets one turn of status damage static u32 GetSwitchinStatusDamage(u32 battler) { - u8 defType1 = AI_DATA->switchinCandidate.battleMon.type1, defType2 = AI_DATA->switchinCandidate.battleMon.type2; + u8 defType1 = AI_DATA->switchinCandidate.battleMon.types[0], defType2 = AI_DATA->switchinCandidate.battleMon.types[1]; u8 tSpikesLayers = gSideTimers[GetBattlerSide(battler)].toxicSpikesAmount; u16 heldItemEffect = ItemId_GetHoldEffect(AI_DATA->switchinCandidate.battleMon.item); u32 status = AI_DATA->switchinCandidate.battleMon.status1, ability = AI_DATA->switchinCandidate.battleMon.ability, maxHP = AI_DATA->switchinCandidate.battleMon.maxHP; @@ -1706,7 +1708,7 @@ static u16 GetSwitchinTypeMatchup(u32 opposingBattler, struct BattlePokemon batt // Check type matchup u16 typeEffectiveness = UQ_4_12(1.0); u8 atkType1 = gSpeciesInfo[gBattleMons[opposingBattler].species].types[0], atkType2 = gSpeciesInfo[gBattleMons[opposingBattler].species].types[1], - defType1 = battleMon.type1, defType2 = battleMon.type2; + defType1 = battleMon.types[0], defType2 = battleMon.types[1]; // Multiply type effectiveness by a factor depending on type matchup typeEffectiveness = uq4_12_multiply(typeEffectiveness, (GetTypeModifier(atkType1, defType1))); @@ -2002,7 +2004,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, if (aceMonId != PARTY_SIZE && (gMovesInfo[gLastUsedMove].effect == EFFECT_HIT_ESCAPE || gMovesInfo[gLastUsedMove].effect == EFFECT_PARTING_SHOT || gMovesInfo[gLastUsedMove].effect == EFFECT_BATON_PASS)) return aceMonId; - + return PARTY_SIZE; } @@ -2040,7 +2042,7 @@ u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd) if (gBattleTypeFlags & BATTLE_TYPE_ARENA) return gBattlerPartyIndexes[battler] + 1; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { battlerIn1 = battler; if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))]) @@ -2074,7 +2076,7 @@ u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd) // Split ideal mon decision between after previous mon KO'd (prioritize offensive options) and after switching active mon out (prioritize defensive options), and expand the scope of both. // Only use better mon selection if AI_FLAG_SMART_MON_CHOICES is set for the trainer. - if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SMART_MON_CHOICES && !(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) // Double Battles aren't included in AI_FLAG_SMART_MON_CHOICE. Defaults to regular switch in logic + if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SMART_MON_CHOICES && !IsDoubleBattle()) // Double Battles aren't included in AI_FLAG_SMART_MON_CHOICE. Defaults to regular switch in logic { bestMonId = GetBestMonIntegrated(party, firstId, lastId, battler, opposingBattler, battlerIn1, battlerIn2, switchAfterMonKOd); return bestMonId; diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 5505bbed183d..03adcb198228 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -165,8 +165,8 @@ void SaveBattlerData(u32 battlerId) AI_THINKING_STRUCT->saved[battlerId].moves[i] = gBattleMons[battlerId].moves[i]; } // Save and restore types even for AI controlled battlers in case it gets changed during move evaluation process. - AI_THINKING_STRUCT->saved[battlerId].types[0] = gBattleMons[battlerId].type1; - AI_THINKING_STRUCT->saved[battlerId].types[1] = gBattleMons[battlerId].type2; + AI_THINKING_STRUCT->saved[battlerId].types[0] = gBattleMons[battlerId].types[0]; + AI_THINKING_STRUCT->saved[battlerId].types[1] = gBattleMons[battlerId].types[1]; } static bool32 ShouldFailForIllusion(u32 illusionSpecies, u32 battlerId) @@ -218,11 +218,11 @@ void SetBattlerData(u32 battlerId) if (illusionSpecies != SPECIES_NONE && ShouldFailForIllusion(illusionSpecies, battlerId)) { // If the battler's type has not been changed, AI assumes the types of the illusion mon. - if (gBattleMons[battlerId].type1 == gSpeciesInfo[species].types[0] - && gBattleMons[battlerId].type2 == gSpeciesInfo[species].types[1]) + if (gBattleMons[battlerId].types[0] == gSpeciesInfo[species].types[0] + && gBattleMons[battlerId].types[1] == gSpeciesInfo[species].types[1]) { - gBattleMons[battlerId].type1 = gSpeciesInfo[illusionSpecies].types[0]; - gBattleMons[battlerId].type2 = gSpeciesInfo[illusionSpecies].types[1]; + gBattleMons[battlerId].types[0] = gSpeciesInfo[illusionSpecies].types[0]; + gBattleMons[battlerId].types[1] = gSpeciesInfo[illusionSpecies].types[1]; } species = illusionSpecies; } @@ -262,8 +262,8 @@ void RestoreBattlerData(u32 battlerId) for (i = 0; i < 4; i++) gBattleMons[battlerId].moves[i] = AI_THINKING_STRUCT->saved[battlerId].moves[i]; } - gBattleMons[battlerId].type1 = AI_THINKING_STRUCT->saved[battlerId].types[0]; - gBattleMons[battlerId].type2 = AI_THINKING_STRUCT->saved[battlerId].types[1]; + gBattleMons[battlerId].types[0] = AI_THINKING_STRUCT->saved[battlerId].types[0]; + gBattleMons[battlerId].types[1] = AI_THINKING_STRUCT->saved[battlerId].types[1]; } u32 GetHealthPercentage(u32 battlerId) @@ -354,7 +354,7 @@ bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, u32 category) && !(unusable & gBitTable[i])) { SetTypeBeforeUsingMove(moves[i], attacker); - GET_MOVE_TYPE(moves[i], moveType); + moveType = GetMoveType(moves[i]); if (CalcTypeEffectivenessMultiplier(moves[i], moveType, attacker, target, AI_DATA->abilities[target], FALSE) != 0) usable |= gBitTable[i]; } @@ -400,10 +400,9 @@ static inline s32 DmgRoll(s32 dmg) bool32 IsDamageMoveUnusable(u32 move, u32 battlerAtk, u32 battlerDef) { - s32 moveType; struct AiLogicData *aiData = AI_DATA; u32 battlerDefAbility; - GET_MOVE_TYPE(move, moveType); + u32 moveType = GetMoveType(move); if (DoesBattlerIgnoreAbilityChecks(aiData->abilities[battlerAtk], move)) battlerDefAbility = ABILITY_NONE; @@ -547,7 +546,7 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u gBattleStruct->dynamicMoveType = 0; SetTypeBeforeUsingMove(move, battlerAtk); - GET_MOVE_TYPE(move, moveType); + moveType = GetMoveType(move); effectivenessMultiplier = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, aiData->abilities[battlerDef], FALSE); if (gMovesInfo[move].power) @@ -577,13 +576,13 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u if (critChanceIndex > 1) // Consider crit damage only if a move has at least +2 crit chance { s32 nonCritDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower, - effectivenessMultiplier, weather, FALSE, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + effectivenessMultiplier, weather, FALSE, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); s32 critDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower, - effectivenessMultiplier, weather, TRUE, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + effectivenessMultiplier, weather, TRUE, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); u32 critOdds = GetCritHitOdds(critChanceIndex); // With critOdds getting closer to 1, dmg gets closer to critDmg. @@ -596,20 +595,33 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u else if (critChanceIndex == -2) // Guaranteed critical { s32 critDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower, - effectivenessMultiplier, weather, TRUE, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + effectivenessMultiplier, weather, TRUE, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); simDamage.expected = GetDamageByRollType(critDmg, rollType); simDamage.minimum = LowestRollDmg(critDmg); } else { - s32 nonCritDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower, - effectivenessMultiplier, weather, FALSE, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); - + s32 nonCritDmg = 0; + if (gMovesInfo[move].effect == EFFECT_TRIPLE_KICK) + { + for (gMultiHitCounter = gMovesInfo[move].strikeCount; gMultiHitCounter > 0; gMultiHitCounter--) // The global is used to simulate actual damage done + { + nonCritDmg += CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower, + effectivenessMultiplier, weather, FALSE, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + } + } + else + { + nonCritDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower, + effectivenessMultiplier, weather, FALSE, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + } simDamage.expected = GetDamageByRollType(nonCritDmg, rollType); simDamage.minimum = LowestRollDmg(nonCritDmg); } @@ -993,7 +1005,7 @@ uq4_12_t AI_GetTypeEffectiveness(u32 move, u32 battlerAtk, u32 battlerDef) gBattleStruct->dynamicMoveType = 0; SetTypeBeforeUsingMove(move, battlerAtk); - GET_MOVE_TYPE(move, moveType); + moveType = GetMoveType(move); typeEffectiveness = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], FALSE); RestoreBattlerData(battlerAtk); @@ -3027,7 +3039,7 @@ bool32 AnyPartyMemberStatused(u32 battlerId, bool32 checkSoundproof) else party = gEnemyParty; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { battlerOnField1 = gBattlerPartyIndexes[battlerId]; battlerOnField2 = gBattlerPartyIndexes[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battlerId)))]; @@ -3418,7 +3430,7 @@ s32 CountUsablePartyMons(u32 battlerId) else party = gEnemyParty; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { battlerOnField1 = gBattlerPartyIndexes[battlerId]; battlerOnField2 = gBattlerPartyIndexes[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battlerId)))]; @@ -3829,7 +3841,7 @@ bool32 AI_MoveMakesContact(u32 ability, u32 holdEffect, u32 move) bool32 ShouldUseZMove(u32 battlerAtk, u32 battlerDef, u32 chosenMove) { // simple logic. just upgrades chosen move to z move if possible, unless regular move would kill opponent - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && battlerDef == BATTLE_PARTNER(battlerAtk)) + if ((IsDoubleBattle()) && battlerDef == BATTLE_PARTNER(battlerAtk)) return FALSE; // don't use z move on partner if (HasTrainerUsedGimmick(battlerAtk, GIMMICK_Z_MOVE)) return FALSE; // can't use z move twice diff --git a/src/battle_anim.c b/src/battle_anim.c index 71813ddf46bf..9f6648220e6c 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -798,7 +798,7 @@ static void Cmd_end(void) // Debugging - ensure no hanging mon bg tasks if (FuncIsActiveTask(Task_UpdateMonBg)) DebugPrintf("Move %d animation still has Task_UpdateMonBg active at the end!", gAnimMoveIndex); - + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 256); if (!IsContest()) { @@ -2145,12 +2145,9 @@ static void Cmd_stopsound(void) static void Cmd_jumpifmovetypeequal(void) { - u8 moveType; const u8 *type = sBattleAnimScriptPtr + 1; sBattleAnimScriptPtr += 2; - GET_MOVE_TYPE(gCurrentMove, moveType); - - if (*type != moveType) + if (*type != GetMoveType(gCurrentMove)) sBattleAnimScriptPtr += 4; else sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr); diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index b917cdc9a57a..e333d2db40f5 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -3101,6 +3101,17 @@ const struct SpriteTemplate gPsyshockSmokeSpriteTemplate = .callback = AnimSpriteOnMonPos, }; +const struct SpriteTemplate gChainBindingSpriteTemplate = +{ + .tileTag = ANIM_TAG_PURPLE_CHAIN, + .paletteTag = ANIM_TAG_PURPLE_CHAIN, + .oam = &gOamData_AffineNormal_ObjNormal_64x32, + .anims = sAnims_ConstrictBinding, + .images = NULL, + .affineAnims = sAffineAnims_ConstrictBinding, + .callback = AnimConstrictBinding, +}; + // functions static void AnimGrassKnot(struct Sprite *sprite) { @@ -3317,7 +3328,7 @@ static void AnimSolarBeamSmallOrb(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, TRUE); - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gAnimMoveIndex == MOVE_CORE_ENFORCER) + if (IsDoubleBattle() && gAnimMoveIndex == MOVE_CORE_ENFORCER) { CoreEnforcerLoadBeamTarget(sprite); } @@ -6567,11 +6578,11 @@ void PrepareDoubleTeamAnim(u32 taskId, u32 animBattler, bool32 forAllySwitch) gSprites[spriteId].sBattlerFlank = (animBattler != ANIM_ATTACKER); else gSprites[spriteId].sBattlerFlank = (animBattler == ANIM_ATTACKER); - + // correct direction on opponent side if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) gSprites[spriteId].sBattlerFlank ^= 1; - + gSprites[spriteId].callback = AnimDoubleTeam; task->tBlendSpritesCount++; } @@ -6603,7 +6614,7 @@ static void ReloadBattlerSprites(u32 battler, struct Pokemon *party) UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], mon, HEALTHBOX_ALL); // If battler has an indicator for a gimmick, hide the sprite until the move animation finishes. UpdateIndicatorVisibilityAndType(gHealthboxSpriteIds[battler], TRUE); - + // Try to recreate shadow sprite if (gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId < MAX_SPRITES) { @@ -7229,6 +7240,14 @@ static const union AffineAnimCmd sCompressTargetHorizontallyAffineAnimCmds[] = AFFINEANIMCMD_END, }; +static const union AffineAnimCmd sCompressTargetHorizontallyAffineAnimCmdsFast[] = +{ + AFFINEANIMCMD_FRAME(32, 0, 0, 16), //Compress + AFFINEANIMCMD_FRAME(0, 0, 0, 32), + AFFINEANIMCMD_FRAME(-32, 0, 0, 16), + AFFINEANIMCMD_END, +}; + static void AnimTask_CompressTargetStep(u8 taskId) { struct Task* task = &gTasks[taskId]; @@ -7245,6 +7264,14 @@ void AnimTask_CompressTargetHorizontally(u8 taskId) task->func = AnimTask_CompressTargetStep; } +void AnimTask_CompressTargetHorizontallyFast(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); + PrepareAffineAnimInTaskData(task, spriteId, sCompressTargetHorizontallyAffineAnimCmdsFast); + task->func = AnimTask_CompressTargetStep; +} + void AnimTask_CreateSmallSteelBeamOrbs(u8 taskId) { if (--gTasks[taskId].data[0] == -1) diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c index 3324d276fdc8..b33c0a8bb652 100755 --- a/src/battle_anim_effects_2.c +++ b/src/battle_anim_effects_2.c @@ -1726,7 +1726,7 @@ void AnimTask_AirCutterProjectile(u8 taskId) 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) + if (IsDoubleBattle() && IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget))) { SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &targetX, &targetY); @@ -3854,7 +3854,7 @@ static void AnimPerishSongMusicNote_Step2(struct Sprite *sprite) static void AnimGuardRing(struct Sprite *sprite) { - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) + if (IsDoubleBattle() && IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) { SetAverageBattlerPositions(gBattleAnimAttacker, FALSE, &sprite->x, &sprite->y); sprite->y += 40; diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index 542a179d6a1c..e0b482040988 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -17,8 +17,6 @@ #include "util.h" #include "constants/battle_anim.h" -#define IS_DOUBLE_BATTLE() ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) - extern const struct OamData gOamData_AffineNormal_ObjNormal_64x64; static void AnimTranslateLinear_WithFollowup_SetCornerVecX(struct Sprite *sprite); @@ -663,12 +661,6 @@ static void UNUSED TranslateSpriteToBattleAttackerPos(struct Sprite *sprite) #undef sStartY #undef sTargetY -static void UNUSED EndUnkPaletteAnim(struct Sprite *sprite) -{ - PaletteStruct_ResetById(sprite->data[5]); - DestroySpriteAndMatrix(sprite); -} - void RunStoredCallbackWhenAffineAnimEnds(struct Sprite *sprite) { if (sprite->affineAnimEnded) @@ -874,11 +866,6 @@ bool8 IsBattlerSpritePresent(u8 battlerId) } } -bool8 IsDoubleBattle(void) -{ - return IS_DOUBLE_BATTLE(); -} - #define BG_ANIM_PAL_1 8 #define BG_ANIM_PAL_2 9 #define BG_ANIM_PAL_CONTEST 14 diff --git a/src/battle_anim_new.c b/src/battle_anim_new.c index f023859b5940..a704a73f404a 100644 --- a/src/battle_anim_new.c +++ b/src/battle_anim_new.c @@ -99,6 +99,7 @@ static void SpriteCB_GlacialLance_Step1(struct Sprite* sprite); static void SpriteCB_GlacialLance_Step2(struct Sprite* sprite); static void SpriteCB_GlacialLance(struct Sprite* sprite); static void SpriteCB_TripleArrowKick(struct Sprite* sprite); +static void AnimMakingItRain(struct Sprite *sprite); // const data // general @@ -7234,6 +7235,51 @@ const struct SpriteTemplate gBitterBladeImpactTemplate = .callback = AnimClawSlash }; +// Make It Rain +const struct SpriteTemplate gMakingItRainTemplate = +{ + .tileTag = ANIM_TAG_COIN, + .paletteTag = ANIM_TAG_COIN, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gCoinAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMakingItRain, +}; + +const struct SpriteTemplate gRedExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_RED_EXPLOSION, + .paletteTag = ANIM_TAG_RED_EXPLOSION, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos, +}; + +const struct SpriteTemplate gBloodMoonOnslaughtSpriteTemplate = +{ + .tileTag = ANIM_TAG_BEAM, + .paletteTag = ANIM_TAG_BEAM, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sArrowRaidOnslaughtAffineAnimTable, + .callback = AnimAssistPawprint +}; + +const struct SpriteTemplate gMoonUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_BLOOD_MOON, + .paletteTag = ANIM_TAG_BLOOD_MOON, + .oam = &gOamData_AffineOff_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimWeatherBallUp, +}; + // functions //general void AnimTask_IsTargetPartner(u8 taskId) @@ -7250,7 +7296,7 @@ static u8 LoadBattleAnimTarget(u8 arg) { u8 battler; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { switch (gBattleAnimArgs[arg]) { @@ -7281,7 +7327,7 @@ static u8 LoadBattleAnimTarget(u8 arg) static u8 GetProperCentredCoord(u8 battler, u8 coordType) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) return (GetBattlerSpriteCoord2(battler, coordType) + GetBattlerSpriteCoord2(BATTLE_PARTNER(battler), coordType)) / 2; return GetBattlerSpriteCoord(battler, coordType); @@ -7471,14 +7517,14 @@ static void SpriteCB_SpriteToCentreOfSide(struct Sprite *sprite) if (gBattleAnimArgs[2] == 0) //Attacker { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) InitSpritePosToAnimAttackersCentre(sprite, var); else InitSpritePosToAnimAttacker(sprite, var); } else { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) InitSpritePosToAnimTargetsCentre(sprite, var); else InitSpritePosToAnimTarget(sprite, var); @@ -7562,7 +7608,7 @@ static void SpriteCB_GrowingSuperpower(struct Sprite *sprite) static void SpriteCB_CentredSpiderWeb(struct Sprite *sprite) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) InitSpritePosToAnimTargetsCentre(sprite, FALSE); else InitSpritePosToAnimTarget(sprite, FALSE); @@ -7576,14 +7622,14 @@ static void SpriteCB_CoreEnforcerHits(struct Sprite *sprite) if (gBattleAnimArgs[2] == 0) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) InitSpritePosToAnimAttackersCentre(sprite, FALSE); else InitSpritePosToAnimAttacker(sprite, FALSE); } else { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) InitSpritePosToAnimTargetsCentre(sprite, FALSE); else InitSpritePosToAnimTarget(sprite, FALSE); @@ -7595,7 +7641,7 @@ static void SpriteCB_CoreEnforcerHits(struct Sprite *sprite) static void SpriteCB_CoreEnforcerBeam(struct Sprite *sprite) { - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!IsDoubleBattle()) { AnimSolarBeamBigOrb(sprite); } @@ -7867,14 +7913,14 @@ void SpriteCB_RandomCentredHits(struct Sprite *sprite) if (gBattleAnimArgs[0] == 0) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) InitSpritePosToAnimAttackersCentre(sprite, FALSE); else InitSpritePosToAnimAttacker(sprite, FALSE); } else { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) InitSpritePosToAnimTargetsCentre(sprite, FALSE); else InitSpritePosToAnimTarget(sprite, FALSE); @@ -8179,7 +8225,7 @@ static void SpriteCB_BeamUpStep(struct Sprite *sprite) static void SpriteCB_CentredElectricity(struct Sprite *sprite) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) InitSpritePosToAnimTargetsCentre(sprite, FALSE); else InitSpritePosToAnimTarget(sprite, FALSE); @@ -9219,3 +9265,23 @@ void AnimTask_StickySyrup(u8 taskId) gBattleAnimArgs[0] = gAnimDisableStructPtr->syrupBombIsShiny; DestroyAnimVisualTask(taskId); } + +static void AnimMakingItRain(struct Sprite *sprite) +{ + if (gBattleAnimArgs[3] != 0) + SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &sprite->x, &sprite->y); //coin shower on target + + sprite->x += gBattleAnimArgs[0]; + sprite->y += 14; + StartSpriteAnim(sprite, gBattleAnimArgs[1]); + AnimateSprite(sprite); + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->data[2] = 4; + sprite->data[3] = 16; + sprite->data[4] = -70; + sprite->data[5] = gBattleAnimArgs[2]; + StoreSpriteCallbackInData6(sprite, AnimFallingRock_Step); + sprite->callback = TranslateSpriteInEllipse; + sprite->callback(sprite); +} diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index a5dc6f3af137..b555711933a9 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -581,7 +581,7 @@ static void OpponentHandleChooseMove(u32 battler) if (GetBattlerMoveTargetType(battler, move) & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER)) BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (battler << 8)); - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + else if (IsDoubleBattle()) { do { target = GetBattlerAtPosition(Random() & 2); @@ -653,7 +653,7 @@ static void OpponentHandleChoosePokemon(u32 battler) { s32 battler1, battler2, firstId, lastId; - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!IsDoubleBattle()) { battler2 = battler1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); } diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 6dcea9eb98c1..8760252c67ef 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -44,6 +44,7 @@ #include "level_caps.h" #include "menu.h" #include "pokemon_summary_screen.h" +#include "type_icons.h" static void PlayerBufferExecCompleted(u32 battler); static void PlayerHandleLoadMonSprite(u32 battler); @@ -59,7 +60,6 @@ static void PlayerHandlePrintString(u32 battler); static void PlayerHandlePrintSelectionString(u32 battler); static void PlayerHandleChooseAction(u32 battler); static void PlayerHandleYesNoBox(u32 battler); -static void PlayerHandleChooseMove(u32 battler); static void PlayerHandleChooseItem(u32 battler); static void PlayerHandleChoosePokemon(u32 battler); static void PlayerHandleCmd23(u32 battler); @@ -81,14 +81,11 @@ static void PlayerHandleEndLinkBattle(u32 battler); static void PlayerHandleBattleDebug(u32 battler); static void PlayerBufferRunCommand(u32 battler); -static void HandleInputChooseTarget(u32 battler); -static void HandleInputChooseMove(u32 battler); static void MoveSelectionDisplayPpNumber(u32 battler); static void MoveSelectionDisplayPpString(u32 battler); static void MoveSelectionDisplayMoveType(u32 battler); static void MoveSelectionDisplayMoveNames(u32 battler); static void MoveSelectionDisplayMoveDescription(u32 battler); -static void HandleMoveSwitching(u32 battler); static void SwitchIn_HandleSoundAndEnd(u32 battler); static void WaitForMonSelection(u32 battler); static void CompleteWhenChoseItem(u32 battler); @@ -382,7 +379,7 @@ static void HandleInputChooseAction(u32 battler) } else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) { - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle() && GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT && !(gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) @@ -426,7 +423,7 @@ static void HandleInputChooseAction(u32 battler) } } -static void HandleInputChooseTarget(u32 battler) +void HandleInputChooseTarget(u32 battler) { s32 i; static const u8 identities[MAX_BATTLERS_COUNT] = {B_POSITION_PLAYER_LEFT, B_POSITION_PLAYER_RIGHT, B_POSITION_OPPONENT_RIGHT, B_POSITION_OPPONENT_LEFT}; @@ -662,7 +659,7 @@ static void TryShowAsTarget(u32 battler) } } -static void HandleInputChooseMove(u32 battler) +void HandleInputChooseMove(u32 battler) { u16 moveTarget; u32 canSelectTarget = 0; @@ -968,7 +965,7 @@ static u32 UNUSED HandleMoveInputUnused(u32 battler) return var; } -static void HandleMoveSwitching(u32 battler) +void HandleMoveSwitching(u32 battler) { u8 perMovePPBonuses[MAX_MON_MOVES]; struct ChooseMoveStruct moveStruct; @@ -1716,15 +1713,14 @@ static void MoveSelectionDisplayMoveType(u32 battler) u8 type; u32 speciesId; struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]); - txtPtr = StringCopy(gDisplayedStringBattle, gText_MoveInterfaceType); - type = gMovesInfo[moveInfo->moves[gMoveSelectionCursor[battler]]].type; if (moveInfo->moves[gMoveSelectionCursor[battler]] == MOVE_TERA_BLAST) { if (IsGimmickSelected(battler, GIMMICK_TERA) || GetActiveGimmick(battler) == GIMMICK_TERA) type = GetBattlerTeraType(battler); + end = StringCopy(txtPtr, gTypesInfo[type].name); } else if (moveInfo->moves[gMoveSelectionCursor[battler]] == MOVE_IVY_CUDGEL) { @@ -1733,22 +1729,34 @@ static void MoveSelectionDisplayMoveType(u32 battler) if (speciesId == SPECIES_OGERPON_WELLSPRING_MASK || speciesId == SPECIES_OGERPON_WELLSPRING_MASK_TERA || speciesId == SPECIES_OGERPON_HEARTHFLAME_MASK || speciesId == SPECIES_OGERPON_HEARTHFLAME_MASK_TERA || speciesId == SPECIES_OGERPON_CORNERSTONE_MASK || speciesId == SPECIES_OGERPON_CORNERSTONE_MASK_TERA) - type = gBattleMons[battler].type2; + type = gBattleMons[battler].types[1]; + end = StringCopy(txtPtr, gTypesInfo[type].name); } // Max Guard is a Normal-type move else if (gMovesInfo[moveInfo->moves[gMoveSelectionCursor[battler]]].category == DAMAGE_CATEGORY_STATUS && (GetActiveGimmick(battler) == GIMMICK_DYNAMAX || IsGimmickSelected(battler, GIMMICK_DYNAMAX))) { type = TYPE_NORMAL; + end = StringCopy(txtPtr, gTypesInfo[type].name); } else if (moveInfo->moves[gMoveSelectionCursor[battler]] == MOVE_TERA_STARSTORM) { if (gBattleMons[battler].species == SPECIES_TERAPAGOS_STELLAR || (IsGimmickSelected(battler, GIMMICK_TERA) && gBattleMons[battler].species == SPECIES_TERAPAGOS_TERASTAL)) type = TYPE_STELLAR; + end = StringCopy(txtPtr, gTypesInfo[type].name); + } + else if (P_SHOW_DYNAMIC_TYPES) + { + struct Pokemon *mon = &gPlayerParty[gBattlerPartyIndexes[battler]]; + type = CheckDynamicMoveType(mon, moveInfo->moves[gMoveSelectionCursor[battler]], battler); + end = StringCopy(txtPtr, gTypesInfo[type].name); + } + else + { + end = StringCopy(txtPtr, gTypesInfo[type].name); } - end = StringCopy(txtPtr, gTypesInfo[type].name); PrependFontIdToFit(txtPtr, end, FONT_NORMAL, WindowWidthPx(B_WIN_MOVE_TYPE) - 25); BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_TYPE); } @@ -2064,7 +2072,7 @@ static void PlayerHandleYesNoBox(u32 battler) } } -static void HandleChooseMoveAfterDma3(u32 battler) +void HandleChooseMoveAfterDma3(u32 battler) { if (!IsDma3ManagerBusyWithBgCopy()) { @@ -2086,7 +2094,7 @@ static void PlayerChooseMoveInBattlePalace(u32 battler) } } -static void PlayerHandleChooseMove(u32 battler) +void PlayerHandleChooseMove(u32 battler) { if (gBattleTypeFlags & BATTLE_TYPE_PALACE) { @@ -2114,6 +2122,7 @@ static void PlayerHandleChooseMove(u32 battler) void InitMoveSelectionsVarsAndStrings(u32 battler) { + LoadTypeIcons(battler); MoveSelectionDisplayMoveNames(battler); gMultiUsePlayerCursor = 0xFF; MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); diff --git a/src/battle_controllers.c b/src/battle_controllers.c index 230c3464dd32..e11406831b24 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -175,7 +175,7 @@ static void InitSinglePlayerBtlControllers(void) gBattlerPartyIndexes[3] = 3; } } - else if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + else if (!IsDoubleBattle()) { gBattleMainFunc = BeginBattleIntro; @@ -417,7 +417,7 @@ static void InitLinkBtlControllers(void) s32 i; u8 multiplayerId; - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!IsDoubleBattle()) { if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER) { @@ -442,7 +442,7 @@ static void InitLinkBtlControllers(void) gBattlersCount = 2; } } - else if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + else if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && IsDoubleBattle()) { if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER) { @@ -610,9 +610,10 @@ static void InitLinkBtlControllers(void) bool32 IsValidForBattle(struct Pokemon *mon) { u32 species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG); - return (species != SPECIES_NONE && species != SPECIES_EGG - && GetMonData(mon, MON_DATA_HP) != 0 - && GetMonData(mon, MON_DATA_IS_EGG) == FALSE); + return (species != SPECIES_NONE + && species != SPECIES_EGG + && GetMonData(mon, MON_DATA_HP) != 0 + && GetMonData(mon, MON_DATA_IS_EGG) == FALSE); } static void SetBattlePartyIds(void) diff --git a/src/battle_debug.c b/src/battle_debug.c index 4aefb2b1ff11..b088aa73ba8a 100644 --- a/src/battle_debug.c +++ b/src/battle_debug.c @@ -1670,7 +1670,7 @@ static void PrintSecondaryEntries(struct BattleDebugMenu *data) case LIST_ITEM_TYPES: for (i = 0; i < 3; i++) { - u8 *types = &gBattleMons[data->battlerId].type1; + u8 *types = &gBattleMons[data->battlerId].types[0]; PadString(gTypesInfo[types[i]].name, text); printer.currentY = printer.y = (i * yMultiplier) + sSecondaryListTemplate.upText_Y; @@ -2070,9 +2070,9 @@ static void SetUpModifyArrows(struct BattleDebugMenu *data) data->modifyArrows.minValue = 0; data->modifyArrows.maxValue = NUMBER_OF_MON_TYPES - 1; data->modifyArrows.maxDigits = 2; - data->modifyArrows.modifiedValPtr = (u8 *)((&gBattleMons[data->battlerId].type1) + data->currentSecondaryListItemId); + data->modifyArrows.modifiedValPtr = (u8 *)((&gBattleMons[data->battlerId].types[0]) + data->currentSecondaryListItemId); data->modifyArrows.typeOfVal = VAL_U8; - data->modifyArrows.currValue = *(u8 *)((&gBattleMons[data->battlerId].type1) + data->currentSecondaryListItemId); + data->modifyArrows.currValue = *(u8 *)((&gBattleMons[data->battlerId].types[0]) + data->currentSecondaryListItemId); break; case LIST_ITEM_STATS: data->modifyArrows.minValue = 0; diff --git a/src/battle_dynamax.c b/src/battle_dynamax.c index 06a26718a978..cdcf05f7dba7 100644 --- a/src/battle_dynamax.c +++ b/src/battle_dynamax.c @@ -76,6 +76,10 @@ bool32 CanDynamax(u32 battler) u16 species = gBattleMons[battler].species; u16 holdEffect = GetBattlerHoldEffect(battler, FALSE); + // Prevents Zigzagoon from dynamaxing in vanilla. + if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE && GetBattlerSide(battler) == B_SIDE_OPPONENT) + return FALSE; + // Check if Player has a Dynamax Band. if (!TESTING && (GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT))) diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 728db40af2e8..b396f1d7b555 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -309,7 +309,7 @@ static u8 GetBattlePalaceMoveGroup(u8 battler, u16 move) static u16 GetBattlePalaceTarget(u32 battler) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { u8 opposing1, opposing2; @@ -1114,7 +1114,7 @@ void LoadAndCreateEnemyShadowSprites(void) u32 i; LoadCompressedSpriteSheet(&gSpriteSheet_EnemyShadow); - + // initialize shadow sprite ids for (i = 0; i < gBattlersCount; i++) { @@ -1123,7 +1123,7 @@ void LoadAndCreateEnemyShadowSprites(void) battler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); CreateEnemyShadowSprite(battler); - + if (IsDoubleBattle()) { battler = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); diff --git a/src/battle_gimmick.c b/src/battle_gimmick.c index c8ee93221862..2595e4cbdade 100644 --- a/src/battle_gimmick.c +++ b/src/battle_gimmick.c @@ -96,7 +96,7 @@ bool32 ShouldTrainerBattlerUseGimmick(u32 battler, enum Gimmick gimmick) bool32 HasTrainerUsedGimmick(u32 battler, enum Gimmick gimmick) { // Check whether partner battler has used gimmick or plans to during turn. - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + if (IsDoubleBattle() && IsPartnerMonFromSameTrainer(battler) && (gBattleStruct->gimmick.activated[BATTLE_PARTNER(battler)][gimmick] || ((gBattleStruct->gimmick.toActivate & gBitTable[BATTLE_PARTNER(battler)] @@ -115,7 +115,7 @@ bool32 HasTrainerUsedGimmick(u32 battler, enum Gimmick gimmick) void SetGimmickAsActivated(u32 battler, enum Gimmick gimmick) { gBattleStruct->gimmick.activated[battler][gimmick] = TRUE; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsPartnerMonFromSameTrainer(battler)) + if (IsDoubleBattle() && IsPartnerMonFromSameTrainer(battler)) gBattleStruct->gimmick.activated[BATTLE_PARTNER(battler)][gimmick] = TRUE; } @@ -155,7 +155,7 @@ void CreateGimmickTriggerSprite(u32 battler) if (gBattleStruct->gimmick.triggerSpriteId == 0xFF) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) gBattleStruct->gimmick.triggerSpriteId = CreateSprite(gimmick->triggerTemplate, gSprites[gHealthboxSpriteIds[battler]].x - DOUBLES_GIMMICK_TRIGGER_POS_X_SLIDE, gSprites[gHealthboxSpriteIds[battler]].y - DOUBLES_GIMMICK_TRIGGER_POS_Y_DIFF, 0); @@ -204,7 +204,7 @@ static void SpriteCb_GimmickTrigger(struct Sprite *sprite) s32 xSlide, xPriority, xOptimal; s32 yDiff; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { xSlide = DOUBLES_GIMMICK_TRIGGER_POS_X_SLIDE; xPriority = DOUBLES_GIMMICK_TRIGGER_POS_X_PRIORITY; diff --git a/src/battle_main.c b/src/battle_main.c index 9df19b9566cf..b46feaf0f981 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3368,9 +3368,9 @@ const u8* FaintClearSetData(u32 battler) gBattleResources->flags->flags[battler] = 0; - gBattleMons[battler].type1 = gSpeciesInfo[gBattleMons[battler].species].types[0]; - gBattleMons[battler].type2 = gSpeciesInfo[gBattleMons[battler].species].types[1]; - gBattleMons[battler].type3 = TYPE_MYSTERY; + gBattleMons[battler].types[0] = gSpeciesInfo[gBattleMons[battler].species].types[0]; + gBattleMons[battler].types[1] = gSpeciesInfo[gBattleMons[battler].species].types[1]; + gBattleMons[battler].types[2] = TYPE_MYSTERY; Ai_UpdateFaintData(battler); TryBattleFormChange(battler, FORM_CHANGE_FAINT); @@ -3470,9 +3470,9 @@ static void DoBattleIntro(void) else { memcpy(&gBattleMons[battler], &gBattleResources->bufferB[battler][4], sizeof(struct BattlePokemon)); - gBattleMons[battler].type1 = gSpeciesInfo[gBattleMons[battler].species].types[0]; - gBattleMons[battler].type2 = gSpeciesInfo[gBattleMons[battler].species].types[1]; - gBattleMons[battler].type3 = TYPE_MYSTERY; + gBattleMons[battler].types[0] = gSpeciesInfo[gBattleMons[battler].species].types[0]; + gBattleMons[battler].types[1] = gSpeciesInfo[gBattleMons[battler].species].types[1]; + gBattleMons[battler].types[2] = TYPE_MYSTERY; gBattleMons[battler].ability = GetAbilityBySpecies(gBattleMons[battler].species, gBattleMons[battler].abilityNum); gBattleStruct->hpOnSwitchout[GetBattlerSide(battler)] = gBattleMons[battler].hp; gBattleMons[battler].status2 = 0; @@ -4136,7 +4136,7 @@ void SwitchPartyOrder(u32 battler) partyId2 = GetPartyIdFromBattlePartyId(*(gBattleStruct->monToSwitchIntoId + battler)); SwitchPartyMonSlots(partyId1, partyId2); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++) { @@ -4263,9 +4263,9 @@ static void HandleTurnActionSelectionState(void) moveInfo.zmove = gBattleStruct->zmove; moveInfo.species = gBattleMons[battler].species; - moveInfo.monType1 = gBattleMons[battler].type1; - moveInfo.monType2 = gBattleMons[battler].type2; - moveInfo.monType3 = gBattleMons[battler].type3; + moveInfo.monTypes[0] = gBattleMons[battler].types[0]; + moveInfo.monTypes[1] = gBattleMons[battler].types[1]; + moveInfo.monTypes[2] = gBattleMons[battler].types[2]; for (i = 0; i < MAX_MON_MOVES; i++) { @@ -4277,7 +4277,7 @@ static void HandleTurnActionSelectionState(void) i); } - BtlController_EmitChooseMove(battler, BUFFER_A, (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) != 0, FALSE, &moveInfo); + BtlController_EmitChooseMove(battler, BUFFER_A, IsDoubleBattle() != 0, FALSE, &moveInfo); MarkBattlerForControllerExec(battler); } break; @@ -4570,7 +4570,7 @@ static void HandleTurnActionSelectionState(void) else i = FALSE; - if (((gBattleTypeFlags & BATTLE_TYPE_MULTI) || !(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (((gBattleTypeFlags & BATTLE_TYPE_MULTI) || !IsDoubleBattle()) || (position & BIT_FLANK) != B_FLANK_LEFT || (*(&gBattleStruct->absentBattlerFlags) & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(position))])) { @@ -4717,7 +4717,6 @@ void SwapTurnOrder(u8 id1, u8 id2) u32 GetBattlerTotalSpeedStatArgs(u32 battler, u32 ability, u32 holdEffect) { u32 speed = gBattleMons[battler].speed; - u32 highestStat = GetHighestStatId(battler); // weather abilities if (WEATHER_HAS_EFFECT) @@ -4739,10 +4738,10 @@ u32 GetBattlerTotalSpeedStatArgs(u32 battler, u32 ability, u32 holdEffect) speed *= 2; else if (ability == ABILITY_SLOW_START && gDisableStructs[battler].slowStartTimer != 0) speed /= 2; - else if (ability == ABILITY_PROTOSYNTHESIS && gBattleWeather & B_WEATHER_SUN && highestStat == STAT_SPEED) - speed = (speed * 150) / 100; - else if (ability == ABILITY_QUARK_DRIVE && gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN && highestStat == STAT_SPEED) - speed = (speed * 150) / 100; + else if (ability == ABILITY_PROTOSYNTHESIS && (gBattleWeather & B_WEATHER_SUN || gBattleStruct->boosterEnergyActivates & gBitTable[battler])) + speed = (GetHighestStatId(battler) == STAT_SPEED) ? (speed * 150) / 100 : speed; + else if (ability == ABILITY_QUARK_DRIVE && (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gBattleStruct->boosterEnergyActivates & gBitTable[battler])) + speed = (GetHighestStatId(battler) == STAT_SPEED) ? (speed * 150) / 100 : speed; // stat stages speed *= gStatStageRatios[gBattleMons[battler].statStages[STAT_SPEED]][0]; @@ -5824,30 +5823,34 @@ void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk) { gBattleStruct->dynamicMoveType = ItemId_GetSecondaryId(gBattleMons[battlerAtk].item) | F_DYNAMIC_TYPE_SET; } - else if (gMovesInfo[move].effect == EFFECT_REVELATION_DANCE) + else if (gMovesInfo[move].effect == EFFECT_REVELATION_DANCE && GetActiveGimmick(battlerAtk) != GIMMICK_Z_MOVE) { if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA && GetBattlerTeraType(battlerAtk) != TYPE_STELLAR) gBattleStruct->dynamicMoveType = GetBattlerTeraType(battlerAtk); - else if (gBattleMons[battlerAtk].type1 != TYPE_MYSTERY) - gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].type1 | F_DYNAMIC_TYPE_SET; - else if (gBattleMons[battlerAtk].type2 != TYPE_MYSTERY) - gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].type2 | F_DYNAMIC_TYPE_SET; - else if (gBattleMons[battlerAtk].type3 != TYPE_MYSTERY) - gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].type3 | F_DYNAMIC_TYPE_SET; + else if (gBattleMons[battlerAtk].types[0] != TYPE_MYSTERY && !(gBattleResources->flags->flags[battlerAtk] & RESOURCE_FLAG_ROOST && gBattleMons[battlerAtk].types[0] == TYPE_FLYING)) + gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].types[0] | F_DYNAMIC_TYPE_SET; + else if (gBattleMons[battlerAtk].types[1] != TYPE_MYSTERY && !(gBattleResources->flags->flags[battlerAtk] & RESOURCE_FLAG_ROOST && gBattleMons[battlerAtk].types[1] == TYPE_FLYING)) + gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].types[1] | F_DYNAMIC_TYPE_SET; + else if (gBattleResources->flags->flags[battlerAtk] & RESOURCE_FLAG_ROOST) + gBattleStruct->dynamicMoveType = (B_ROOST_PURE_FLYING >= GEN_5 ? TYPE_NORMAL : TYPE_MYSTERY) | F_DYNAMIC_TYPE_SET; + else if (gBattleMons[battlerAtk].types[2] != TYPE_MYSTERY) + gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].types[2] | F_DYNAMIC_TYPE_SET; + else + gBattleStruct->dynamicMoveType = TYPE_MYSTERY | F_DYNAMIC_TYPE_SET; } else if (gMovesInfo[move].effect == EFFECT_RAGING_BULL && (gBattleMons[battlerAtk].species == SPECIES_TAUROS_PALDEAN_COMBAT_BREED || gBattleMons[battlerAtk].species == SPECIES_TAUROS_PALDEAN_BLAZE_BREED || gBattleMons[battlerAtk].species == SPECIES_TAUROS_PALDEAN_AQUA_BREED)) { - gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].type2 | F_DYNAMIC_TYPE_SET; + gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].types[1] | F_DYNAMIC_TYPE_SET; } else if (gMovesInfo[move].effect == EFFECT_IVY_CUDGEL && (gBattleMons[battlerAtk].species == SPECIES_OGERPON_WELLSPRING_MASK || gBattleMons[battlerAtk].species == SPECIES_OGERPON_WELLSPRING_MASK_TERA || gBattleMons[battlerAtk].species == SPECIES_OGERPON_HEARTHFLAME_MASK || gBattleMons[battlerAtk].species == SPECIES_OGERPON_HEARTHFLAME_MASK_TERA || gBattleMons[battlerAtk].species == SPECIES_OGERPON_CORNERSTONE_MASK || gBattleMons[battlerAtk].species == SPECIES_OGERPON_CORNERSTONE_MASK_TERA )) { - gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].type2 | F_DYNAMIC_TYPE_SET; + gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].types[1] | F_DYNAMIC_TYPE_SET; } else if (gMovesInfo[move].effect == EFFECT_NATURAL_GIFT) { @@ -5905,13 +5908,13 @@ void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk) gBattleStruct->dynamicMoveType = TYPE_DARK | F_DYNAMIC_TYPE_SET; } - GET_MOVE_TYPE(move, moveType); + moveType = GetMoveType(move); if ((gFieldStatuses & STATUS_FIELD_ION_DELUGE && moveType == TYPE_NORMAL) || gStatuses4[battlerAtk] & STATUS4_ELECTRIFIED) gBattleStruct->dynamicMoveType = TYPE_ELECTRIC | F_DYNAMIC_TYPE_SET; // Check if a gem should activate. - GET_MOVE_TYPE(move, moveType); + moveType = GetMoveType(move); if (holdEffect == HOLD_EFFECT_GEMS && moveType == ItemId_GetSecondaryId(gBattleMons[battlerAtk].item)) { diff --git a/src/battle_message.c b/src/battle_message.c index 6a6b9c71a27b..4fa1388b801e 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -860,9 +860,11 @@ static const u8 sText_ShedItsTail[] = _("{B_ATK_NAME_WITH_PREFIX} shed its tail\ static const u8 sText_PkmnTerastallizedInto[] = _("{B_ATK_NAME_WITH_PREFIX} terastallized\ninto the {B_BUFF1} type!"); static const u8 sText_SupersweetAromaWafts[] = _("A supersweet aroma is wafting from\nthe syrup covering {B_ATK_NAME_WITH_PREFIX2}!"); static const u8 sText_TidyingUpComplete[] = _("Tidying up complete!"); +static const u8 sText_FickleBeamDoubled[] = _("{B_ATK_NAME_WITH_PREFIX} is going all\nout for this attack!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { + [STRINGID_FICKLEBEAMDOUBLED - BATTLESTRINGS_TABLE_START] = sText_FickleBeamDoubled, [STRINGID_PKMNTERASTALLIZEDINTO - BATTLESTRINGS_TABLE_START] = sText_PkmnTerastallizedInto, [STRINGID_TIDYINGUPCOMPLETE - BATTLESTRINGS_TABLE_START] = sText_TidyingUpComplete, [STRINGID_SUPERSWEETAROMAWAFTS - BATTLESTRINGS_TABLE_START] = sText_SupersweetAromaWafts, @@ -2848,7 +2850,7 @@ void BufferStringBattle(u16 stringID, u32 battler) { if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY) stringPtr = sText_LegendaryPkmnAppeared; - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)]])) + else if (IsDoubleBattle() && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)]])) stringPtr = sText_TwoWildPkmnAppeared; else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL) stringPtr = sText_WildPkmnAppearedPause; @@ -2859,7 +2861,7 @@ void BufferStringBattle(u16 stringID, u32 battler) case STRINGID_INTROSENDOUT: // poke first send-out if (GetBattlerSide(battler) == B_SIDE_PLAYER) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsValidForBattle(&gPlayerParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]])) + if (IsDoubleBattle() && IsValidForBattle(&gPlayerParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]])) { if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) stringPtr = sText_InGamePartnerSentOutZGoN; @@ -2877,7 +2879,7 @@ void BufferStringBattle(u16 stringID, u32 battler) } else { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]])) + if (IsDoubleBattle() && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]])) { if (BATTLE_TWO_VS_ONE_OPPONENT) stringPtr = sText_Trainer1SentOutTwoPkmn; @@ -2908,7 +2910,7 @@ void BufferStringBattle(u16 stringID, u32 battler) { if (*(&gBattleStruct->hpScale) == 0) stringPtr = sText_PkmnThatsEnough; - else if (*(&gBattleStruct->hpScale) == 1 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + else if (*(&gBattleStruct->hpScale) == 1 || IsDoubleBattle()) stringPtr = sText_PkmnComeBack; else if (*(&gBattleStruct->hpScale) == 2) stringPtr = sText_PkmnOkComeBack; @@ -2933,7 +2935,7 @@ void BufferStringBattle(u16 stringID, u32 battler) case STRINGID_SWITCHINMON: // switch-in msg if (GetBattlerSide(gBattleScripting.battler) == B_SIDE_PLAYER) { - if (*(&gBattleStruct->hpScale) == 0 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (*(&gBattleStruct->hpScale) == 0 || IsDoubleBattle()) stringPtr = sText_GoPkmn2; else if (*(&gBattleStruct->hpScale) == 1) stringPtr = sText_DoItPkmn; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index f25cef9cf563..44ad1868a823 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1160,8 +1160,8 @@ bool32 ProteanTryChangeType(u32 battler, u32 ability, u32 move, u32 moveType) { if ((ability == ABILITY_PROTEAN || ability == ABILITY_LIBERO) && !gDisableStructs[gBattlerAttacker].usedProteanLibero - && (gBattleMons[battler].type1 != moveType || gBattleMons[battler].type2 != moveType - || (gBattleMons[battler].type3 != moveType && gBattleMons[battler].type3 != TYPE_MYSTERY)) + && (gBattleMons[battler].types[0] != moveType || gBattleMons[battler].types[1] != moveType + || (gBattleMons[battler].types[2] != moveType && gBattleMons[battler].types[2] != TYPE_MYSTERY)) && move != MOVE_STRUGGLE && GetActiveGimmick(battler) != GIMMICK_TERA) { @@ -1193,9 +1193,9 @@ static void Cmd_attackcanceler(void) { CMD_ARGS(); - s32 i, moveType; + s32 i; u16 attackerAbility = GetBattlerAbility(gBattlerAttacker); - GET_MOVE_TYPE(gCurrentMove, moveType); + u32 moveType = GetMoveType(gCurrentMove); // Weight-based moves are blocked by Dynamax. if ((GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX) && IsMoveBlockedByDynamax(gCurrentMove)) @@ -1364,9 +1364,8 @@ static void Cmd_attackcanceler(void) } // Z-moves and Max Moves bypass protection, but deal reduced damage (factored in AccumulateOtherModifiers) - if ((IsZMove(gCurrentMove) - || IsMaxMove(gCurrentMove)) - && IS_BATTLER_PROTECTED(gBattlerTarget)) + if ((IsZMove(gCurrentMove) || IsMaxMove(gCurrentMove)) + && IS_BATTLER_PROTECTED(gBattlerTarget)) { BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_CouldntFullyProtect; @@ -1492,14 +1491,14 @@ static bool32 AccuracyCalcHelper(u16 move) return TRUE; } // If the attacker has the ability No Guard and they aren't targeting a Pokemon involved in a Sky Drop with the move Sky Drop, move hits. - else if (GetBattlerAbility(gBattlerAttacker) == ABILITY_NO_GUARD && (move != MOVE_SKY_DROP || gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF)) + else if (GetBattlerAbility(gBattlerAttacker) == ABILITY_NO_GUARD && (gMovesInfo[move].effect != EFFECT_SKY_DROP || gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF)) { if (!JumpIfMoveFailed(7, move)) RecordAbilityBattle(gBattlerAttacker, ABILITY_NO_GUARD); return TRUE; } // If the target has the ability No Guard and they aren't involved in a Sky Drop or the current move isn't Sky Drop, move hits. - else if (GetBattlerAbility(gBattlerTarget) == ABILITY_NO_GUARD && (move != MOVE_SKY_DROP || gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF)) + else if (GetBattlerAbility(gBattlerTarget) == ABILITY_NO_GUARD && (gMovesInfo[move].effect != EFFECT_SKY_DROP || gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF)) { if (!JumpIfMoveFailed(7, move)) RecordAbilityBattle(gBattlerTarget, ABILITY_NO_GUARD); @@ -1689,7 +1688,6 @@ u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, u32 atkAbility, u static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u8 *failInstr, u16 move) { - u32 type; u32 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, move); u32 abilityAtk = GetBattlerAbility(gBattlerAttacker); u32 abilityDef = GetBattlerAbility(gBattlerTarget); @@ -1718,8 +1716,8 @@ static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u else { u32 accuracy; + u32 type = GetMoveType(move); - GET_MOVE_TYPE(move, type); if (JumpIfMoveAffectedByProtect(move)) return; if (AccuracyCalcHelper(move)) @@ -1753,7 +1751,7 @@ static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u return; } - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && + if (IsDoubleBattle() && (moveTarget == MOVE_TARGET_BOTH || moveTarget == MOVE_TARGET_FOES_AND_ALLY)) gBattleCommunication[MISS_TYPE] = B_MSG_AVOIDED_ATK; else @@ -1959,9 +1957,7 @@ static void Cmd_damagecalc(void) { CMD_ARGS(); - u8 moveType; - - GET_MOVE_TYPE(gCurrentMove, moveType); + u32 moveType = GetMoveType(gCurrentMove); if (gMovesInfo[gCurrentMove].effect == EFFECT_SHELL_SIDE_ARM) gBattleStruct->swapDamageCategory = (gBattleStruct->shellSideArmCategory[gBattlerAttacker][gBattlerTarget] != gMovesInfo[gCurrentMove].category); gBattleMoveDamage = CalculateMoveDamage(gCurrentMove, gBattlerAttacker, gBattlerTarget, moveType, 0, gIsCriticalHit, TRUE, TRUE); @@ -1972,9 +1968,7 @@ static void Cmd_typecalc(void) { CMD_ARGS(); - u8 moveType; - - GET_MOVE_TYPE(gCurrentMove, moveType); + u32 moveType = GetMoveType(gCurrentMove); CalcTypeEffectivenessMultiplier(gCurrentMove, moveType, gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerTarget), TRUE); gBattlescriptCurrInstr = cmd->nextInstr; @@ -1985,11 +1979,9 @@ static void Cmd_adjustdamage(void) CMD_ARGS(); u8 holdEffect, param; - u32 moveType; u32 affectionScore = GetBattlerAffectionHearts(gBattlerTarget); u32 rand = Random() % 100; - - GET_MOVE_TYPE(gCurrentMove, moveType); + u32 moveType = GetMoveType(gCurrentMove); if (DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove)) goto END; @@ -2173,7 +2165,7 @@ static void Cmd_attackanimation(void) && gCurrentMove != MOVE_SUBSTITUTE && gCurrentMove != MOVE_ALLY_SWITCH // In a wild double battle gotta use the teleport animation if two wild pokemon are alive. - && !(gCurrentMove == MOVE_TELEPORT && WILD_DOUBLE_BATTLE && GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT && IsBattlerAlive(BATTLE_PARTNER(gBattlerAttacker)))) + && !(gMovesInfo[gCurrentMove].effect == EFFECT_TELEPORT && WILD_DOUBLE_BATTLE && GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT && IsBattlerAlive(BATTLE_PARTNER(gBattlerAttacker)))) { BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_Pausex20; @@ -2505,7 +2497,7 @@ static void Cmd_resultmessage(void) if (gMoveResultFlags & MOVE_RESULT_MISSED && (!(gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE) || gBattleCommunication[MISS_TYPE] > B_MSG_AVOIDED_ATK)) { if (gBattleCommunication[MISS_TYPE] > B_MSG_AVOIDED_ATK) // Wonder Guard or Levitate - show the ability pop-up - CreateAbilityPopUp(gBattlerTarget, gBattleMons[gBattlerTarget].ability, (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) != 0); + CreateAbilityPopUp(gBattlerTarget, gBattleMons[gBattlerTarget].ability, (IsDoubleBattle()) != 0); stringId = gMissStringIds[gBattleCommunication[MISS_TYPE]]; gBattleCommunication[MSG_DISPLAY] = 1; } @@ -2937,8 +2929,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) if (B_STATUS_TYPE_IMMUNITY == GEN_1) { - u8 moveType = 0; - GET_MOVE_TYPE(gCurrentMove, moveType); + u32 moveType = GetMoveType(gCurrentMove); if (primary == FALSE && certain == FALSE && IS_BATTLER_OF_TYPE(gEffectBattler, moveType)) break; } @@ -2951,8 +2942,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) case STATUS1_FREEZE: if (B_STATUS_TYPE_IMMUNITY == GEN_1) { - u8 moveType = 0; - GET_MOVE_TYPE(gCurrentMove, moveType); + u32 moveType = GetMoveType(gCurrentMove); if (primary == FALSE && certain == FALSE && IS_BATTLER_OF_TYPE(gEffectBattler, moveType)) break; } @@ -2991,8 +2981,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) } if (B_STATUS_TYPE_IMMUNITY == GEN_1) { - u8 moveType = 0; - GET_MOVE_TYPE(gCurrentMove, moveType); + u32 moveType = GetMoveType(gCurrentMove); if (primary == FALSE && certain == FALSE && IS_BATTLER_OF_TYPE(gEffectBattler, moveType)) break; } @@ -3062,8 +3051,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) case STATUS1_FROSTBITE: if (B_STATUS_TYPE_IMMUNITY == GEN_1) { - u8 moveType = 0; - GET_MOVE_TYPE(gCurrentMove, moveType); + u32 moveType = GetMoveType(gCurrentMove); if (primary == FALSE && certain == FALSE && IS_BATTLER_OF_TYPE(gEffectBattler, moveType)) break; } @@ -4363,7 +4351,7 @@ static void Cmd_getexp(void) { // Music change in a wild battle after fainting opposing pokemon. if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) - && (gBattleMons[0].hp || (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattleMons[2].hp)) + && (gBattleMons[0].hp || (IsDoubleBattle() && gBattleMons[2].hp)) && !IsBattlerAlive(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) && !IsBattlerAlive(GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)) && !gBattleStruct->wildVictorySong) @@ -4414,7 +4402,7 @@ static void Cmd_getexp(void) } // get exp getter battler - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { if (gBattlerPartyIndexes[2] == *expMonId && !(gAbsentBattlerFlags & gBitTable[2])) gBattleStruct->expGetterBattlerId = 2; @@ -4494,7 +4482,7 @@ static void Cmd_getexp(void) // update battle mon structure after level up if (gBattlerPartyIndexes[0] == *expMonId && gBattleMons[0].hp) battler = 0; - else if (gBattlerPartyIndexes[2] == *expMonId && gBattleMons[2].hp && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + else if (gBattlerPartyIndexes[2] == *expMonId && gBattleMons[2].hp && (IsDoubleBattle())) battler = 2; if (battler != 0xFF) @@ -5067,8 +5055,8 @@ static void Cmd_setroost(void) CMD_ARGS(); gBattleResources->flags->flags[gBattlerAttacker] |= RESOURCE_FLAG_ROOST; - gBattleStruct->roostTypes[gBattlerAttacker][0] = gBattleMons[gBattlerAttacker].type1; - gBattleStruct->roostTypes[gBattlerAttacker][1] = gBattleMons[gBattlerAttacker].type2; + gBattleStruct->roostTypes[gBattlerAttacker][0] = gBattleMons[gBattlerAttacker].types[0]; + gBattleStruct->roostTypes[gBattlerAttacker][1] = gBattleMons[gBattlerAttacker].types[1]; gBattlescriptCurrInstr = cmd->nextInstr; } @@ -5405,7 +5393,7 @@ static void Cmd_moveend(void) endState = cmd->endState; holdEffectAtk = GetBattlerHoldEffect(gBattlerAttacker, TRUE); - GET_MOVE_TYPE(gCurrentMove, moveType); + moveType = GetMoveType(gCurrentMove); do { @@ -5825,7 +5813,9 @@ static void Cmd_moveend(void) gBattleScripting.moveendState++; break; case MOVEEND_UPDATE_LAST_MOVES: - if (gMoveResultFlags & (MOVE_RESULT_FAILED | MOVE_RESULT_DOESNT_AFFECT_FOE)) + if ((gMoveResultFlags & (MOVE_RESULT_FAILED | MOVE_RESULT_DOESNT_AFFECT_FOE)) + || (gBattleMons[gBattlerAttacker].status2 & (STATUS2_FLINCHED)) + || gProtectStructs[gBattlerAttacker].prlzImmobility) gBattleStruct->lastMoveFailed |= gBitTable[gBattlerAttacker]; else gBattleStruct->lastMoveFailed &= ~(gBitTable[gBattlerAttacker]); @@ -5896,7 +5886,7 @@ static void Cmd_moveend(void) else { gLastLandedMoves[gBattlerTarget] = gCurrentMove; - GET_MOVE_TYPE(gCurrentMove, gLastHitByType[gBattlerTarget]); + gLastHitByType[gBattlerTarget] = GetMoveType(gCurrentMove); } } else @@ -5930,7 +5920,7 @@ static void Cmd_moveend(void) gBattleStruct->targetsDone[gBattlerAttacker] |= gBitTable[gBattlerTarget]; if (!(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) - && gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && IsDoubleBattle() && !gProtectStructs[gBattlerAttacker].chargingTurn && (moveTarget == MOVE_TARGET_BOTH || moveTarget == MOVE_TARGET_FOES_AND_ALLY) @@ -6257,7 +6247,7 @@ static void Cmd_moveend(void) u32 battler, nextDancer = 0; bool32 turnOnHitmarker = FALSE; - for (battler = 0; battler < MAX_BATTLERS_COUNT; battler++) + for (battler = 0; battler < gBattlersCount; battler++) { if (gSpecialStatuses[battler].dancerUsedMove) { @@ -6267,9 +6257,8 @@ static void Cmd_moveend(void) } } - if (!(gBattleStruct->lastMoveFailed & gBitTable[gBattlerAttacker] - || (!gSpecialStatuses[gBattlerAttacker].dancerUsedMove - && gBattleStruct->bouncedMoveIsUsed))) + if (!(gMoveResultFlags & (MOVE_RESULT_FAILED | MOVE_RESULT_DOESNT_AFFECT_FOE) + || (!gSpecialStatuses[gBattlerAttacker].dancerUsedMove && gBattleStruct->bouncedMoveIsUsed))) { // Dance move succeeds // Set target for other Dancer mons; set bit so that mon cannot activate Dancer off of its own move if (!gSpecialStatuses[gBattlerAttacker].dancerUsedMove) @@ -6278,7 +6267,7 @@ static void Cmd_moveend(void) gBattleScripting.savedBattler |= (gBattlerAttacker << 4); gSpecialStatuses[gBattlerAttacker].dancerUsedMove = TRUE; } - for (battler = 0; battler < MAX_BATTLERS_COUNT; battler++) + for (battler = 0; battler < gBattlersCount; battler++) { if (GetBattlerAbility(battler) == ABILITY_DANCER && !gSpecialStatuses[battler].dancerUsedMove) { @@ -6402,6 +6391,7 @@ static void Cmd_moveend(void) gBattleStruct->enduredDamage = 0; gBattleStruct->additionalEffectsCounter = 0; gBattleStruct->poisonPuppeteerConfusion = FALSE; + gBattleStruct->fickleBeamBoosted = FALSE; if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE) SetActiveGimmick(gBattlerAttacker, GIMMICK_NONE); gBattleStruct->distortedTypeMatchups = 0; @@ -6514,9 +6504,9 @@ static void Cmd_switchindataupdate(void) } } - gBattleMons[battler].type1 = gSpeciesInfo[gBattleMons[battler].species].types[0]; - gBattleMons[battler].type2 = gSpeciesInfo[gBattleMons[battler].species].types[1]; - gBattleMons[battler].type3 = TYPE_MYSTERY; + gBattleMons[battler].types[0] = gSpeciesInfo[gBattleMons[battler].species].types[0]; + gBattleMons[battler].types[1] = gSpeciesInfo[gBattleMons[battler].species].types[1]; + gBattleMons[battler].types[2] = TYPE_MYSTERY; gBattleMons[battler].ability = GetAbilityBySpecies(gBattleMons[battler].species, gBattleMons[battler].abilityNum); #if TESTING if (gTestRunnerEnabled) @@ -6700,7 +6690,7 @@ bool32 CanBattlerSwitch(u32 battler) { battlerIn1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) battlerIn2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); else battlerIn2 = battlerIn1; @@ -6712,7 +6702,7 @@ bool32 CanBattlerSwitch(u32 battler) // Check if attacker side has mon to switch into battlerIn1 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) battlerIn2 = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); else battlerIn2 = battlerIn1; @@ -6776,7 +6766,7 @@ static void Cmd_openpartyscreen(void) if (cmd->battler == BS_FAINTED_MULTIPLE_1) { - if ((gBattleTypeFlags & BATTLE_TYPE_MULTI) || !(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if ((gBattleTypeFlags & BATTLE_TYPE_MULTI) || !(IsDoubleBattle())) { for (battler = 0; battler < gBattlersCount; battler++) { @@ -6802,7 +6792,7 @@ static void Cmd_openpartyscreen(void) } } } - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + else if (IsDoubleBattle()) { bool8 hasReplacement_0, hasReplacement_1, hasReplacement_2, hasReplacement_3; @@ -6933,7 +6923,7 @@ static void Cmd_openpartyscreen(void) { if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { hitmarkerFaintBits = gHitMarker >> 28; if (gBitTable[2] & hitmarkerFaintBits && gBitTable[0] & hitmarkerFaintBits) @@ -7477,7 +7467,7 @@ static void Cmd_handlelearnnewmove(void) { GiveMoveToBattleMon(&gBattleMons[battler], learnMove); } - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { battler = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); if (gBattlerPartyIndexes[battler] == monId @@ -7583,7 +7573,7 @@ static void Cmd_yesnoboxlearnmove(void) RemoveBattleMonPPBonus(&gBattleMons[0], movePosition); SetBattleMonMoveSlot(&gBattleMons[0], gMoveToLearn, movePosition); } - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + if (IsDoubleBattle() && gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId && MOVE_IS_PERMANENT(2, movePosition)) { @@ -7697,7 +7687,7 @@ static u32 GetTrainerMoneyToGive(u16 trainerId) if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) moneyReward = 4 * lastMonLevel * gBattleStruct->moneyMultiplier * trainerMoney; - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + else if (IsDoubleBattle()) moneyReward = 4 * lastMonLevel * gBattleStruct->moneyMultiplier * 2 * trainerMoney; else moneyReward = 4 * lastMonLevel * gBattleStruct->moneyMultiplier * trainerMoney; @@ -8363,7 +8353,7 @@ static bool32 IsMonGettingExpSentOut(void) { if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId) return TRUE; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId) + if (IsDoubleBattle() && gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId) return TRUE; return FALSE; @@ -8436,7 +8426,7 @@ static void Cmd_hpthresholds(void) { CMD_ARGS(u8 battler); - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!(IsDoubleBattle())) { u32 battler = GetBattlerForBattleScript(cmd->battler); u32 opposingBattler = BATTLE_OPPOSITE(battler); @@ -8462,7 +8452,7 @@ static void Cmd_hpthresholds2(void) { CMD_ARGS(u8 battler); - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!(IsDoubleBattle())) { u32 battler = GetBattlerForBattleScript(cmd->battler); u32 opposingBattler = BATTLE_OPPOSITE(battler); @@ -8616,11 +8606,14 @@ static bool32 TryDefogClear(u32 battlerAtk, bool32 clear) DEFOG_CLEAR(SIDE_STATUS_AURORA_VEIL, auroraVeilTimer, BattleScript_SideStatusWoreOffReturn, MOVE_AURORA_VEIL); DEFOG_CLEAR(SIDE_STATUS_SAFEGUARD, safeguardTimer, BattleScript_SideStatusWoreOffReturn, MOVE_SAFEGUARD); } - DEFOG_CLEAR(SIDE_STATUS_SPIKES, spikesAmount, BattleScript_SpikesDefog, 0); - DEFOG_CLEAR(SIDE_STATUS_STEALTH_ROCK, stealthRockAmount, BattleScript_StealthRockDefog, 0); - DEFOG_CLEAR(SIDE_STATUS_TOXIC_SPIKES, toxicSpikesAmount, BattleScript_ToxicSpikesDefog, 0); - DEFOG_CLEAR(SIDE_STATUS_STICKY_WEB, stickyWebAmount, BattleScript_StickyWebDefog, 0); - DEFOG_CLEAR(SIDE_STATUS_STEELSURGE, steelsurgeAmount, BattleScript_SteelsurgeDefog, 0); + if (B_DEFOG_EFFECT_CLEARING >= GEN_6) + { + DEFOG_CLEAR(SIDE_STATUS_SPIKES, spikesAmount, BattleScript_SpikesDefog, 0); + DEFOG_CLEAR(SIDE_STATUS_STEALTH_ROCK, stealthRockAmount, BattleScript_StealthRockDefog, 0); + DEFOG_CLEAR(SIDE_STATUS_TOXIC_SPIKES, toxicSpikesAmount, BattleScript_ToxicSpikesDefog, 0); + DEFOG_CLEAR(SIDE_STATUS_STICKY_WEB, stickyWebAmount, BattleScript_StickyWebDefog, 0); + DEFOG_CLEAR(SIDE_STATUS_STEELSURGE, steelsurgeAmount, BattleScript_SteelsurgeDefog, 0); + } if (gBattleWeather & B_WEATHER_FOG) { gBattleWeather &= ~B_WEATHER_FOG; @@ -8628,7 +8621,7 @@ static bool32 TryDefogClear(u32 battlerAtk, bool32 clear) gBattlescriptCurrInstr = BattleScript_FogEnded_Ret; return TRUE; } - if (B_DEFOG_CLEARS_TERRAIN >= GEN_8 && (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)) + if (B_DEFOG_EFFECT_CLEARING >= GEN_8 && (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)) { RemoveAllTerrains(); BattleScriptPushCursor(); @@ -9942,7 +9935,7 @@ static void Cmd_various(void) case VARIOUS_ABILITY_POPUP: { VARIOUS_ARGS(); - CreateAbilityPopUp(battler, gBattleMons[battler].ability, (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) != 0); + CreateAbilityPopUp(battler, gBattleMons[battler].ability, (IsDoubleBattle()) != 0); break; } case VARIOUS_UPDATE_ABILITY_POPUP: @@ -10136,7 +10129,7 @@ static void Cmd_various(void) gSideTimers[GetBattlerSide(battler)].auroraVeilTimer = 5; gSideTimers[GetBattlerSide(battler)].auroraVeilBattlerId = battler; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) + if (IsDoubleBattle() && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) gBattleCommunication[MULTISTRING_CHOOSER] = 5; else gBattleCommunication[MULTISTRING_CHOOSER] = 5; @@ -10152,7 +10145,7 @@ static void Cmd_various(void) } else { - gBattleMons[battler].type3 = gMovesInfo[gCurrentMove].argument; + gBattleMons[battler].types[2] = gMovesInfo[gCurrentMove].argument; PREPARE_TYPE_BUFFER(gBattleTextBuff1, gMovesInfo[gCurrentMove].argument); gBattlescriptCurrInstr = cmd->nextInstr; } @@ -10312,7 +10305,7 @@ static void Cmd_various(void) case VARIOUS_JUMP_IF_TEAM_HEALTHY: { VARIOUS_ARGS(const u8 *jumpInstr); - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsBattlerAlive(BATTLE_PARTNER(battler))) + if ((IsDoubleBattle()) && IsBattlerAlive(BATTLE_PARTNER(battler))) { u8 partner = BATTLE_PARTNER(battler); if ((gBattleMons[battler].hp == gBattleMons[battler].maxHP && !(gBattleMons[battler].status1 & STATUS1_ANY)) @@ -10925,7 +10918,7 @@ static void Cmd_various(void) PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(&party[gSelectedMonPartyId], MON_DATA_SPECIES)); // If an on-field battler is revived, it needs to be sent out again. - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && + if (IsDoubleBattle() && gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)] == gSelectedMonPartyId) { gBattleScripting.battler = BATTLE_PARTNER(gBattlerAttacker); @@ -11244,7 +11237,7 @@ static void Cmd_setreflect(void) gSideTimers[GetBattlerSide(gBattlerAttacker)].reflectTimer = 5; gSideTimers[GetBattlerSide(gBattlerAttacker)].reflectBattlerId = gBattlerAttacker; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) + if (IsDoubleBattle() && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_REFLECT_DOUBLE; else gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_REFLECT_SINGLE; @@ -12108,7 +12101,7 @@ static void Cmd_forcerandomswitch(void) battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; } - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + else if (IsDoubleBattle()) { firstMonId = 0; lastMonId = PARTY_SIZE; @@ -12230,9 +12223,9 @@ static void Cmd_tryconversiontypechange(void) else moveType = TYPE_NORMAL; } - if (moveType != gBattleMons[gBattlerAttacker].type1 - && moveType != gBattleMons[gBattlerAttacker].type2 - && moveType != gBattleMons[gBattlerAttacker].type3) + if (moveType != gBattleMons[gBattlerAttacker].types[0] + && moveType != gBattleMons[gBattlerAttacker].types[1] + && moveType != gBattleMons[gBattlerAttacker].types[2]) { break; } @@ -12258,7 +12251,7 @@ static void Cmd_tryconversiontypechange(void) moveType = TYPE_NORMAL; } } - while (moveType == gBattleMons[gBattlerAttacker].type1 || moveType == gBattleMons[gBattlerAttacker].type2 || moveType == gBattleMons[gBattlerAttacker].type3); + while (moveType == gBattleMons[gBattlerAttacker].types[0] || moveType == gBattleMons[gBattlerAttacker].types[1] || moveType == gBattleMons[gBattlerAttacker].types[2]); SET_BATTLER_TYPE(gBattlerAttacker, moveType); PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); @@ -12306,7 +12299,7 @@ static void Cmd_setlightscreen(void) gSideTimers[GetBattlerSide(gBattlerAttacker)].lightscreenTimer = 5; gSideTimers[GetBattlerSide(gBattlerAttacker)].lightscreenBattlerId = gBattlerAttacker; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) + if (IsDoubleBattle() && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_LIGHTSCREEN_DOUBLE; else gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_LIGHTSCREEN_SINGLE; @@ -12476,7 +12469,7 @@ static void Cmd_updatestatusicon(void) BtlController_EmitStatusIconUpdate(battler, BUFFER_A, gBattleMons[battler].status1, gBattleMons[battler].status2); MarkBattlerForControllerExec(battler); } - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if ((IsDoubleBattle())) { battler = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker))); if (!(gAbsentBattlerFlags & gBitTable[battler])) @@ -12513,7 +12506,7 @@ static void Cmd_setfocusenergy(void) CMD_ARGS(u8 battler); u8 battler = GetBattlerForBattleScript(cmd->battler); - if ((gMovesInfo[gCurrentMove].effect == EFFECT_DRAGON_CHEER && (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE) || (gAbsentBattlerFlags & gBitTable[battler]))) + if ((gMovesInfo[gCurrentMove].effect == EFFECT_DRAGON_CHEER && (!(IsDoubleBattle()) || (gAbsentBattlerFlags & gBitTable[battler]))) || gBattleMons[battler].status2 & STATUS2_FOCUS_ENERGY_ANY) { gMoveResultFlags |= MOVE_RESULT_FAILED; @@ -12898,7 +12891,7 @@ static void Cmd_settypetorandomresistance(void) { gBattlescriptCurrInstr = cmd->failInstr; } - else if (gLastHitByType[gBattlerAttacker] == TYPE_STELLAR) + else if (gLastHitByType[gBattlerAttacker] == TYPE_STELLAR || gLastHitByType[gBattlerAttacker] == TYPE_MYSTERY) { gBattlescriptCurrInstr = cmd->failInstr; } @@ -13256,7 +13249,7 @@ static void Cmd_healpartystatus(void) gBattleMons[gBattlerAttacker].status1 = 0; gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + if (IsDoubleBattle() && !(gAbsentBattlerFlags & gBitTable[partner])) { gBattleMons[partner].status1 = 0; @@ -14099,7 +14092,7 @@ static void Cmd_trysethelpinghand(void) gBattlerTarget = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker))); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + if (IsDoubleBattle() && !(gAbsentBattlerFlags & gBitTable[gBattlerTarget]) && !gProtectStructs[gBattlerAttacker].helpingHand && !gProtectStructs[gBattlerTarget].helpingHand) @@ -14921,7 +14914,7 @@ static void Cmd_pursuitdoubles(void) u32 battler = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker))); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + if (IsDoubleBattle() && !(gAbsentBattlerFlags & gBitTable[battler]) && gChosenActionByBattler[battler] == B_ACTION_USE_MOVE && gMovesInfo[gChosenMoveByBattler[battler]].effect == EFFECT_PURSUIT) @@ -15919,7 +15912,7 @@ bool32 IsMoveAffectedByParentalBond(u32 move, u32 battler) && gMovesInfo[move].strikeCount < 2 && gMovesInfo[move].effect != EFFECT_MULTI_HIT) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { switch (GetBattlerMoveTargetType(battler, move)) { @@ -16036,7 +16029,7 @@ void BS_SetZEffect(void) static void TryUpdateRoundTurnOrder(void) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { u32 i; u32 j = 0; @@ -16174,8 +16167,7 @@ void BS_ItemRestoreHP(void) // Check if the recipient is an active battler. if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) battler = gBattlerAttacker; - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE - && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) + else if (IsDoubleBattle() && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) battler = BATTLE_PARTNER(gBattlerAttacker); // Get amount to heal. @@ -16212,7 +16204,7 @@ void BS_ItemRestoreHP(void) SetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_HP, &hp); // Revived battlers on the field need to be brought back. - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && battler != MAX_BATTLERS_COUNT) + if (IsDoubleBattle() && battler != MAX_BATTLERS_COUNT) { gAbsentBattlerFlags &= ~gBitTable[battler]; gBattleMons[battler].hp = hp; @@ -16238,7 +16230,7 @@ void BS_ItemCureStatus(void) previousStatus2 = gBattleMons[battler].status2; gBattleMons[gBattlerAttacker].status2 &= ~GetItemStatus2Mask(gLastUsedItem); } - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + else if (IsDoubleBattle() && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) { battler = BATTLE_PARTNER(gBattlerAttacker); @@ -16303,7 +16295,7 @@ void BS_ItemRestorePP(void) // Check if the recipient is an active battler. if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) battler = gBattlerAttacker; - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + else if (IsDoubleBattle() && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) battler = BATTLE_PARTNER(gBattlerAttacker); @@ -16523,30 +16515,30 @@ void BS_TryReflectType(void) } else if (targetType1 == TYPE_MYSTERY && targetType2 == TYPE_MYSTERY && targetType3 != TYPE_MYSTERY) { - gBattleMons[gBattlerAttacker].type1 = TYPE_NORMAL; - gBattleMons[gBattlerAttacker].type2 = TYPE_NORMAL; - gBattleMons[gBattlerAttacker].type3 = targetType3; + gBattleMons[gBattlerAttacker].types[0] = TYPE_NORMAL; + gBattleMons[gBattlerAttacker].types[1] = TYPE_NORMAL; + gBattleMons[gBattlerAttacker].types[2] = targetType3; gBattlescriptCurrInstr = cmd->nextInstr; } else if (targetType1 == TYPE_MYSTERY && targetType2 != TYPE_MYSTERY) { - gBattleMons[gBattlerAttacker].type1 = targetType2; - gBattleMons[gBattlerAttacker].type2 = targetType2; - gBattleMons[gBattlerAttacker].type3 = targetType3; + gBattleMons[gBattlerAttacker].types[0] = targetType2; + gBattleMons[gBattlerAttacker].types[1] = targetType2; + gBattleMons[gBattlerAttacker].types[2] = targetType3; gBattlescriptCurrInstr = cmd->nextInstr; } else if (targetType1 != TYPE_MYSTERY && targetType2 == TYPE_MYSTERY) { - gBattleMons[gBattlerAttacker].type1 = targetType1; - gBattleMons[gBattlerAttacker].type2 = targetType1; - gBattleMons[gBattlerAttacker].type3 = targetType3; + gBattleMons[gBattlerAttacker].types[0] = targetType1; + gBattleMons[gBattlerAttacker].types[1] = targetType1; + gBattleMons[gBattlerAttacker].types[2] = targetType3; gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattleMons[gBattlerAttacker].type1 = targetType1; - gBattleMons[gBattlerAttacker].type2 = targetType2; - gBattleMons[gBattlerAttacker].type3 = targetType3; + gBattleMons[gBattlerAttacker].types[0] = targetType1; + gBattleMons[gBattlerAttacker].types[1] = targetType2; + gBattleMons[gBattlerAttacker].types[2] = targetType3; gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -16634,7 +16626,7 @@ void BS_SetPledge(void) gBattleCommunication[MSG_DISPLAY] = 0; } else if ((gChosenActionByBattler[partner] == B_ACTION_USE_MOVE) - && gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && IsDoubleBattle() && IsBattlerAlive(partner) && gCurrentMove != partnerMove && gMovesInfo[partnerMove].effect == EFFECT_PLEDGE) @@ -17132,3 +17124,19 @@ void BS_DamageToQuarterTargetHP(void) gBattlescriptCurrInstr = cmd->nextInstr; } + +void BS_FickleBeamDamageCalculation(void) +{ + NATIVE_ARGS(); + gBattleStruct->fickleBeamBoosted = FALSE; + + if (RandomPercentage(RNG_FICKLE_BEAM, 30)) + { + gBattleStruct->fickleBeamBoosted = TRUE; + gBattlescriptCurrInstr = BattleScript_FickleBeamDoubled; + } + else + { + gBattlescriptCurrInstr = cmd->nextInstr; + } +} diff --git a/src/battle_terastal.c b/src/battle_terastal.c index 6866c6aaad87..f687150d398d 100644 --- a/src/battle_terastal.c +++ b/src/battle_terastal.c @@ -30,7 +30,7 @@ void ActivateTera(u32 battler) if (B_FLAG_TERA_ORB_CHARGED != 0 && (B_FLAG_TERA_ORB_NO_COST == 0 || !FlagGet(B_FLAG_TERA_ORB_NO_COST)) && side == B_SIDE_PLAYER - && !(gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !IsPartnerMonFromSameTrainer(battler))) + && !(IsDoubleBattle() && !IsPartnerMonFromSameTrainer(battler))) { FlagClear(B_FLAG_TERA_ORB_CHARGED); } @@ -63,6 +63,10 @@ bool32 CanTerastallize(u32 battler) { u32 holdEffect = GetBattlerHoldEffect(battler, FALSE); + // Prevents Zigzagoon from terastalizing in vanilla. + if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE && GetBattlerSide(battler) == B_SIDE_OPPONENT) + return FALSE; + if (TESTING || GetBattlerSide(battler) == B_SIDE_OPPONENT) { // Skip all other checks in this block, go to HasTrainerUsedGimmick diff --git a/src/battle_tower.c b/src/battle_tower.c index 045f87ad6553..51200512f14d 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -143,7 +143,7 @@ const u8 gTowerFemaleFacilityClasses[20] = FACILITY_CLASS_LASS }; -const u8 gTowerMaleTrainerGfxIds[30] = +const u16 gTowerMaleTrainerGfxIds[30] = { OBJ_EVENT_GFX_HIKER, OBJ_EVENT_GFX_TUBER_M, @@ -177,7 +177,7 @@ const u8 gTowerMaleTrainerGfxIds[30] = OBJ_EVENT_GFX_HIKER }; -const u8 gTowerFemaleTrainerGfxIds[20] = +const u16 gTowerFemaleTrainerGfxIds[20] = { OBJ_EVENT_GFX_WOMAN_2, OBJ_EVENT_GFX_TUBER_F, @@ -3524,7 +3524,7 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount) u16 FacilityClassToGraphicsId(u8 facilityClass) { - u8 trainerObjectGfxId; + u16 trainerObjectGfxId; u8 i; // Search male classes. diff --git a/src/battle_util.c b/src/battle_util.c index 678778bf1ac2..b16a33764b61 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -196,7 +196,7 @@ void HandleAction_UseMove(void) // Set dynamic move type. SetTypeBeforeUsingMove(gChosenMove, gBattlerAttacker); - GET_MOVE_TYPE(gChosenMove, moveType); + moveType = GetMoveType(gCurrentMove); // check Z-Move used if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE && !IS_MOVE_STATUS(gCurrentMove) && !IsZMove(gCurrentMove)) @@ -221,7 +221,7 @@ void HandleAction_UseMove(void) { gBattleStruct->moveTarget[gBattlerAttacker] = gBattlerTarget = gSideTimers[side].followmeTarget; // follow me moxie fix } - else if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + else if (IsDoubleBattle() && gSideTimers[side].followmeTimer == 0 && (gMovesInfo[gCurrentMove].power != 0 || (moveTarget != MOVE_TARGET_USER && moveTarget != MOVE_TARGET_ALL_BATTLERS)) && ((GetBattlerAbility(*(gBattleStruct->moveTarget + gBattlerAttacker)) != ABILITY_LIGHTNING_ROD && moveType == TYPE_ELECTRIC) @@ -305,8 +305,7 @@ void HandleAction_UseMove(void) gBattlerTarget = battler; } } - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE - && moveTarget & MOVE_TARGET_RANDOM) + else if (IsDoubleBattle() && moveTarget & MOVE_TARGET_RANDOM) { if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) { @@ -336,8 +335,7 @@ void HandleAction_UseMove(void) else gBattlerTarget = gBattlerAttacker; } - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE - && moveTarget == MOVE_TARGET_FOES_AND_ALLY) + else if (IsDoubleBattle() && moveTarget == MOVE_TARGET_FOES_AND_ALLY) { for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++) { @@ -722,7 +720,8 @@ void HandleAction_ActionFinished(void) | HITMARKER_CHARGING | HITMARKER_NEVER_SET | HITMARKER_IGNORE_DISGUISE); // check if Stellar type boost should be used up - GET_MOVE_TYPE(gCurrentMove, moveType); + moveType = GetMoveType(gCurrentMove); + if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA && GetBattlerTeraType(gBattlerAttacker) == TYPE_STELLAR && gMovesInfo[gCurrentMove].category != DAMAGE_CATEGORY_STATUS @@ -1137,7 +1136,6 @@ void PrepareStringBattle(u16 stringId, u32 battler) && ((gSpecialStatuses[gBattlerTarget].changedStatsBattlerId != gBattlerTarget) || gBattleScripting.stickyWebStatDrop == 1) && !(gBattleScripting.stickyWebStatDrop == 1 && gSideTimers[targetSide].stickyWebBattlerSide == targetSide)) // Sticky Web must have been set by the foe { - gBattleScripting.stickyWebStatDrop = 0; gBattlerAbility = gBattlerTarget; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_AbilityRaisesDefenderStat; @@ -3744,7 +3742,7 @@ bool32 HasNoMonsToSwitch(u32 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2 u32 i, side, playerId, flankId; struct Pokemon *party; - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!IsDoubleBattle()) return FALSE; side = GetBattlerSide(battler); @@ -4061,6 +4059,54 @@ static inline bool32 HadMoreThanHalfHpNowDoesnt(u32 battler) && gBattleMons[battler].hp <= cutoff); } +#define ANIM_STAT_HP 0 +#define ANIM_STAT_ATK 1 +#define ANIM_STAT_DEF 2 +#define ANIM_STAT_SPATK 3 +#define ANIM_STAT_SPDEF 4 +#define ANIM_STAT_SPEED 5 +#define ANIM_STAT_ACC 6 +#define ANIM_STAT_EVASION 7 +static void ChooseStatBoostAnimation(u32 battler) +{ + u32 stat; + bool32 statBuffMoreThan1 = FALSE; + u32 static const statsOrder[NUM_BATTLE_STATS] = + { + [ANIM_STAT_HP] = STAT_HP, + [ANIM_STAT_ATK] = STAT_ATK, + [ANIM_STAT_DEF] = STAT_DEF, + [ANIM_STAT_SPATK] = STAT_SPATK, + [ANIM_STAT_SPDEF] = STAT_SPDEF, + [ANIM_STAT_SPEED] = STAT_SPEED, + [ANIM_STAT_ACC] = STAT_ACC, + [ANIM_STAT_EVASION] = STAT_EVASION, + }; + gBattleScripting.animArg1 = 0; + + for (stat = 1; stat < NUM_BATTLE_STATS; stat++) // Start loop at 1 to avoid STAT_HP + { + if ((gQueuedStatBoosts[battler].stats & (1 << statsOrder[stat])) == 0) + continue; + + if (!statBuffMoreThan1) + statBuffMoreThan1 = ((gQueuedStatBoosts[battler].stats & (1 << statsOrder[stat])) > 1); + + if (gBattleScripting.animArg1 != 0) // Already set in a different stat so now boosting multiple stats + gBattleScripting.animArg1 = (statBuffMoreThan1 ? STAT_ANIM_MULTIPLE_PLUS2 : STAT_ANIM_MULTIPLE_PLUS1); + else + gBattleScripting.animArg1 = GET_STAT_BUFF_ID((statsOrder[stat] + 1)) + (statBuffMoreThan1 ? STAT_ANIM_PLUS2 : STAT_ANIM_PLUS1); + } +} +#undef ANIM_STAT_HP +#undef ANIM_STAT_ATK +#undef ANIM_STAT_DEF +#undef ANIM_STAT_SPATK +#undef ANIM_STAT_SPDEF +#undef ANIM_STAT_SPEED +#undef ANIM_STAT_ACC +#undef ANIM_STAT_EVASION + u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 moveArg) { u32 effect = 0; @@ -4086,7 +4132,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 else move = gCurrentMove; - GET_MOVE_TYPE(move, moveType); + moveType = GetMoveType(move); switch (caseID) { @@ -4328,7 +4374,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 target1 = GetBattlerAtPosition(side); target2 = GetBattlerAtPosition(side + BIT_FLANK); gSpecialStatuses[battler].switchInAbilityDone = TRUE; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { if (!gAbilitiesInfo[gBattleMons[target1].ability].cantBeTraced && gBattleMons[target1].hp != 0 && !gAbilitiesInfo[gBattleMons[target2].ability].cantBeTraced && gBattleMons[target2].hp != 0) @@ -4459,7 +4505,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 for (j = 0; j < MAX_MON_MOVES; j++) { move = gBattleMons[i].moves[j]; - GET_MOVE_TYPE(move, moveType); + moveType = GetMoveType(move); if (CalcTypeEffectivenessMultiplier(move, moveType, i, battler, ABILITY_ANTICIPATION, FALSE) >= UQ_4_12(2.0)) { effect++; @@ -5177,7 +5223,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && BlocksPrankster(move, gBattlerAttacker, gBattlerTarget, TRUE) && !(IS_MOVE_STATUS(move) && (gLastUsedAbility == ABILITY_MAGIC_BOUNCE || gProtectStructs[gBattlerTarget].bounceMove))) { - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE) || !(moveTarget & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY))) + if (!IsDoubleBattle() || !(moveTarget & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY))) CancelMultiTurnMoves(gBattlerAttacker); // Don't cancel moves that can hit two targets bc one target might not be protected gBattleScripting.battler = gBattlerAbility = gBattlerTarget; battleScriptBlocksMove = BattleScript_DarkTypePreventsPrankster; @@ -5518,6 +5564,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && TARGET_TURN_DAMAGED && !IS_BATTLER_OF_TYPE(battler, moveType) && moveType != TYPE_STELLAR + && moveType != TYPE_MYSTERY && IsBattlerAlive(battler)) { SET_BATTLER_TYPE(battler, moveType); @@ -6002,6 +6049,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 // Edge case for dance moves that hit multiply targets gHitMarker &= ~HITMARKER_NO_ATTACKSTRING; + SetTypeBeforeUsingMove(gCalledMove, battler); // Make sure that the target isn't an ally - if it is, target the original user if (GetBattlerSide(gBattlerTarget) == GetBattlerSide(gBattlerAttacker)) @@ -6025,40 +6073,10 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_OPPORTUNIST: if (gProtectStructs[battler].activateOpportunist == 2) { - bool32 statBuffMoreThan1 = FALSE; - bool32 handleSpeedAnimLater = FALSE; gBattleScripting.animArg1 = 0; gBattleScripting.battler = battler; gProtectStructs[battler].activateOpportunist--; - - for (i = 0; i < (NUM_BATTLE_STATS - 1); i++) - { - if ((gQueuedStatBoosts[battler].stats & (1 << i)) == 0) - continue; - - if (i == STAT_SPEED) - { - handleSpeedAnimLater = TRUE; - continue; - } - - if (!statBuffMoreThan1) - statBuffMoreThan1 = ((gQueuedStatBoosts[battler].stats & (1 << i)) > 1); - - if (gBattleScripting.animArg1 != 0) //Already set in a different stat so now boosting multiple stats - gBattleScripting.animArg1 = (!statBuffMoreThan1 ? STAT_ANIM_MULTIPLE_PLUS1 : STAT_ANIM_MULTIPLE_PLUS2); - else - gBattleScripting.animArg1 = GET_STAT_BUFF_ID((i + 1)) + (!statBuffMoreThan1 ? STAT_ANIM_PLUS1 : STAT_ANIM_PLUS2); - - } - if (handleSpeedAnimLater) - { - if (gBattleScripting.animArg1 != 0) //Already set in a different stat so now boosting multiple stats - gBattleScripting.animArg1 = (!statBuffMoreThan1 ? STAT_ANIM_MULTIPLE_PLUS1 : STAT_ANIM_MULTIPLE_PLUS2); - else - gBattleScripting.animArg1 = GET_STAT_BUFF_ID((STAT_SPEED + 1)) + (!statBuffMoreThan1 ? STAT_ANIM_PLUS1 : STAT_ANIM_PLUS2); - } - + ChooseStatBoostAnimation(battler); BattleScriptPushCursorAndCallback(BattleScript_OpportunistCopyStatChange); effect = 1; } @@ -7007,43 +7025,11 @@ static u8 TryConsumeMirrorHerb(u32 battler, bool32 execute) if (gProtectStructs[battler].eatMirrorHerb) { - u32 i; - bool32 statBuffMoreThan1 = FALSE; - bool32 handleSpeedAnimLater = FALSE; - gBattleScripting.animArg1 = 0; gLastUsedItem = gBattleMons[battler].item; gBattleScripting.battler = battler; gProtectStructs[battler].eatMirrorHerb = 0; - - for (i = 0; i < (NUM_BATTLE_STATS - 1); i++) - { - if ((gQueuedStatBoosts[battler].stats & (1 << i)) == 0) - continue; - - if (i == STAT_SPEED) - { - handleSpeedAnimLater = TRUE; - continue; - } - - if (!statBuffMoreThan1) - statBuffMoreThan1 = ((gQueuedStatBoosts[battler].stats & (1 << i)) > 1); - - if (gBattleScripting.animArg1 != 0) //Already set in a different stat so now boosting multiple stats - gBattleScripting.animArg1 = (!statBuffMoreThan1 ? STAT_ANIM_MULTIPLE_PLUS1 : STAT_ANIM_MULTIPLE_PLUS2); - else - gBattleScripting.animArg1 = GET_STAT_BUFF_ID((i + 1)) + (!statBuffMoreThan1 ? STAT_ANIM_PLUS1 : STAT_ANIM_PLUS2); - - } - if (handleSpeedAnimLater) - { - if (gBattleScripting.animArg1 != 0) //Already set in a different stat so now boosting multiple stats - gBattleScripting.animArg1 = (!statBuffMoreThan1 ? STAT_ANIM_MULTIPLE_PLUS1 : STAT_ANIM_MULTIPLE_PLUS2); - else - gBattleScripting.animArg1 = GET_STAT_BUFF_ID((STAT_SPEED + 1)) + (!statBuffMoreThan1 ? STAT_ANIM_PLUS1 : STAT_ANIM_PLUS2); - } - + ChooseStatBoostAnimation(battler); if (execute) { BattleScriptExecute(BattleScript_MirrorHerbCopyStatChangeEnd2); @@ -7999,7 +7985,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) case ITEMEFFECT_TARGET: if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) { - GET_MOVE_TYPE(gCurrentMove, moveType); + moveType = GetMoveType(gCurrentMove); switch (battlerHoldEffect) { case HOLD_EFFECT_AIR_BALLOON: @@ -8252,7 +8238,7 @@ u32 SetRandomTarget(u32 battler) [B_SIDE_OPPONENT] = {B_POSITION_PLAYER_LEFT, B_POSITION_PLAYER_RIGHT}, }; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { target = GetBattlerAtPosition(targets[GetBattlerSide(battler)][Random() % 2]); if (!IsBattlerAlive(target)) @@ -8270,6 +8256,7 @@ u32 GetMoveTarget(u16 move, u8 setTarget) { u8 targetBattler = 0; u32 moveTarget, side; + u32 moveType = GetMoveType(move); if (setTarget != NO_TARGET_OVERRIDE) moveTarget = setTarget - 1; @@ -8287,7 +8274,7 @@ u32 GetMoveTarget(u16 move, u8 setTarget) else { targetBattler = SetRandomTarget(gBattlerAttacker); - if (gMovesInfo[move].type == TYPE_ELECTRIC + if (moveType == TYPE_ELECTRIC && IsAbilityOnOpposingSide(gBattlerAttacker, ABILITY_LIGHTNING_ROD) && GetBattlerAbility(targetBattler) != ABILITY_LIGHTNING_ROD) { @@ -8295,7 +8282,7 @@ u32 GetMoveTarget(u16 move, u8 setTarget) RecordAbilityBattle(targetBattler, gBattleMons[targetBattler].ability); gSpecialStatuses[targetBattler].lightningRodRedirected = TRUE; } - else if (gMovesInfo[move].type == TYPE_WATER + else if (moveType == TYPE_WATER && IsAbilityOnOpposingSide(gBattlerAttacker, ABILITY_STORM_DRAIN) && GetBattlerAbility(targetBattler) != ABILITY_STORM_DRAIN) { @@ -8317,7 +8304,7 @@ u32 GetMoveTarget(u16 move, u8 setTarget) side = BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker)); if (IsAffectedByFollowMe(gBattlerAttacker, side, move)) targetBattler = gSideTimers[side].followmeTarget; - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && moveTarget & MOVE_TARGET_RANDOM) + else if (IsDoubleBattle() && moveTarget & MOVE_TARGET_RANDOM) targetBattler = SetRandomTarget(gBattlerAttacker); else targetBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker))); @@ -8404,7 +8391,7 @@ u8 IsMonDisobedient(void) // is not obedient if (gCurrentMove == MOVE_RAGE) gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_RAGE; - if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP && (gCurrentMove == MOVE_SNORE || gCurrentMove == MOVE_SLEEP_TALK)) + if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP && (gMovesInfo[gCurrentMove].effect == EFFECT_SNORE || gMovesInfo[gCurrentMove].effect == EFFECT_SLEEP_TALK)) { gBattlescriptCurrInstr = BattleScript_IgnoresWhileAsleep; return 1; @@ -8899,10 +8886,7 @@ static inline u32 CalcMoveBasePower(u32 move, u32 battlerAtk, u32 battlerDef, u3 basePower = gBattleStruct->presentBasePower; break; case EFFECT_TRIPLE_KICK: - if (gMultiHitCounter == 0) // Calc damage with max BP for move consideration - basePower *= 6; - else - basePower *= 1 + gMovesInfo[move].strikeCount - gMultiHitCounter; + basePower *= 1 + gMovesInfo[move].strikeCount - gMultiHitCounter; break; case EFFECT_SPIT_UP: basePower = 100 * gDisableStructs[battlerAtk].stockpileCounter; @@ -9087,7 +9071,7 @@ static inline u32 CalcMoveBasePower(u32 move, u32 battlerAtk, u32 battlerDef, u3 basePower = (basePower > 350) ? 350 : basePower; break; case EFFECT_FICKLE_BEAM: - if (RandomPercentage(RNG_FICKLE_BEAM, 30)) + if (gBattleStruct->fickleBeamBoosted) basePower *= 2; break; case EFFECT_TERA_BLAST: @@ -9787,7 +9771,7 @@ static inline u32 CalcDefenseStat(u32 move, u32 battlerAtk, u32 battlerDef, u32 modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; case ABILITY_PURIFYING_SALT: - if (gMovesInfo[move].type == TYPE_GHOST) + if (moveType == TYPE_GHOST) modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); break; } @@ -9878,7 +9862,9 @@ static inline uq4_12_t GetParentalBondModifier(u32 battlerAtk) static inline uq4_12_t GetSameTypeAttackBonusModifier(u32 battlerAtk, u32 moveType, u32 move, u32 abilityAtk) { - if (gBattleStruct->pledgeMove && IS_BATTLER_OF_TYPE(BATTLE_PARTNER(battlerAtk), moveType)) + if (moveType == TYPE_MYSTERY) + return UQ_4_12(1.0); + else if (gBattleStruct->pledgeMove && IS_BATTLER_OF_TYPE(BATTLE_PARTNER(battlerAtk), moveType)) return (abilityAtk == ABILITY_ADAPTABILITY) ? UQ_4_12(2.0) : UQ_4_12(1.5); else if (!IS_BATTLER_OF_TYPE(battlerAtk, moveType) || move == MOVE_STRUGGLE || move == MOVE_NONE) return UQ_4_12(1.0); @@ -9983,7 +9969,7 @@ static inline uq4_12_t GetScreensModifier(u32 move, u32 battlerAtk, u32 battlerD if (isCrit || abilityAtk == ABILITY_INFILTRATOR || gProtectStructs[battlerAtk].confusionSelfDmg) return UQ_4_12(1.0); if (reflect || lightScreen || auroraVeil) - return (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) ? UQ_4_12(0.667) : UQ_4_12(0.5); + return (IsDoubleBattle()) ? UQ_4_12(0.667) : UQ_4_12(0.5); return UQ_4_12(1.0); } @@ -10481,7 +10467,7 @@ uq4_12_t CalcTypeEffectivenessMultiplier(u32 move, u32 moveType, u32 battlerAtk, uq4_12_t CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u16 abilityDef) { uq4_12_t modifier = UQ_4_12(1.0); - u8 moveType = gMovesInfo[move].type; + u32 moveType = GetMoveType(move); if (move != MOVE_STRUGGLE && moveType != TYPE_MYSTERY) { @@ -10599,8 +10585,8 @@ s32 GetStealthHazardDamageByTypesAndHP(u8 hazardType, u8 type1, u8 type2, u32 ma s32 GetStealthHazardDamage(u8 hazardType, u32 battler) { - u8 type1 = gBattleMons[battler].type1; - u8 type2 = gBattleMons[battler].type2; + u8 type1 = gBattleMons[battler].types[0]; + u8 type2 = gBattleMons[battler].types[1]; u32 maxHp = gBattleMons[battler].maxHP; return GetStealthHazardDamageByTypesAndHP(hazardType, type1, type2, maxHp); @@ -11074,7 +11060,6 @@ static u32 SwapMoveDamageCategory(u32 move) u8 GetBattleMoveCategory(u32 moveId) { - u8 moveType; if (gBattleStruct != NULL && gBattleStruct->swapDamageCategory) // Photon Geyser, Shell Side Arm, Light That Burns the Sky, Tera Blast return SwapMoveDamageCategory(moveId); if (gBattleStruct != NULL && (IsZMove(moveId) || IsMaxMove(moveId))) // TODO: Might be buggy depending on when this is called. @@ -11084,11 +11069,7 @@ u8 GetBattleMoveCategory(u32 moveId) if (IS_MOVE_STATUS(moveId)) return DAMAGE_CATEGORY_STATUS; - else if (gMain.inBattle) - GET_MOVE_TYPE(moveId, moveType); - else - moveType = gMovesInfo[moveId].type; - return gTypesInfo[moveType].damageCategory; + return gTypesInfo[GetMoveType(gCurrentMove)].damageCategory; } static bool32 TryRemoveScreens(u32 battler) @@ -11497,9 +11478,9 @@ void CopyMonLevelAndBaseStatsToBattleMon(u32 battler, struct Pokemon *mon) void CopyMonAbilityAndTypesToBattleMon(u32 battler, struct Pokemon *mon) { gBattleMons[battler].ability = GetMonAbility(mon); - gBattleMons[battler].type1 = gSpeciesInfo[gBattleMons[battler].species].types[0]; - gBattleMons[battler].type2 = gSpeciesInfo[gBattleMons[battler].species].types[1]; - gBattleMons[battler].type3 = TYPE_MYSTERY; + gBattleMons[battler].types[0] = gSpeciesInfo[gBattleMons[battler].species].types[0]; + gBattleMons[battler].types[1] = gSpeciesInfo[gBattleMons[battler].species].types[1]; + gBattleMons[battler].types[2] = TYPE_MYSTERY; } void RecalcBattlerStats(u32 battler, struct Pokemon *mon) @@ -11704,9 +11685,9 @@ u8 GetBattlerType(u32 battler, u8 typeIndex, bool32 ignoreTera) { u32 teraType = GetBattlerTeraType(battler); u16 types[3] = {0}; - types[0] = gBattleMons[battler].type1; - types[1] = gBattleMons[battler].type2; - types[2] = gBattleMons[battler].type3; + types[0] = gBattleMons[battler].types[0]; + types[1] = gBattleMons[battler].types[1]; + types[2] = gBattleMons[battler].types[2]; // Handle Terastallization if (GetActiveGimmick(battler) == GIMMICK_TERA && teraType != TYPE_STELLAR && !ignoreTera) @@ -11735,8 +11716,8 @@ void RemoveBattlerType(u32 battler, u8 type) return; for (i = 0; i < 3; i++) { - if (*(u8 *)(&gBattleMons[battler].type1 + i) == type) - *(u8 *)(&gBattleMons[battler].type1 + i) = TYPE_MYSTERY; + if (*(u8 *)(&gBattleMons[battler].types[0] + i) == type) + *(u8 *)(&gBattleMons[battler].types[0] + i) = TYPE_MYSTERY; } } @@ -11792,7 +11773,7 @@ void SetShellSideArmCategory(void) bool32 CanTargetPartner(u32 battlerAtk, u32 battlerDef) { - return (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + return (IsDoubleBattle() && IsBattlerAlive(BATTLE_PARTNER(battlerDef)) && battlerDef != BATTLE_PARTNER(battlerAtk)); } @@ -11805,11 +11786,15 @@ static inline bool32 DoesCurrentTargetHaveAbilityImmunity(void) bool32 TargetFullyImmuneToCurrMove(u32 BattlerAtk, u32 battlerDef) { - u32 moveType = 0; - GET_MOVE_TYPE(gCurrentMove, moveType); - - return ((CalcTypeEffectivenessMultiplier(gCurrentMove, moveType, BattlerAtk, battlerDef, GetBattlerAbility(battlerDef), FALSE) == UQ_4_12(0.0)) + return ((CalcTypeEffectivenessMultiplier(gCurrentMove, GetMoveType(gCurrentMove), BattlerAtk, battlerDef, GetBattlerAbility(battlerDef), FALSE) == UQ_4_12(0.0)) || IsBattlerProtected(BattlerAtk, battlerDef, gCurrentMove) || IsSemiInvulnerable(battlerDef, gCurrentMove) || DoesCurrentTargetHaveAbilityImmunity()); } + +u32 GetMoveType(u32 move) +{ + if (gMain.inBattle && gBattleStruct->dynamicMoveType) + return gBattleStruct->dynamicMoveType & DYNAMIC_TYPE_MASK; + return gMovesInfo[move].type; +} diff --git a/src/battle_util2.c b/src/battle_util2.c index 2c333978d240..326acf0e40a8 100644 --- a/src/battle_util2.c +++ b/src/battle_util2.c @@ -80,7 +80,7 @@ void AdjustFriendshipOnBattleFaint(u8 battler) { u8 opposingBattlerId; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { u8 opposingBattlerId2; diff --git a/src/battle_z_move.c b/src/battle_z_move.c index c000c3580851..8113da48a93c 100644 --- a/src/battle_z_move.c +++ b/src/battle_z_move.c @@ -284,7 +284,7 @@ bool32 MoveSelectionDisplayZMove(u16 zmove, u32 battler) if (zEffect == Z_EFFECT_CURSE) { - if (moveInfo->monType1 == TYPE_GHOST || moveInfo->monType2 == TYPE_GHOST || moveInfo->monType3 == TYPE_GHOST) + if (moveInfo->monTypes[0] == TYPE_GHOST || moveInfo->monTypes[1] == TYPE_GHOST || moveInfo->monTypes[2] == TYPE_GHOST) zEffect = Z_EFFECT_RECOVER_HP; else zEffect = Z_EFFECT_ATK_UP_1; @@ -415,9 +415,7 @@ static void ZMoveSelectionDisplayPpNumber(u32 battler) static void ZMoveSelectionDisplayMoveType(u16 zMove, u32 battler) { u8 *txtPtr, *end; - u8 zMoveType; - - GET_MOVE_TYPE(zMove, zMoveType); + u32 zMoveType = GetMoveType(zMove); txtPtr = StringCopy(gDisplayedStringBattle, gText_MoveInterfaceType); *(txtPtr)++ = EXT_CTRL_CODE_BEGIN; diff --git a/src/berry_blender.c b/src/berry_blender.c index 0af3fd3ba646..a34afcf9984e 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -255,35 +255,20 @@ static const u16 sBlenderOuter_Pal[] = INCBIN_U16("graphics/berry_blender/outer. static const u16 sUnused_Pal[] = INCBIN_U16("graphics/berry_blender/unused.gbapal"); static const u16 sEmpty_Pal[16 * 14] = {0}; -// unused text -static const u8 sUnusedText_YesNo[] = _("YES\nNO"); -static const u8 sUnusedText_2[] = _("▶"); -static const u8 sUnusedText_Space[] = _(" "); -static const u8 sUnusedText_Terminating[] = _("Terminating."); -static const u8 sUnusedText_LinkPartnerNotFound[] = _("Link partner(s) not found.\nPlease try again.\p"); - static const u8 sText_BerryBlenderStart[] = _("Starting up the BERRY BLENDER.\pPlease select a BERRY from your BAG\nto put in the BERRY BLENDER.\p"); static const u8 sText_NewParagraph[] = _("\p"); static const u8 sText_WasMade[] = _(" was made!"); -static const u8 sText_Mister[] = _("MISTER"); -static const u8 sText_Laddie[] = _("LADDIE"); -static const u8 sText_Lassie[] = _("LASSIE"); -static const u8 sText_Master[] = _("MASTER"); -static const u8 sText_Dude[] = _("DUDE"); -static const u8 sText_Miss[] = _("MISS"); static const u8 *const sBlenderOpponentsNames[] = { - [BLENDER_MISTER] = sText_Mister, - [BLENDER_LADDIE] = sText_Laddie, - [BLENDER_LASSIE] = sText_Lassie, - [BLENDER_MASTER] = sText_Master, - [BLENDER_DUDE] = sText_Dude, - [BLENDER_MISS] = sText_Miss + [BLENDER_MISTER] = COMPOUND_STRING("MISTER"), + [BLENDER_LADDIE] = COMPOUND_STRING("LADDIE"), + [BLENDER_LASSIE] = COMPOUND_STRING("LASSIE"), + [BLENDER_MASTER] = COMPOUND_STRING("MASTER"), + [BLENDER_DUDE] = COMPOUND_STRING("DUDE"), + [BLENDER_MISS] = COMPOUND_STRING("MISS"), }; -static const u8 sText_PressAToStart[] = _("Press the A Button to start."); -static const u8 sText_PleaseWaitAWhile[] = _("Please wait a while."); static const u8 sText_CommunicationStandby[] = _("Communication standby…"); static const u8 sText_WouldLikeToBlendAnotherBerry[] = _("Would you like to blend another BERRY?"); static const u8 sText_RunOutOfBerriesForBlending[] = _("You've run out of BERRIES for\nblending in the BERRY BLENDER.\p"); @@ -291,7 +276,6 @@ static const u8 sText_YourPokeblockCaseIsFull[] = _("Your {POKEBLOCK} CASE is fu static const u8 sText_HasNoBerriesToPut[] = _(" has no BERRIES to put in\nthe BERRY BLENDER."); static const u8 sText_ApostropheSPokeblockCaseIsFull[] = _("'s {POKEBLOCK} CASE is full.\p"); static const u8 sText_BlendingResults[] = _("RESULTS OF BLENDING"); -static const u8 sText_BerryUsed[] = _("BERRY USED"); static const u8 sText_SpaceBerry[] = _(" BERRY"); static const u8 sText_Time[] = _("Time:"); static const u8 sText_Min[] = _(" min. "); @@ -300,7 +284,6 @@ static const u8 sText_MaximumSpeed[] = _("MAXIMUM SPEED"); static const u8 sText_RPM[] = _(" RPM"); static const u8 sText_Dot[] = _("."); static const u8 sText_NewLine[] = _("\n"); -static const u8 sText_Space[] = _(" "); static const u8 sText_Ranking[] = _("RANKING"); static const u8 sText_TheLevelIs[] = _("The level is "); static const u8 sText_TheFeelIs[] = _(", and the feel is "); diff --git a/src/data/battle_anim.h b/src/data/battle_anim.h index 371fb61a482d..72a3c7121bda 100644 --- a/src/data/battle_anim.h +++ b/src/data/battle_anim.h @@ -1455,12 +1455,16 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] = {gBattleAnimSpriteGfx_SyrupSplat, 0x400, ANIM_TAG_SYRUP_SPLAT_RED}, {gBattleAnimSpriteGfx_SyrupSplat, 0x400, ANIM_TAG_SYRUP_SPLAT_YELLOW}, {gBattleAnimSpriteGfx_IvyCudgel, 0x800, ANIM_TAG_IVY_CUDGEL_GRASS}, - {NULL, 0x0, ANIM_TAG_IVY_CUDGEL_FIRE}, - {NULL, 0x0, ANIM_TAG_IVY_CUDGEL_ROCK}, - {NULL, 0x0, ANIM_TAG_IVY_CUDGEL_WATER}, + {gBattleAnimSpriteGfx_IvyCudgel, 0x800, ANIM_TAG_IVY_CUDGEL_FIRE}, + {gBattleAnimSpriteGfx_IvyCudgel, 0x800, ANIM_TAG_IVY_CUDGEL_ROCK}, + {gBattleAnimSpriteGfx_IvyCudgel, 0x800, ANIM_TAG_IVY_CUDGEL_WATER}, {gBattleAnimSpriteGfx_TeraCrystal, 0x800, ANIM_TAG_TERA_CRYSTAL}, {gBattleAnimSpriteGfx_TeraShatter, 0x0180, ANIM_TAG_TERA_SHATTER}, {gBattleAnimSpriteGfx_DreepyMissile, 0x200, ANIM_TAG_DREEPY_SHINY}, + {gBattleAnimSpriteGfx_BloodMoon, 0x0800, ANIM_TAG_BLOOD_MOON}, + {gBattleAnimSpriteGfx_RedExplosion, 0x0800, ANIM_TAG_RED_EXPLOSION}, + {gBattleAnimSpriteGfx_Beam, 0x0800, ANIM_TAG_BEAM}, + {gBattleAnimSpriteGfx_PurpleChain, 0x1000, ANIM_TAG_PURPLE_CHAIN}, }; const struct CompressedSpritePalette gBattleAnimPaletteTable[] = @@ -1923,6 +1927,10 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] = {gBattleAnimSpritePal_TeraCrystal, ANIM_TAG_TERA_CRYSTAL}, {gBattleAnimSpritePal_TeraShatter, ANIM_TAG_TERA_SHATTER}, {gBattleAnimSpritePal_DreepyMissileShiny, ANIM_TAG_DREEPY_SHINY}, + {gBattleAnimSpritePal_BloodMoon, ANIM_TAG_BLOOD_MOON}, + {gBattleAnimSpritePal_RedExplosion, ANIM_TAG_RED_EXPLOSION}, + {gBattleAnimSpritePal_Beam, ANIM_TAG_BEAM}, + {gBattleAnimSpritePal_PurpleChain, ANIM_TAG_PURPLE_CHAIN}, }; const struct BattleAnimBackground gBattleAnimBackgroundTable[] = diff --git a/src/data/battle_move_effects.h b/src/data/battle_move_effects.h index f970f0e9f793..ead7cee6f1ef 100644 --- a/src/data/battle_move_effects.h +++ b/src/data/battle_move_effects.h @@ -2169,7 +2169,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_FICKLE_BEAM] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectFickleBeam, .battleTvScore = 0, // TODO: Assign points }, diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index 37258b7f540b..4c86c0adcdf7 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -10834,7 +10834,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gObjectEventPic_DialgaOrigin[] = INCBIN_COMP("graphics/pokemon/dialga/origin/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE const u32 gOverworldPalette_DialgaOrigin[] = INCBIN_U32("graphics/pokemon/dialga/origin/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_DialgaOrigin[] = INCBIN_U32("graphics/pokemon/dialga/origin/overworld_shiny.gbapal.lz"); + const u32 gShinyOverworldPalette_DialgaOrigin[] = INCBIN_U32("graphics/pokemon/dialga/origin/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_DIALGA @@ -10865,7 +10865,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gObjectEventPic_PalkiaOrigin[] = INCBIN_COMP("graphics/pokemon/palkia/origin/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE const u32 gOverworldPalette_PalkiaOrigin[] = INCBIN_U32("graphics/pokemon/palkia/origin/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_PalkiaOrigin[] = INCBIN_U32("graphics/pokemon/palkia/origin/overworld_shiny.gbapal.lz"); + const u32 gShinyOverworldPalette_PalkiaOrigin[] = INCBIN_U32("graphics/pokemon/palkia/origin/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_PALKIA @@ -14180,7 +14180,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gObjectEventPic_EnamorusIncarnate[] = INCBIN_COMP("graphics/pokemon/enamorus/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE const u32 gOverworldPalette_EnamorusIncarnate[] = INCBIN_U32("graphics/pokemon/enamorus/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_EnamorusIncarnate[] = INCBIN_U32("graphics/pokemon/enamorus/overworld_shiny.gbapal.lz"); + const u32 gShinyOverworldPalette_EnamorusIncarnate[] = INCBIN_U32("graphics/pokemon/enamorus/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -14193,7 +14193,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gObjectEventPic_EnamorusTherian[] = INCBIN_COMP("graphics/pokemon/enamorus/therian/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE const u32 gOverworldPalette_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/overworld_shiny.gbapal.lz"); + const u32 gShinyOverworldPalette_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_ENAMORUS @@ -15939,10 +15939,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonShinyPalette_XerneasActive[] = INCBIN_U32("graphics/pokemon/xerneas/active/shiny.gbapal.lz"); const u8 gMonIcon_XerneasActive[] = INCBIN_U8("graphics/pokemon/xerneas/active/icon.4bpp"); #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_XerneasActive[] = INCBIN_COMP("graphics/pokemon/xerneas/active/overworld.4bpp"); + const u32 gObjectEventPic_XerneasActive[] = INCBIN_COMP("graphics/pokemon/xerneas/active/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_XerneasActive[] = INCBIN_U32("graphics/pokemon/xerneas/active/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_XerneasActive[] = INCBIN_U32("graphics/pokemon/xerneas/active/overworld_shiny.gbapal.lz"); + //const u32 gOverworldPalette_XerneasActive[] = INCBIN_U32("graphics/pokemon/xerneas/active/overworld_normal.gbapal.lz"); + //const u32 gShinyOverworldPalette_XerneasActive[] = INCBIN_U32("graphics/pokemon/xerneas/active/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_XERNEAS diff --git a/src/data/items.h b/src/data/items.h index daf1f9b95708..f97c4670c104 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -12243,7 +12243,7 @@ const struct Item gItemsInfo[] = [ITEM_DOWSING_MACHINE] = { - .name = _("Dowsing MCHN"), + .name = HANDLE_EXPANDED_ITEM_NAME("Dowsing MCHN", "Dowsing Machine"), .price = 0, .description = COMPOUND_STRING( "A device that\n" diff --git a/src/data/moves_info.h b/src/data/moves_info.h index e79f804bb18d..bec17632ec89 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -20420,8 +20420,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = { .name = COMPOUND_STRING("Fickle Beam"), .description = COMPOUND_STRING( - "Shoots a beam of light. Sometimes\n" - "twice as strong."), + "Shoots a beam of light.\n" + "Sometimes twice as strong."), .effect = EFFECT_FICKLE_BEAM, .power = 80, .type = TYPE_DRAGON, diff --git a/src/data/object_events/object_event_pic_tables_followers.h b/src/data/object_events/object_event_pic_tables_followers.h index 46c134d911f0..b47faf52f1df 100644 --- a/src/data/object_events/object_event_pic_tables_followers.h +++ b/src/data/object_events/object_event_pic_tables_followers.h @@ -4465,9 +4465,9 @@ static const struct SpriteFrameImage sPicTable_Noivern[] = { static const struct SpriteFrameImage sPicTable_XerneasNeutral[] = { overworld_ascending_frames(gObjectEventPic_XerneasNeutral, 4, 4), }; -/*static const struct SpriteFrameImage sPicTable_XerneasActive[] = { +static const struct SpriteFrameImage sPicTable_XerneasActive[] = { overworld_ascending_frames(gObjectEventPic_XerneasActive, 4, 4), -};*/ +}; #endif //P_FAMILY_XERNEAS #if P_FAMILY_YVELTAL diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h index 4f21223eee3d..61da4873894e 100644 --- a/src/data/pokemon/species_info.h +++ b/src/data/pokemon/species_info.h @@ -211,7 +211,7 @@ const struct SpeciesInfo gSpeciesInfo[] = {EVO_ITEM, ITEM_MOOMOO_MILK, SPECIES_NONE}), //.formSpeciesIdTable = sNoneFormSpeciesIdTable, //.formChangeTable = sNoneFormChangeTable, - .allPerfectIVs = TRUE, + //.perfectIVCount = NUM_STATS, }, */ }; diff --git a/src/data/pokemon/species_info/gen_1_families.h b/src/data/pokemon/species_info/gen_1_families.h index e35bb848b7e3..5a6d4471061c 100644 --- a/src/data/pokemon/species_info/gen_1_families.h +++ b/src/data/pokemon/species_info/gen_1_families.h @@ -2090,6 +2090,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = FOOTPRINT(Raticate) .isTotem = TRUE, .isAlolanForm = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRaticateAlolanLevelUpLearnset, .teachableLearnset = sRaticateAlolanTeachableLearnset, .formSpeciesIdTable = sRaticateFormSpeciesIdTable, @@ -3411,7 +3412,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = #endif FOOTPRINT(Pikachu) .cannotBeTraded = TRUE, - .allPerfectIVs = TRUE, + .perfectIVCount = NUM_STATS, .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, .formSpeciesIdTable = sPikachuFormSpeciesIdTable, @@ -11836,6 +11837,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = FOOTPRINT(Marowak) .isTotem = TRUE, .isAlolanForm = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMarowakAlolanLevelUpLearnset, .teachableLearnset = sMarowakAlolanTeachableLearnset, .formSpeciesIdTable = sMarowakFormSpeciesIdTable, @@ -15575,7 +15577,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = #endif FOOTPRINT(Eevee) .cannotBeTraded = TRUE, - .allPerfectIVs = TRUE, + .perfectIVCount = NUM_STATS, .levelUpLearnset = sEeveeLevelUpLearnset, .teachableLearnset = sEeveeTeachableLearnset, .eggMoveLearnset = sEeveeEggMoveLearnset, @@ -16923,6 +16925,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Articuno ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sArticunoLevelUpLearnset, .teachableLearnset = sArticunoTeachableLearnset, .formSpeciesIdTable = sArticunoFormSpeciesIdTable, @@ -16988,6 +16991,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = ) .isLegendary = TRUE, .isGalarianForm = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sArticunoGalarianLevelUpLearnset, .teachableLearnset = sArticunoGalarianTeachableLearnset, .formSpeciesIdTable = sArticunoFormSpeciesIdTable, @@ -17064,6 +17068,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Zapdos ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZapdosLevelUpLearnset, .teachableLearnset = sZapdosTeachableLearnset, .formSpeciesIdTable = sZapdosFormSpeciesIdTable, @@ -17128,6 +17133,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = ) .isLegendary = TRUE, .isGalarianForm = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZapdosGalarianLevelUpLearnset, .teachableLearnset = sZapdosGalarianTeachableLearnset, .formSpeciesIdTable = sZapdosFormSpeciesIdTable, @@ -17199,6 +17205,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Moltres ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMoltresLevelUpLearnset, .teachableLearnset = sMoltresTeachableLearnset, .formSpeciesIdTable = sMoltresFormSpeciesIdTable, @@ -17263,6 +17270,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = ) .isLegendary = TRUE, .isGalarianForm = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMoltresGalarianLevelUpLearnset, .teachableLearnset = sMoltresGalarianTeachableLearnset, .formSpeciesIdTable = sMoltresFormSpeciesIdTable, @@ -17529,6 +17537,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMewtwoLevelUpLearnset, .teachableLearnset = sMewtwoTeachableLearnset, .formSpeciesIdTable = sMewtwoFormSpeciesIdTable, @@ -17587,6 +17596,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .isLegendary = TRUE, .isMegaEvolution = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMewtwoLevelUpLearnset, .teachableLearnset = sMewtwoTeachableLearnset, .formSpeciesIdTable = sMewtwoFormSpeciesIdTable, @@ -17645,6 +17655,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .isLegendary = TRUE, .isMegaEvolution = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMewtwoLevelUpLearnset, .teachableLearnset = sMewtwoTeachableLearnset, .formSpeciesIdTable = sMewtwoFormSpeciesIdTable, @@ -17721,6 +17732,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMewLevelUpLearnset, .teachableLearnset = sMewTeachableLearnset, }, diff --git a/src/data/pokemon/species_info/gen_2_families.h b/src/data/pokemon/species_info/gen_2_families.h index 1bfbb41bec48..ee4ab08f381f 100644 --- a/src/data/pokemon/species_info/gen_2_families.h +++ b/src/data/pokemon/species_info/gen_2_families.h @@ -6772,6 +6772,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Raikou ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRaikouLevelUpLearnset, .teachableLearnset = sRaikouTeachableLearnset, }, @@ -6846,6 +6847,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Entei ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sEnteiLevelUpLearnset, .teachableLearnset = sEnteiTeachableLearnset, }, @@ -6920,6 +6922,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Suicune ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sSuicuneLevelUpLearnset, .teachableLearnset = sSuicuneTeachableLearnset, }, @@ -7243,6 +7246,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLugiaLevelUpLearnset, .teachableLearnset = sLugiaTeachableLearnset, }, @@ -7316,6 +7320,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sHoOhLevelUpLearnset, .teachableLearnset = sHoOhTeachableLearnset, }, @@ -7389,6 +7394,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCelebiLevelUpLearnset, .teachableLearnset = sCelebiTeachableLearnset, }, diff --git a/src/data/pokemon/species_info/gen_3_families.h b/src/data/pokemon/species_info/gen_3_families.h index 8a23bb05fd2f..667dc54d0e50 100644 --- a/src/data/pokemon/species_info/gen_3_families.h +++ b/src/data/pokemon/species_info/gen_3_families.h @@ -10212,6 +10212,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Regirock ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRegirockLevelUpLearnset, .teachableLearnset = sRegirockTeachableLearnset, }, @@ -10281,6 +10282,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Regice ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRegiceLevelUpLearnset, .teachableLearnset = sRegiceTeachableLearnset, }, @@ -10351,6 +10353,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Registeel ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRegisteelLevelUpLearnset, .teachableLearnset = sRegisteelTeachableLearnset, }, @@ -10421,6 +10424,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Latias ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLatiasLevelUpLearnset, .teachableLearnset = sLatiasTeachableLearnset, .formSpeciesIdTable = sLatiasFormSpeciesIdTable, @@ -10479,6 +10483,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = FOOTPRINT(Latias) .isLegendary = TRUE, .isMegaEvolution = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLatiasLevelUpLearnset, .teachableLearnset = sLatiasTeachableLearnset, .formSpeciesIdTable = sLatiasFormSpeciesIdTable, @@ -10552,6 +10557,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Latios ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLatiosLevelUpLearnset, .teachableLearnset = sLatiosTeachableLearnset, .formSpeciesIdTable = sLatiosFormSpeciesIdTable, @@ -10610,6 +10616,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = FOOTPRINT(Latios) .isLegendary = TRUE, .isMegaEvolution = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLatiosLevelUpLearnset, .teachableLearnset = sLatiosTeachableLearnset, .formSpeciesIdTable = sLatiosFormSpeciesIdTable, @@ -10684,6 +10691,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKyogreLevelUpLearnset, .teachableLearnset = sKyogreTeachableLearnset, .formSpeciesIdTable = sKyogreFormSpeciesIdTable, @@ -10741,6 +10749,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .isLegendary = TRUE, .isPrimalReversion = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKyogreLevelUpLearnset, .teachableLearnset = sKyogreTeachableLearnset, .formSpeciesIdTable = sKyogreFormSpeciesIdTable, @@ -10814,6 +10823,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGroudonLevelUpLearnset, .teachableLearnset = sGroudonTeachableLearnset, .formSpeciesIdTable = sGroudonFormSpeciesIdTable, @@ -10872,6 +10882,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .isLegendary = TRUE, .isPrimalReversion = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGroudonLevelUpLearnset, .teachableLearnset = sGroudonTeachableLearnset, .formSpeciesIdTable = sGroudonFormSpeciesIdTable, @@ -10948,6 +10959,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRayquazaLevelUpLearnset, .teachableLearnset = sRayquazaTeachableLearnset, .formSpeciesIdTable = sRayquazaFormSpeciesIdTable, @@ -11008,6 +11020,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .isLegendary = TRUE, .isMegaEvolution = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRayquazaLevelUpLearnset, .teachableLearnset = sRayquazaTeachableLearnset, .formSpeciesIdTable = sRayquazaFormSpeciesIdTable, @@ -11084,6 +11097,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sJirachiLevelUpLearnset, .teachableLearnset = sJirachiTeachableLearnset, }, @@ -11154,6 +11168,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDeoxysNormalLevelUpLearnset, .teachableLearnset = sDeoxysNormalTeachableLearnset, .formSpeciesIdTable = sDeoxysFormSpeciesIdTable, @@ -11215,6 +11230,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDeoxysAttackLevelUpLearnset, .teachableLearnset = sDeoxysAttackTeachableLearnset, .formSpeciesIdTable = sDeoxysFormSpeciesIdTable, @@ -11276,6 +11292,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDeoxysDefenseLevelUpLearnset, .teachableLearnset = sDeoxysDefenseTeachableLearnset, .formSpeciesIdTable = sDeoxysFormSpeciesIdTable, @@ -11337,6 +11354,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDeoxysSpeedLevelUpLearnset, .teachableLearnset = sDeoxysSpeedTeachableLearnset, .formSpeciesIdTable = sDeoxysFormSpeciesIdTable, diff --git a/src/data/pokemon/species_info/gen_4_families.h b/src/data/pokemon/species_info/gen_4_families.h index faa9ed73b45c..e1dbdd160e2f 100644 --- a/src/data/pokemon/species_info/gen_4_families.h +++ b/src/data/pokemon/species_info/gen_4_families.h @@ -5235,6 +5235,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Uxie ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sUxieLevelUpLearnset, .teachableLearnset = sUxieTeachableLearnset, }, @@ -5307,6 +5308,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Mesprit ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMespritLevelUpLearnset, .teachableLearnset = sMespritTeachableLearnset, }, @@ -5378,6 +5380,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Azelf ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sAzelfLevelUpLearnset, .teachableLearnset = sAzelfTeachableLearnset, }, @@ -5450,6 +5453,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDialgaLevelUpLearnset, .teachableLearnset = sDialgaTeachableLearnset, .formSpeciesIdTable = sDialgaFormSpeciesIdTable, @@ -5509,11 +5513,12 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SIZE_64x64, SHADOW_SIZE_M, TRACKS_NONE, - gOverworldPalette_DialgaOrigin - //, gShinyOverworldPalette_DialgaOrigin + gOverworldPalette_DialgaOrigin, + gShinyOverworldPalette_DialgaOrigin ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDialgaLevelUpLearnset, .teachableLearnset = sDialgaTeachableLearnset, .formSpeciesIdTable = sDialgaFormSpeciesIdTable, @@ -5588,6 +5593,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sPalkiaLevelUpLearnset, .teachableLearnset = sPalkiaTeachableLearnset, .formSpeciesIdTable = sPalkiaFormSpeciesIdTable, @@ -5647,11 +5653,12 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SIZE_64x64, SHADOW_SIZE_M, TRACKS_NONE, - gOverworldPalette_PalkiaOrigin - //, gShinyOverworldPalette_PalkiaOrigin + gOverworldPalette_PalkiaOrigin, + gShinyOverworldPalette_PalkiaOrigin ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sPalkiaLevelUpLearnset, .teachableLearnset = sPalkiaTeachableLearnset, .formSpeciesIdTable = sPalkiaFormSpeciesIdTable, @@ -5723,6 +5730,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Heatran ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sHeatranLevelUpLearnset, .teachableLearnset = sHeatranTeachableLearnset, }, @@ -5792,6 +5800,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Regigigas ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRegigigasLevelUpLearnset, .teachableLearnset = sRegigigasTeachableLearnset, }, @@ -5864,6 +5873,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGiratinaLevelUpLearnset, .teachableLearnset = sGiratinaTeachableLearnset, .formSpeciesIdTable = sGiratinaFormSpeciesIdTable, @@ -5924,11 +5934,12 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = SIZE_64x64, SHADOW_SIZE_M, TRACKS_FOOT, - gOverworldPalette_GiratinaOrigin - //, gShinyOverworldPalette_GiratinaOrigin + gOverworldPalette_GiratinaOrigin, + gShinyOverworldPalette_GiratinaOrigin ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGiratinaLevelUpLearnset, .teachableLearnset = sGiratinaTeachableLearnset, .formSpeciesIdTable = sGiratinaFormSpeciesIdTable, @@ -6001,6 +6012,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Cresselia ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCresseliaLevelUpLearnset, .teachableLearnset = sCresseliaTeachableLearnset, }, @@ -6072,6 +6084,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sPhioneLevelUpLearnset, .teachableLearnset = sPhioneTeachableLearnset, }, @@ -6141,6 +6154,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sManaphyLevelUpLearnset, .teachableLearnset = sManaphyTeachableLearnset, }, @@ -6213,6 +6227,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDarkraiLevelUpLearnset, .teachableLearnset = sDarkraiTeachableLearnset, }, @@ -6287,6 +6302,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sShayminLandLevelUpLearnset, .teachableLearnset = sShayminLandTeachableLearnset, .formSpeciesIdTable = sShayminFormSpeciesIdTable, @@ -6350,6 +6366,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = FOOTPRINT(Shaymin) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sShayminSkyLevelUpLearnset, .teachableLearnset = sShayminSkyTeachableLearnset, .formSpeciesIdTable = sShayminFormSpeciesIdTable, @@ -6375,63 +6392,64 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .iconPalIndex = 1, #endif -#define ARCEUS_SPECIES_INFO(type, typeName, iconPal) \ - { \ - .baseHP = 120, \ - .baseAttack = 120, \ - .baseDefense = 120, \ - .baseSpeed = 120, \ - .baseSpAttack = 120, \ - .baseSpDefense = 120, \ - .types = MON_TYPES(type), \ - .catchRate = 3, \ - .expYield = ARCEUS_EXP_YIELD, \ - .evYield_HP = 3, \ - .genderRatio = MON_GENDERLESS, \ - .eggCycles = 120, \ - .friendship = 0, \ - .growthRate = GROWTH_SLOW, \ - .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ - .abilities = { ABILITY_MULTITYPE, ABILITY_NONE, ABILITY_NONE }, \ - .bodyColor = BODY_COLOR_WHITE, \ - .speciesName = _("Arceus"), \ - .cryId = CRY_ARCEUS, \ - .natDexNum = NATIONAL_DEX_ARCEUS, \ - .categoryName = _("Alpha"), \ - .height = 32, \ - .weight = 3200, \ - .description = gArceusPokedexText, \ - .pokemonScale = 256, \ - .pokemonOffset = 0, \ - .trainerScale = 495, \ - .trainerOffset = 10, \ - .frontPic = gMonFrontPic_Arceus, \ - .frontPicSize = MON_COORDS_SIZE(64, 64), \ - .frontPicYOffset = 0, \ - .frontAnimFrames = sAnims_Arceus, \ - .frontAnimId = ANIM_GROW_VIBRATE, \ - .backPic = gMonBackPic_Arceus, \ - .backPicSize = MON_COORDS_SIZE(64, 64), \ - .backPicYOffset = 3, \ - .backAnimId = BACK_ANIM_GROW_STUTTER, \ - .palette = gMonPalette_Arceus ##typeName, \ - .shinyPalette = gMonShinyPalette_Arceus ##typeName, \ - ARCEUS_ICON(typeName, iconPal) \ - FOOTPRINT(Arceus) \ - OVERWORLD( \ - sPicTable_Arceus ##typeName, \ - SIZE_64x64, \ - SHADOW_SIZE_M, \ - TRACKS_FOOT, \ - gOverworldPalette_Arceus ##typeName, \ - gShinyOverworldPalette_Arceus ##typeName \ - ) \ - .levelUpLearnset = sArceusLevelUpLearnset, \ - .teachableLearnset = sArceusTeachableLearnset, \ - .formSpeciesIdTable = sArceusFormSpeciesIdTable, \ - .formChangeTable = sArceusFormChangeTable, \ - .isMythical = TRUE, \ - .isFrontierBanned = TRUE, \ +#define ARCEUS_SPECIES_INFO(type, typeName, iconPal) \ + { \ + .baseHP = 120, \ + .baseAttack = 120, \ + .baseDefense = 120, \ + .baseSpeed = 120, \ + .baseSpAttack = 120, \ + .baseSpDefense = 120, \ + .types = MON_TYPES(type), \ + .catchRate = 3, \ + .expYield = ARCEUS_EXP_YIELD, \ + .evYield_HP = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ + .abilities = { ABILITY_MULTITYPE, ABILITY_NONE, ABILITY_NONE }, \ + .bodyColor = BODY_COLOR_WHITE, \ + .speciesName = _("Arceus"), \ + .cryId = CRY_ARCEUS, \ + .natDexNum = NATIONAL_DEX_ARCEUS, \ + .categoryName = _("Alpha"), \ + .height = 32, \ + .weight = 3200, \ + .description = gArceusPokedexText, \ + .pokemonScale = 256, \ + .pokemonOffset = 0, \ + .trainerScale = 495, \ + .trainerOffset = 10, \ + .frontPic = gMonFrontPic_Arceus, \ + .frontPicSize = MON_COORDS_SIZE(64, 64), \ + .frontPicYOffset = 0, \ + .frontAnimFrames = sAnims_Arceus, \ + .frontAnimId = ANIM_GROW_VIBRATE, \ + .backPic = gMonBackPic_Arceus, \ + .backPicSize = MON_COORDS_SIZE(64, 64), \ + .backPicYOffset = 3, \ + .backAnimId = BACK_ANIM_GROW_STUTTER, \ + .palette = gMonPalette_Arceus ##typeName, \ + .shinyPalette = gMonShinyPalette_Arceus ##typeName, \ + ARCEUS_ICON(typeName, iconPal) \ + FOOTPRINT(Arceus) \ + OVERWORLD( \ + sPicTable_Arceus ##typeName, \ + SIZE_64x64, \ + SHADOW_SIZE_M, \ + TRACKS_FOOT, \ + gOverworldPalette_Arceus ##typeName, \ + gShinyOverworldPalette_Arceus ##typeName \ + ) \ + .levelUpLearnset = sArceusLevelUpLearnset, \ + .teachableLearnset = sArceusTeachableLearnset, \ + .formSpeciesIdTable = sArceusFormSpeciesIdTable, \ + .formChangeTable = sArceusFormChangeTable, \ + .isMythical = TRUE, \ + .isFrontierBanned = TRUE, \ + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, \ } [SPECIES_ARCEUS_NORMAL] = ARCEUS_SPECIES_INFO(TYPE_NORMAL, Normal, 1), diff --git a/src/data/pokemon/species_info/gen_5_families.h b/src/data/pokemon/species_info/gen_5_families.h index ffa2dd4a1cef..2495cfa9611b 100644 --- a/src/data/pokemon/species_info/gen_5_families.h +++ b/src/data/pokemon/species_info/gen_5_families.h @@ -62,6 +62,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sVictiniLevelUpLearnset, .teachableLearnset = sVictiniTeachableLearnset, }, @@ -10795,6 +10796,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gShinyOverworldPalette_Cobalion ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCobalionLevelUpLearnset, .teachableLearnset = sCobalionTeachableLearnset, }, @@ -10858,6 +10860,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gShinyOverworldPalette_Terrakion ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTerrakionLevelUpLearnset, .teachableLearnset = sTerrakionTeachableLearnset, }, @@ -10921,6 +10924,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gShinyOverworldPalette_Virizion ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sVirizionLevelUpLearnset, .teachableLearnset = sVirizionTeachableLearnset, }, @@ -10985,6 +10989,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gShinyOverworldPalette_TornadusIncarnate ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTornadusLevelUpLearnset, .teachableLearnset = sTornadusTeachableLearnset, .formSpeciesIdTable = sTornadusFormSpeciesIdTable, @@ -11040,6 +11045,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .iconPalIndex = 1, FOOTPRINT(Tornadus) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTornadusLevelUpLearnset, .teachableLearnset = sTornadusTeachableLearnset, .formSpeciesIdTable = sTornadusFormSpeciesIdTable, @@ -11106,6 +11112,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gShinyOverworldPalette_ThundurusIncarnate ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sThundurusLevelUpLearnset, .teachableLearnset = sThundurusTeachableLearnset, .formSpeciesIdTable = sThundurusFormSpeciesIdTable, @@ -11162,6 +11169,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .iconPalIndex = 0, FOOTPRINT(Thundurus) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sThundurusLevelUpLearnset, .teachableLearnset = sThundurusTeachableLearnset, .formSpeciesIdTable = sThundurusFormSpeciesIdTable, @@ -11228,6 +11236,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sReshiramLevelUpLearnset, .teachableLearnset = sReshiramTeachableLearnset, }, @@ -11292,6 +11301,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZekromLevelUpLearnset, .teachableLearnset = sZekromTeachableLearnset, }, @@ -11356,6 +11366,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gShinyOverworldPalette_LandorusIncarnate ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLandorusLevelUpLearnset, .teachableLearnset = sLandorusTeachableLearnset, .formSpeciesIdTable = sLandorusFormSpeciesIdTable, @@ -11411,6 +11422,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .iconPalIndex = 0, FOOTPRINT(Landorus) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLandorusLevelUpLearnset, .teachableLearnset = sLandorusTeachableLearnset, .formSpeciesIdTable = sLandorusFormSpeciesIdTable, @@ -11480,6 +11492,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKyuremLevelUpLearnset, .teachableLearnset = sKyuremTeachableLearnset, .formSpeciesIdTable = sKyuremFormSpeciesIdTable, @@ -11544,6 +11557,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .isLegendary = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKyuremWhiteLevelUpLearnset, .teachableLearnset = sKyuremTeachableLearnset, .formSpeciesIdTable = sKyuremFormSpeciesIdTable, @@ -11607,6 +11621,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .isLegendary = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKyuremBlackLevelUpLearnset, .teachableLearnset = sKyuremTeachableLearnset, .formSpeciesIdTable = sKyuremFormSpeciesIdTable, @@ -11673,6 +11688,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKeldeoLevelUpLearnset, .teachableLearnset = sKeldeoTeachableLearnset, .formSpeciesIdTable = sKeldeoFormSpeciesIdTable, @@ -11730,6 +11746,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = FOOTPRINT(Keldeo) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKeldeoLevelUpLearnset, .teachableLearnset = sKeldeoTeachableLearnset, .formSpeciesIdTable = sKeldeoFormSpeciesIdTable, @@ -11802,6 +11819,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMeloettaLevelUpLearnset, .teachableLearnset = sMeloettaTeachableLearnset, .formSpeciesIdTable = sMeloettaFormSpeciesIdTable, @@ -11871,6 +11889,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMeloettaLevelUpLearnset, .teachableLearnset = sMeloettaTeachableLearnset, .formSpeciesIdTable = sMeloettaFormSpeciesIdTable, @@ -11879,66 +11898,67 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = #endif //P_FAMILY_MELOETTA #if P_FAMILY_GENESECT -#define GENESECT_SPECIES_INFO(form) \ - { \ - .baseHP = 71, \ - .baseAttack = 120, \ - .baseDefense = 95, \ - .baseSpeed = 99, \ - .baseSpAttack = 120, \ - .baseSpDefense = 95, \ - .types = MON_TYPES(TYPE_BUG, TYPE_STEEL), \ - .catchRate = 3, \ - .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 300 : 270, \ - .evYield_Attack = 1, \ - .evYield_Speed = 1, \ - .evYield_SpAttack = 1, \ - .genderRatio = MON_GENDERLESS, \ - .eggCycles = 120, \ - .friendship = 0, \ - .growthRate = GROWTH_SLOW, \ - .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ - .abilities = { ABILITY_DOWNLOAD, ABILITY_NONE, ABILITY_NONE }, \ - .bodyColor = BODY_COLOR_PURPLE, \ - .speciesName = _("Genesect"), \ - .cryId = CRY_GENESECT, \ - .natDexNum = NATIONAL_DEX_GENESECT, \ - .categoryName = _("Paleozoic"), \ - .height = 15, \ - .weight = 825, \ - .description = gGenesectPokedexText, \ - .pokemonScale = 268, \ - .pokemonOffset = 2, \ - .trainerScale = 271, \ - .trainerOffset = 0, \ - .frontPic = gMonFrontPic_Genesect, \ - .frontPicSize = MON_COORDS_SIZE(56, 64), \ - .frontPicYOffset = 0, \ - .frontAnimFrames = sAnims_Genesect, \ - .frontAnimId = ANIM_H_VIBRATE, \ - .backPic = gMonBackPic_Genesect, \ - .backPicSize = MON_COORDS_SIZE(64, 48), \ - .backPicYOffset = 8, \ - .backAnimId = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, \ - .palette = gMonPalette_##form, \ - .shinyPalette = gMonShinyPalette_##form, \ - .iconSprite = gMonIcon_Genesect, \ - .iconPalIndex = 2, \ - FOOTPRINT(Genesect) \ - OVERWORLD( \ - sPicTable_Genesect, \ - SIZE_32x32, \ - SHADOW_SIZE_M, \ - TRACKS_FOOT, \ - gOverworldPalette_Genesect, \ - gShinyOverworldPalette_Genesect \ - ) \ - .levelUpLearnset = sGenesectLevelUpLearnset, \ - .teachableLearnset = sGenesectTeachableLearnset, \ - .formSpeciesIdTable = sGenesectFormSpeciesIdTable, \ - .formChangeTable = sGenesectFormChangeTable, \ - .isMythical = TRUE, \ - .isFrontierBanned = TRUE, \ +#define GENESECT_SPECIES_INFO(form) \ + { \ + .baseHP = 71, \ + .baseAttack = 120, \ + .baseDefense = 95, \ + .baseSpeed = 99, \ + .baseSpAttack = 120, \ + .baseSpDefense = 95, \ + .types = MON_TYPES(TYPE_BUG, TYPE_STEEL), \ + .catchRate = 3, \ + .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 300 : 270, \ + .evYield_Attack = 1, \ + .evYield_Speed = 1, \ + .evYield_SpAttack = 1, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ + .abilities = { ABILITY_DOWNLOAD, ABILITY_NONE, ABILITY_NONE }, \ + .bodyColor = BODY_COLOR_PURPLE, \ + .speciesName = _("Genesect"), \ + .cryId = CRY_GENESECT, \ + .natDexNum = NATIONAL_DEX_GENESECT, \ + .categoryName = _("Paleozoic"), \ + .height = 15, \ + .weight = 825, \ + .description = gGenesectPokedexText, \ + .pokemonScale = 268, \ + .pokemonOffset = 2, \ + .trainerScale = 271, \ + .trainerOffset = 0, \ + .frontPic = gMonFrontPic_Genesect, \ + .frontPicSize = MON_COORDS_SIZE(56, 64), \ + .frontPicYOffset = 0, \ + .frontAnimFrames = sAnims_Genesect, \ + .frontAnimId = ANIM_H_VIBRATE, \ + .backPic = gMonBackPic_Genesect, \ + .backPicSize = MON_COORDS_SIZE(64, 48), \ + .backPicYOffset = 8, \ + .backAnimId = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, \ + .palette = gMonPalette_##form, \ + .shinyPalette = gMonShinyPalette_##form, \ + .iconSprite = gMonIcon_Genesect, \ + .iconPalIndex = 2, \ + FOOTPRINT(Genesect) \ + OVERWORLD( \ + sPicTable_Genesect, \ + SIZE_32x32, \ + SHADOW_SIZE_M, \ + TRACKS_FOOT, \ + gOverworldPalette_Genesect, \ + gShinyOverworldPalette_Genesect \ + ) \ + .levelUpLearnset = sGenesectLevelUpLearnset, \ + .teachableLearnset = sGenesectTeachableLearnset, \ + .formSpeciesIdTable = sGenesectFormSpeciesIdTable, \ + .formChangeTable = sGenesectFormChangeTable, \ + .isMythical = TRUE, \ + .isFrontierBanned = TRUE, \ + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, \ } [SPECIES_GENESECT] = GENESECT_SPECIES_INFO(Genesect), diff --git a/src/data/pokemon/species_info/gen_6_families.h b/src/data/pokemon/species_info/gen_6_families.h index 46c776639c20..d9fdf67355ac 100644 --- a/src/data/pokemon/species_info/gen_6_families.h +++ b/src/data/pokemon/species_info/gen_6_families.h @@ -5274,12 +5274,13 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = sPicTable_XerneasNeutral, SIZE_64x64, SHADOW_SIZE_M, - TRACKS_FOOT - //, gOverworldPalette_XerneasNeutral - //, gShinyOverworldPalette_XerneasNeutral + TRACKS_FOOT, + gOverworldPalette_XerneasNeutral, + gShinyOverworldPalette_XerneasNeutral ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sXerneasLevelUpLearnset, .teachableLearnset = sXerneasTeachableLearnset, .formSpeciesIdTable = sXerneasFormSpeciesIdTable, @@ -5331,7 +5332,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .iconPalIndex = 0, FOOTPRINT(Xerneas) OVERWORLD( - sPicTable_XerneasNeutral, + sPicTable_XerneasActive, SIZE_64x64, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5340,6 +5341,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sXerneasLevelUpLearnset, .teachableLearnset = sXerneasTeachableLearnset, .formSpeciesIdTable = sXerneasFormSpeciesIdTable, @@ -5407,6 +5409,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sYveltalLevelUpLearnset, .teachableLearnset = sYveltalTeachableLearnset, }, @@ -5468,6 +5471,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZygardeLevelUpLearnset, .teachableLearnset = sZygardeTeachableLearnset, .formSpeciesIdTable = sZygardeFormSpeciesIdTable, @@ -5528,6 +5532,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZygardeLevelUpLearnset, .teachableLearnset = sZygardeTeachableLearnset, .formSpeciesIdTable = sZygardeFormSpeciesIdTable, @@ -5580,6 +5585,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = FOOTPRINT(Zygarde) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZygardeLevelUpLearnset, .teachableLearnset = sZygardeTeachableLearnset, .formSpeciesIdTable = sZygardeFormSpeciesIdTable, @@ -5633,6 +5639,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = FOOTPRINT(Zygarde) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZygardeLevelUpLearnset, .teachableLearnset = sZygardeTeachableLearnset, .formSpeciesIdTable = sZygardeFormSpeciesIdTable, @@ -5690,6 +5697,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = FOOTPRINT(Zygarde) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZygardeLevelUpLearnset, .teachableLearnset = sZygardeTeachableLearnset, .formSpeciesIdTable = sZygardeFormSpeciesIdTable, @@ -5757,6 +5765,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDiancieLevelUpLearnset, .teachableLearnset = sDiancieTeachableLearnset, .formSpeciesIdTable = sDiancieFormSpeciesIdTable, @@ -5816,6 +5825,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .isMythical = TRUE, .isMegaEvolution = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDiancieLevelUpLearnset, .teachableLearnset = sDiancieTeachableLearnset, .formSpeciesIdTable = sDiancieFormSpeciesIdTable, @@ -5884,6 +5894,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sHoopaConfinedLevelUpLearnset, .teachableLearnset = sHoopaConfinedTeachableLearnset, .formSpeciesIdTable = sHoopaFormSpeciesIdTable, @@ -5949,6 +5960,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sHoopaUnboundLevelUpLearnset, .teachableLearnset = sHoopaUnboundTeachableLearnset, .formSpeciesIdTable = sHoopaFormSpeciesIdTable, @@ -6015,6 +6027,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sVolcanionLevelUpLearnset, .teachableLearnset = sVolcanionTeachableLearnset, }, diff --git a/src/data/pokemon/species_info/gen_7_families.h b/src/data/pokemon/species_info/gen_7_families.h index 4669051d046c..c16220ca6217 100644 --- a/src/data/pokemon/species_info/gen_7_families.h +++ b/src/data/pokemon/species_info/gen_7_families.h @@ -989,6 +989,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Gumshoos ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGumshoosLevelUpLearnset, .teachableLearnset = sGumshoosTeachableLearnset, .formSpeciesIdTable = sGumshoosFormSpeciesIdTable, @@ -1234,6 +1235,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Vikavolt ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sVikavoltLevelUpLearnset, .teachableLearnset = sVikavoltTeachableLearnset, .formSpeciesIdTable = sVikavoltFormSpeciesIdTable, @@ -1781,6 +1783,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Ribombee ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRibombeeLevelUpLearnset, .teachableLearnset = sRibombeeTeachableLearnset, .formSpeciesIdTable = sRibombeeFormSpeciesIdTable, @@ -2641,6 +2644,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Araquanid ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sAraquanidLevelUpLearnset, .teachableLearnset = sAraquanidTeachableLearnset, .formSpeciesIdTable = sAraquanidFormSpeciesIdTable, @@ -2824,6 +2828,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Lurantis ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLurantisLevelUpLearnset, .teachableLearnset = sLurantisTeachableLearnset, .formSpeciesIdTable = sLurantisFormSpeciesIdTable, @@ -3135,6 +3140,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Salazzle ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sSalazzleLevelUpLearnset, .teachableLearnset = sSalazzleTeachableLearnset, .formSpeciesIdTable = sSalanditFormSpeciesIdTable, @@ -4018,70 +4024,72 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_TypeNull ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTypeNullLevelUpLearnset, .teachableLearnset = sTypeNullTeachableLearnset, .evolutions = EVOLUTION({EVO_FRIENDSHIP, 0, SPECIES_SILVALLY_NORMAL}), }, -#define SILVALLY_SPECIES_INFO(type, _palette) \ - { \ - .baseHP = 95, \ - .baseAttack = 95, \ - .baseDefense = 95, \ - .baseSpeed = 95, \ - .baseSpAttack = 95, \ - .baseSpDefense = 95, \ - .types = MON_TYPES(type), \ - .catchRate = 3, \ - .expYield = 257, \ - .evYield_HP = 3, \ - .genderRatio = MON_GENDERLESS, \ - .eggCycles = 120, \ - .friendship = 0, \ - .growthRate = GROWTH_SLOW, \ - .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ - .abilities = { ABILITY_RKS_SYSTEM, ABILITY_NONE, ABILITY_NONE }, \ - .bodyColor = BODY_COLOR_GRAY, \ - .isLegendary = TRUE, \ - .speciesName = _("Silvally"), \ - .cryId = CRY_SILVALLY, \ - .natDexNum = NATIONAL_DEX_SILVALLY, \ - .categoryName = _("Synthetic"), \ - .height = 23, \ - .weight = 1005, \ - .description = (type == TYPE_NORMAL \ - ? gSilvallyNormalPokedexText \ - : gSilvallyMemoryPokedexText), \ - .pokemonScale = 256, \ - .pokemonOffset = 0, \ - .trainerScale = 342, \ - .trainerOffset = 7, \ - .frontPic = gMonFrontPic_Silvally, \ - .frontPicSize = MON_COORDS_SIZE(64, 64), \ - .frontPicYOffset = 0, \ - .frontAnimFrames = sAnims_Silvally, \ - .frontAnimId = ANIM_V_SHAKE, \ - .backPic = gMonBackPic_Silvally, \ - .backPicSize = MON_COORDS_SIZE(56, 64), \ - .backPicYOffset = 0, \ - /*.backAnimId = BACK_ANIM_NONE,*/ \ - .palette = gMonPalette_Silvally##_palette, \ - .shinyPalette = gMonShinyPalette_Silvally##_palette, \ - .iconSprite = gMonIcon_Silvally, \ - .iconPalIndex = 0, \ - FOOTPRINT(Silvally) \ - OVERWORLD( \ - sPicTable_Silvally, \ - SIZE_32x32, \ - SHADOW_SIZE_M, \ - TRACKS_FOOT, \ - gOverworldPalette_Silvally, \ - gShinyOverworldPalette_Silvally \ - ) \ - .levelUpLearnset = sSilvallyLevelUpLearnset, \ - .teachableLearnset = sSilvallyTeachableLearnset, \ - .formSpeciesIdTable = sSilvallyFormSpeciesIdTable, \ - .formChangeTable = sSilvallyFormChangeTable, \ +#define SILVALLY_SPECIES_INFO(type, _palette) \ + { \ + .baseHP = 95, \ + .baseAttack = 95, \ + .baseDefense = 95, \ + .baseSpeed = 95, \ + .baseSpAttack = 95, \ + .baseSpDefense = 95, \ + .types = MON_TYPES(type), \ + .catchRate = 3, \ + .expYield = 257, \ + .evYield_HP = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ + .abilities = { ABILITY_RKS_SYSTEM, ABILITY_NONE, ABILITY_NONE }, \ + .bodyColor = BODY_COLOR_GRAY, \ + .speciesName = _("Silvally"), \ + .cryId = CRY_SILVALLY, \ + .natDexNum = NATIONAL_DEX_SILVALLY, \ + .categoryName = _("Synthetic"), \ + .height = 23, \ + .weight = 1005, \ + .description = (type == TYPE_NORMAL \ + ? gSilvallyNormalPokedexText \ + : gSilvallyMemoryPokedexText), \ + .pokemonScale = 256, \ + .pokemonOffset = 0, \ + .trainerScale = 342, \ + .trainerOffset = 7, \ + .frontPic = gMonFrontPic_Silvally, \ + .frontPicSize = MON_COORDS_SIZE(64, 64), \ + .frontPicYOffset = 0, \ + .frontAnimFrames = sAnims_Silvally, \ + .frontAnimId = ANIM_V_SHAKE, \ + .backPic = gMonBackPic_Silvally, \ + .backPicSize = MON_COORDS_SIZE(56, 64), \ + .backPicYOffset = 0, \ + /*.backAnimId = BACK_ANIM_NONE,*/ \ + .palette = gMonPalette_Silvally##_palette, \ + .shinyPalette = gMonShinyPalette_Silvally##_palette, \ + .iconSprite = gMonIcon_Silvally, \ + .iconPalIndex = 0, \ + FOOTPRINT(Silvally) \ + OVERWORLD( \ + sPicTable_Silvally, \ + SIZE_32x32, \ + SHADOW_SIZE_M, \ + TRACKS_FOOT, \ + gOverworldPalette_Silvally, \ + gShinyOverworldPalette_Silvally \ + ) \ + .isLegendary = TRUE, \ + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, \ + .levelUpLearnset = sSilvallyLevelUpLearnset, \ + .teachableLearnset = sSilvallyTeachableLearnset, \ + .formSpeciesIdTable = sSilvallyFormSpeciesIdTable, \ + .formChangeTable = sSilvallyFormChangeTable, \ } [SPECIES_SILVALLY_NORMAL] = SILVALLY_SPECIES_INFO(TYPE_NORMAL, Normal), @@ -4455,6 +4463,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Togedemaru ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTogedemaruLevelUpLearnset, .teachableLearnset = sTogedemaruTeachableLearnset, .eggMoveLearnset = sTogedemaruEggMoveLearnset, @@ -4621,6 +4630,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .iconPalIndex = 1, FOOTPRINT(Mimikyu) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMimikyuLevelUpLearnset, .teachableLearnset = sMimikyuTeachableLearnset, .eggMoveLearnset = sMimikyuEggMoveLearnset, @@ -4674,6 +4684,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .iconPalIndex = 1, FOOTPRINT(Mimikyu) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMimikyuLevelUpLearnset, .teachableLearnset = sMimikyuTeachableLearnset, .eggMoveLearnset = sMimikyuEggMoveLearnset, @@ -5113,6 +5124,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_KommoO ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKommoOLevelUpLearnset, .teachableLearnset = sKommoOTeachableLearnset, .formSpeciesIdTable = sKommoOFormSpeciesIdTable, @@ -5178,6 +5190,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_TapuKoko ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTapuKokoLevelUpLearnset, .teachableLearnset = sTapuKokoTeachableLearnset, }, @@ -5242,6 +5255,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_TapuLele ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTapuLeleLevelUpLearnset, .teachableLearnset = sTapuLeleTeachableLearnset, }, @@ -5306,6 +5320,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_TapuBulu ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTapuBuluLevelUpLearnset, .teachableLearnset = sTapuBuluTeachableLearnset, }, @@ -5371,6 +5386,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_TapuFini ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTapuFiniLevelUpLearnset, .teachableLearnset = sTapuFiniTeachableLearnset, }, @@ -5437,6 +5453,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .isLegendary = TRUE, .tmIlliterate = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCosmogLevelUpLearnset, .teachableLearnset = sCosmogTeachableLearnset, .evolutions = EVOLUTION({EVO_LEVEL, 43, SPECIES_COSMOEM}), @@ -5503,6 +5520,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .isLegendary = TRUE, .tmIlliterate = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCosmoemLevelUpLearnset, .teachableLearnset = sCosmoemTeachableLearnset, .evolutions = EVOLUTION({EVO_LEVEL_DAY, 53, SPECIES_SOLGALEO}, @@ -5567,6 +5585,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sSolgaleoLevelUpLearnset, .teachableLearnset = sSolgaleoTeachableLearnset, }, @@ -5630,6 +5649,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLunalaLevelUpLearnset, .teachableLearnset = sLunalaTeachableLearnset, }, @@ -5694,6 +5714,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Nihilego ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sNihilegoLevelUpLearnset, .teachableLearnset = sNihilegoTeachableLearnset, }, @@ -5758,6 +5779,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Buzzwole ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sBuzzwoleLevelUpLearnset, .teachableLearnset = sBuzzwoleTeachableLearnset, }, @@ -5821,6 +5843,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Pheromosa ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sPheromosaLevelUpLearnset, .teachableLearnset = sPheromosaTeachableLearnset, }, @@ -5884,6 +5907,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Xurkitree ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sXurkitreeLevelUpLearnset, .teachableLearnset = sXurkitreeTeachableLearnset, }, @@ -5949,6 +5973,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Celesteela ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCelesteelaLevelUpLearnset, .teachableLearnset = sCelesteelaTeachableLearnset, }, @@ -6013,6 +6038,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Kartana ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKartanaLevelUpLearnset, .teachableLearnset = sKartanaTeachableLearnset, }, @@ -6076,6 +6102,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Guzzlord ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGuzzlordLevelUpLearnset, .teachableLearnset = sGuzzlordTeachableLearnset, }, @@ -6143,6 +6170,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sNecrozmaLevelUpLearnset, .teachableLearnset = sNecrozmaTeachableLearnset, .formSpeciesIdTable = sNecrozmaFormSpeciesIdTable, @@ -6209,6 +6237,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .isLegendary = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sNecrozmaLevelUpLearnset, .teachableLearnset = sNecrozmaTeachableLearnset, .formSpeciesIdTable = sNecrozmaFormSpeciesIdTable, @@ -6276,6 +6305,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .isLegendary = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sNecrozmaLevelUpLearnset, .teachableLearnset = sNecrozmaTeachableLearnset, .formSpeciesIdTable = sNecrozmaFormSpeciesIdTable, @@ -6339,6 +6369,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .isUltraBurst = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sNecrozmaLevelUpLearnset, .teachableLearnset = sNecrozmaTeachableLearnset, .formSpeciesIdTable = sNecrozmaFormSpeciesIdTable, @@ -6406,6 +6437,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMagearnaLevelUpLearnset, .teachableLearnset = sMagearnaTeachableLearnset, .formSpeciesIdTable = sMagearnaFormSpeciesIdTable, @@ -6460,6 +6492,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = FOOTPRINT(Magearna) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMagearnaLevelUpLearnset, .teachableLearnset = sMagearnaTeachableLearnset, .formSpeciesIdTable = sMagearnaFormSpeciesIdTable, @@ -6527,6 +6560,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMarshadowLevelUpLearnset, .teachableLearnset = sMarshadowTeachableLearnset, }, @@ -6590,6 +6624,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Poipole ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sPoipoleLevelUpLearnset, .teachableLearnset = sPoipoleTeachableLearnset, .evolutions = EVOLUTION({EVO_MOVE, MOVE_DRAGON_PULSE, SPECIES_NAGANADEL}), @@ -6652,6 +6687,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Naganadel ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sNaganadelLevelUpLearnset, .teachableLearnset = sNaganadelTeachableLearnset, }, @@ -6715,6 +6751,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Stakataka ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sStakatakaLevelUpLearnset, .teachableLearnset = sStakatakaTeachableLearnset, }, @@ -6778,6 +6815,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Blacephalon ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sBlacephalonLevelUpLearnset, .teachableLearnset = sBlacephalonTeachableLearnset, }, @@ -6841,6 +6879,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZeraoraLevelUpLearnset, .teachableLearnset = sZeraoraTeachableLearnset, }, @@ -6904,6 +6943,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMeltanLevelUpLearnset, .teachableLearnset = sMeltanTeachableLearnset, }, @@ -6965,6 +7005,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMelmetalLevelUpLearnset, .teachableLearnset = sMelmetalTeachableLearnset, .formSpeciesIdTable = sMelmetalFormSpeciesIdTable, @@ -7023,6 +7064,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .isMythical = TRUE, .isGigantamax = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMelmetalLevelUpLearnset, .teachableLearnset = sMelmetalTeachableLearnset, .formSpeciesIdTable = sMelmetalFormSpeciesIdTable, diff --git a/src/data/pokemon/species_info/gen_8_families.h b/src/data/pokemon/species_info/gen_8_families.h index 353597e96a58..83a2c99bc83a 100644 --- a/src/data/pokemon/species_info/gen_8_families.h +++ b/src/data/pokemon/species_info/gen_8_families.h @@ -6261,6 +6261,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZacianLevelUpLearnset, .teachableLearnset = sZacianTeachableLearnset, .formSpeciesIdTable = sZacianFormSpeciesIdTable, @@ -6325,6 +6326,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZacianLevelUpLearnset, .teachableLearnset = sZacianTeachableLearnset, .formSpeciesIdTable = sZacianFormSpeciesIdTable, @@ -6391,6 +6393,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZamazentaLevelUpLearnset, .teachableLearnset = sZamazentaTeachableLearnset, .formSpeciesIdTable = sZamazentaFormSpeciesIdTable, @@ -6455,6 +6458,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZamazentaLevelUpLearnset, .teachableLearnset = sZamazentaTeachableLearnset, .formSpeciesIdTable = sZamazentaFormSpeciesIdTable, @@ -6522,6 +6526,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sEternatusLevelUpLearnset, .teachableLearnset = sEternatusTeachableLearnset, .formSpeciesIdTable = sEternatusFormSpeciesIdTable, @@ -6578,6 +6583,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = FOOTPRINT(Eternatus) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sEternatusLevelUpLearnset, .teachableLearnset = sEternatusTeachableLearnset, .formSpeciesIdTable = sEternatusFormSpeciesIdTable, @@ -6641,6 +6647,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Kubfu ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKubfuLevelUpLearnset, .teachableLearnset = sKubfuTeachableLearnset, .evolutions = EVOLUTION({EVO_DARK_SCROLL, 0, SPECIES_URSHIFU_SINGLE_STRIKE_STYLE}, @@ -6706,6 +6713,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Urshifu ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sUrshifuSingleStrikeStyleLevelUpLearnset, .teachableLearnset = sUrshifuSingleStrikeStyleTeachableLearnset, .formSpeciesIdTable = sUrshifuFormSpeciesIdTable, @@ -6763,6 +6771,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = FOOTPRINT(Urshifu) .isLegendary = TRUE, .isGigantamax = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sUrshifuSingleStrikeStyleLevelUpLearnset, .teachableLearnset = sUrshifuSingleStrikeStyleTeachableLearnset, .formSpeciesIdTable = sUrshifuFormSpeciesIdTable, @@ -6826,6 +6835,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Urshifu ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sUrshifuRapidStrikeStyleLevelUpLearnset, .teachableLearnset = sUrshifuRapidStrikeStyleTeachableLearnset, .formSpeciesIdTable = sUrshifuFormSpeciesIdTable, @@ -6883,6 +6893,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = FOOTPRINT(Urshifu) .isLegendary = TRUE, .isGigantamax = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sUrshifuRapidStrikeStyleLevelUpLearnset, .teachableLearnset = sUrshifuRapidStrikeStyleTeachableLearnset, .formSpeciesIdTable = sUrshifuFormSpeciesIdTable, @@ -6950,6 +6961,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZarudeLevelUpLearnset, .teachableLearnset = sZarudeTeachableLearnset, .formSpeciesIdTable = sZarudeFormSpeciesIdTable, @@ -7004,6 +7016,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = FOOTPRINT(Zarude) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZarudeLevelUpLearnset, .teachableLearnset = sZarudeTeachableLearnset, .formSpeciesIdTable = sZarudeFormSpeciesIdTable, @@ -7069,6 +7082,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Regieleki ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRegielekiLevelUpLearnset, .teachableLearnset = sRegielekiTeachableLearnset, }, @@ -7133,6 +7147,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Regidrago ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRegidragoLevelUpLearnset, .teachableLearnset = sRegidragoTeachableLearnset, }, @@ -7195,6 +7210,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Glastrier ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGlastrierLevelUpLearnset, .teachableLearnset = sGlastrierTeachableLearnset, }, @@ -7258,6 +7274,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Spectrier ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sSpectrierLevelUpLearnset, .teachableLearnset = sSpectrierTeachableLearnset, }, @@ -7322,6 +7339,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCalyrexLevelUpLearnset, .teachableLearnset = sCalyrexTeachableLearnset, .formSpeciesIdTable = sCalyrexFormSpeciesIdTable, @@ -7387,6 +7405,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .isLegendary = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCalyrexIceRiderLevelUpLearnset, .teachableLearnset = sCalyrexIceRiderTeachableLearnset, .formSpeciesIdTable = sCalyrexFormSpeciesIdTable, @@ -7451,6 +7470,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .isLegendary = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCalyrexShadowRiderLevelUpLearnset, .teachableLearnset = sCalyrexShadowRiderTeachableLearnset, .formSpeciesIdTable = sCalyrexFormSpeciesIdTable, @@ -7512,11 +7532,12 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = sPicTable_EnamorusIncarnate, SIZE_64x64, SHADOW_SIZE_M, - TRACKS_NONE - //, gOverworldPalette_EnamorusIncarnate - //, gShinyOverworldPalette_EnamorusIncarnate + TRACKS_NONE, + gOverworldPalette_EnamorusIncarnate, + gShinyOverworldPalette_EnamorusIncarnate ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sEnamorusLevelUpLearnset, .teachableLearnset = sEnamorusTeachableLearnset, .formSpeciesIdTable = sEnamorusFormSpeciesIdTable, @@ -7574,11 +7595,12 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = sPicTable_EnamorusTherian, SIZE_64x64, SHADOW_SIZE_M, - TRACKS_NONE - //, gOverworldPalette_EnamorusTherian - //, gShinyOverworldPalette_EnamorusTherian + TRACKS_NONE, + gOverworldPalette_EnamorusTherian, + gShinyOverworldPalette_EnamorusTherian ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sEnamorusLevelUpLearnset, .teachableLearnset = sEnamorusTeachableLearnset, .formSpeciesIdTable = sEnamorusFormSpeciesIdTable, diff --git a/src/data/pokemon/species_info/gen_9_families.h b/src/data/pokemon/species_info/gen_9_families.h index 8880d3584db9..5a8452af25f0 100644 --- a/src/data/pokemon/species_info/gen_9_families.h +++ b/src/data/pokemon/species_info/gen_9_families.h @@ -5436,6 +5436,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .iconPalIndex = 1, FOOTPRINT(WoChien) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sWoChienLevelUpLearnset, .teachableLearnset = sWoChienTeachableLearnset, }, @@ -5491,6 +5492,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .iconPalIndex = 0, FOOTPRINT(ChienPao) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sChienPaoLevelUpLearnset, .teachableLearnset = sChienPaoTeachableLearnset, }, @@ -5546,6 +5548,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .iconPalIndex = 0, FOOTPRINT(TingLu) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTingLuLevelUpLearnset, .teachableLearnset = sTingLuTeachableLearnset, }, @@ -5602,6 +5605,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .iconPalIndex = 0, FOOTPRINT(ChiYu) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sChiYuLevelUpLearnset, .teachableLearnset = sChiYuTeachableLearnset, }, @@ -5770,6 +5774,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = FOOTPRINT(Koraidon) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKoraidonLevelUpLearnset, .teachableLearnset = sKoraidonTeachableLearnset, }, @@ -5826,6 +5831,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = FOOTPRINT(Miraidon) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMiraidonLevelUpLearnset, .teachableLearnset = sMiraidonTeachableLearnset, }, @@ -6205,6 +6211,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .iconPalIndex = 1, FOOTPRINT(Okidogi) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sOkidogiLevelUpLearnset, .teachableLearnset = sOkidogiTeachableLearnset, }, @@ -6260,6 +6267,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .iconPalIndex = 0, FOOTPRINT(Munkidori) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMunkidoriLevelUpLearnset, .teachableLearnset = sMunkidoriTeachableLearnset, }, @@ -6315,6 +6323,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .iconPalIndex = 0, FOOTPRINT(Fezandipiti) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sFezandipitiLevelUpLearnset, .teachableLearnset = sFezandipitiTeachableLearnset, }, @@ -6372,6 +6381,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .formChangeTable = sOgerponFormChangeTable, \ .isLegendary = TRUE, \ .isTeraForm = isTeraform, \ + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, \ } [SPECIES_OGERPON_TEAL_MASK] = OGERPON_SPECIES_INFO(Teal, Mask, TYPE_GRASS, ABILITY_DEFIANT, BODY_COLOR_GREEN, 1, FALSE), @@ -6663,6 +6673,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = FOOTPRINT(TerapagosNormal) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTerapagosLevelUpLearnset, .teachableLearnset = sTerapagosTeachableLearnset, .formSpeciesIdTable = sTerapagosFormSpeciesIdTable, @@ -6722,6 +6733,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = FOOTPRINT(TerapagosTerastal) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTerapagosLevelUpLearnset, .teachableLearnset = sTerapagosTeachableLearnset, .formSpeciesIdTable = sTerapagosFormSpeciesIdTable, @@ -6780,6 +6792,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .isLegendary = TRUE, .isTeraForm = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTerapagosLevelUpLearnset, .teachableLearnset = sTerapagosTeachableLearnset, .formSpeciesIdTable = sTerapagosFormSpeciesIdTable, @@ -6838,6 +6851,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = FOOTPRINT(Pecharunt) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sPecharuntLevelUpLearnset, .teachableLearnset = sPecharuntTeachableLearnset, }, diff --git a/src/data/text/follower_messages.h b/src/data/text/follower_messages.h index 7678992f2241..638df64d8800 100644 --- a/src/data/text/follower_messages.h +++ b/src/data/text/follower_messages.h @@ -34,7 +34,7 @@ static const u8 sHappyMsg11[] = _("Your POKéMON has caught the scent of\nsmoke. static const u8 sHappyMsg12[] = _("{STR_VAR_1} is poking at your belly."); static const u8 sHappyMsg13[] = _("Your POKéMON stretched out its body\nand is relaxing."); static const u8 sHappyMsg14[] = _("{STR_VAR_1} looks like it wants to\nlead!"); -static const u8 sHappyMsg15[] = _("{STR_VAR_1} is doing it's best to\nkeep up with you."); +static const u8 sHappyMsg15[] = _("{STR_VAR_1} is doing its best to\nkeep up with you."); static const u8 sHappyMsg16[] = _("{STR_VAR_1} is happily cuddling up\nto you!"); static const u8 sHappyMsg17[] = _("{STR_VAR_1} is full of life!"); static const u8 sHappyMsg18[] = _("{STR_VAR_1} seems to be very happy!"); @@ -134,7 +134,7 @@ const struct FollowerMsgInfo gFollowerUpsetMessages[] = { // Unconditional angry messages static const u8 sAngryMsg00[] = _("{STR_VAR_1} let out a roar!"); -static const u8 sAngryMsg01[] = _("{STR_VAR_1} is making a face like\nits angry!"); +static const u8 sAngryMsg01[] = _("{STR_VAR_1} is making a face like\nit's angry!"); static const u8 sAngryMsg02[] = _("{STR_VAR_1} seems to be angry for\nsome reason."); static const u8 sAngryMsg03[] = _("Your POKéMON turned to face the\nother way, showing a defiant face."); static const u8 sAngryMsg04[] = _("{STR_VAR_1} cried out."); diff --git a/src/data/trainers.h b/src/data/trainers.h index 6215baf1c40e..0ef947a14bc2 100644 --- a/src/data/trainers.h +++ b/src/data/trainers.h @@ -8,1840 +8,1840 @@ #line 1 "src/data/trainers.party" -#line 11 +#line 76 [TRAINER_NONE] = { -#line 13 +#line 78 .trainerClass = TRAINER_CLASS_PKMN_TRAINER_1, -#line 14 +#line 79 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 16 +#line 81 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 17 +#line 82 .doubleBattle = FALSE, .partySize = 0, .party = (const struct TrainerMon[]) { }, }, -#line 19 +#line 84 [TRAINER_SAWYER_1] = { -#line 20 +#line 85 .trainerName = _("SAWYER"), -#line 21 +#line 86 .trainerClass = TRAINER_CLASS_HIKER, -#line 22 +#line 87 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 24 +#line 89 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 25 +#line 90 .doubleBattle = FALSE, -#line 26 +#line 91 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 28 +#line 93 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 30 +#line 95 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 29 +#line 94 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 32 +#line 97 [TRAINER_GRUNT_AQUA_HIDEOUT_1] = { -#line 33 +#line 98 .trainerName = _("GRUNT"), -#line 34 +#line 99 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 35 +#line 100 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 37 +#line 102 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 38 +#line 103 .doubleBattle = FALSE, -#line 39 +#line 104 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 41 +#line 106 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 43 +#line 108 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 42 +#line 107 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 45 +#line 110 [TRAINER_GRUNT_AQUA_HIDEOUT_2] = { -#line 46 +#line 111 .trainerName = _("GRUNT"), -#line 47 +#line 112 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 48 +#line 113 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 50 +#line 115 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 51 +#line 116 .doubleBattle = FALSE, -#line 52 +#line 117 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 54 +#line 119 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 56 +#line 121 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 55 +#line 120 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 58 +#line 123 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 60 +#line 125 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 59 +#line 124 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 62 +#line 127 [TRAINER_GRUNT_AQUA_HIDEOUT_3] = { -#line 63 +#line 128 .trainerName = _("GRUNT"), -#line 64 +#line 129 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 65 +#line 130 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 67 +#line 132 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 68 +#line 133 .doubleBattle = FALSE, -#line 69 +#line 134 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 71 +#line 136 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 73 +#line 138 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 72 +#line 137 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 75 +#line 140 [TRAINER_GRUNT_AQUA_HIDEOUT_4] = { -#line 76 +#line 141 .trainerName = _("GRUNT"), -#line 77 +#line 142 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 78 +#line 143 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 80 +#line 145 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 81 +#line 146 .doubleBattle = FALSE, -#line 82 +#line 147 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 84 +#line 149 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 86 +#line 151 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 85 +#line 150 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 88 +#line 153 [TRAINER_GRUNT_SEAFLOOR_CAVERN_1] = { -#line 89 +#line 154 .trainerName = _("GRUNT"), -#line 90 +#line 155 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 91 +#line 156 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 93 +#line 158 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 94 +#line 159 .doubleBattle = FALSE, -#line 95 +#line 160 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 97 +#line 162 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 99 +#line 164 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 98 +#line 163 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 101 +#line 166 [TRAINER_GRUNT_SEAFLOOR_CAVERN_2] = { -#line 102 +#line 167 .trainerName = _("GRUNT"), -#line 103 +#line 168 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 104 +#line 169 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 106 +#line 171 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 107 +#line 172 .doubleBattle = FALSE, -#line 108 +#line 173 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 110 +#line 175 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 112 +#line 177 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 111 +#line 176 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 114 +#line 179 [TRAINER_GRUNT_SEAFLOOR_CAVERN_3] = { -#line 115 +#line 180 .trainerName = _("GRUNT"), -#line 116 +#line 181 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 117 +#line 182 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 119 +#line 184 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 120 +#line 185 .doubleBattle = FALSE, -#line 121 +#line 186 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 123 +#line 188 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 125 +#line 190 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 124 +#line 189 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 127 +#line 192 [TRAINER_GABRIELLE_1] = { -#line 128 +#line 193 .trainerName = _("GABRIELLE"), -#line 129 +#line 194 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 130 +#line 195 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 131 +#line 196 F_TRAINER_FEMALE | -#line 132 +#line 197 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 133 +#line 198 .doubleBattle = FALSE, -#line 134 +#line 199 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 136 +#line 201 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 138 +#line 203 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 137 +#line 202 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 140 +#line 205 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 142 +#line 207 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 141 +#line 206 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 144 +#line 209 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 146 +#line 211 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 145 +#line 210 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 148 +#line 213 .species = SPECIES_LOTAD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 150 +#line 215 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 149 +#line 214 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 152 +#line 217 .species = SPECIES_SEEDOT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 154 +#line 219 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 153 +#line 218 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 156 +#line 221 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 158 +#line 223 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 157 +#line 222 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 160 +#line 225 [TRAINER_GRUNT_PETALBURG_WOODS] = { -#line 161 +#line 226 .trainerName = _("GRUNT"), -#line 162 +#line 227 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 163 +#line 228 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 165 +#line 230 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 166 +#line 231 .doubleBattle = FALSE, -#line 167 +#line 232 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 169 +#line 234 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 171 +#line 236 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 170 +#line 235 .lvl = 9, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 173 +#line 238 [TRAINER_MARCEL] = { -#line 174 +#line 239 .trainerName = _("MARCEL"), -#line 175 +#line 240 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 176 +#line 241 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 178 +#line 243 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 179 +#line 244 .items = { ITEM_HYPER_POTION }, -#line 180 +#line 245 .doubleBattle = FALSE, -#line 181 +#line 246 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 183 +#line 248 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 185 +#line 250 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 184 +#line 249 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 187 +#line 252 .species = SPECIES_SHIFTRY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 189 +#line 254 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 188 +#line 253 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 191 +#line 256 [TRAINER_ALBERTO] = { -#line 192 +#line 257 .trainerName = _("ALBERTO"), -#line 193 +#line 258 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 194 +#line 259 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 196 +#line 261 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 197 +#line 262 .doubleBattle = FALSE, -#line 198 +#line 263 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 200 +#line 265 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 202 +#line 267 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 201 +#line 266 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 204 +#line 269 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 206 +#line 271 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 205 +#line 270 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 208 +#line 273 [TRAINER_ED] = { -#line 209 +#line 274 .trainerName = _("ED"), -#line 210 +#line 275 .trainerClass = TRAINER_CLASS_COLLECTOR, -#line 211 +#line 276 .trainerPic = TRAINER_PIC_COLLECTOR, .encounterMusic_gender = -#line 213 +#line 278 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 214 +#line 279 .doubleBattle = FALSE, -#line 215 +#line 280 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 217 +#line 282 .species = SPECIES_ZANGOOSE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 219 +#line 284 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 218 +#line 283 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 221 +#line 286 .species = SPECIES_SEVIPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 223 +#line 288 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 222 +#line 287 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 225 +#line 290 [TRAINER_GRUNT_SEAFLOOR_CAVERN_4] = { -#line 226 +#line 291 .trainerName = _("GRUNT"), -#line 227 +#line 292 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 228 +#line 293 .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = -#line 229 +#line 294 F_TRAINER_FEMALE | -#line 230 +#line 295 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 231 +#line 296 .doubleBattle = FALSE, -#line 232 +#line 297 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 234 +#line 299 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 236 +#line 301 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 235 +#line 300 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 238 +#line 303 [TRAINER_DECLAN] = { -#line 239 +#line 304 .trainerName = _("DECLAN"), -#line 240 +#line 305 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 241 +#line 306 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 243 +#line 308 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 244 +#line 309 .doubleBattle = FALSE, -#line 245 +#line 310 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 247 +#line 312 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 249 +#line 314 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 248 +#line 313 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 251 +#line 316 [TRAINER_GRUNT_RUSTURF_TUNNEL] = { -#line 252 +#line 317 .trainerName = _("GRUNT"), -#line 253 +#line 318 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 254 +#line 319 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 256 +#line 321 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 257 +#line 322 .doubleBattle = FALSE, -#line 258 +#line 323 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 260 +#line 325 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 262 +#line 327 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 261 +#line 326 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 264 +#line 329 [TRAINER_GRUNT_WEATHER_INST_1] = { -#line 265 +#line 330 .trainerName = _("GRUNT"), -#line 266 +#line 331 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 267 +#line 332 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 269 +#line 334 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 270 +#line 335 .doubleBattle = FALSE, -#line 271 +#line 336 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 273 +#line 338 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 275 +#line 340 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 274 +#line 339 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 277 +#line 342 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 279 +#line 344 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 278 +#line 343 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 281 +#line 346 [TRAINER_GRUNT_WEATHER_INST_2] = { -#line 282 +#line 347 .trainerName = _("GRUNT"), -#line 283 +#line 348 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 284 +#line 349 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 286 +#line 351 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 287 +#line 352 .doubleBattle = FALSE, -#line 288 +#line 353 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 290 +#line 355 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 292 +#line 357 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 291 +#line 356 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 294 +#line 359 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 296 +#line 361 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 295 +#line 360 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 298 +#line 363 [TRAINER_GRUNT_WEATHER_INST_3] = { -#line 299 +#line 364 .trainerName = _("GRUNT"), -#line 300 +#line 365 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 301 +#line 366 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 303 +#line 368 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 304 +#line 369 .doubleBattle = FALSE, -#line 305 +#line 370 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 307 +#line 372 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 309 +#line 374 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 308 +#line 373 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 311 +#line 376 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 313 +#line 378 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 312 +#line 377 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 315 +#line 380 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 317 +#line 382 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 316 +#line 381 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 319 +#line 384 [TRAINER_GRUNT_MUSEUM_1] = { -#line 320 +#line 385 .trainerName = _("GRUNT"), -#line 321 +#line 386 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 322 +#line 387 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 324 +#line 389 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 325 +#line 390 .doubleBattle = FALSE, -#line 326 +#line 391 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 328 +#line 393 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 330 +#line 395 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 329 +#line 394 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 332 +#line 397 [TRAINER_GRUNT_MUSEUM_2] = { -#line 333 +#line 398 .trainerName = _("GRUNT"), -#line 334 +#line 399 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 335 +#line 400 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 337 +#line 402 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 338 +#line 403 .doubleBattle = FALSE, -#line 339 +#line 404 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 341 +#line 406 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 343 +#line 408 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 342 +#line 407 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 345 +#line 410 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 347 +#line 412 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 346 +#line 411 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 349 +#line 414 [TRAINER_GRUNT_SPACE_CENTER_1] = { -#line 350 +#line 415 .trainerName = _("GRUNT"), -#line 351 +#line 416 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 352 +#line 417 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 354 +#line 419 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 355 +#line 420 .doubleBattle = FALSE, -#line 356 +#line 421 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 358 +#line 423 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 360 +#line 425 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 359 +#line 424 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 362 +#line 427 [TRAINER_GRUNT_MT_PYRE_1] = { -#line 363 +#line 428 .trainerName = _("GRUNT"), -#line 364 +#line 429 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 365 +#line 430 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 367 +#line 432 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 368 +#line 433 .doubleBattle = FALSE, -#line 369 +#line 434 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 371 +#line 436 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 373 +#line 438 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 372 +#line 437 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 375 +#line 440 [TRAINER_GRUNT_MT_PYRE_2] = { -#line 376 +#line 441 .trainerName = _("GRUNT"), -#line 377 +#line 442 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 378 +#line 443 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 380 +#line 445 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 381 +#line 446 .doubleBattle = FALSE, -#line 382 +#line 447 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 384 +#line 449 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 386 +#line 451 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 385 +#line 450 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 388 +#line 453 [TRAINER_GRUNT_MT_PYRE_3] = { -#line 389 +#line 454 .trainerName = _("GRUNT"), -#line 390 +#line 455 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 391 +#line 456 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 393 +#line 458 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 394 +#line 459 .doubleBattle = FALSE, -#line 395 +#line 460 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 397 +#line 462 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 399 +#line 464 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 398 +#line 463 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 401 +#line 466 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 403 +#line 468 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 402 +#line 467 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 405 +#line 470 [TRAINER_GRUNT_WEATHER_INST_4] = { -#line 406 +#line 471 .trainerName = _("GRUNT"), -#line 407 +#line 472 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 408 +#line 473 .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = -#line 409 +#line 474 F_TRAINER_FEMALE | -#line 410 +#line 475 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 411 +#line 476 .doubleBattle = FALSE, -#line 412 +#line 477 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 414 +#line 479 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 416 +#line 481 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 415 +#line 480 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 418 +#line 483 [TRAINER_GRUNT_AQUA_HIDEOUT_5] = { -#line 419 +#line 484 .trainerName = _("GRUNT"), -#line 420 +#line 485 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 421 +#line 486 .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = -#line 422 +#line 487 F_TRAINER_FEMALE | -#line 423 +#line 488 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 424 +#line 489 .doubleBattle = FALSE, -#line 425 +#line 490 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 427 +#line 492 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 429 +#line 494 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 428 +#line 493 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 431 +#line 496 [TRAINER_GRUNT_AQUA_HIDEOUT_6] = { -#line 432 +#line 497 .trainerName = _("GRUNT"), -#line 433 +#line 498 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 434 +#line 499 .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = -#line 435 +#line 500 F_TRAINER_FEMALE | -#line 436 +#line 501 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 437 +#line 502 .doubleBattle = FALSE, -#line 438 +#line 503 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 440 +#line 505 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 442 +#line 507 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 441 +#line 506 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 444 +#line 509 [TRAINER_FREDRICK] = { -#line 445 +#line 510 .trainerName = _("FREDRICK"), -#line 446 +#line 511 .trainerClass = TRAINER_CLASS_EXPERT, -#line 447 +#line 512 .trainerPic = TRAINER_PIC_EXPERT_M, .encounterMusic_gender = -#line 449 +#line 514 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 450 +#line 515 .doubleBattle = FALSE, -#line 451 +#line 516 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 453 +#line 518 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 455 +#line 520 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 454 +#line 519 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 457 +#line 522 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 459 +#line 524 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 458 +#line 523 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 461 +#line 526 [TRAINER_MATT] = { -#line 462 +#line 527 .trainerName = _("MATT"), -#line 463 +#line 528 .trainerClass = TRAINER_CLASS_AQUA_ADMIN, -#line 464 +#line 529 .trainerPic = TRAINER_PIC_AQUA_ADMIN_M, .encounterMusic_gender = -#line 466 +#line 531 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 467 +#line 532 .items = { ITEM_SUPER_POTION }, -#line 468 +#line 533 .doubleBattle = FALSE, -#line 469 +#line 534 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 471 +#line 536 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 473 +#line 538 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 472 +#line 537 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 475 +#line 540 .species = SPECIES_GOLBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 477 +#line 542 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 476 +#line 541 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 479 +#line 544 [TRAINER_ZANDER] = { -#line 480 +#line 545 .trainerName = _("ZANDER"), -#line 481 +#line 546 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 482 +#line 547 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 484 +#line 549 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 485 +#line 550 .doubleBattle = FALSE, -#line 486 +#line 551 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 488 +#line 553 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 490 +#line 555 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 489 +#line 554 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 492 +#line 557 [TRAINER_SHELLY_WEATHER_INSTITUTE] = { -#line 493 +#line 558 .trainerName = _("SHELLY"), -#line 494 +#line 559 .trainerClass = TRAINER_CLASS_AQUA_ADMIN, -#line 495 +#line 560 .trainerPic = TRAINER_PIC_AQUA_ADMIN_F, .encounterMusic_gender = -#line 496 +#line 561 F_TRAINER_FEMALE | -#line 497 +#line 562 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 498 +#line 563 .doubleBattle = FALSE, -#line 499 +#line 564 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 501 +#line 566 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 503 +#line 568 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 502 +#line 567 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 505 +#line 570 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 507 +#line 572 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 506 +#line 571 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 509 +#line 574 [TRAINER_SHELLY_SEAFLOOR_CAVERN] = { -#line 510 +#line 575 .trainerName = _("SHELLY"), -#line 511 +#line 576 .trainerClass = TRAINER_CLASS_AQUA_ADMIN, -#line 512 +#line 577 .trainerPic = TRAINER_PIC_AQUA_ADMIN_F, .encounterMusic_gender = -#line 513 +#line 578 F_TRAINER_FEMALE | -#line 514 +#line 579 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 515 +#line 580 .doubleBattle = FALSE, -#line 516 +#line 581 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 518 +#line 583 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 520 +#line 585 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 519 +#line 584 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 522 +#line 587 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 524 +#line 589 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 523 +#line 588 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 526 +#line 591 [TRAINER_ARCHIE] = { -#line 527 +#line 592 .trainerName = _("ARCHIE"), -#line 528 +#line 593 .trainerClass = TRAINER_CLASS_AQUA_LEADER, -#line 529 +#line 594 .trainerPic = TRAINER_PIC_AQUA_LEADER_ARCHIE, .encounterMusic_gender = -#line 531 +#line 596 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 532 +#line 597 .items = { ITEM_SUPER_POTION, ITEM_SUPER_POTION }, -#line 533 +#line 598 .doubleBattle = FALSE, -#line 534 +#line 599 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 536 +#line 601 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 538 +#line 603 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 537 +#line 602 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 540 +#line 605 .species = SPECIES_CROBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 542 +#line 607 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 541 +#line 606 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 544 +#line 609 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 546 +#line 611 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 545 +#line 610 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 548 +#line 613 [TRAINER_LEAH] = { -#line 549 +#line 614 .trainerName = _("LEAH"), -#line 550 +#line 615 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 551 +#line 616 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 552 +#line 617 F_TRAINER_FEMALE | -#line 553 +#line 618 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 554 +#line 619 .doubleBattle = FALSE, -#line 555 +#line 620 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 557 +#line 622 .species = SPECIES_SPOINK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 559 +#line 624 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 558 +#line 623 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 561 +#line 626 [TRAINER_DAISY] = { -#line 562 +#line 627 .trainerName = _("DAISY"), -#line 563 +#line 628 .trainerClass = TRAINER_CLASS_AROMA_LADY, -#line 564 +#line 629 .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = -#line 565 +#line 630 F_TRAINER_FEMALE | -#line 566 +#line 631 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 567 +#line 632 .doubleBattle = FALSE, -#line 568 +#line 633 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 570 +#line 635 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 572 +#line 637 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 571 +#line 636 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 574 +#line 639 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 576 +#line 641 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 575 +#line 640 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 578 +#line 643 [TRAINER_ROSE_1] = { -#line 579 +#line 644 .trainerName = _("ROSE"), -#line 580 +#line 645 .trainerClass = TRAINER_CLASS_AROMA_LADY, -#line 581 +#line 646 .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = -#line 582 +#line 647 F_TRAINER_FEMALE | -#line 583 +#line 648 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 584 +#line 649 .doubleBattle = FALSE, -#line 585 +#line 650 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 587 +#line 652 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 589 +#line 654 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 588 +#line 653 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 591 +#line 656 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 593 +#line 658 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 592 +#line 657 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 595 +#line 660 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 597 +#line 662 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 596 +#line 661 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 599 +#line 664 [TRAINER_FELIX] = { -#line 600 +#line 665 .trainerName = _("FELIX"), -#line 601 +#line 666 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 602 +#line 667 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 604 +#line 669 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 605 +#line 670 .items = { ITEM_FULL_RESTORE }, -#line 606 +#line 671 .doubleBattle = FALSE, -#line 607 +#line 672 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 609 +#line 674 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 611 +#line 676 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 610 +#line 675 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 612 +#line 677 MOVE_PSYCHIC, }, }, { -#line 614 +#line 679 .species = SPECIES_CLAYDOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 616 +#line 681 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 615 +#line 680 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 617 +#line 682 MOVE_SKILL_SWAP, MOVE_EARTHQUAKE, }, }, }, }, -#line 620 +#line 685 [TRAINER_VIOLET] = { -#line 621 +#line 686 .trainerName = _("VIOLET"), -#line 622 +#line 687 .trainerClass = TRAINER_CLASS_AROMA_LADY, -#line 623 +#line 688 .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = -#line 624 +#line 689 F_TRAINER_FEMALE | -#line 625 +#line 690 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 626 +#line 691 .doubleBattle = FALSE, -#line 627 +#line 692 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 629 +#line 694 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 631 +#line 696 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 630 +#line 695 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 633 +#line 698 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 635 +#line 700 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 634 +#line 699 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 637 +#line 702 [TRAINER_ROSE_2] = { -#line 638 +#line 703 .trainerName = _("ROSE"), -#line 639 +#line 704 .trainerClass = TRAINER_CLASS_AROMA_LADY, -#line 640 +#line 705 .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = -#line 641 +#line 706 F_TRAINER_FEMALE | -#line 642 +#line 707 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 643 +#line 708 .doubleBattle = FALSE, -#line 644 +#line 709 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 646 +#line 711 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 648 +#line 713 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 647 +#line 712 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 650 +#line 715 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 652 +#line 717 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 651 +#line 716 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 654 +#line 719 [TRAINER_ROSE_3] = { -#line 655 +#line 720 .trainerName = _("ROSE"), -#line 656 +#line 721 .trainerClass = TRAINER_CLASS_AROMA_LADY, -#line 657 +#line 722 .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = -#line 658 +#line 723 F_TRAINER_FEMALE | -#line 659 +#line 724 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 660 +#line 725 .doubleBattle = FALSE, -#line 661 +#line 726 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 663 +#line 728 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 665 +#line 730 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 664 +#line 729 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 667 +#line 732 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 669 +#line 734 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 668 +#line 733 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 671 +#line 736 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 673 +#line 738 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 672 +#line 737 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 675 +#line 740 [TRAINER_ROSE_4] = { -#line 676 +#line 741 .trainerName = _("ROSE"), -#line 677 +#line 742 .trainerClass = TRAINER_CLASS_AROMA_LADY, -#line 678 +#line 743 .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = -#line 679 +#line 744 F_TRAINER_FEMALE | -#line 680 +#line 745 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 681 +#line 746 .doubleBattle = FALSE, -#line 682 +#line 747 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 684 +#line 749 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 686 +#line 751 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 685 +#line 750 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 688 +#line 753 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 690 +#line 755 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 689 +#line 754 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 692 +#line 757 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 694 +#line 759 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 693 +#line 758 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 696 +#line 761 [TRAINER_ROSE_5] = { -#line 697 +#line 762 .trainerName = _("ROSE"), -#line 698 +#line 763 .trainerClass = TRAINER_CLASS_AROMA_LADY, -#line 699 +#line 764 .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = -#line 700 +#line 765 F_TRAINER_FEMALE | -#line 701 +#line 766 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 702 +#line 767 .doubleBattle = FALSE, -#line 703 +#line 768 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 705 +#line 770 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 707 +#line 772 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 706 +#line 771 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 709 +#line 774 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 711 +#line 776 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 710 +#line 775 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 713 +#line 778 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 715 +#line 780 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 714 +#line 779 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 717 +#line 782 [TRAINER_DUSTY_1] = { -#line 718 +#line 783 .trainerName = _("DUSTY"), -#line 719 +#line 784 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 720 +#line 785 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 722 +#line 787 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 723 +#line 788 .doubleBattle = FALSE, -#line 724 +#line 789 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 726 +#line 791 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 728 +#line 793 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 727 +#line 792 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 729 +#line 794 MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, @@ -1850,37 +1850,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 734 +#line 799 [TRAINER_CHIP] = { -#line 735 +#line 800 .trainerName = _("CHIP"), -#line 736 +#line 801 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 737 +#line 802 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 739 +#line 804 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 740 +#line 805 .doubleBattle = FALSE, -#line 741 +#line 806 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 743 +#line 808 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 745 +#line 810 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 744 +#line 809 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 746 +#line 811 MOVE_PSYBEAM, MOVE_SELF_DESTRUCT, MOVE_SANDSTORM, @@ -1888,17 +1888,17 @@ F_TRAINER_FEMALE | }, }, { -#line 751 +#line 816 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 753 +#line 818 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 752 +#line 817 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 754 +#line 819 MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, @@ -1906,17 +1906,17 @@ F_TRAINER_FEMALE | }, }, { -#line 759 +#line 824 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 761 +#line 826 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 760 +#line 825 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 762 +#line 827 MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, @@ -1925,37 +1925,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 767 +#line 832 [TRAINER_FOSTER] = { -#line 768 +#line 833 .trainerName = _("FOSTER"), -#line 769 +#line 834 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 770 +#line 835 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 772 +#line 837 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 773 +#line 838 .doubleBattle = FALSE, -#line 774 +#line 839 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 776 +#line 841 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 778 +#line 843 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 777 +#line 842 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 779 +#line 844 MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, @@ -1963,17 +1963,17 @@ F_TRAINER_FEMALE | }, }, { -#line 784 +#line 849 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 786 +#line 851 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 785 +#line 850 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 787 +#line 852 MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, @@ -1982,37 +1982,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 792 +#line 857 [TRAINER_DUSTY_2] = { -#line 793 +#line 858 .trainerName = _("DUSTY"), -#line 794 +#line 859 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 795 +#line 860 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 797 +#line 862 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 798 +#line 863 .doubleBattle = FALSE, -#line 799 +#line 864 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 801 +#line 866 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 803 +#line 868 .iv = TRAINER_PARTY_IVS(7, 7, 7, 7, 7, 7), -#line 802 +#line 867 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 804 +#line 869 MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, @@ -2021,37 +2021,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 809 +#line 874 [TRAINER_DUSTY_3] = { -#line 810 +#line 875 .trainerName = _("DUSTY"), -#line 811 +#line 876 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 812 +#line 877 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 814 +#line 879 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 815 +#line 880 .doubleBattle = FALSE, -#line 816 +#line 881 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 818 +#line 883 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 820 +#line 885 .iv = TRAINER_PARTY_IVS(8, 8, 8, 8, 8, 8), -#line 819 +#line 884 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 821 +#line 886 MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, @@ -2060,37 +2060,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 826 +#line 891 [TRAINER_DUSTY_4] = { -#line 827 +#line 892 .trainerName = _("DUSTY"), -#line 828 +#line 893 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 829 +#line 894 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 831 +#line 896 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 832 +#line 897 .doubleBattle = FALSE, -#line 833 +#line 898 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 835 +#line 900 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 837 +#line 902 .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 836 +#line 901 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 838 +#line 903 MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, @@ -2099,37 +2099,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 843 +#line 908 [TRAINER_DUSTY_5] = { -#line 844 +#line 909 .trainerName = _("DUSTY"), -#line 845 +#line 910 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 846 +#line 911 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 848 +#line 913 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 849 +#line 914 .doubleBattle = FALSE, -#line 850 +#line 915 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 852 +#line 917 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 854 +#line 919 .iv = TRAINER_PARTY_IVS(10, 10, 10, 10, 10, 10), -#line 853 +#line 918 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 855 +#line 920 MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, @@ -2138,252 +2138,252 @@ F_TRAINER_FEMALE | }, }, }, -#line 860 +#line 925 [TRAINER_GABBY_AND_TY_1] = { -#line 861 +#line 926 .trainerName = _("GABBY & TY"), -#line 862 +#line 927 .trainerClass = TRAINER_CLASS_INTERVIEWER, -#line 863 +#line 928 .trainerPic = TRAINER_PIC_INTERVIEWER, .encounterMusic_gender = -#line 865 +#line 930 TRAINER_ENCOUNTER_MUSIC_INTERVIEWER, -#line 866 +#line 931 .doubleBattle = TRUE, -#line 867 +#line 932 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 869 +#line 934 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 871 +#line 936 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 870 +#line 935 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 873 +#line 938 .species = SPECIES_WHISMUR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 875 +#line 940 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 874 +#line 939 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 877 +#line 942 [TRAINER_GABBY_AND_TY_2] = { -#line 878 +#line 943 .trainerName = _("GABBY & TY"), -#line 879 +#line 944 .trainerClass = TRAINER_CLASS_INTERVIEWER, -#line 880 +#line 945 .trainerPic = TRAINER_PIC_INTERVIEWER, .encounterMusic_gender = -#line 882 +#line 947 TRAINER_ENCOUNTER_MUSIC_INTERVIEWER, -#line 883 +#line 948 .doubleBattle = TRUE, -#line 884 +#line 949 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 886 +#line 951 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 888 +#line 953 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 887 +#line 952 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 890 +#line 955 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 892 +#line 957 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 891 +#line 956 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 894 +#line 959 [TRAINER_GABBY_AND_TY_3] = { -#line 895 +#line 960 .trainerName = _("GABBY & TY"), -#line 896 +#line 961 .trainerClass = TRAINER_CLASS_INTERVIEWER, -#line 897 +#line 962 .trainerPic = TRAINER_PIC_INTERVIEWER, .encounterMusic_gender = -#line 899 +#line 964 TRAINER_ENCOUNTER_MUSIC_INTERVIEWER, -#line 900 +#line 965 .doubleBattle = TRUE, -#line 901 +#line 966 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 903 +#line 968 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 905 +#line 970 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 904 +#line 969 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 907 +#line 972 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 909 +#line 974 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 908 +#line 973 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 911 +#line 976 [TRAINER_GABBY_AND_TY_4] = { -#line 912 +#line 977 .trainerName = _("GABBY & TY"), -#line 913 +#line 978 .trainerClass = TRAINER_CLASS_INTERVIEWER, -#line 914 +#line 979 .trainerPic = TRAINER_PIC_INTERVIEWER, .encounterMusic_gender = -#line 916 +#line 981 TRAINER_ENCOUNTER_MUSIC_INTERVIEWER, -#line 917 +#line 982 .doubleBattle = TRUE, -#line 918 +#line 983 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 920 +#line 985 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 922 +#line 987 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 921 +#line 986 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 924 +#line 989 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 926 +#line 991 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 925 +#line 990 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 928 +#line 993 [TRAINER_GABBY_AND_TY_5] = { -#line 929 +#line 994 .trainerName = _("GABBY & TY"), -#line 930 +#line 995 .trainerClass = TRAINER_CLASS_INTERVIEWER, -#line 931 +#line 996 .trainerPic = TRAINER_PIC_INTERVIEWER, .encounterMusic_gender = -#line 933 +#line 998 TRAINER_ENCOUNTER_MUSIC_INTERVIEWER, -#line 934 +#line 999 .doubleBattle = TRUE, -#line 935 +#line 1000 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 937 +#line 1002 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 939 +#line 1004 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 938 +#line 1003 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 941 +#line 1006 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 943 +#line 1008 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 942 +#line 1007 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 945 +#line 1010 [TRAINER_GABBY_AND_TY_6] = { -#line 946 +#line 1011 .trainerName = _("GABBY & TY"), -#line 947 +#line 1012 .trainerClass = TRAINER_CLASS_INTERVIEWER, -#line 948 +#line 1013 .trainerPic = TRAINER_PIC_INTERVIEWER, .encounterMusic_gender = -#line 950 +#line 1015 TRAINER_ENCOUNTER_MUSIC_INTERVIEWER, -#line 951 +#line 1016 .doubleBattle = TRUE, -#line 952 +#line 1017 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 954 +#line 1019 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 956 +#line 1021 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 955 +#line 1020 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 957 +#line 1022 MOVE_SONIC_BOOM, MOVE_THUNDER_WAVE, MOVE_METAL_SOUND, @@ -2391,17 +2391,17 @@ F_TRAINER_FEMALE | }, }, { -#line 962 +#line 1027 .species = SPECIES_EXPLOUD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 964 +#line 1029 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 963 +#line 1028 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 965 +#line 1030 MOVE_ASTONISH, MOVE_STOMP, MOVE_SUPERSONIC, @@ -2410,330 +2410,330 @@ F_TRAINER_FEMALE | }, }, }, -#line 970 +#line 1035 [TRAINER_LOLA_1] = { -#line 971 +#line 1036 .trainerName = _("LOLA"), -#line 972 +#line 1037 .trainerClass = TRAINER_CLASS_TUBER_F, -#line 973 +#line 1038 .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = -#line 974 +#line 1039 F_TRAINER_FEMALE | -#line 975 +#line 1040 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 976 +#line 1041 .doubleBattle = FALSE, -#line 977 +#line 1042 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 979 +#line 1044 .species = SPECIES_AZURILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 981 +#line 1046 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 980 +#line 1045 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 983 +#line 1048 .species = SPECIES_AZURILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 985 +#line 1050 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 984 +#line 1049 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 987 +#line 1052 [TRAINER_AUSTINA] = { -#line 988 +#line 1053 .trainerName = _("AUSTINA"), -#line 989 +#line 1054 .trainerClass = TRAINER_CLASS_TUBER_F, -#line 990 +#line 1055 .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = -#line 991 +#line 1056 F_TRAINER_FEMALE | -#line 992 +#line 1057 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 993 +#line 1058 .doubleBattle = FALSE, -#line 994 +#line 1059 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 996 +#line 1061 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 998 +#line 1063 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 997 +#line 1062 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1000 +#line 1065 [TRAINER_GWEN] = { -#line 1001 +#line 1066 .trainerName = _("GWEN"), -#line 1002 +#line 1067 .trainerClass = TRAINER_CLASS_TUBER_F, -#line 1003 +#line 1068 .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = -#line 1004 +#line 1069 F_TRAINER_FEMALE | -#line 1005 +#line 1070 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1006 +#line 1071 .doubleBattle = FALSE, -#line 1007 +#line 1072 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1009 +#line 1074 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1011 +#line 1076 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1010 +#line 1075 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1013 +#line 1078 [TRAINER_LOLA_2] = { -#line 1014 +#line 1079 .trainerName = _("LOLA"), -#line 1015 +#line 1080 .trainerClass = TRAINER_CLASS_TUBER_F, -#line 1016 +#line 1081 .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = -#line 1017 +#line 1082 F_TRAINER_FEMALE | -#line 1018 +#line 1083 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1019 +#line 1084 .doubleBattle = FALSE, -#line 1020 +#line 1085 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1022 +#line 1087 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1024 +#line 1089 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 1023 +#line 1088 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1026 +#line 1091 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1028 +#line 1093 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 1027 +#line 1092 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1030 +#line 1095 [TRAINER_LOLA_3] = { -#line 1031 +#line 1096 .trainerName = _("LOLA"), -#line 1032 +#line 1097 .trainerClass = TRAINER_CLASS_TUBER_F, -#line 1033 +#line 1098 .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = -#line 1034 +#line 1099 F_TRAINER_FEMALE | -#line 1035 +#line 1100 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1036 +#line 1101 .doubleBattle = FALSE, -#line 1037 +#line 1102 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1039 +#line 1104 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1041 +#line 1106 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 1040 +#line 1105 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1043 +#line 1108 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1045 +#line 1110 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 1044 +#line 1109 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1047 +#line 1112 [TRAINER_LOLA_4] = { -#line 1048 +#line 1113 .trainerName = _("LOLA"), -#line 1049 +#line 1114 .trainerClass = TRAINER_CLASS_TUBER_F, -#line 1050 +#line 1115 .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = -#line 1051 +#line 1116 F_TRAINER_FEMALE | -#line 1052 +#line 1117 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1053 +#line 1118 .doubleBattle = FALSE, -#line 1054 +#line 1119 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1056 +#line 1121 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1058 +#line 1123 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 1057 +#line 1122 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1060 +#line 1125 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1062 +#line 1127 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 1061 +#line 1126 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1064 +#line 1129 [TRAINER_LOLA_5] = { -#line 1065 +#line 1130 .trainerName = _("LOLA"), -#line 1066 +#line 1131 .trainerClass = TRAINER_CLASS_TUBER_F, -#line 1067 +#line 1132 .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = -#line 1068 +#line 1133 F_TRAINER_FEMALE | -#line 1069 +#line 1134 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1070 +#line 1135 .doubleBattle = FALSE, -#line 1071 +#line 1136 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1073 +#line 1138 .species = SPECIES_AZUMARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1075 +#line 1140 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 1074 +#line 1139 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1077 +#line 1142 .species = SPECIES_AZUMARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1079 +#line 1144 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 1078 +#line 1143 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1081 +#line 1146 [TRAINER_RICKY_1] = { -#line 1082 +#line 1147 .trainerName = _("RICKY"), -#line 1083 +#line 1148 .trainerClass = TRAINER_CLASS_TUBER_M, -#line 1084 +#line 1149 .trainerPic = TRAINER_PIC_TUBER_M, .encounterMusic_gender = -#line 1086 +#line 1151 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1087 +#line 1152 .doubleBattle = FALSE, -#line 1088 +#line 1153 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1090 +#line 1155 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1092 +#line 1157 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 1091 +#line 1156 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1093 +#line 1158 MOVE_SAND_ATTACK, MOVE_HEADBUTT, MOVE_TAIL_WHIP, @@ -2742,112 +2742,112 @@ F_TRAINER_FEMALE | }, }, }, -#line 1098 +#line 1163 [TRAINER_SIMON] = { -#line 1099 +#line 1164 .trainerName = _("SIMON"), -#line 1100 +#line 1165 .trainerClass = TRAINER_CLASS_TUBER_M, -#line 1101 +#line 1166 .trainerPic = TRAINER_PIC_TUBER_M, .encounterMusic_gender = -#line 1103 +#line 1168 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1104 +#line 1169 .doubleBattle = FALSE, -#line 1105 +#line 1170 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1107 +#line 1172 .species = SPECIES_AZURILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1109 +#line 1174 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1108 +#line 1173 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1111 +#line 1176 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1113 +#line 1178 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1112 +#line 1177 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1115 +#line 1180 [TRAINER_CHARLIE] = { -#line 1116 +#line 1181 .trainerName = _("CHARLIE"), -#line 1117 +#line 1182 .trainerClass = TRAINER_CLASS_TUBER_M, -#line 1118 +#line 1183 .trainerPic = TRAINER_PIC_TUBER_M, .encounterMusic_gender = -#line 1120 +#line 1185 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1121 +#line 1186 .doubleBattle = FALSE, -#line 1122 +#line 1187 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1124 +#line 1189 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1126 +#line 1191 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1125 +#line 1190 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1128 +#line 1193 [TRAINER_RICKY_2] = { -#line 1129 +#line 1194 .trainerName = _("RICKY"), -#line 1130 +#line 1195 .trainerClass = TRAINER_CLASS_TUBER_M, -#line 1131 +#line 1196 .trainerPic = TRAINER_PIC_TUBER_M, .encounterMusic_gender = -#line 1133 +#line 1198 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1134 +#line 1199 .doubleBattle = FALSE, -#line 1135 +#line 1200 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1137 +#line 1202 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1139 +#line 1204 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 1138 +#line 1203 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1140 +#line 1205 MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, @@ -2856,37 +2856,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 1145 +#line 1210 [TRAINER_RICKY_3] = { -#line 1146 +#line 1211 .trainerName = _("RICKY"), -#line 1147 +#line 1212 .trainerClass = TRAINER_CLASS_TUBER_M, -#line 1148 +#line 1213 .trainerPic = TRAINER_PIC_TUBER_M, .encounterMusic_gender = -#line 1150 +#line 1215 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1151 +#line 1216 .doubleBattle = FALSE, -#line 1152 +#line 1217 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1154 +#line 1219 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1156 +#line 1221 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 1155 +#line 1220 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1157 +#line 1222 MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, @@ -2895,37 +2895,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 1162 +#line 1227 [TRAINER_RICKY_4] = { -#line 1163 +#line 1228 .trainerName = _("RICKY"), -#line 1164 +#line 1229 .trainerClass = TRAINER_CLASS_TUBER_M, -#line 1165 +#line 1230 .trainerPic = TRAINER_PIC_TUBER_M, .encounterMusic_gender = -#line 1167 +#line 1232 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1168 +#line 1233 .doubleBattle = FALSE, -#line 1169 +#line 1234 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1171 +#line 1236 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1173 +#line 1238 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 1172 +#line 1237 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1174 +#line 1239 MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, @@ -2934,37 +2934,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 1179 +#line 1244 [TRAINER_RICKY_5] = { -#line 1180 +#line 1245 .trainerName = _("RICKY"), -#line 1181 +#line 1246 .trainerClass = TRAINER_CLASS_TUBER_M, -#line 1182 +#line 1247 .trainerPic = TRAINER_PIC_TUBER_M, .encounterMusic_gender = -#line 1184 +#line 1249 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1185 +#line 1250 .doubleBattle = FALSE, -#line 1186 +#line 1251 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1188 +#line 1253 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1190 +#line 1255 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 1189 +#line 1254 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1191 +#line 1256 MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, @@ -2973,39 +2973,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 1196 +#line 1261 [TRAINER_RANDALL] = { -#line 1197 +#line 1262 .trainerName = _("RANDALL"), -#line 1198 +#line 1263 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1199 +#line 1264 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1201 +#line 1266 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1202 +#line 1267 .items = { ITEM_HYPER_POTION }, -#line 1203 +#line 1268 .doubleBattle = FALSE, -#line 1204 +#line 1269 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1206 +#line 1271 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1208 +#line 1273 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 1207 +#line 1272 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1209 +#line 1274 MOVE_QUICK_ATTACK, MOVE_AGILITY, MOVE_WING_ATTACK, @@ -3013,39 +3013,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 1213 +#line 1278 [TRAINER_PARKER] = { -#line 1214 +#line 1279 .trainerName = _("PARKER"), -#line 1215 +#line 1280 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1216 +#line 1281 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1218 +#line 1283 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1219 +#line 1284 .items = { ITEM_HYPER_POTION }, -#line 1220 +#line 1285 .doubleBattle = FALSE, -#line 1221 +#line 1286 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1223 +#line 1288 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1225 +#line 1290 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 1224 +#line 1289 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1226 +#line 1291 MOVE_TEETER_DANCE, MOVE_DIZZY_PUNCH, MOVE_FOCUS_PUNCH, @@ -3053,41 +3053,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 1230 +#line 1295 [TRAINER_GEORGE] = { -#line 1231 +#line 1296 .trainerName = _("GEORGE"), -#line 1232 +#line 1297 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1233 +#line 1298 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1235 +#line 1300 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1236 +#line 1301 .items = { ITEM_HYPER_POTION }, -#line 1237 +#line 1302 .doubleBattle = FALSE, -#line 1238 +#line 1303 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1240 +#line 1305 .species = SPECIES_SLAKOTH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1240 +#line 1305 .heldItem = ITEM_SITRUS_BERRY, -#line 1242 +#line 1307 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 1241 +#line 1306 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1243 +#line 1308 MOVE_SLACK_OFF, MOVE_COUNTER, MOVE_SHADOW_BALL, @@ -3095,78 +3095,78 @@ F_TRAINER_FEMALE | }, }, }, -#line 1247 +#line 1312 [TRAINER_BERKE] = { -#line 1248 +#line 1313 .trainerName = _("BERKE"), -#line 1249 +#line 1314 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1250 +#line 1315 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1252 +#line 1317 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1253 +#line 1318 .items = { ITEM_HYPER_POTION }, -#line 1254 +#line 1319 .doubleBattle = FALSE, -#line 1255 +#line 1320 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1257 +#line 1322 .species = SPECIES_VIGOROTH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1259 +#line 1324 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 1258 +#line 1323 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1260 +#line 1325 MOVE_FOCUS_ENERGY, MOVE_SLASH, }, }, }, }, -#line 1263 +#line 1328 [TRAINER_BRAXTON] = { -#line 1264 +#line 1329 .trainerName = _("BRAXTON"), -#line 1265 +#line 1330 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1266 +#line 1331 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1268 +#line 1333 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1269 +#line 1334 .items = { ITEM_HYPER_POTION }, -#line 1270 +#line 1335 .doubleBattle = FALSE, -#line 1271 +#line 1336 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 1273 +#line 1338 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1275 +#line 1340 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1274 +#line 1339 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1276 +#line 1341 MOVE_FOCUS_ENERGY, MOVE_QUICK_ATTACK, MOVE_WING_ATTACK, @@ -3174,17 +3174,17 @@ F_TRAINER_FEMALE | }, }, { -#line 1281 +#line 1346 .species = SPECIES_TRAPINCH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1283 +#line 1348 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1282 +#line 1347 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1284 +#line 1349 MOVE_BITE, MOVE_DIG, MOVE_FEINT_ATTACK, @@ -3192,17 +3192,17 @@ F_TRAINER_FEMALE | }, }, { -#line 1289 +#line 1354 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1291 +#line 1356 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1290 +#line 1355 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1292 +#line 1357 MOVE_ROLLOUT, MOVE_WHIRLPOOL, MOVE_ASTONISH, @@ -3210,17 +3210,17 @@ F_TRAINER_FEMALE | }, }, { -#line 1297 +#line 1362 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1299 +#line 1364 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1298 +#line 1363 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1300 +#line 1365 MOVE_THUNDERBOLT, MOVE_SUPERSONIC, MOVE_THUNDER_WAVE, @@ -3228,17 +3228,17 @@ F_TRAINER_FEMALE | }, }, { -#line 1305 +#line 1370 .species = SPECIES_SHIFTRY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1307 +#line 1372 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1306 +#line 1371 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1308 +#line 1373 MOVE_GIGA_DRAIN, MOVE_FEINT_ATTACK, MOVE_DOUBLE_TEAM, @@ -3247,777 +3247,777 @@ F_TRAINER_FEMALE | }, }, }, -#line 1313 +#line 1378 [TRAINER_VINCENT] = { -#line 1314 +#line 1379 .trainerName = _("VINCENT"), -#line 1315 +#line 1380 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1316 +#line 1381 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1318 +#line 1383 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1319 +#line 1384 .items = { ITEM_FULL_RESTORE }, -#line 1320 +#line 1385 .doubleBattle = FALSE, -#line 1321 +#line 1386 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1323 +#line 1388 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1325 +#line 1390 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1324 +#line 1389 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1327 +#line 1392 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1329 +#line 1394 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1328 +#line 1393 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1331 +#line 1396 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1333 +#line 1398 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1332 +#line 1397 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1335 +#line 1400 [TRAINER_LEROY] = { -#line 1336 +#line 1401 .trainerName = _("LEROY"), -#line 1337 +#line 1402 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1338 +#line 1403 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1340 +#line 1405 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1341 +#line 1406 .items = { ITEM_FULL_RESTORE }, -#line 1342 +#line 1407 .doubleBattle = FALSE, -#line 1343 +#line 1408 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1345 +#line 1410 .species = SPECIES_MAWILE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1347 +#line 1412 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1346 +#line 1411 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1349 +#line 1414 .species = SPECIES_STARMIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1351 +#line 1416 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1350 +#line 1415 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1353 +#line 1418 [TRAINER_WILTON_1] = { -#line 1354 +#line 1419 .trainerName = _("WILTON"), -#line 1355 +#line 1420 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1356 +#line 1421 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1358 +#line 1423 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1359 +#line 1424 .items = { ITEM_SUPER_POTION }, -#line 1360 +#line 1425 .doubleBattle = FALSE, -#line 1361 +#line 1426 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1363 +#line 1428 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1365 +#line 1430 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1364 +#line 1429 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1367 +#line 1432 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1369 +#line 1434 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1368 +#line 1433 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1371 +#line 1436 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1373 +#line 1438 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1372 +#line 1437 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1375 +#line 1440 [TRAINER_EDGAR] = { -#line 1376 +#line 1441 .trainerName = _("EDGAR"), -#line 1377 +#line 1442 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1378 +#line 1443 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1380 +#line 1445 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1381 +#line 1446 .items = { ITEM_FULL_RESTORE }, -#line 1382 +#line 1447 .doubleBattle = FALSE, -#line 1383 +#line 1448 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1385 +#line 1450 .species = SPECIES_CACTURNE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1387 +#line 1452 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1386 +#line 1451 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1389 +#line 1454 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1391 +#line 1456 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1390 +#line 1455 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1393 +#line 1458 [TRAINER_ALBERT] = { -#line 1394 +#line 1459 .trainerName = _("ALBERT"), -#line 1395 +#line 1460 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1396 +#line 1461 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1398 +#line 1463 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1399 +#line 1464 .items = { ITEM_FULL_RESTORE }, -#line 1400 +#line 1465 .doubleBattle = FALSE, -#line 1401 +#line 1466 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1403 +#line 1468 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1405 +#line 1470 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1404 +#line 1469 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1407 +#line 1472 .species = SPECIES_MUK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1409 +#line 1474 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1408 +#line 1473 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1411 +#line 1476 [TRAINER_SAMUEL] = { -#line 1412 +#line 1477 .trainerName = _("SAMUEL"), -#line 1413 +#line 1478 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1414 +#line 1479 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1416 +#line 1481 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1417 +#line 1482 .items = { ITEM_FULL_RESTORE }, -#line 1418 +#line 1483 .doubleBattle = FALSE, -#line 1419 +#line 1484 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1421 +#line 1486 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1423 +#line 1488 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1422 +#line 1487 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1425 +#line 1490 .species = SPECIES_MAWILE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1427 +#line 1492 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1426 +#line 1491 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1429 +#line 1494 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1431 +#line 1496 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1430 +#line 1495 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1433 +#line 1498 [TRAINER_VITO] = { -#line 1434 +#line 1499 .trainerName = _("VITO"), -#line 1435 +#line 1500 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1436 +#line 1501 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1438 +#line 1503 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1439 +#line 1504 .items = { ITEM_FULL_RESTORE }, -#line 1440 +#line 1505 .doubleBattle = FALSE, -#line 1441 +#line 1506 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 1443 +#line 1508 .species = SPECIES_DODRIO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1445 +#line 1510 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1444 +#line 1509 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1447 +#line 1512 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1449 +#line 1514 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1448 +#line 1513 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1451 +#line 1516 .species = SPECIES_ELECTRODE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1453 +#line 1518 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1452 +#line 1517 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1455 +#line 1520 .species = SPECIES_SHIFTRY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1457 +#line 1522 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1456 +#line 1521 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1459 +#line 1524 [TRAINER_OWEN] = { -#line 1460 +#line 1525 .trainerName = _("OWEN"), -#line 1461 +#line 1526 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1462 +#line 1527 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1464 +#line 1529 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1465 +#line 1530 .items = { ITEM_FULL_RESTORE }, -#line 1466 +#line 1531 .doubleBattle = FALSE, -#line 1467 +#line 1532 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1469 +#line 1534 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1471 +#line 1536 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1470 +#line 1535 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1473 +#line 1538 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1475 +#line 1540 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1474 +#line 1539 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1477 +#line 1542 .species = SPECIES_WAILORD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1479 +#line 1544 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1478 +#line 1543 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1481 +#line 1546 [TRAINER_WILTON_2] = { -#line 1482 +#line 1547 .trainerName = _("WILTON"), -#line 1483 +#line 1548 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1484 +#line 1549 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1486 +#line 1551 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1487 +#line 1552 .items = { ITEM_HYPER_POTION }, -#line 1488 +#line 1553 .doubleBattle = FALSE, -#line 1489 +#line 1554 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1491 +#line 1556 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1493 +#line 1558 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 1492 +#line 1557 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1495 +#line 1560 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1497 +#line 1562 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 1496 +#line 1561 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1499 +#line 1564 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1501 +#line 1566 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 1500 +#line 1565 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1503 +#line 1568 [TRAINER_WILTON_3] = { -#line 1504 +#line 1569 .trainerName = _("WILTON"), -#line 1505 +#line 1570 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1506 +#line 1571 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1508 +#line 1573 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1509 +#line 1574 .items = { ITEM_HYPER_POTION }, -#line 1510 +#line 1575 .doubleBattle = FALSE, -#line 1511 +#line 1576 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1513 +#line 1578 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1515 +#line 1580 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 1514 +#line 1579 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1517 +#line 1582 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1519 +#line 1584 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 1518 +#line 1583 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1521 +#line 1586 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1523 +#line 1588 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 1522 +#line 1587 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1525 +#line 1590 [TRAINER_WILTON_4] = { -#line 1526 +#line 1591 .trainerName = _("WILTON"), -#line 1527 +#line 1592 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1528 +#line 1593 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1530 +#line 1595 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1531 +#line 1596 .items = { ITEM_FULL_RESTORE }, -#line 1532 +#line 1597 .doubleBattle = FALSE, -#line 1533 +#line 1598 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1535 +#line 1600 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1537 +#line 1602 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 1536 +#line 1601 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1539 +#line 1604 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1541 +#line 1606 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 1540 +#line 1605 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1543 +#line 1608 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1545 +#line 1610 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 1544 +#line 1609 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1547 +#line 1612 [TRAINER_WILTON_5] = { -#line 1548 +#line 1613 .trainerName = _("WILTON"), -#line 1549 +#line 1614 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1550 +#line 1615 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1552 +#line 1617 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1553 +#line 1618 .items = { ITEM_FULL_RESTORE }, -#line 1554 +#line 1619 .doubleBattle = FALSE, -#line 1555 +#line 1620 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1557 +#line 1622 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1559 +#line 1624 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 1558 +#line 1623 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1561 +#line 1626 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1563 +#line 1628 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 1562 +#line 1627 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1565 +#line 1630 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1567 +#line 1632 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 1566 +#line 1631 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1569 +#line 1634 [TRAINER_WARREN] = { -#line 1570 +#line 1635 .trainerName = _("WARREN"), -#line 1571 +#line 1636 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1572 +#line 1637 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1574 +#line 1639 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1575 +#line 1640 .items = { ITEM_FULL_RESTORE }, -#line 1576 +#line 1641 .doubleBattle = FALSE, -#line 1577 +#line 1642 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1579 +#line 1644 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1581 +#line 1646 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1580 +#line 1645 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1583 +#line 1648 .species = SPECIES_LUDICOLO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1585 +#line 1650 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1584 +#line 1649 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1587 +#line 1652 [TRAINER_MARY] = { -#line 1588 +#line 1653 .trainerName = _("MARY"), -#line 1589 +#line 1654 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1590 +#line 1655 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1591 +#line 1656 F_TRAINER_FEMALE | -#line 1592 +#line 1657 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1593 +#line 1658 .items = { ITEM_HYPER_POTION }, -#line 1594 +#line 1659 .doubleBattle = FALSE, -#line 1595 +#line 1660 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1597 +#line 1662 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1599 +#line 1664 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 1598 +#line 1663 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1600 +#line 1665 MOVE_FEINT_ATTACK, MOVE_SHOCK_WAVE, }, }, }, }, -#line 1603 +#line 1668 [TRAINER_ALEXIA] = { -#line 1604 +#line 1669 .trainerName = _("ALEXIA"), -#line 1605 +#line 1670 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1606 +#line 1671 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1607 +#line 1672 F_TRAINER_FEMALE | -#line 1608 +#line 1673 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1609 +#line 1674 .items = { ITEM_HYPER_POTION }, -#line 1610 +#line 1675 .doubleBattle = FALSE, -#line 1611 +#line 1676 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1613 +#line 1678 .species = SPECIES_WIGGLYTUFF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1615 +#line 1680 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 1614 +#line 1679 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1616 +#line 1681 MOVE_DEFENSE_CURL, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, @@ -4025,82 +4025,82 @@ F_TRAINER_FEMALE | }, }, }, -#line 1620 +#line 1685 [TRAINER_JODY] = { -#line 1621 +#line 1686 .trainerName = _("JODY"), -#line 1622 +#line 1687 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1623 +#line 1688 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1624 +#line 1689 F_TRAINER_FEMALE | -#line 1625 +#line 1690 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1626 +#line 1691 .items = { ITEM_HYPER_POTION }, -#line 1627 +#line 1692 .doubleBattle = FALSE, -#line 1628 +#line 1693 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1630 +#line 1695 .species = SPECIES_ZANGOOSE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1632 +#line 1697 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 1631 +#line 1696 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1633 +#line 1698 MOVE_SWORDS_DANCE, MOVE_SLASH, }, }, }, }, -#line 1636 +#line 1701 [TRAINER_WENDY] = { -#line 1637 +#line 1702 .trainerName = _("WENDY"), -#line 1638 +#line 1703 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1639 +#line 1704 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1640 +#line 1705 F_TRAINER_FEMALE | -#line 1641 +#line 1706 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1642 +#line 1707 .items = { ITEM_FULL_RESTORE }, -#line 1643 +#line 1708 .doubleBattle = FALSE, -#line 1644 +#line 1709 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1646 +#line 1711 .species = SPECIES_MAWILE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1648 +#line 1713 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1647 +#line 1712 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1649 +#line 1714 MOVE_BATON_PASS, MOVE_FEINT_ATTACK, MOVE_FAKE_TEARS, @@ -4108,17 +4108,17 @@ F_TRAINER_FEMALE | }, }, { -#line 1654 +#line 1719 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1656 +#line 1721 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1655 +#line 1720 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1657 +#line 1722 MOVE_MEGA_DRAIN, MOVE_MAGICAL_LEAF, MOVE_GRASS_WHISTLE, @@ -4126,17 +4126,17 @@ F_TRAINER_FEMALE | }, }, { -#line 1662 +#line 1727 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1664 +#line 1729 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1663 +#line 1728 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1665 +#line 1730 MOVE_FLY, MOVE_WATER_GUN, MOVE_MIST, @@ -4145,1083 +4145,1083 @@ F_TRAINER_FEMALE | }, }, }, -#line 1670 +#line 1735 [TRAINER_KEIRA] = { -#line 1671 +#line 1736 .trainerName = _("KEIRA"), -#line 1672 +#line 1737 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1673 +#line 1738 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1674 +#line 1739 F_TRAINER_FEMALE | -#line 1675 +#line 1740 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1676 +#line 1741 .items = { ITEM_FULL_RESTORE }, -#line 1677 +#line 1742 .doubleBattle = FALSE, -#line 1678 +#line 1743 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1680 +#line 1745 .species = SPECIES_LAIRON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1682 +#line 1747 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1681 +#line 1746 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1684 +#line 1749 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1686 +#line 1751 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1685 +#line 1750 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1688 +#line 1753 [TRAINER_BROOKE_1] = { -#line 1689 +#line 1754 .trainerName = _("BROOKE"), -#line 1690 +#line 1755 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1691 +#line 1756 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1692 +#line 1757 F_TRAINER_FEMALE | -#line 1693 +#line 1758 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1694 +#line 1759 .items = { ITEM_SUPER_POTION }, -#line 1695 +#line 1760 .doubleBattle = FALSE, -#line 1696 +#line 1761 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1698 +#line 1763 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1700 +#line 1765 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1699 +#line 1764 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1702 +#line 1767 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1704 +#line 1769 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1703 +#line 1768 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1706 +#line 1771 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1708 +#line 1773 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1707 +#line 1772 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1710 +#line 1775 [TRAINER_JENNIFER] = { -#line 1711 +#line 1776 .trainerName = _("JENNIFER"), -#line 1712 +#line 1777 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1713 +#line 1778 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1714 +#line 1779 F_TRAINER_FEMALE | -#line 1715 +#line 1780 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1716 +#line 1781 .items = { ITEM_FULL_RESTORE }, -#line 1717 +#line 1782 .doubleBattle = FALSE, -#line 1718 +#line 1783 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1720 +#line 1785 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1722 +#line 1787 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 1721 +#line 1786 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1724 +#line 1789 [TRAINER_HOPE] = { -#line 1725 +#line 1790 .trainerName = _("HOPE"), -#line 1726 +#line 1791 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1727 +#line 1792 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1728 +#line 1793 F_TRAINER_FEMALE | -#line 1729 +#line 1794 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1730 +#line 1795 .items = { ITEM_FULL_RESTORE }, -#line 1731 +#line 1796 .doubleBattle = FALSE, -#line 1732 +#line 1797 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1734 +#line 1799 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1736 +#line 1801 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1735 +#line 1800 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1738 +#line 1803 [TRAINER_SHANNON] = { -#line 1739 +#line 1804 .trainerName = _("SHANNON"), -#line 1740 +#line 1805 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1741 +#line 1806 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1742 +#line 1807 F_TRAINER_FEMALE | -#line 1743 +#line 1808 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1744 +#line 1809 .items = { ITEM_FULL_RESTORE }, -#line 1745 +#line 1810 .doubleBattle = FALSE, -#line 1746 +#line 1811 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1748 +#line 1813 .species = SPECIES_CLAYDOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1750 +#line 1815 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1749 +#line 1814 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1752 +#line 1817 [TRAINER_MICHELLE] = { -#line 1753 +#line 1818 .trainerName = _("MICHELLE"), -#line 1754 +#line 1819 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1755 +#line 1820 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1756 +#line 1821 F_TRAINER_FEMALE | -#line 1757 +#line 1822 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1758 +#line 1823 .items = { ITEM_FULL_RESTORE }, -#line 1759 +#line 1824 .doubleBattle = FALSE, -#line 1760 +#line 1825 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1762 +#line 1827 .species = SPECIES_TORKOAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1764 +#line 1829 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1763 +#line 1828 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1766 +#line 1831 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1768 +#line 1833 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1767 +#line 1832 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1770 +#line 1835 .species = SPECIES_LUDICOLO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1772 +#line 1837 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1771 +#line 1836 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1774 +#line 1839 [TRAINER_CAROLINE] = { -#line 1775 +#line 1840 .trainerName = _("CAROLINE"), -#line 1776 +#line 1841 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1777 +#line 1842 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1778 +#line 1843 F_TRAINER_FEMALE | -#line 1779 +#line 1844 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1780 +#line 1845 .items = { ITEM_FULL_RESTORE }, -#line 1781 +#line 1846 .doubleBattle = FALSE, -#line 1782 +#line 1847 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1784 +#line 1849 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1786 +#line 1851 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1785 +#line 1850 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1788 +#line 1853 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1790 +#line 1855 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1789 +#line 1854 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1792 +#line 1857 [TRAINER_JULIE] = { -#line 1793 +#line 1858 .trainerName = _("JULIE"), -#line 1794 +#line 1859 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1795 +#line 1860 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1796 +#line 1861 F_TRAINER_FEMALE | -#line 1797 +#line 1862 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1798 +#line 1863 .items = { ITEM_FULL_RESTORE }, -#line 1799 +#line 1864 .doubleBattle = FALSE, -#line 1800 +#line 1865 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1802 +#line 1867 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1804 +#line 1869 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1803 +#line 1868 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1806 +#line 1871 .species = SPECIES_NINETALES, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1808 +#line 1873 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1807 +#line 1872 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1810 +#line 1875 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1812 +#line 1877 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1811 +#line 1876 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1814 +#line 1879 [TRAINER_BROOKE_2] = { -#line 1815 +#line 1880 .trainerName = _("BROOKE"), -#line 1816 +#line 1881 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1817 +#line 1882 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1818 +#line 1883 F_TRAINER_FEMALE | -#line 1819 +#line 1884 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1820 +#line 1885 .items = { ITEM_HYPER_POTION }, -#line 1821 +#line 1886 .doubleBattle = FALSE, -#line 1822 +#line 1887 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1824 +#line 1889 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1826 +#line 1891 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 1825 +#line 1890 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1828 +#line 1893 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1830 +#line 1895 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 1829 +#line 1894 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1832 +#line 1897 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1834 +#line 1899 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 1833 +#line 1898 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1836 +#line 1901 [TRAINER_BROOKE_3] = { -#line 1837 +#line 1902 .trainerName = _("BROOKE"), -#line 1838 +#line 1903 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1839 +#line 1904 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1840 +#line 1905 F_TRAINER_FEMALE | -#line 1841 +#line 1906 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1842 +#line 1907 .items = { ITEM_HYPER_POTION }, -#line 1843 +#line 1908 .doubleBattle = FALSE, -#line 1844 +#line 1909 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1846 +#line 1911 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1848 +#line 1913 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 1847 +#line 1912 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1850 +#line 1915 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1852 +#line 1917 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 1851 +#line 1916 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1854 +#line 1919 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1856 +#line 1921 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 1855 +#line 1920 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1858 +#line 1923 [TRAINER_BROOKE_4] = { -#line 1859 +#line 1924 .trainerName = _("BROOKE"), -#line 1860 +#line 1925 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1861 +#line 1926 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1862 +#line 1927 F_TRAINER_FEMALE | -#line 1863 +#line 1928 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1864 +#line 1929 .items = { ITEM_FULL_RESTORE }, -#line 1865 +#line 1930 .doubleBattle = FALSE, -#line 1866 +#line 1931 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1868 +#line 1933 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1870 +#line 1935 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 1869 +#line 1934 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1872 +#line 1937 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1874 +#line 1939 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 1873 +#line 1938 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1876 +#line 1941 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1878 +#line 1943 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 1877 +#line 1942 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1880 +#line 1945 [TRAINER_BROOKE_5] = { -#line 1881 +#line 1946 .trainerName = _("BROOKE"), -#line 1882 +#line 1947 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1883 +#line 1948 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1884 +#line 1949 F_TRAINER_FEMALE | -#line 1885 +#line 1950 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1886 +#line 1951 .items = { ITEM_FULL_RESTORE }, -#line 1887 +#line 1952 .doubleBattle = FALSE, -#line 1888 +#line 1953 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1890 +#line 1955 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1892 +#line 1957 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 1891 +#line 1956 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1894 +#line 1959 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1896 +#line 1961 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 1895 +#line 1960 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1898 +#line 1963 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1900 +#line 1965 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 1899 +#line 1964 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1902 +#line 1967 [TRAINER_PATRICIA] = { -#line 1903 +#line 1968 .trainerName = _("PATRICIA"), -#line 1904 +#line 1969 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 1905 +#line 1970 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 1906 +#line 1971 F_TRAINER_FEMALE | -#line 1907 +#line 1972 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 1908 +#line 1973 .doubleBattle = FALSE, -#line 1909 +#line 1974 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1911 +#line 1976 .species = SPECIES_BANETTE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1913 +#line 1978 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1912 +#line 1977 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1915 +#line 1980 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1917 +#line 1982 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1916 +#line 1981 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1919 +#line 1984 [TRAINER_KINDRA] = { -#line 1920 +#line 1985 .trainerName = _("KINDRA"), -#line 1921 +#line 1986 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 1922 +#line 1987 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 1923 +#line 1988 F_TRAINER_FEMALE | -#line 1924 +#line 1989 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 1925 +#line 1990 .doubleBattle = FALSE, -#line 1926 +#line 1991 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1928 +#line 1993 .species = SPECIES_DUSKULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1930 +#line 1995 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1929 +#line 1994 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1932 +#line 1997 .species = SPECIES_SHUPPET, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1934 +#line 1999 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1933 +#line 1998 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1936 +#line 2001 [TRAINER_TAMMY] = { -#line 1937 +#line 2002 .trainerName = _("TAMMY"), -#line 1938 +#line 2003 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 1939 +#line 2004 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 1940 +#line 2005 F_TRAINER_FEMALE | -#line 1941 +#line 2006 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 1942 +#line 2007 .doubleBattle = FALSE, -#line 1943 +#line 2008 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1945 +#line 2010 .species = SPECIES_DUSKULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1947 +#line 2012 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1946 +#line 2011 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1949 +#line 2014 .species = SPECIES_SHUPPET, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1951 +#line 2016 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1950 +#line 2015 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1953 +#line 2018 [TRAINER_VALERIE_1] = { -#line 1954 +#line 2019 .trainerName = _("VALERIE"), -#line 1955 +#line 2020 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 1956 +#line 2021 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 1957 +#line 2022 F_TRAINER_FEMALE | -#line 1958 +#line 2023 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 1959 +#line 2024 .doubleBattle = FALSE, -#line 1960 +#line 2025 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1962 +#line 2027 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1964 +#line 2029 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1963 +#line 2028 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1966 +#line 2031 [TRAINER_TASHA] = { -#line 1967 +#line 2032 .trainerName = _("TASHA"), -#line 1968 +#line 2033 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 1969 +#line 2034 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 1970 +#line 2035 F_TRAINER_FEMALE | -#line 1971 +#line 2036 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 1972 +#line 2037 .doubleBattle = FALSE, -#line 1973 +#line 2038 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1975 +#line 2040 .species = SPECIES_SHUPPET, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1977 +#line 2042 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 1976 +#line 2041 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1979 +#line 2044 [TRAINER_VALERIE_2] = { -#line 1980 +#line 2045 .trainerName = _("VALERIE"), -#line 1981 +#line 2046 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 1982 +#line 2047 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 1983 +#line 2048 F_TRAINER_FEMALE | -#line 1984 +#line 2049 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 1985 +#line 2050 .doubleBattle = FALSE, -#line 1986 +#line 2051 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1988 +#line 2053 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1990 +#line 2055 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 1989 +#line 2054 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1992 +#line 2057 .species = SPECIES_SPOINK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1994 +#line 2059 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 1993 +#line 2058 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1996 +#line 2061 [TRAINER_VALERIE_3] = { -#line 1997 +#line 2062 .trainerName = _("VALERIE"), -#line 1998 +#line 2063 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 1999 +#line 2064 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 2000 +#line 2065 F_TRAINER_FEMALE | -#line 2001 +#line 2066 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 2002 +#line 2067 .doubleBattle = FALSE, -#line 2003 +#line 2068 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2005 +#line 2070 .species = SPECIES_SPOINK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2007 +#line 2072 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 2006 +#line 2071 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2009 +#line 2074 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2011 +#line 2076 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 2010 +#line 2075 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2013 +#line 2078 [TRAINER_VALERIE_4] = { -#line 2014 +#line 2079 .trainerName = _("VALERIE"), -#line 2015 +#line 2080 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 2016 +#line 2081 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 2017 +#line 2082 F_TRAINER_FEMALE | -#line 2018 +#line 2083 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 2019 +#line 2084 .doubleBattle = FALSE, -#line 2020 +#line 2085 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2022 +#line 2087 .species = SPECIES_SPOINK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2024 +#line 2089 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 2023 +#line 2088 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2026 +#line 2091 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2028 +#line 2093 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 2027 +#line 2092 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2030 +#line 2095 [TRAINER_VALERIE_5] = { -#line 2031 +#line 2096 .trainerName = _("VALERIE"), -#line 2032 +#line 2097 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 2033 +#line 2098 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 2034 +#line 2099 F_TRAINER_FEMALE | -#line 2035 +#line 2100 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 2036 +#line 2101 .doubleBattle = FALSE, -#line 2037 +#line 2102 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 2039 +#line 2104 .species = SPECIES_DUSKULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2041 +#line 2106 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 2040 +#line 2105 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2043 +#line 2108 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2045 +#line 2110 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 2044 +#line 2109 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2047 +#line 2112 .species = SPECIES_GRUMPIG, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2049 +#line 2114 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 2048 +#line 2113 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2051 +#line 2116 [TRAINER_CINDY_1] = { -#line 2052 +#line 2117 .trainerName = _("CINDY"), -#line 2053 +#line 2118 .trainerClass = TRAINER_CLASS_LADY, -#line 2054 +#line 2119 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 2055 +#line 2120 F_TRAINER_FEMALE | -#line 2056 +#line 2121 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2057 +#line 2122 .items = { ITEM_FULL_RESTORE }, -#line 2058 +#line 2123 .doubleBattle = FALSE, -#line 2059 +#line 2124 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2061 +#line 2126 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2061 +#line 2126 .heldItem = ITEM_NUGGET, -#line 2063 +#line 2128 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2062 +#line 2127 .lvl = 7, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2065 +#line 2130 [TRAINER_DAPHNE] = { -#line 2066 +#line 2131 .trainerName = _("DAPHNE"), -#line 2067 +#line 2132 .trainerClass = TRAINER_CLASS_LADY, -#line 2068 +#line 2133 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 2069 +#line 2134 F_TRAINER_FEMALE | -#line 2070 +#line 2135 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2071 +#line 2136 .items = { ITEM_FULL_RESTORE }, -#line 2072 +#line 2137 .doubleBattle = FALSE, -#line 2073 +#line 2138 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2075 +#line 2140 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2075 +#line 2140 .heldItem = ITEM_NUGGET, -#line 2077 +#line 2142 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 2076 +#line 2141 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2078 +#line 2143 MOVE_ATTRACT, MOVE_SWEET_KISS, MOVE_FLAIL, @@ -5229,19 +5229,19 @@ F_TRAINER_FEMALE | }, }, { -#line 2083 +#line 2148 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2083 +#line 2148 .heldItem = ITEM_NUGGET, -#line 2085 +#line 2150 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 2084 +#line 2149 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2086 +#line 2151 MOVE_ATTRACT, MOVE_SAFEGUARD, MOVE_TAKE_DOWN, @@ -5250,330 +5250,330 @@ F_TRAINER_FEMALE | }, }, }, -#line 2091 +#line 2156 [TRAINER_GRUNT_SPACE_CENTER_2] = { -#line 2092 +#line 2157 .trainerName = _("GRUNT"), -#line 2093 +#line 2158 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 2094 +#line 2159 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 2096 +#line 2161 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 2097 +#line 2162 .doubleBattle = FALSE, -#line 2098 +#line 2163 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 2100 +#line 2165 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2102 +#line 2167 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2101 +#line 2166 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2104 +#line 2169 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2106 +#line 2171 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2105 +#line 2170 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2108 +#line 2173 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2110 +#line 2175 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2109 +#line 2174 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2112 +#line 2177 [TRAINER_CINDY_2] = { -#line 2113 +#line 2178 .trainerName = _("CINDY"), -#line 2114 +#line 2179 .trainerClass = TRAINER_CLASS_LADY, -#line 2115 +#line 2180 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 2116 +#line 2181 F_TRAINER_FEMALE | -#line 2117 +#line 2182 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2118 +#line 2183 .items = { ITEM_FULL_RESTORE }, -#line 2119 +#line 2184 .doubleBattle = FALSE, -#line 2120 +#line 2185 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2122 +#line 2187 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2122 +#line 2187 .heldItem = ITEM_NUGGET, -#line 2124 +#line 2189 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2123 +#line 2188 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2125 +#line 2190 MOVE_TACKLE, MOVE_TAIL_WHIP, }, }, }, }, -#line 2128 +#line 2193 [TRAINER_BRIANNA] = { -#line 2129 +#line 2194 .trainerName = _("BRIANNA"), -#line 2130 +#line 2195 .trainerClass = TRAINER_CLASS_LADY, -#line 2131 +#line 2196 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 2132 +#line 2197 F_TRAINER_FEMALE | -#line 2133 +#line 2198 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2134 +#line 2199 .items = { ITEM_FULL_RESTORE }, -#line 2135 +#line 2200 .doubleBattle = FALSE, -#line 2136 +#line 2201 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2138 +#line 2203 .species = SPECIES_SEAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2138 +#line 2203 .heldItem = ITEM_NUGGET, -#line 2140 +#line 2205 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 2139 +#line 2204 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2142 +#line 2207 [TRAINER_NAOMI] = { -#line 2143 +#line 2208 .trainerName = _("NAOMI"), -#line 2144 +#line 2209 .trainerClass = TRAINER_CLASS_LADY, -#line 2145 +#line 2210 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 2146 +#line 2211 F_TRAINER_FEMALE | -#line 2147 +#line 2212 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2148 +#line 2213 .items = { ITEM_FULL_RESTORE }, -#line 2149 +#line 2214 .doubleBattle = FALSE, -#line 2150 +#line 2215 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2152 +#line 2217 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2152 +#line 2217 .heldItem = ITEM_NUGGET, -#line 2154 +#line 2219 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 2153 +#line 2218 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2156 +#line 2221 [TRAINER_CINDY_3] = { -#line 2157 +#line 2222 .trainerName = _("CINDY"), -#line 2158 +#line 2223 .trainerClass = TRAINER_CLASS_LADY, -#line 2159 +#line 2224 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 2160 +#line 2225 F_TRAINER_FEMALE | -#line 2161 +#line 2226 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2162 +#line 2227 .items = { ITEM_FULL_RESTORE }, -#line 2163 +#line 2228 .doubleBattle = FALSE, -#line 2164 +#line 2229 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2166 +#line 2231 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2166 +#line 2231 .heldItem = ITEM_NUGGET, -#line 2168 +#line 2233 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 2167 +#line 2232 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2170 +#line 2235 [TRAINER_CINDY_4] = { -#line 2171 +#line 2236 .trainerName = _("CINDY"), -#line 2172 +#line 2237 .trainerClass = TRAINER_CLASS_LADY, -#line 2173 +#line 2238 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 2174 +#line 2239 F_TRAINER_FEMALE | -#line 2175 +#line 2240 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2176 +#line 2241 .items = { ITEM_FULL_RESTORE }, -#line 2177 +#line 2242 .doubleBattle = FALSE, -#line 2178 +#line 2243 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2180 +#line 2245 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2180 +#line 2245 .heldItem = ITEM_NUGGET, -#line 2182 +#line 2247 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 2181 +#line 2246 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2184 +#line 2249 [TRAINER_CINDY_5] = { -#line 2185 +#line 2250 .trainerName = _("CINDY"), -#line 2186 +#line 2251 .trainerClass = TRAINER_CLASS_LADY, -#line 2187 +#line 2252 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 2188 +#line 2253 F_TRAINER_FEMALE | -#line 2189 +#line 2254 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2190 +#line 2255 .items = { ITEM_FULL_RESTORE }, -#line 2191 +#line 2256 .doubleBattle = FALSE, -#line 2192 +#line 2257 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2194 +#line 2259 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2194 +#line 2259 .heldItem = ITEM_NUGGET, -#line 2196 +#line 2261 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 2195 +#line 2260 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2198 +#line 2263 [TRAINER_CINDY_6] = { -#line 2199 +#line 2264 .trainerName = _("CINDY"), -#line 2200 +#line 2265 .trainerClass = TRAINER_CLASS_LADY, -#line 2201 +#line 2266 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 2202 +#line 2267 F_TRAINER_FEMALE | -#line 2203 +#line 2268 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2204 +#line 2269 .items = { ITEM_FULL_RESTORE }, -#line 2205 +#line 2270 .doubleBattle = FALSE, -#line 2206 +#line 2271 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2208 +#line 2273 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2208 +#line 2273 .heldItem = ITEM_NUGGET, -#line 2210 +#line 2275 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 2209 +#line 2274 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2211 +#line 2276 MOVE_FURY_SWIPES, MOVE_MUD_SPORT, MOVE_ODOR_SLEUTH, @@ -5582,141 +5582,141 @@ F_TRAINER_FEMALE | }, }, }, -#line 2216 +#line 2281 [TRAINER_MELISSA] = { -#line 2217 +#line 2282 .trainerName = _("MELISSA"), -#line 2218 +#line 2283 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2219 +#line 2284 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2220 +#line 2285 F_TRAINER_FEMALE | -#line 2221 +#line 2286 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2222 +#line 2287 .doubleBattle = FALSE, -#line 2223 +#line 2288 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2225 +#line 2290 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2227 +#line 2292 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2226 +#line 2291 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2229 +#line 2294 [TRAINER_SHEILA] = { -#line 2230 +#line 2295 .trainerName = _("SHEILA"), -#line 2231 +#line 2296 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2232 +#line 2297 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2233 +#line 2298 F_TRAINER_FEMALE | -#line 2234 +#line 2299 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2235 +#line 2300 .doubleBattle = FALSE, -#line 2236 +#line 2301 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2238 +#line 2303 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2240 +#line 2305 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2239 +#line 2304 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2242 +#line 2307 [TRAINER_SHIRLEY] = { -#line 2243 +#line 2308 .trainerName = _("SHIRLEY"), -#line 2244 +#line 2309 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2245 +#line 2310 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2246 +#line 2311 F_TRAINER_FEMALE | -#line 2247 +#line 2312 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2248 +#line 2313 .doubleBattle = FALSE, -#line 2249 +#line 2314 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2251 +#line 2316 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2253 +#line 2318 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2252 +#line 2317 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2255 +#line 2320 [TRAINER_JESSICA_1] = { -#line 2256 +#line 2321 .trainerName = _("JESSICA"), -#line 2257 +#line 2322 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2258 +#line 2323 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2259 +#line 2324 F_TRAINER_FEMALE | -#line 2260 +#line 2325 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2261 +#line 2326 .doubleBattle = FALSE, -#line 2262 +#line 2327 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2264 +#line 2329 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2266 +#line 2331 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2265 +#line 2330 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2267 +#line 2332 MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, @@ -5724,17 +5724,17 @@ F_TRAINER_FEMALE | }, }, { -#line 2272 +#line 2337 .species = SPECIES_SEVIPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2274 +#line 2339 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2273 +#line 2338 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2275 +#line 2340 MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, @@ -5743,107 +5743,107 @@ F_TRAINER_FEMALE | }, }, }, -#line 2280 +#line 2345 [TRAINER_CONNIE] = { -#line 2281 +#line 2346 .trainerName = _("CONNIE"), -#line 2282 +#line 2347 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2283 +#line 2348 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2284 +#line 2349 F_TRAINER_FEMALE | -#line 2285 +#line 2350 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2286 +#line 2351 .doubleBattle = FALSE, -#line 2287 +#line 2352 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2289 +#line 2354 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2291 +#line 2356 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 2290 +#line 2355 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2293 +#line 2358 [TRAINER_BRIDGET] = { -#line 2294 +#line 2359 .trainerName = _("BRIDGET"), -#line 2295 +#line 2360 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2296 +#line 2361 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2297 +#line 2362 F_TRAINER_FEMALE | -#line 2298 +#line 2363 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2299 +#line 2364 .doubleBattle = FALSE, -#line 2300 +#line 2365 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2302 +#line 2367 .species = SPECIES_AZUMARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2304 +#line 2369 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 2303 +#line 2368 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2306 +#line 2371 [TRAINER_OLIVIA] = { -#line 2307 +#line 2372 .trainerName = _("OLIVIA"), -#line 2308 +#line 2373 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2309 +#line 2374 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2310 +#line 2375 F_TRAINER_FEMALE | -#line 2311 +#line 2376 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2312 +#line 2377 .doubleBattle = FALSE, -#line 2313 +#line 2378 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 2315 +#line 2380 .species = SPECIES_CLAMPERL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2317 +#line 2382 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 2316 +#line 2381 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2318 +#line 2383 MOVE_IRON_DEFENSE, MOVE_WHIRLPOOL, MOVE_RAIN_DANCE, @@ -5851,34 +5851,34 @@ F_TRAINER_FEMALE | }, }, { -#line 2323 +#line 2388 .species = SPECIES_CORPHISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2325 +#line 2390 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 2324 +#line 2389 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2326 +#line 2391 MOVE_TAUNT, MOVE_CRABHAMMER, MOVE_WATER_PULSE, }, }, { -#line 2330 +#line 2395 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2332 +#line 2397 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 2331 +#line 2396 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2333 +#line 2398 MOVE_UPROAR, MOVE_FURY_SWIPES, MOVE_FAKE_OUT, @@ -5887,84 +5887,84 @@ F_TRAINER_FEMALE | }, }, }, -#line 2338 +#line 2403 [TRAINER_TIFFANY] = { -#line 2339 +#line 2404 .trainerName = _("TIFFANY"), -#line 2340 +#line 2405 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2341 +#line 2406 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2342 +#line 2407 F_TRAINER_FEMALE | -#line 2343 +#line 2408 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2344 +#line 2409 .doubleBattle = FALSE, -#line 2345 +#line 2410 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2347 +#line 2412 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2349 +#line 2414 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 2348 +#line 2413 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2351 +#line 2416 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2353 +#line 2418 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 2352 +#line 2417 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2355 +#line 2420 [TRAINER_JESSICA_2] = { -#line 2356 +#line 2421 .trainerName = _("JESSICA"), -#line 2357 +#line 2422 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2358 +#line 2423 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2359 +#line 2424 F_TRAINER_FEMALE | -#line 2360 +#line 2425 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2361 +#line 2426 .doubleBattle = FALSE, -#line 2362 +#line 2427 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2364 +#line 2429 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2366 +#line 2431 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 2365 +#line 2430 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2367 +#line 2432 MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, @@ -5972,17 +5972,17 @@ F_TRAINER_FEMALE | }, }, { -#line 2372 +#line 2437 .species = SPECIES_SEVIPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2374 +#line 2439 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 2373 +#line 2438 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2375 +#line 2440 MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, @@ -5991,39 +5991,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 2380 +#line 2445 [TRAINER_JESSICA_3] = { -#line 2381 +#line 2446 .trainerName = _("JESSICA"), -#line 2382 +#line 2447 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2383 +#line 2448 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2384 +#line 2449 F_TRAINER_FEMALE | -#line 2385 +#line 2450 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2386 +#line 2451 .doubleBattle = FALSE, -#line 2387 +#line 2452 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2389 +#line 2454 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2391 +#line 2456 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 2390 +#line 2455 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2392 +#line 2457 MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, @@ -6031,17 +6031,17 @@ F_TRAINER_FEMALE | }, }, { -#line 2397 +#line 2462 .species = SPECIES_SEVIPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2399 +#line 2464 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 2398 +#line 2463 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2400 +#line 2465 MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, @@ -6050,39 +6050,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 2405 +#line 2470 [TRAINER_JESSICA_4] = { -#line 2406 +#line 2471 .trainerName = _("JESSICA"), -#line 2407 +#line 2472 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2408 +#line 2473 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2409 +#line 2474 F_TRAINER_FEMALE | -#line 2410 +#line 2475 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2411 +#line 2476 .doubleBattle = FALSE, -#line 2412 +#line 2477 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2414 +#line 2479 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2416 +#line 2481 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 2415 +#line 2480 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2417 +#line 2482 MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, @@ -6090,17 +6090,17 @@ F_TRAINER_FEMALE | }, }, { -#line 2422 +#line 2487 .species = SPECIES_SEVIPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2424 +#line 2489 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 2423 +#line 2488 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2425 +#line 2490 MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, @@ -6109,39 +6109,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 2430 +#line 2495 [TRAINER_JESSICA_5] = { -#line 2431 +#line 2496 .trainerName = _("JESSICA"), -#line 2432 +#line 2497 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2433 +#line 2498 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2434 +#line 2499 F_TRAINER_FEMALE | -#line 2435 +#line 2500 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2436 +#line 2501 .doubleBattle = FALSE, -#line 2437 +#line 2502 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2439 +#line 2504 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2441 +#line 2506 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 2440 +#line 2505 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2442 +#line 2507 MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, @@ -6149,17 +6149,17 @@ F_TRAINER_FEMALE | }, }, { -#line 2447 +#line 2512 .species = SPECIES_SEVIPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2449 +#line 2514 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 2448 +#line 2513 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2450 +#line 2515 MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, @@ -6168,266 +6168,266 @@ F_TRAINER_FEMALE | }, }, }, -#line 2455 +#line 2520 [TRAINER_WINSTON_1] = { -#line 2456 +#line 2521 .trainerName = _("WINSTON"), -#line 2457 +#line 2522 .trainerClass = TRAINER_CLASS_RICH_BOY, -#line 2458 +#line 2523 .trainerPic = TRAINER_PIC_RICH_BOY, .encounterMusic_gender = -#line 2460 +#line 2525 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 2461 +#line 2526 .items = { ITEM_FULL_RESTORE }, -#line 2462 +#line 2527 .doubleBattle = FALSE, -#line 2463 +#line 2528 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2465 +#line 2530 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2465 +#line 2530 .heldItem = ITEM_NUGGET, -#line 2467 +#line 2532 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2466 +#line 2531 .lvl = 7, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2469 +#line 2534 [TRAINER_MOLLIE] = { -#line 2470 +#line 2535 .trainerName = _("MOLLIE"), -#line 2471 +#line 2536 .trainerClass = TRAINER_CLASS_EXPERT, -#line 2472 +#line 2537 .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = -#line 2473 +#line 2538 F_TRAINER_FEMALE | -#line 2474 +#line 2539 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 2475 +#line 2540 .doubleBattle = FALSE, -#line 2476 +#line 2541 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2478 +#line 2543 .species = SPECIES_WHISCASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2480 +#line 2545 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2479 +#line 2544 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2482 +#line 2547 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2484 +#line 2549 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 2483 +#line 2548 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2486 +#line 2551 [TRAINER_GARRET] = { -#line 2487 +#line 2552 .trainerName = _("GARRET"), -#line 2488 +#line 2553 .trainerClass = TRAINER_CLASS_RICH_BOY, -#line 2489 +#line 2554 .trainerPic = TRAINER_PIC_RICH_BOY, .encounterMusic_gender = -#line 2491 +#line 2556 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 2492 +#line 2557 .items = { ITEM_FULL_RESTORE }, -#line 2493 +#line 2558 .doubleBattle = FALSE, -#line 2494 +#line 2559 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2496 +#line 2561 .species = SPECIES_AZUMARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2496 +#line 2561 .heldItem = ITEM_NUGGET, -#line 2498 +#line 2563 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2497 +#line 2562 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2500 +#line 2565 [TRAINER_WINSTON_2] = { -#line 2501 +#line 2566 .trainerName = _("WINSTON"), -#line 2502 +#line 2567 .trainerClass = TRAINER_CLASS_RICH_BOY, -#line 2503 +#line 2568 .trainerPic = TRAINER_PIC_RICH_BOY, .encounterMusic_gender = -#line 2505 +#line 2570 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 2506 +#line 2571 .items = { ITEM_FULL_RESTORE }, -#line 2507 +#line 2572 .doubleBattle = FALSE, -#line 2508 +#line 2573 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2510 +#line 2575 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2510 +#line 2575 .heldItem = ITEM_NUGGET, -#line 2512 +#line 2577 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2511 +#line 2576 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2514 +#line 2579 [TRAINER_WINSTON_3] = { -#line 2515 +#line 2580 .trainerName = _("WINSTON"), -#line 2516 +#line 2581 .trainerClass = TRAINER_CLASS_RICH_BOY, -#line 2517 +#line 2582 .trainerPic = TRAINER_PIC_RICH_BOY, .encounterMusic_gender = -#line 2519 +#line 2584 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 2520 +#line 2585 .items = { ITEM_FULL_RESTORE }, -#line 2521 +#line 2586 .doubleBattle = FALSE, -#line 2522 +#line 2587 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2524 +#line 2589 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2524 +#line 2589 .heldItem = ITEM_NUGGET, -#line 2526 +#line 2591 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2525 +#line 2590 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2528 +#line 2593 [TRAINER_WINSTON_4] = { -#line 2529 +#line 2594 .trainerName = _("WINSTON"), -#line 2530 +#line 2595 .trainerClass = TRAINER_CLASS_RICH_BOY, -#line 2531 +#line 2596 .trainerPic = TRAINER_PIC_RICH_BOY, .encounterMusic_gender = -#line 2533 +#line 2598 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 2534 +#line 2599 .items = { ITEM_FULL_RESTORE }, -#line 2535 +#line 2600 .doubleBattle = FALSE, -#line 2536 +#line 2601 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2538 +#line 2603 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2538 +#line 2603 .heldItem = ITEM_NUGGET, -#line 2540 +#line 2605 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2539 +#line 2604 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2542 +#line 2607 [TRAINER_WINSTON_5] = { -#line 2543 +#line 2608 .trainerName = _("WINSTON"), -#line 2544 +#line 2609 .trainerClass = TRAINER_CLASS_RICH_BOY, -#line 2545 +#line 2610 .trainerPic = TRAINER_PIC_RICH_BOY, .encounterMusic_gender = -#line 2547 +#line 2612 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 2548 +#line 2613 .items = { ITEM_FULL_RESTORE }, -#line 2549 +#line 2614 .doubleBattle = FALSE, -#line 2550 +#line 2615 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2552 +#line 2617 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2552 +#line 2617 .heldItem = ITEM_NUGGET, -#line 2554 +#line 2619 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2553 +#line 2618 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2555 +#line 2620 MOVE_FURY_SWIPES, MOVE_MUD_SPORT, MOVE_ODOR_SLEUTH, @@ -6436,1876 +6436,1876 @@ F_TRAINER_FEMALE | }, }, }, -#line 2560 +#line 2625 [TRAINER_STEVE_1] = { -#line 2561 +#line 2626 .trainerName = _("STEVE"), -#line 2562 +#line 2627 .trainerClass = TRAINER_CLASS_POKEMANIAC, -#line 2563 +#line 2628 .trainerPic = TRAINER_PIC_POKEMANIAC, .encounterMusic_gender = -#line 2565 +#line 2630 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 2566 +#line 2631 .doubleBattle = FALSE, -#line 2567 +#line 2632 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2569 +#line 2634 .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2571 +#line 2636 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2570 +#line 2635 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2573 +#line 2638 [TRAINER_THALIA_1] = { -#line 2574 +#line 2639 .trainerName = _("THALIA"), -#line 2575 +#line 2640 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2576 +#line 2641 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2577 +#line 2642 F_TRAINER_FEMALE | -#line 2578 +#line 2643 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2579 +#line 2644 .doubleBattle = FALSE, -#line 2580 +#line 2645 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2582 +#line 2647 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2584 +#line 2649 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2583 +#line 2648 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2586 +#line 2651 .species = SPECIES_HORSEA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2588 +#line 2653 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2587 +#line 2652 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2590 +#line 2655 [TRAINER_MARK] = { -#line 2591 +#line 2656 .trainerName = _("MARK"), -#line 2592 +#line 2657 .trainerClass = TRAINER_CLASS_POKEMANIAC, -#line 2593 +#line 2658 .trainerPic = TRAINER_PIC_POKEMANIAC, .encounterMusic_gender = -#line 2595 +#line 2660 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 2596 +#line 2661 .doubleBattle = FALSE, -#line 2597 +#line 2662 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2599 +#line 2664 .species = SPECIES_RHYHORN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2601 +#line 2666 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2600 +#line 2665 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2603 +#line 2668 [TRAINER_GRUNT_MT_CHIMNEY_1] = { -#line 2604 +#line 2669 .trainerName = _("GRUNT"), -#line 2605 +#line 2670 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 2606 +#line 2671 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, .encounterMusic_gender = -#line 2607 +#line 2672 F_TRAINER_FEMALE | -#line 2608 +#line 2673 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 2609 +#line 2674 .doubleBattle = FALSE, -#line 2610 +#line 2675 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2612 +#line 2677 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2614 +#line 2679 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2613 +#line 2678 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2616 +#line 2681 [TRAINER_STEVE_2] = { -#line 2617 +#line 2682 .trainerName = _("STEVE"), -#line 2618 +#line 2683 .trainerClass = TRAINER_CLASS_POKEMANIAC, -#line 2619 +#line 2684 .trainerPic = TRAINER_PIC_POKEMANIAC, .encounterMusic_gender = -#line 2621 +#line 2686 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 2622 +#line 2687 .doubleBattle = FALSE, -#line 2623 +#line 2688 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2625 +#line 2690 .species = SPECIES_LAIRON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2627 +#line 2692 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 2626 +#line 2691 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2629 +#line 2694 [TRAINER_STEVE_3] = { -#line 2630 +#line 2695 .trainerName = _("STEVE"), -#line 2631 +#line 2696 .trainerClass = TRAINER_CLASS_POKEMANIAC, -#line 2632 +#line 2697 .trainerPic = TRAINER_PIC_POKEMANIAC, .encounterMusic_gender = -#line 2634 +#line 2699 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 2635 +#line 2700 .doubleBattle = FALSE, -#line 2636 +#line 2701 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2638 +#line 2703 .species = SPECIES_LAIRON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2640 +#line 2705 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 2639 +#line 2704 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2642 +#line 2707 .species = SPECIES_RHYHORN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2644 +#line 2709 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 2643 +#line 2708 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2646 +#line 2711 [TRAINER_STEVE_4] = { -#line 2647 +#line 2712 .trainerName = _("STEVE"), -#line 2648 +#line 2713 .trainerClass = TRAINER_CLASS_POKEMANIAC, -#line 2649 +#line 2714 .trainerPic = TRAINER_PIC_POKEMANIAC, .encounterMusic_gender = -#line 2651 +#line 2716 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 2652 +#line 2717 .doubleBattle = FALSE, -#line 2653 +#line 2718 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2655 +#line 2720 .species = SPECIES_LAIRON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2657 +#line 2722 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 2656 +#line 2721 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2659 +#line 2724 .species = SPECIES_RHYHORN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2661 +#line 2726 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 2660 +#line 2725 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2663 +#line 2728 [TRAINER_STEVE_5] = { -#line 2664 +#line 2729 .trainerName = _("STEVE"), -#line 2665 +#line 2730 .trainerClass = TRAINER_CLASS_POKEMANIAC, -#line 2666 +#line 2731 .trainerPic = TRAINER_PIC_POKEMANIAC, .encounterMusic_gender = -#line 2668 +#line 2733 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 2669 +#line 2734 .doubleBattle = FALSE, -#line 2670 +#line 2735 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2672 +#line 2737 .species = SPECIES_AGGRON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2674 +#line 2739 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 2673 +#line 2738 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2676 +#line 2741 .species = SPECIES_RHYDON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2678 +#line 2743 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 2677 +#line 2742 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2680 +#line 2745 [TRAINER_LUIS] = { -#line 2681 +#line 2746 .trainerName = _("LUIS"), -#line 2682 +#line 2747 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2683 +#line 2748 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2685 +#line 2750 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2686 +#line 2751 .doubleBattle = FALSE, -#line 2687 +#line 2752 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2689 +#line 2754 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2691 +#line 2756 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2690 +#line 2755 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2693 +#line 2758 [TRAINER_DOMINIK] = { -#line 2694 +#line 2759 .trainerName = _("DOMINIK"), -#line 2695 +#line 2760 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2696 +#line 2761 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2698 +#line 2763 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2699 +#line 2764 .doubleBattle = FALSE, -#line 2700 +#line 2765 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2702 +#line 2767 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2704 +#line 2769 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2703 +#line 2768 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2706 +#line 2771 [TRAINER_DOUGLAS] = { -#line 2707 +#line 2772 .trainerName = _("DOUGLAS"), -#line 2708 +#line 2773 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2709 +#line 2774 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2711 +#line 2776 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2712 +#line 2777 .doubleBattle = FALSE, -#line 2713 +#line 2778 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2715 +#line 2780 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2717 +#line 2782 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 2716 +#line 2781 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2719 +#line 2784 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2721 +#line 2786 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 2720 +#line 2785 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2723 +#line 2788 [TRAINER_DARRIN] = { -#line 2724 +#line 2789 .trainerName = _("DARRIN"), -#line 2725 +#line 2790 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2726 +#line 2791 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2728 +#line 2793 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2729 +#line 2794 .doubleBattle = FALSE, -#line 2730 +#line 2795 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 2732 +#line 2797 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2734 +#line 2799 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 2733 +#line 2798 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2736 +#line 2801 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2738 +#line 2803 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 2737 +#line 2802 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2740 +#line 2805 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2742 +#line 2807 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 2741 +#line 2806 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2744 +#line 2809 [TRAINER_TONY_1] = { -#line 2745 +#line 2810 .trainerName = _("TONY"), -#line 2746 +#line 2811 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2747 +#line 2812 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2749 +#line 2814 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2750 +#line 2815 .doubleBattle = FALSE, -#line 2751 +#line 2816 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2753 +#line 2818 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2755 +#line 2820 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2754 +#line 2819 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2757 +#line 2822 [TRAINER_JEROME] = { -#line 2758 +#line 2823 .trainerName = _("JEROME"), -#line 2759 +#line 2824 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2760 +#line 2825 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2762 +#line 2827 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2763 +#line 2828 .doubleBattle = FALSE, -#line 2764 +#line 2829 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2766 +#line 2831 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2768 +#line 2833 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2767 +#line 2832 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2770 +#line 2835 [TRAINER_MATTHEW] = { -#line 2771 +#line 2836 .trainerName = _("MATTHEW"), -#line 2772 +#line 2837 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2773 +#line 2838 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2775 +#line 2840 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2776 +#line 2841 .doubleBattle = FALSE, -#line 2777 +#line 2842 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2779 +#line 2844 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2781 +#line 2846 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2780 +#line 2845 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2783 +#line 2848 [TRAINER_DAVID] = { -#line 2784 +#line 2849 .trainerName = _("DAVID"), -#line 2785 +#line 2850 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2786 +#line 2851 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2788 +#line 2853 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2789 +#line 2854 .doubleBattle = FALSE, -#line 2790 +#line 2855 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2792 +#line 2857 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2794 +#line 2859 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2793 +#line 2858 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2796 +#line 2861 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2798 +#line 2863 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2797 +#line 2862 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2800 +#line 2865 [TRAINER_SPENCER] = { -#line 2801 +#line 2866 .trainerName = _("SPENCER"), -#line 2802 +#line 2867 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2803 +#line 2868 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2805 +#line 2870 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2806 +#line 2871 .doubleBattle = FALSE, -#line 2807 +#line 2872 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2809 +#line 2874 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2811 +#line 2876 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2810 +#line 2875 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2813 +#line 2878 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2815 +#line 2880 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2814 +#line 2879 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2817 +#line 2882 [TRAINER_ROLAND] = { -#line 2818 +#line 2883 .trainerName = _("ROLAND"), -#line 2819 +#line 2884 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2820 +#line 2885 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2822 +#line 2887 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2823 +#line 2888 .doubleBattle = FALSE, -#line 2824 +#line 2889 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2826 +#line 2891 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2828 +#line 2893 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2827 +#line 2892 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2830 +#line 2895 [TRAINER_NOLEN] = { -#line 2831 +#line 2896 .trainerName = _("NOLEN"), -#line 2832 +#line 2897 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2833 +#line 2898 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2835 +#line 2900 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2836 +#line 2901 .doubleBattle = FALSE, -#line 2837 +#line 2902 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2839 +#line 2904 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2841 +#line 2906 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2840 +#line 2905 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2843 +#line 2908 [TRAINER_STAN] = { -#line 2844 +#line 2909 .trainerName = _("STAN"), -#line 2845 +#line 2910 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2846 +#line 2911 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2848 +#line 2913 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2849 +#line 2914 .doubleBattle = FALSE, -#line 2850 +#line 2915 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2852 +#line 2917 .species = SPECIES_HORSEA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2854 +#line 2919 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2853 +#line 2918 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2856 +#line 2921 [TRAINER_BARRY] = { -#line 2857 +#line 2922 .trainerName = _("BARRY"), -#line 2858 +#line 2923 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2859 +#line 2924 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2861 +#line 2926 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2862 +#line 2927 .doubleBattle = FALSE, -#line 2863 +#line 2928 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2865 +#line 2930 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2867 +#line 2932 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2866 +#line 2931 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2869 +#line 2934 [TRAINER_DEAN] = { -#line 2870 +#line 2935 .trainerName = _("DEAN"), -#line 2871 +#line 2936 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2872 +#line 2937 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2874 +#line 2939 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2875 +#line 2940 .doubleBattle = FALSE, -#line 2876 +#line 2941 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 2878 +#line 2943 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2880 +#line 2945 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2879 +#line 2944 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2882 +#line 2947 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2884 +#line 2949 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2883 +#line 2948 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2886 +#line 2951 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2888 +#line 2953 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2887 +#line 2952 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2890 +#line 2955 [TRAINER_RODNEY] = { -#line 2891 +#line 2956 .trainerName = _("RODNEY"), -#line 2892 +#line 2957 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2893 +#line 2958 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2895 +#line 2960 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2896 +#line 2961 .doubleBattle = FALSE, -#line 2897 +#line 2962 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2899 +#line 2964 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2901 +#line 2966 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2900 +#line 2965 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2903 +#line 2968 [TRAINER_RICHARD] = { -#line 2904 +#line 2969 .trainerName = _("RICHARD"), -#line 2905 +#line 2970 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2906 +#line 2971 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2908 +#line 2973 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2909 +#line 2974 .doubleBattle = FALSE, -#line 2910 +#line 2975 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2912 +#line 2977 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2914 +#line 2979 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2913 +#line 2978 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2916 +#line 2981 [TRAINER_HERMAN] = { -#line 2917 +#line 2982 .trainerName = _("HERMAN"), -#line 2918 +#line 2983 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2919 +#line 2984 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2921 +#line 2986 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2922 +#line 2987 .doubleBattle = FALSE, -#line 2923 +#line 2988 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2925 +#line 2990 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2927 +#line 2992 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2926 +#line 2991 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2929 +#line 2994 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2931 +#line 2996 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2930 +#line 2995 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2933 +#line 2998 [TRAINER_SANTIAGO] = { -#line 2934 +#line 2999 .trainerName = _("SANTIAGO"), -#line 2935 +#line 3000 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2936 +#line 3001 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2938 +#line 3003 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2939 +#line 3004 .doubleBattle = FALSE, -#line 2940 +#line 3005 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2942 +#line 3007 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2944 +#line 3009 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2943 +#line 3008 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2946 +#line 3011 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2948 +#line 3013 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2947 +#line 3012 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2950 +#line 3015 [TRAINER_GILBERT] = { -#line 2951 +#line 3016 .trainerName = _("GILBERT"), -#line 2952 +#line 3017 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2953 +#line 3018 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2955 +#line 3020 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2956 +#line 3021 .doubleBattle = FALSE, -#line 2957 +#line 3022 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2959 +#line 3024 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2961 +#line 3026 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2960 +#line 3025 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2963 +#line 3028 [TRAINER_FRANKLIN] = { -#line 2964 +#line 3029 .trainerName = _("FRANKLIN"), -#line 2965 +#line 3030 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2966 +#line 3031 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2968 +#line 3033 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2969 +#line 3034 .doubleBattle = FALSE, -#line 2970 +#line 3035 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2972 +#line 3037 .species = SPECIES_SEALEO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2974 +#line 3039 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2973 +#line 3038 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2976 +#line 3041 [TRAINER_KEVIN] = { -#line 2977 +#line 3042 .trainerName = _("KEVIN"), -#line 2978 +#line 3043 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2979 +#line 3044 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2981 +#line 3046 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2982 +#line 3047 .doubleBattle = FALSE, -#line 2983 +#line 3048 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2985 +#line 3050 .species = SPECIES_SPHEAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2987 +#line 3052 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2986 +#line 3051 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2989 +#line 3054 [TRAINER_JACK] = { -#line 2990 +#line 3055 .trainerName = _("JACK"), -#line 2991 +#line 3056 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2992 +#line 3057 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2994 +#line 3059 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2995 +#line 3060 .doubleBattle = FALSE, -#line 2996 +#line 3061 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2998 +#line 3063 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3000 +#line 3065 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2999 +#line 3064 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3002 +#line 3067 [TRAINER_DUDLEY] = { -#line 3003 +#line 3068 .trainerName = _("DUDLEY"), -#line 3004 +#line 3069 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 3005 +#line 3070 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 3007 +#line 3072 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 3008 +#line 3073 .doubleBattle = FALSE, -#line 3009 +#line 3074 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3011 +#line 3076 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3013 +#line 3078 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3012 +#line 3077 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3015 +#line 3080 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3017 +#line 3082 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3016 +#line 3081 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3019 +#line 3084 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3021 +#line 3086 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3020 +#line 3085 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3023 +#line 3088 [TRAINER_CHAD] = { -#line 3024 +#line 3089 .trainerName = _("CHAD"), -#line 3025 +#line 3090 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 3026 +#line 3091 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 3028 +#line 3093 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 3029 +#line 3094 .doubleBattle = FALSE, -#line 3030 +#line 3095 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3032 +#line 3097 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3034 +#line 3099 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3033 +#line 3098 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3036 +#line 3101 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3038 +#line 3103 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3037 +#line 3102 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3040 +#line 3105 [TRAINER_TONY_2] = { -#line 3041 +#line 3106 .trainerName = _("TONY"), -#line 3042 +#line 3107 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 3043 +#line 3108 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 3045 +#line 3110 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 3046 +#line 3111 .doubleBattle = FALSE, -#line 3047 +#line 3112 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3049 +#line 3114 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3051 +#line 3116 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3050 +#line 3115 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3053 +#line 3118 [TRAINER_TONY_3] = { -#line 3054 +#line 3119 .trainerName = _("TONY"), -#line 3055 +#line 3120 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 3056 +#line 3121 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 3058 +#line 3123 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 3059 +#line 3124 .doubleBattle = FALSE, -#line 3060 +#line 3125 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3062 +#line 3127 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3064 +#line 3129 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3063 +#line 3128 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3066 +#line 3131 [TRAINER_TONY_4] = { -#line 3067 +#line 3132 .trainerName = _("TONY"), -#line 3068 +#line 3133 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 3069 +#line 3134 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 3071 +#line 3136 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 3072 +#line 3137 .doubleBattle = FALSE, -#line 3073 +#line 3138 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3075 +#line 3140 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3077 +#line 3142 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3076 +#line 3141 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3079 +#line 3144 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3081 +#line 3146 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3080 +#line 3145 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3083 +#line 3148 [TRAINER_TONY_5] = { -#line 3084 +#line 3149 .trainerName = _("TONY"), -#line 3085 +#line 3150 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 3086 +#line 3151 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 3088 +#line 3153 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 3089 +#line 3154 .doubleBattle = FALSE, -#line 3090 +#line 3155 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3092 +#line 3157 .species = SPECIES_STARMIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3094 +#line 3159 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3093 +#line 3158 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3096 +#line 3161 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3098 +#line 3163 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3097 +#line 3162 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3100 +#line 3165 [TRAINER_TAKAO] = { -#line 3101 +#line 3166 .trainerName = _("TAKAO"), -#line 3102 +#line 3167 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3103 +#line 3168 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3105 +#line 3170 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3106 +#line 3171 .doubleBattle = FALSE, -#line 3107 +#line 3172 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3109 +#line 3174 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3111 +#line 3176 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 3110 +#line 3175 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3113 +#line 3178 [TRAINER_HITOSHI] = { -#line 3114 +#line 3179 .trainerName = _("HITOSHI"), -#line 3115 +#line 3180 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3116 +#line 3181 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3118 +#line 3183 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3119 +#line 3184 .doubleBattle = FALSE, -#line 3120 +#line 3185 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3122 +#line 3187 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3124 +#line 3189 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 3123 +#line 3188 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3126 +#line 3191 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3128 +#line 3193 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 3127 +#line 3192 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3130 +#line 3195 [TRAINER_KIYO] = { -#line 3131 +#line 3196 .trainerName = _("KIYO"), -#line 3132 +#line 3197 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3133 +#line 3198 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3135 +#line 3200 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3136 +#line 3201 .doubleBattle = FALSE, -#line 3137 +#line 3202 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3139 +#line 3204 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3141 +#line 3206 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3140 +#line 3205 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3143 +#line 3208 [TRAINER_KOICHI] = { -#line 3144 +#line 3209 .trainerName = _("KOICHI"), -#line 3145 +#line 3210 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3146 +#line 3211 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3148 +#line 3213 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3149 +#line 3214 .doubleBattle = FALSE, -#line 3150 +#line 3215 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3152 +#line 3217 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3154 +#line 3219 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3153 +#line 3218 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3156 +#line 3221 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3158 +#line 3223 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 3157 +#line 3222 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3160 +#line 3225 [TRAINER_NOB_1] = { -#line 3161 +#line 3226 .trainerName = _("NOB"), -#line 3162 +#line 3227 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3163 +#line 3228 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3165 +#line 3230 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3166 +#line 3231 .doubleBattle = FALSE, -#line 3167 +#line 3232 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3169 +#line 3234 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3171 +#line 3236 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3170 +#line 3235 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3173 +#line 3238 [TRAINER_NOB_2] = { -#line 3174 +#line 3239 .trainerName = _("NOB"), -#line 3175 +#line 3240 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3176 +#line 3241 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3178 +#line 3243 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3179 +#line 3244 .doubleBattle = FALSE, -#line 3180 +#line 3245 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3182 +#line 3247 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3184 +#line 3249 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 3183 +#line 3248 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3186 +#line 3251 [TRAINER_NOB_3] = { -#line 3187 +#line 3252 .trainerName = _("NOB"), -#line 3188 +#line 3253 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3189 +#line 3254 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3191 +#line 3256 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3192 +#line 3257 .doubleBattle = FALSE, -#line 3193 +#line 3258 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3195 +#line 3260 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3197 +#line 3262 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 3196 +#line 3261 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3199 +#line 3264 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3201 +#line 3266 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 3200 +#line 3265 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3203 +#line 3268 [TRAINER_NOB_4] = { -#line 3204 +#line 3269 .trainerName = _("NOB"), -#line 3205 +#line 3270 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3206 +#line 3271 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3208 +#line 3273 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3209 +#line 3274 .doubleBattle = FALSE, -#line 3210 +#line 3275 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3212 +#line 3277 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3214 +#line 3279 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 3213 +#line 3278 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3216 +#line 3281 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3218 +#line 3283 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 3217 +#line 3282 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3220 +#line 3285 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3222 +#line 3287 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 3221 +#line 3286 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3224 +#line 3289 [TRAINER_NOB_5] = { -#line 3225 +#line 3290 .trainerName = _("NOB"), -#line 3226 +#line 3291 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3227 +#line 3292 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3229 +#line 3294 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3230 +#line 3295 .doubleBattle = FALSE, -#line 3231 +#line 3296 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 3233 +#line 3298 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3235 +#line 3300 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 3234 +#line 3299 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3237 +#line 3302 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3239 +#line 3304 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 3238 +#line 3303 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3241 +#line 3306 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3243 +#line 3308 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 3242 +#line 3307 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3245 +#line 3310 .species = SPECIES_MACHAMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3245 +#line 3310 .heldItem = ITEM_BLACK_BELT, -#line 3247 +#line 3312 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 3246 +#line 3311 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3249 +#line 3314 [TRAINER_YUJI] = { -#line 3250 +#line 3315 .trainerName = _("YUJI"), -#line 3251 +#line 3316 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3252 +#line 3317 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3254 +#line 3319 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3255 +#line 3320 .doubleBattle = FALSE, -#line 3256 +#line 3321 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3258 +#line 3323 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3260 +#line 3325 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3259 +#line 3324 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3262 +#line 3327 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3264 +#line 3329 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3263 +#line 3328 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3266 +#line 3331 [TRAINER_DAISUKE] = { -#line 3267 +#line 3332 .trainerName = _("DAISUKE"), -#line 3268 +#line 3333 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3269 +#line 3334 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3271 +#line 3336 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3272 +#line 3337 .doubleBattle = FALSE, -#line 3273 +#line 3338 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3275 +#line 3340 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3277 +#line 3342 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3276 +#line 3341 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3279 +#line 3344 [TRAINER_ATSUSHI] = { -#line 3280 +#line 3345 .trainerName = _("ATSUSHI"), -#line 3281 +#line 3346 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3282 +#line 3347 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3284 +#line 3349 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3285 +#line 3350 .doubleBattle = FALSE, -#line 3286 +#line 3351 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3288 +#line 3353 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3290 +#line 3355 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3289 +#line 3354 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3292 +#line 3357 [TRAINER_KIRK] = { -#line 3293 +#line 3358 .trainerName = _("KIRK"), -#line 3294 +#line 3359 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 3295 +#line 3360 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 3297 +#line 3362 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3298 +#line 3363 .doubleBattle = FALSE, -#line 3299 +#line 3364 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3301 +#line 3366 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3303 +#line 3368 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3302 +#line 3367 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 3304 +#line 3369 MOVE_QUICK_ATTACK, MOVE_THUNDER_WAVE, MOVE_SPARK, @@ -8313,17 +8313,17 @@ F_TRAINER_FEMALE | }, }, { -#line 3309 +#line 3374 .species = SPECIES_VOLTORB, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3311 +#line 3376 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3310 +#line 3375 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 3312 +#line 3377 MOVE_CHARGE, MOVE_SHOCK_WAVE, MOVE_SCREECH, @@ -8331,845 +8331,845 @@ F_TRAINER_FEMALE | }, }, }, -#line 3316 +#line 3381 [TRAINER_GRUNT_AQUA_HIDEOUT_7] = { -#line 3317 +#line 3382 .trainerName = _("GRUNT"), -#line 3318 +#line 3383 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 3319 +#line 3384 .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = -#line 3320 +#line 3385 F_TRAINER_FEMALE | -#line 3321 +#line 3386 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 3322 +#line 3387 .doubleBattle = FALSE, -#line 3323 +#line 3388 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3325 +#line 3390 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3327 +#line 3392 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3326 +#line 3391 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3329 +#line 3394 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3331 +#line 3396 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3330 +#line 3395 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3333 +#line 3398 [TRAINER_GRUNT_AQUA_HIDEOUT_8] = { -#line 3334 +#line 3399 .trainerName = _("GRUNT"), -#line 3335 +#line 3400 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 3336 +#line 3401 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 3338 +#line 3403 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 3339 +#line 3404 .doubleBattle = FALSE, -#line 3340 +#line 3405 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3342 +#line 3407 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3344 +#line 3409 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3343 +#line 3408 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3346 +#line 3411 [TRAINER_SHAWN] = { -#line 3347 +#line 3412 .trainerName = _("SHAWN"), -#line 3348 +#line 3413 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 3349 +#line 3414 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 3351 +#line 3416 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3352 +#line 3417 .doubleBattle = FALSE, -#line 3353 +#line 3418 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3355 +#line 3420 .species = SPECIES_VOLTORB, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3357 +#line 3422 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3356 +#line 3421 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3359 +#line 3424 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3361 +#line 3426 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3360 +#line 3425 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3363 +#line 3428 [TRAINER_FERNANDO_1] = { -#line 3364 +#line 3429 .trainerName = _("FERNANDO"), -#line 3365 +#line 3430 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 3366 +#line 3431 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 3368 +#line 3433 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3369 +#line 3434 .doubleBattle = FALSE, -#line 3370 +#line 3435 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3372 +#line 3437 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3374 +#line 3439 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3373 +#line 3438 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3376 +#line 3441 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3378 +#line 3443 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3377 +#line 3442 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3380 +#line 3445 [TRAINER_DALTON_1] = { -#line 3381 +#line 3446 .trainerName = _("DALTON"), -#line 3382 +#line 3447 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 3383 +#line 3448 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 3385 +#line 3450 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3386 +#line 3451 .doubleBattle = FALSE, -#line 3387 +#line 3452 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3389 +#line 3454 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3391 +#line 3456 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3390 +#line 3455 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3393 +#line 3458 .species = SPECIES_WHISMUR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3395 +#line 3460 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3394 +#line 3459 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3397 +#line 3462 [TRAINER_DALTON_2] = { -#line 3398 +#line 3463 .trainerName = _("DALTON"), -#line 3399 +#line 3464 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 3400 +#line 3465 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 3402 +#line 3467 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3403 +#line 3468 .doubleBattle = FALSE, -#line 3404 +#line 3469 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3406 +#line 3471 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3408 +#line 3473 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3407 +#line 3472 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3410 +#line 3475 .species = SPECIES_WHISMUR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3412 +#line 3477 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3411 +#line 3476 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3414 +#line 3479 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3416 +#line 3481 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3415 +#line 3480 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3418 +#line 3483 [TRAINER_DALTON_3] = { -#line 3419 +#line 3484 .trainerName = _("DALTON"), -#line 3420 +#line 3485 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 3421 +#line 3486 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 3423 +#line 3488 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3424 +#line 3489 .doubleBattle = FALSE, -#line 3425 +#line 3490 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3427 +#line 3492 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3429 +#line 3494 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3428 +#line 3493 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3431 +#line 3496 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3433 +#line 3498 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3432 +#line 3497 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3435 +#line 3500 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3437 +#line 3502 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3436 +#line 3501 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3439 +#line 3504 [TRAINER_DALTON_4] = { -#line 3440 +#line 3505 .trainerName = _("DALTON"), -#line 3441 +#line 3506 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 3442 +#line 3507 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 3444 +#line 3509 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3445 +#line 3510 .doubleBattle = FALSE, -#line 3446 +#line 3511 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3448 +#line 3513 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3450 +#line 3515 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3449 +#line 3514 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3452 +#line 3517 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3454 +#line 3519 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3453 +#line 3518 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3456 +#line 3521 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3458 +#line 3523 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3457 +#line 3522 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3460 +#line 3525 [TRAINER_DALTON_5] = { -#line 3461 +#line 3526 .trainerName = _("DALTON"), -#line 3462 +#line 3527 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 3463 +#line 3528 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 3465 +#line 3530 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3466 +#line 3531 .doubleBattle = FALSE, -#line 3467 +#line 3532 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3469 +#line 3534 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3471 +#line 3536 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3470 +#line 3535 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3473 +#line 3538 .species = SPECIES_EXPLOUD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3475 +#line 3540 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3474 +#line 3539 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3477 +#line 3542 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3479 +#line 3544 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3478 +#line 3543 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3481 +#line 3546 [TRAINER_COLE] = { -#line 3482 +#line 3547 .trainerName = _("COLE"), -#line 3483 +#line 3548 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3484 +#line 3549 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3486 +#line 3551 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3487 +#line 3552 .doubleBattle = FALSE, -#line 3488 +#line 3553 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3490 +#line 3555 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3492 +#line 3557 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3491 +#line 3556 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3494 +#line 3559 [TRAINER_JEFF] = { -#line 3495 +#line 3560 .trainerName = _("JEFF"), -#line 3496 +#line 3561 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3497 +#line 3562 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3499 +#line 3564 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3500 +#line 3565 .doubleBattle = FALSE, -#line 3501 +#line 3566 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3503 +#line 3568 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3505 +#line 3570 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3504 +#line 3569 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3507 +#line 3572 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3509 +#line 3574 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3508 +#line 3573 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3511 +#line 3576 [TRAINER_AXLE] = { -#line 3512 +#line 3577 .trainerName = _("AXLE"), -#line 3513 +#line 3578 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3514 +#line 3579 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3516 +#line 3581 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3517 +#line 3582 .doubleBattle = FALSE, -#line 3518 +#line 3583 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3520 +#line 3585 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3522 +#line 3587 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3521 +#line 3586 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3524 +#line 3589 [TRAINER_JACE] = { -#line 3525 +#line 3590 .trainerName = _("JACE"), -#line 3526 +#line 3591 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3527 +#line 3592 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3529 +#line 3594 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3530 +#line 3595 .doubleBattle = FALSE, -#line 3531 +#line 3596 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3533 +#line 3598 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3535 +#line 3600 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3534 +#line 3599 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3537 +#line 3602 [TRAINER_KEEGAN] = { -#line 3538 +#line 3603 .trainerName = _("KEEGAN"), -#line 3539 +#line 3604 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3540 +#line 3605 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3542 +#line 3607 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3543 +#line 3608 .doubleBattle = FALSE, -#line 3544 +#line 3609 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3546 +#line 3611 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3548 +#line 3613 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 3547 +#line 3612 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3550 +#line 3615 [TRAINER_BERNIE_1] = { -#line 3551 +#line 3616 .trainerName = _("BERNIE"), -#line 3552 +#line 3617 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3553 +#line 3618 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3555 +#line 3620 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3556 +#line 3621 .doubleBattle = FALSE, -#line 3557 +#line 3622 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3559 +#line 3624 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3561 +#line 3626 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3560 +#line 3625 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3563 +#line 3628 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3565 +#line 3630 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3564 +#line 3629 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3567 +#line 3632 [TRAINER_BERNIE_2] = { -#line 3568 +#line 3633 .trainerName = _("BERNIE"), -#line 3569 +#line 3634 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3570 +#line 3635 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3572 +#line 3637 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3573 +#line 3638 .doubleBattle = FALSE, -#line 3574 +#line 3639 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3576 +#line 3641 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3578 +#line 3643 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3577 +#line 3642 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3580 +#line 3645 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3582 +#line 3647 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3581 +#line 3646 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3584 +#line 3649 [TRAINER_BERNIE_3] = { -#line 3585 +#line 3650 .trainerName = _("BERNIE"), -#line 3586 +#line 3651 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3587 +#line 3652 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3589 +#line 3654 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3590 +#line 3655 .doubleBattle = FALSE, -#line 3591 +#line 3656 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3593 +#line 3658 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3595 +#line 3660 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3594 +#line 3659 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3597 +#line 3662 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3599 +#line 3664 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3598 +#line 3663 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3601 +#line 3666 [TRAINER_BERNIE_4] = { -#line 3602 +#line 3667 .trainerName = _("BERNIE"), -#line 3603 +#line 3668 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3604 +#line 3669 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3606 +#line 3671 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3607 +#line 3672 .doubleBattle = FALSE, -#line 3608 +#line 3673 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3610 +#line 3675 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3612 +#line 3677 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3611 +#line 3676 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3614 +#line 3679 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3616 +#line 3681 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3615 +#line 3680 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3618 +#line 3683 [TRAINER_BERNIE_5] = { -#line 3619 +#line 3684 .trainerName = _("BERNIE"), -#line 3620 +#line 3685 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3621 +#line 3686 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3623 +#line 3688 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3624 +#line 3689 .doubleBattle = FALSE, -#line 3625 +#line 3690 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3627 +#line 3692 .species = SPECIES_MAGCARGO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3629 +#line 3694 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3628 +#line 3693 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3631 +#line 3696 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3633 +#line 3698 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3632 +#line 3697 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3635 +#line 3700 [TRAINER_DREW] = { -#line 3636 +#line 3701 .trainerName = _("DREW"), -#line 3637 +#line 3702 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3638 +#line 3703 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3640 +#line 3705 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3641 +#line 3706 .doubleBattle = FALSE, -#line 3642 +#line 3707 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3644 +#line 3709 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3646 +#line 3711 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3645 +#line 3710 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 3647 +#line 3712 MOVE_DIG, MOVE_SAND_ATTACK, MOVE_POISON_STING, @@ -9178,37 +9178,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 3652 +#line 3717 [TRAINER_BEAU] = { -#line 3653 +#line 3718 .trainerName = _("BEAU"), -#line 3654 +#line 3719 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3655 +#line 3720 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3657 +#line 3722 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3658 +#line 3723 .doubleBattle = FALSE, -#line 3659 +#line 3724 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3661 +#line 3726 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3663 +#line 3728 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3662 +#line 3727 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 3664 +#line 3729 MOVE_RAPID_SPIN, MOVE_MUD_SLAP, MOVE_PSYBEAM, @@ -9216,17 +9216,17 @@ F_TRAINER_FEMALE | }, }, { -#line 3669 +#line 3734 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3671 +#line 3736 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3670 +#line 3735 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 3672 +#line 3737 MOVE_POISON_STING, MOVE_SAND_ATTACK, MOVE_SCRATCH, @@ -9234,17 +9234,17 @@ F_TRAINER_FEMALE | }, }, { -#line 3677 +#line 3742 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3679 +#line 3744 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3678 +#line 3743 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 3680 +#line 3745 MOVE_RAPID_SPIN, MOVE_MUD_SLAP, MOVE_PSYBEAM, @@ -9253,1973 +9253,1973 @@ F_TRAINER_FEMALE | }, }, }, -#line 3685 +#line 3750 [TRAINER_LARRY] = { -#line 3686 +#line 3751 .trainerName = _("LARRY"), -#line 3687 +#line 3752 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3688 +#line 3753 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3690 +#line 3755 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3691 +#line 3756 .doubleBattle = FALSE, -#line 3692 +#line 3757 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3694 +#line 3759 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3696 +#line 3761 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3695 +#line 3760 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3698 +#line 3763 [TRAINER_SHANE] = { -#line 3699 +#line 3764 .trainerName = _("SHANE"), -#line 3700 +#line 3765 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3701 +#line 3766 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3703 +#line 3768 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3704 +#line 3769 .doubleBattle = FALSE, -#line 3705 +#line 3770 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3707 +#line 3772 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3709 +#line 3774 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3708 +#line 3773 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3711 +#line 3776 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3713 +#line 3778 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3712 +#line 3777 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3715 +#line 3780 [TRAINER_JUSTIN] = { -#line 3716 +#line 3781 .trainerName = _("JUSTIN"), -#line 3717 +#line 3782 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3718 +#line 3783 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3720 +#line 3785 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3721 +#line 3786 .doubleBattle = FALSE, -#line 3722 +#line 3787 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3724 +#line 3789 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3726 +#line 3791 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3725 +#line 3790 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3728 +#line 3793 [TRAINER_ETHAN_1] = { -#line 3729 +#line 3794 .trainerName = _("ETHAN"), -#line 3730 +#line 3795 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3731 +#line 3796 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3733 +#line 3798 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3734 +#line 3799 .doubleBattle = FALSE, -#line 3735 +#line 3800 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3737 +#line 3802 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3739 +#line 3804 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3738 +#line 3803 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3741 +#line 3806 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3743 +#line 3808 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3742 +#line 3807 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3745 +#line 3810 [TRAINER_AUTUMN] = { -#line 3746 +#line 3811 .trainerName = _("AUTUMN"), -#line 3747 +#line 3812 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 3748 +#line 3813 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 3749 +#line 3814 F_TRAINER_FEMALE | -#line 3750 +#line 3815 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 3751 +#line 3816 .doubleBattle = FALSE, -#line 3752 +#line 3817 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3754 +#line 3819 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3756 +#line 3821 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3755 +#line 3820 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3758 +#line 3823 [TRAINER_TRAVIS] = { -#line 3759 +#line 3824 .trainerName = _("TRAVIS"), -#line 3760 +#line 3825 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3761 +#line 3826 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3763 +#line 3828 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3764 +#line 3829 .doubleBattle = FALSE, -#line 3765 +#line 3830 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3767 +#line 3832 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3769 +#line 3834 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3768 +#line 3833 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3771 +#line 3836 [TRAINER_ETHAN_2] = { -#line 3772 +#line 3837 .trainerName = _("ETHAN"), -#line 3773 +#line 3838 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3774 +#line 3839 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3776 +#line 3841 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3777 +#line 3842 .doubleBattle = FALSE, -#line 3778 +#line 3843 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3780 +#line 3845 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3782 +#line 3847 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3781 +#line 3846 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3784 +#line 3849 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3786 +#line 3851 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3785 +#line 3850 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3788 +#line 3853 [TRAINER_ETHAN_3] = { -#line 3789 +#line 3854 .trainerName = _("ETHAN"), -#line 3790 +#line 3855 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3791 +#line 3856 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3793 +#line 3858 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3794 +#line 3859 .doubleBattle = FALSE, -#line 3795 +#line 3860 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3797 +#line 3862 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3799 +#line 3864 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3798 +#line 3863 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3801 +#line 3866 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3803 +#line 3868 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3802 +#line 3867 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3805 +#line 3870 [TRAINER_ETHAN_4] = { -#line 3806 +#line 3871 .trainerName = _("ETHAN"), -#line 3807 +#line 3872 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3808 +#line 3873 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3810 +#line 3875 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3811 +#line 3876 .doubleBattle = FALSE, -#line 3812 +#line 3877 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3814 +#line 3879 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3816 +#line 3881 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3815 +#line 3880 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3818 +#line 3883 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3820 +#line 3885 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3819 +#line 3884 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3822 +#line 3887 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3824 +#line 3889 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3823 +#line 3888 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3826 +#line 3891 [TRAINER_ETHAN_5] = { -#line 3827 +#line 3892 .trainerName = _("ETHAN"), -#line 3828 +#line 3893 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3829 +#line 3894 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3831 +#line 3896 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3832 +#line 3897 .doubleBattle = FALSE, -#line 3833 +#line 3898 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3835 +#line 3900 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3837 +#line 3902 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3836 +#line 3901 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3839 +#line 3904 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3841 +#line 3906 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3840 +#line 3905 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3843 +#line 3908 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3845 +#line 3910 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3844 +#line 3909 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3847 +#line 3912 [TRAINER_BRENT] = { -#line 3848 +#line 3913 .trainerName = _("BRENT"), -#line 3849 +#line 3914 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 3850 +#line 3915 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 3852 +#line 3917 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 3853 +#line 3918 .doubleBattle = FALSE, -#line 3854 +#line 3919 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3856 +#line 3921 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3858 +#line 3923 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3857 +#line 3922 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3860 +#line 3925 [TRAINER_DONALD] = { -#line 3861 +#line 3926 .trainerName = _("DONALD"), -#line 3862 +#line 3927 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 3863 +#line 3928 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 3865 +#line 3930 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 3866 +#line 3931 .doubleBattle = FALSE, -#line 3867 +#line 3932 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3869 +#line 3934 .species = SPECIES_WURMPLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3871 +#line 3936 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3870 +#line 3935 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3873 +#line 3938 .species = SPECIES_SILCOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3875 +#line 3940 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3874 +#line 3939 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3877 +#line 3942 .species = SPECIES_BEAUTIFLY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3879 +#line 3944 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3878 +#line 3943 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3881 +#line 3946 [TRAINER_TAYLOR] = { -#line 3882 +#line 3947 .trainerName = _("TAYLOR"), -#line 3883 +#line 3948 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 3884 +#line 3949 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 3886 +#line 3951 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 3887 +#line 3952 .doubleBattle = FALSE, -#line 3888 +#line 3953 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3890 +#line 3955 .species = SPECIES_WURMPLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3892 +#line 3957 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3891 +#line 3956 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3894 +#line 3959 .species = SPECIES_CASCOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3896 +#line 3961 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3895 +#line 3960 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3898 +#line 3963 .species = SPECIES_DUSTOX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3900 +#line 3965 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3899 +#line 3964 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3902 +#line 3967 [TRAINER_JEFFREY_1] = { -#line 3903 +#line 3968 .trainerName = _("JEFFREY"), -#line 3904 +#line 3969 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 3905 +#line 3970 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 3907 +#line 3972 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 3908 +#line 3973 .doubleBattle = FALSE, -#line 3909 +#line 3974 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3911 +#line 3976 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3913 +#line 3978 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3912 +#line 3977 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3915 +#line 3980 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3917 +#line 3982 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3916 +#line 3981 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3919 +#line 3984 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3921 +#line 3986 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3920 +#line 3985 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3923 +#line 3988 [TRAINER_DEREK] = { -#line 3924 +#line 3989 .trainerName = _("DEREK"), -#line 3925 +#line 3990 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 3926 +#line 3991 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 3928 +#line 3993 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 3929 +#line 3994 .doubleBattle = FALSE, -#line 3930 +#line 3995 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3932 +#line 3997 .species = SPECIES_DUSTOX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3934 +#line 3999 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 3933 +#line 3998 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3936 +#line 4001 .species = SPECIES_BEAUTIFLY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3938 +#line 4003 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 3937 +#line 4002 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3940 +#line 4005 [TRAINER_JEFFREY_2] = { -#line 3941 +#line 4006 .trainerName = _("JEFFREY"), -#line 3942 +#line 4007 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 3943 +#line 4008 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 3945 +#line 4010 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 3946 +#line 4011 .doubleBattle = FALSE, -#line 3947 +#line 4012 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3949 +#line 4014 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3951 +#line 4016 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3950 +#line 4015 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3953 +#line 4018 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3955 +#line 4020 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3954 +#line 4019 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3957 +#line 4022 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3959 +#line 4024 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3958 +#line 4023 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3961 +#line 4026 [TRAINER_JEFFREY_3] = { -#line 3962 +#line 4027 .trainerName = _("JEFFREY"), -#line 3963 +#line 4028 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 3964 +#line 4029 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 3966 +#line 4031 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 3967 +#line 4032 .doubleBattle = FALSE, -#line 3968 +#line 4033 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3970 +#line 4035 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3972 +#line 4037 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3971 +#line 4036 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3974 +#line 4039 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3976 +#line 4041 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3975 +#line 4040 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3978 +#line 4043 .species = SPECIES_MASQUERAIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3980 +#line 4045 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3979 +#line 4044 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3982 +#line 4047 [TRAINER_JEFFREY_4] = { -#line 3983 +#line 4048 .trainerName = _("JEFFREY"), -#line 3984 +#line 4049 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 3985 +#line 4050 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 3987 +#line 4052 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 3988 +#line 4053 .doubleBattle = FALSE, -#line 3989 +#line 4054 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 3991 +#line 4056 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3993 +#line 4058 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3992 +#line 4057 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3995 +#line 4060 .species = SPECIES_WURMPLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3997 +#line 4062 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3996 +#line 4061 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3999 +#line 4064 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4001 +#line 4066 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 4000 +#line 4065 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4003 +#line 4068 .species = SPECIES_MASQUERAIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4005 +#line 4070 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 4004 +#line 4069 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4007 +#line 4072 [TRAINER_JEFFREY_5] = { -#line 4008 +#line 4073 .trainerName = _("JEFFREY"), -#line 4009 +#line 4074 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 4010 +#line 4075 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 4012 +#line 4077 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 4013 +#line 4078 .doubleBattle = FALSE, -#line 4014 +#line 4079 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 4016 +#line 4081 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4018 +#line 4083 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4017 +#line 4082 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4020 +#line 4085 .species = SPECIES_DUSTOX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4022 +#line 4087 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4021 +#line 4086 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4024 +#line 4089 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4026 +#line 4091 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4025 +#line 4090 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4028 +#line 4093 .species = SPECIES_MASQUERAIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4028 +#line 4093 .heldItem = ITEM_SILVER_POWDER, -#line 4030 +#line 4095 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4029 +#line 4094 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4032 +#line 4097 .species = SPECIES_BEAUTIFLY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4034 +#line 4099 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4033 +#line 4098 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4036 +#line 4101 [TRAINER_EDWARD] = { -#line 4037 +#line 4102 .trainerName = _("EDWARD"), -#line 4038 +#line 4103 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4039 +#line 4104 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4041 +#line 4106 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4042 +#line 4107 .doubleBattle = FALSE, -#line 4043 +#line 4108 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4045 +#line 4110 .species = SPECIES_ABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4047 +#line 4112 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4046 +#line 4111 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4048 +#line 4113 MOVE_HIDDEN_POWER, }, }, }, }, -#line 4050 +#line 4115 [TRAINER_PRESTON] = { -#line 4051 +#line 4116 .trainerName = _("PRESTON"), -#line 4052 +#line 4117 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4053 +#line 4118 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4055 +#line 4120 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4056 +#line 4121 .doubleBattle = FALSE, -#line 4057 +#line 4122 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4059 +#line 4124 .species = SPECIES_KIRLIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4061 +#line 4126 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 4060 +#line 4125 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4063 +#line 4128 [TRAINER_VIRGIL] = { -#line 4064 +#line 4129 .trainerName = _("VIRGIL"), -#line 4065 +#line 4130 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4066 +#line 4131 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4068 +#line 4133 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4069 +#line 4134 .doubleBattle = FALSE, -#line 4070 +#line 4135 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4072 +#line 4137 .species = SPECIES_RALTS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4074 +#line 4139 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 4073 +#line 4138 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4076 +#line 4141 [TRAINER_BLAKE] = { -#line 4077 +#line 4142 .trainerName = _("BLAKE"), -#line 4078 +#line 4143 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4079 +#line 4144 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4081 +#line 4146 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4082 +#line 4147 .doubleBattle = FALSE, -#line 4083 +#line 4148 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4085 +#line 4150 .species = SPECIES_GIRAFARIG, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4087 +#line 4152 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 4086 +#line 4151 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4089 +#line 4154 [TRAINER_WILLIAM] = { -#line 4090 +#line 4155 .trainerName = _("WILLIAM"), -#line 4091 +#line 4156 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4092 +#line 4157 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4094 +#line 4159 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4095 +#line 4160 .doubleBattle = FALSE, -#line 4096 +#line 4161 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 4098 +#line 4163 .species = SPECIES_RALTS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4100 +#line 4165 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4099 +#line 4164 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4102 +#line 4167 .species = SPECIES_RALTS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4104 +#line 4169 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4103 +#line 4168 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4106 +#line 4171 .species = SPECIES_KIRLIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4108 +#line 4173 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4107 +#line 4172 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4110 +#line 4175 [TRAINER_JOSHUA] = { -#line 4111 +#line 4176 .trainerName = _("JOSHUA"), -#line 4112 +#line 4177 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4113 +#line 4178 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4115 +#line 4180 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4116 +#line 4181 .doubleBattle = FALSE, -#line 4117 +#line 4182 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4119 +#line 4184 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4121 +#line 4186 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4120 +#line 4185 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4123 +#line 4188 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4125 +#line 4190 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4124 +#line 4189 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4127 +#line 4192 [TRAINER_CAMERON_1] = { -#line 4128 +#line 4193 .trainerName = _("CAMERON"), -#line 4129 +#line 4194 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4130 +#line 4195 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4132 +#line 4197 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4133 +#line 4198 .doubleBattle = FALSE, -#line 4134 +#line 4199 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4136 +#line 4201 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4138 +#line 4203 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4137 +#line 4202 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4140 +#line 4205 [TRAINER_CAMERON_2] = { -#line 4141 +#line 4206 .trainerName = _("CAMERON"), -#line 4142 +#line 4207 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4143 +#line 4208 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4145 +#line 4210 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4146 +#line 4211 .doubleBattle = FALSE, -#line 4147 +#line 4212 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4149 +#line 4214 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4151 +#line 4216 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 4150 +#line 4215 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4153 +#line 4218 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4155 +#line 4220 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 4154 +#line 4219 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4157 +#line 4222 [TRAINER_CAMERON_3] = { -#line 4158 +#line 4223 .trainerName = _("CAMERON"), -#line 4159 +#line 4224 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4160 +#line 4225 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4162 +#line 4227 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4163 +#line 4228 .doubleBattle = FALSE, -#line 4164 +#line 4229 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4166 +#line 4231 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4168 +#line 4233 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 4167 +#line 4232 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4170 +#line 4235 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4172 +#line 4237 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 4171 +#line 4236 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4174 +#line 4239 [TRAINER_CAMERON_4] = { -#line 4175 +#line 4240 .trainerName = _("CAMERON"), -#line 4176 +#line 4241 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4177 +#line 4242 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4179 +#line 4244 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4180 +#line 4245 .doubleBattle = FALSE, -#line 4181 +#line 4246 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4183 +#line 4248 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4185 +#line 4250 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 4184 +#line 4249 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4187 +#line 4252 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4189 +#line 4254 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 4188 +#line 4253 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4191 +#line 4256 [TRAINER_CAMERON_5] = { -#line 4192 +#line 4257 .trainerName = _("CAMERON"), -#line 4193 +#line 4258 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4194 +#line 4259 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4196 +#line 4261 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4197 +#line 4262 .doubleBattle = FALSE, -#line 4198 +#line 4263 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4200 +#line 4265 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4202 +#line 4267 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4201 +#line 4266 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4204 +#line 4269 .species = SPECIES_ALAKAZAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4206 +#line 4271 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4205 +#line 4270 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4208 +#line 4273 [TRAINER_JACLYN] = { -#line 4209 +#line 4274 .trainerName = _("JACLYN"), -#line 4210 +#line 4275 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4211 +#line 4276 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 4212 +#line 4277 F_TRAINER_FEMALE | -#line 4213 +#line 4278 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4214 +#line 4279 .doubleBattle = FALSE, -#line 4215 +#line 4280 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4217 +#line 4282 .species = SPECIES_ABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4219 +#line 4284 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4218 +#line 4283 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4220 +#line 4285 MOVE_HIDDEN_POWER, }, }, }, }, -#line 4222 +#line 4287 [TRAINER_HANNAH] = { -#line 4223 +#line 4288 .trainerName = _("HANNAH"), -#line 4224 +#line 4289 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4225 +#line 4290 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 4226 +#line 4291 F_TRAINER_FEMALE | -#line 4227 +#line 4292 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4228 +#line 4293 .doubleBattle = FALSE, -#line 4229 +#line 4294 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4231 +#line 4296 .species = SPECIES_KIRLIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4233 +#line 4298 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 4232 +#line 4297 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4235 +#line 4300 [TRAINER_SAMANTHA] = { -#line 4236 +#line 4301 .trainerName = _("SAMANTHA"), -#line 4237 +#line 4302 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4238 +#line 4303 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 4239 +#line 4304 F_TRAINER_FEMALE | -#line 4240 +#line 4305 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4241 +#line 4306 .doubleBattle = FALSE, -#line 4242 +#line 4307 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4244 +#line 4309 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4246 +#line 4311 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 4245 +#line 4310 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4248 +#line 4313 [TRAINER_MAURA] = { -#line 4249 +#line 4314 .trainerName = _("MAURA"), -#line 4250 +#line 4315 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4251 +#line 4316 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 4252 +#line 4317 F_TRAINER_FEMALE | -#line 4253 +#line 4318 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4254 +#line 4319 .doubleBattle = FALSE, -#line 4255 +#line 4320 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4257 +#line 4322 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4259 +#line 4324 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 4258 +#line 4323 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4261 +#line 4326 [TRAINER_KAYLA] = { -#line 4262 +#line 4327 .trainerName = _("KAYLA"), -#line 4263 +#line 4328 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4264 +#line 4329 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 4265 +#line 4330 F_TRAINER_FEMALE | -#line 4266 +#line 4331 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4267 +#line 4332 .doubleBattle = FALSE, -#line 4268 +#line 4333 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 4270 +#line 4335 .species = SPECIES_WOBBUFFET, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4272 +#line 4337 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4271 +#line 4336 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4274 +#line 4339 .species = SPECIES_NATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4276 +#line 4341 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4275 +#line 4340 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4278 +#line 4343 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4280 +#line 4345 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4279 +#line 4344 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4282 +#line 4347 [TRAINER_ALEXIS] = { -#line 4283 +#line 4348 .trainerName = _("ALEXIS"), -#line 4284 +#line 4349 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4285 +#line 4350 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 4286 +#line 4351 F_TRAINER_FEMALE | -#line 4287 +#line 4352 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4288 +#line 4353 .doubleBattle = FALSE, -#line 4289 +#line 4354 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4291 +#line 4356 .species = SPECIES_KIRLIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4293 +#line 4358 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4292 +#line 4357 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4295 +#line 4360 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4297 +#line 4362 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4296 +#line 4361 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4299 +#line 4364 [TRAINER_JACKI_1] = { -#line 4300 +#line 4365 .trainerName = _("JACKI"), -#line 4301 +#line 4366 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4302 +#line 4367 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 4303 +#line 4368 F_TRAINER_FEMALE | -#line 4304 +#line 4369 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4305 +#line 4370 .doubleBattle = FALSE, -#line 4306 +#line 4371 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4308 +#line 4373 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4310 +#line 4375 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4309 +#line 4374 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4312 +#line 4377 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4314 +#line 4379 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4313 +#line 4378 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4316 +#line 4381 [TRAINER_JACKI_2] = { -#line 4317 +#line 4382 .trainerName = _("JACKI"), -#line 4318 +#line 4383 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4319 +#line 4384 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 4320 +#line 4385 F_TRAINER_FEMALE | -#line 4321 +#line 4386 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4322 +#line 4387 .doubleBattle = FALSE, -#line 4323 +#line 4388 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4325 +#line 4390 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4327 +#line 4392 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 4326 +#line 4391 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4329 +#line 4394 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4331 +#line 4396 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 4330 +#line 4395 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4333 +#line 4398 [TRAINER_JACKI_3] = { -#line 4334 +#line 4399 .trainerName = _("JACKI"), -#line 4335 +#line 4400 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4336 +#line 4401 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 4337 +#line 4402 F_TRAINER_FEMALE | -#line 4338 +#line 4403 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4339 +#line 4404 .doubleBattle = FALSE, -#line 4340 +#line 4405 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4342 +#line 4407 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4344 +#line 4409 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 4343 +#line 4408 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4346 +#line 4411 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4348 +#line 4413 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 4347 +#line 4412 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4350 +#line 4415 [TRAINER_JACKI_4] = { -#line 4351 +#line 4416 .trainerName = _("JACKI"), -#line 4352 +#line 4417 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4353 +#line 4418 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 4354 +#line 4419 F_TRAINER_FEMALE | -#line 4355 +#line 4420 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4356 +#line 4421 .doubleBattle = FALSE, -#line 4357 +#line 4422 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4359 +#line 4424 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4361 +#line 4426 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 4360 +#line 4425 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4363 +#line 4428 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4365 +#line 4430 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 4364 +#line 4429 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4367 +#line 4432 [TRAINER_JACKI_5] = { -#line 4368 +#line 4433 .trainerName = _("JACKI"), -#line 4369 +#line 4434 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4370 +#line 4435 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 4371 +#line 4436 F_TRAINER_FEMALE | -#line 4372 +#line 4437 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4373 +#line 4438 .doubleBattle = FALSE, -#line 4374 +#line 4439 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4376 +#line 4441 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4378 +#line 4443 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4377 +#line 4442 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4380 +#line 4445 .species = SPECIES_ALAKAZAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4382 +#line 4447 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4381 +#line 4446 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4384 +#line 4449 [TRAINER_WALTER_1] = { -#line 4385 +#line 4450 .trainerName = _("WALTER"), -#line 4386 +#line 4451 .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 4387 +#line 4452 .trainerPic = TRAINER_PIC_GENTLEMAN, .encounterMusic_gender = -#line 4389 +#line 4454 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 4390 +#line 4455 .doubleBattle = FALSE, -#line 4391 +#line 4456 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4393 +#line 4458 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4395 +#line 4460 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4394 +#line 4459 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4397 +#line 4462 [TRAINER_MICAH] = { -#line 4398 +#line 4463 .trainerName = _("MICAH"), -#line 4399 +#line 4464 .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 4400 +#line 4465 .trainerPic = TRAINER_PIC_GENTLEMAN, .encounterMusic_gender = -#line 4402 +#line 4467 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 4403 +#line 4468 .doubleBattle = FALSE, -#line 4404 +#line 4469 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4406 +#line 4471 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4408 +#line 4473 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4407 +#line 4472 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4410 +#line 4475 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4412 +#line 4477 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4411 +#line 4476 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4414 +#line 4479 [TRAINER_THOMAS] = { -#line 4415 +#line 4480 .trainerName = _("THOMAS"), -#line 4416 +#line 4481 .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 4417 +#line 4482 .trainerPic = TRAINER_PIC_GENTLEMAN, .encounterMusic_gender = -#line 4419 +#line 4484 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 4420 +#line 4485 .doubleBattle = FALSE, -#line 4421 +#line 4486 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4423 +#line 4488 .species = SPECIES_ZANGOOSE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4425 +#line 4490 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4424 +#line 4489 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4427 +#line 4492 [TRAINER_WALTER_2] = { -#line 4428 +#line 4493 .trainerName = _("WALTER"), -#line 4429 +#line 4494 .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 4430 +#line 4495 .trainerPic = TRAINER_PIC_GENTLEMAN, .encounterMusic_gender = -#line 4432 +#line 4497 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 4433 +#line 4498 .doubleBattle = FALSE, -#line 4434 +#line 4499 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4436 +#line 4501 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4438 +#line 4503 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 4437 +#line 4502 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4440 +#line 4505 [TRAINER_WALTER_3] = { -#line 4441 +#line 4506 .trainerName = _("WALTER"), -#line 4442 +#line 4507 .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 4443 +#line 4508 .trainerPic = TRAINER_PIC_GENTLEMAN, .encounterMusic_gender = -#line 4445 +#line 4510 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 4446 +#line 4511 .doubleBattle = FALSE, -#line 4447 +#line 4512 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4449 +#line 4514 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4451 +#line 4516 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 4450 +#line 4515 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4452 +#line 4517 MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_ODOR_SLEUTH, @@ -11227,17 +11227,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4457 +#line 4522 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4459 +#line 4524 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 4458 +#line 4523 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4460 +#line 4525 MOVE_QUICK_ATTACK, MOVE_SPARK, MOVE_ODOR_SLEUTH, @@ -11246,37 +11246,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 4465 +#line 4530 [TRAINER_WALTER_4] = { -#line 4466 +#line 4531 .trainerName = _("WALTER"), -#line 4467 +#line 4532 .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 4468 +#line 4533 .trainerPic = TRAINER_PIC_GENTLEMAN, .encounterMusic_gender = -#line 4470 +#line 4535 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 4471 +#line 4536 .doubleBattle = FALSE, -#line 4472 +#line 4537 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4474 +#line 4539 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4476 +#line 4541 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 4475 +#line 4540 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4477 +#line 4542 MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_ODOR_SLEUTH, @@ -11284,17 +11284,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4482 +#line 4547 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4484 +#line 4549 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 4483 +#line 4548 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4485 +#line 4550 MOVE_QUICK_ATTACK, MOVE_SPARK, MOVE_ODOR_SLEUTH, @@ -11302,37 +11302,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 4489 +#line 4554 [TRAINER_WALTER_5] = { -#line 4490 +#line 4555 .trainerName = _("WALTER"), -#line 4491 +#line 4556 .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 4492 +#line 4557 .trainerPic = TRAINER_PIC_GENTLEMAN, .encounterMusic_gender = -#line 4494 +#line 4559 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 4495 +#line 4560 .doubleBattle = FALSE, -#line 4496 +#line 4561 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 4498 +#line 4563 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4500 +#line 4565 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4499 +#line 4564 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4501 +#line 4566 MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_ODOR_SLEUTH, @@ -11340,17 +11340,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4506 +#line 4571 .species = SPECIES_GOLDUCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4508 +#line 4573 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4507 +#line 4572 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4509 +#line 4574 MOVE_FURY_SWIPES, MOVE_DISABLE, MOVE_CONFUSION, @@ -11358,17 +11358,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4514 +#line 4579 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4516 +#line 4581 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4515 +#line 4580 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4517 +#line 4582 MOVE_QUICK_ATTACK, MOVE_SPARK, MOVE_ODOR_SLEUTH, @@ -11377,42 +11377,42 @@ F_TRAINER_FEMALE | }, }, }, -#line 4522 +#line 4587 [TRAINER_SIDNEY] = { -#line 4523 +#line 4588 .trainerName = _("SIDNEY"), -#line 4524 +#line 4589 .trainerClass = TRAINER_CLASS_ELITE_FOUR, -#line 4525 +#line 4590 .trainerPic = TRAINER_PIC_ELITE_FOUR_SIDNEY, .encounterMusic_gender = -#line 4527 +#line 4592 TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, -#line 4528 +#line 4593 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 4529 +#line 4594 .doubleBattle = FALSE, -#line 4530 +#line 4595 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SETUP_FIRST_TURN, -#line 4531 +#line 4596 .mugshotEnabled = TRUE, .mugshotColor = MUGSHOT_COLOR_PURPLE, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 4533 +#line 4598 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4535 +#line 4600 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4534 +#line 4599 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4536 +#line 4601 MOVE_ROAR, MOVE_DOUBLE_EDGE, MOVE_SAND_ATTACK, @@ -11420,17 +11420,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4541 +#line 4606 .species = SPECIES_SHIFTRY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4543 +#line 4608 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4542 +#line 4607 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4544 +#line 4609 MOVE_TORMENT, MOVE_DOUBLE_TEAM, MOVE_SWAGGER, @@ -11438,17 +11438,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4549 +#line 4614 .species = SPECIES_CACTURNE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4551 +#line 4616 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4550 +#line 4615 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4552 +#line 4617 MOVE_LEECH_SEED, MOVE_FEINT_ATTACK, MOVE_NEEDLE_ARM, @@ -11456,17 +11456,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4557 +#line 4622 .species = SPECIES_CRAWDAUNT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4559 +#line 4624 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4558 +#line 4623 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4560 +#line 4625 MOVE_SURF, MOVE_SWORDS_DANCE, MOVE_STRENGTH, @@ -11474,19 +11474,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4565 +#line 4630 .species = SPECIES_ABSOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4565 +#line 4630 .heldItem = ITEM_SITRUS_BERRY, -#line 4567 +#line 4632 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 4566 +#line 4631 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4568 +#line 4633 MOVE_AERIAL_ACE, MOVE_ROCK_SLIDE, MOVE_SWORDS_DANCE, @@ -11495,44 +11495,44 @@ F_TRAINER_FEMALE | }, }, }, -#line 4573 +#line 4638 [TRAINER_PHOEBE] = { -#line 4574 +#line 4639 .trainerName = _("PHOEBE"), -#line 4575 +#line 4640 .trainerClass = TRAINER_CLASS_ELITE_FOUR, -#line 4576 +#line 4641 .trainerPic = TRAINER_PIC_ELITE_FOUR_PHOEBE, .encounterMusic_gender = -#line 4577 +#line 4642 F_TRAINER_FEMALE | -#line 4578 +#line 4643 TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, -#line 4579 +#line 4644 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 4580 +#line 4645 .doubleBattle = FALSE, -#line 4581 +#line 4646 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, -#line 4582 +#line 4647 .mugshotEnabled = TRUE, .mugshotColor = MUGSHOT_COLOR_GREEN, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 4584 +#line 4649 .species = SPECIES_DUSCLOPS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4586 +#line 4651 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4585 +#line 4650 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4587 +#line 4652 MOVE_SHADOW_PUNCH, MOVE_CONFUSE_RAY, MOVE_CURSE, @@ -11540,17 +11540,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4592 +#line 4657 .species = SPECIES_BANETTE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4594 +#line 4659 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4593 +#line 4658 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4595 +#line 4660 MOVE_SHADOW_BALL, MOVE_GRUDGE, MOVE_WILL_O_WISP, @@ -11558,17 +11558,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4600 +#line 4665 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4602 +#line 4667 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4601 +#line 4666 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4603 +#line 4668 MOVE_SHADOW_BALL, MOVE_DOUBLE_TEAM, MOVE_NIGHT_SHADE, @@ -11576,17 +11576,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4608 +#line 4673 .species = SPECIES_BANETTE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4610 +#line 4675 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4609 +#line 4674 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4611 +#line 4676 MOVE_SHADOW_BALL, MOVE_PSYCHIC, MOVE_THUNDERBOLT, @@ -11594,19 +11594,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4616 +#line 4681 .species = SPECIES_DUSCLOPS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4616 +#line 4681 .heldItem = ITEM_SITRUS_BERRY, -#line 4618 +#line 4683 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 4617 +#line 4682 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4619 +#line 4684 MOVE_SHADOW_BALL, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, @@ -11615,44 +11615,44 @@ F_TRAINER_FEMALE | }, }, }, -#line 4624 +#line 4689 [TRAINER_GLACIA] = { -#line 4625 +#line 4690 .trainerName = _("GLACIA"), -#line 4626 +#line 4691 .trainerClass = TRAINER_CLASS_ELITE_FOUR, -#line 4627 +#line 4692 .trainerPic = TRAINER_PIC_ELITE_FOUR_GLACIA, .encounterMusic_gender = -#line 4628 +#line 4693 F_TRAINER_FEMALE | -#line 4629 +#line 4694 TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, -#line 4630 +#line 4695 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 4631 +#line 4696 .doubleBattle = FALSE, -#line 4632 +#line 4697 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, -#line 4633 +#line 4698 .mugshotEnabled = TRUE, .mugshotColor = MUGSHOT_COLOR_PINK, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 4635 +#line 4700 .species = SPECIES_SEALEO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4637 +#line 4702 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4636 +#line 4701 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4638 +#line 4703 MOVE_ENCORE, MOVE_BODY_SLAM, MOVE_HAIL, @@ -11660,17 +11660,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4643 +#line 4708 .species = SPECIES_GLALIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4645 +#line 4710 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4644 +#line 4709 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4646 +#line 4711 MOVE_LIGHT_SCREEN, MOVE_CRUNCH, MOVE_ICY_WIND, @@ -11678,17 +11678,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4651 +#line 4716 .species = SPECIES_SEALEO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4653 +#line 4718 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4652 +#line 4717 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4654 +#line 4719 MOVE_ATTRACT, MOVE_DOUBLE_EDGE, MOVE_HAIL, @@ -11696,17 +11696,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4659 +#line 4724 .species = SPECIES_GLALIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4661 +#line 4726 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4660 +#line 4725 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4662 +#line 4727 MOVE_SHADOW_BALL, MOVE_EXPLOSION, MOVE_HAIL, @@ -11714,19 +11714,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4667 +#line 4732 .species = SPECIES_WALREIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4667 +#line 4732 .heldItem = ITEM_SITRUS_BERRY, -#line 4669 +#line 4734 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 4668 +#line 4733 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4670 +#line 4735 MOVE_SURF, MOVE_BODY_SLAM, MOVE_ICE_BEAM, @@ -11735,42 +11735,42 @@ F_TRAINER_FEMALE | }, }, }, -#line 4675 +#line 4740 [TRAINER_DRAKE] = { -#line 4676 +#line 4741 .trainerName = _("DRAKE"), -#line 4677 +#line 4742 .trainerClass = TRAINER_CLASS_ELITE_FOUR, -#line 4678 +#line 4743 .trainerPic = TRAINER_PIC_ELITE_FOUR_DRAKE, .encounterMusic_gender = -#line 4680 +#line 4745 TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, -#line 4681 +#line 4746 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 4682 +#line 4747 .doubleBattle = FALSE, -#line 4683 +#line 4748 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, -#line 4684 +#line 4749 .mugshotEnabled = TRUE, .mugshotColor = MUGSHOT_COLOR_BLUE, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 4686 +#line 4751 .species = SPECIES_SHELGON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4688 +#line 4753 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4687 +#line 4752 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4689 +#line 4754 MOVE_ROCK_TOMB, MOVE_DRAGON_CLAW, MOVE_PROTECT, @@ -11778,17 +11778,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4694 +#line 4759 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4696 +#line 4761 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4695 +#line 4760 .lvl = 54, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4697 +#line 4762 MOVE_DOUBLE_EDGE, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE, @@ -11796,17 +11796,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4702 +#line 4767 .species = SPECIES_KINGDRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4704 +#line 4769 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4703 +#line 4768 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4705 +#line 4770 MOVE_SMOKESCREEN, MOVE_DRAGON_DANCE, MOVE_SURF, @@ -11814,17 +11814,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4710 +#line 4775 .species = SPECIES_FLYGON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4712 +#line 4777 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4711 +#line 4776 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4713 +#line 4778 MOVE_FLAMETHROWER, MOVE_CRUNCH, MOVE_DRAGON_BREATH, @@ -11832,19 +11832,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4718 +#line 4783 .species = SPECIES_SALAMENCE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4718 +#line 4783 .heldItem = ITEM_SITRUS_BERRY, -#line 4720 +#line 4785 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 4719 +#line 4784 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4721 +#line 4786 MOVE_FLAMETHROWER, MOVE_DRAGON_CLAW, MOVE_ROCK_SLIDE, @@ -11853,41 +11853,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 4726 +#line 4791 [TRAINER_ROXANNE_1] = { -#line 4727 +#line 4792 .trainerName = _("ROXANNE"), -#line 4728 +#line 4793 .trainerClass = TRAINER_CLASS_LEADER, -#line 4729 +#line 4794 .trainerPic = TRAINER_PIC_LEADER_ROXANNE, .encounterMusic_gender = -#line 4730 +#line 4795 F_TRAINER_FEMALE | -#line 4731 +#line 4796 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 4732 +#line 4797 .items = { ITEM_POTION, ITEM_POTION }, -#line 4733 +#line 4798 .doubleBattle = FALSE, -#line 4734 +#line 4799 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 4736 +#line 4801 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4738 +#line 4803 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 4737 +#line 4802 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4739 +#line 4804 MOVE_TACKLE, MOVE_DEFENSE_CURL, MOVE_ROCK_THROW, @@ -11895,17 +11895,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4744 +#line 4809 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4746 +#line 4811 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 4745 +#line 4810 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4747 +#line 4812 MOVE_TACKLE, MOVE_DEFENSE_CURL, MOVE_ROCK_THROW, @@ -11913,19 +11913,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4752 +#line 4817 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4752 +#line 4817 .heldItem = ITEM_ORAN_BERRY, -#line 4754 +#line 4819 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 4753 +#line 4818 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4755 +#line 4820 MOVE_BLOCK, MOVE_HARDEN, MOVE_TACKLE, @@ -11934,39 +11934,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 4760 +#line 4825 [TRAINER_BRAWLY_1] = { -#line 4761 +#line 4826 .trainerName = _("BRAWLY"), -#line 4762 +#line 4827 .trainerClass = TRAINER_CLASS_LEADER, -#line 4763 +#line 4828 .trainerPic = TRAINER_PIC_LEADER_BRAWLY, .encounterMusic_gender = -#line 4765 +#line 4830 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 4766 +#line 4831 .items = { ITEM_SUPER_POTION, ITEM_SUPER_POTION }, -#line 4767 +#line 4832 .doubleBattle = FALSE, -#line 4768 +#line 4833 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 4770 +#line 4835 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4772 +#line 4837 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 4771 +#line 4836 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4773 +#line 4838 MOVE_KARATE_CHOP, MOVE_LOW_KICK, MOVE_SEISMIC_TOSS, @@ -11974,17 +11974,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4778 +#line 4843 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4780 +#line 4845 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 4779 +#line 4844 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4781 +#line 4846 MOVE_FOCUS_PUNCH, MOVE_LIGHT_SCREEN, MOVE_REFLECT, @@ -11992,19 +11992,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4786 +#line 4851 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4786 +#line 4851 .heldItem = ITEM_SITRUS_BERRY, -#line 4788 +#line 4853 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 4787 +#line 4852 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4789 +#line 4854 MOVE_ARM_THRUST, MOVE_VITAL_THROW, MOVE_REVERSAL, @@ -12013,39 +12013,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 4794 +#line 4859 [TRAINER_WATTSON_1] = { -#line 4795 +#line 4860 .trainerName = _("WATTSON"), -#line 4796 +#line 4861 .trainerClass = TRAINER_CLASS_LEADER, -#line 4797 +#line 4862 .trainerPic = TRAINER_PIC_LEADER_WATTSON, .encounterMusic_gender = -#line 4799 +#line 4864 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 4800 +#line 4865 .items = { ITEM_SUPER_POTION, ITEM_SUPER_POTION }, -#line 4801 +#line 4866 .doubleBattle = FALSE, -#line 4802 +#line 4867 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 4804 +#line 4869 .species = SPECIES_VOLTORB, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4806 +#line 4871 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 4805 +#line 4870 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4807 +#line 4872 MOVE_ROLLOUT, MOVE_SPARK, MOVE_SELF_DESTRUCT, @@ -12053,17 +12053,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4812 +#line 4877 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4814 +#line 4879 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 4813 +#line 4878 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4815 +#line 4880 MOVE_SHOCK_WAVE, MOVE_LEER, MOVE_QUICK_ATTACK, @@ -12071,17 +12071,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4820 +#line 4885 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4822 +#line 4887 .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), -#line 4821 +#line 4886 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4823 +#line 4888 MOVE_SUPERSONIC, MOVE_SHOCK_WAVE, MOVE_THUNDER_WAVE, @@ -12089,19 +12089,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4828 +#line 4893 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4828 +#line 4893 .heldItem = ITEM_SITRUS_BERRY, -#line 4830 +#line 4895 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4829 +#line 4894 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4831 +#line 4896 MOVE_QUICK_ATTACK, MOVE_THUNDER_WAVE, MOVE_SHOCK_WAVE, @@ -12110,41 +12110,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 4836 +#line 4901 [TRAINER_FLANNERY_1] = { -#line 4837 +#line 4902 .trainerName = _("FLANNERY"), -#line 4838 +#line 4903 .trainerClass = TRAINER_CLASS_LEADER, -#line 4839 +#line 4904 .trainerPic = TRAINER_PIC_LEADER_FLANNERY, .encounterMusic_gender = -#line 4840 +#line 4905 F_TRAINER_FEMALE | -#line 4841 +#line 4906 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 4842 +#line 4907 .items = { ITEM_HYPER_POTION, ITEM_HYPER_POTION }, -#line 4843 +#line 4908 .doubleBattle = FALSE, -#line 4844 +#line 4909 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 4846 +#line 4911 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4848 +#line 4913 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 4847 +#line 4912 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4849 +#line 4914 MOVE_OVERHEAT, MOVE_TAKE_DOWN, MOVE_MAGNITUDE, @@ -12152,17 +12152,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4854 +#line 4919 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4856 +#line 4921 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 4855 +#line 4920 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4857 +#line 4922 MOVE_OVERHEAT, MOVE_SMOG, MOVE_LIGHT_SCREEN, @@ -12170,17 +12170,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4862 +#line 4927 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4864 +#line 4929 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4863 +#line 4928 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4865 +#line 4930 MOVE_OVERHEAT, MOVE_TACKLE, MOVE_SUNNY_DAY, @@ -12188,19 +12188,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4870 +#line 4935 .species = SPECIES_TORKOAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4870 +#line 4935 .heldItem = ITEM_WHITE_HERB, -#line 4872 +#line 4937 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4871 +#line 4936 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4873 +#line 4938 MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_BODY_SLAM, @@ -12209,39 +12209,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 4878 +#line 4943 [TRAINER_NORMAN_1] = { -#line 4879 +#line 4944 .trainerName = _("NORMAN"), -#line 4880 +#line 4945 .trainerClass = TRAINER_CLASS_LEADER, -#line 4881 +#line 4946 .trainerPic = TRAINER_PIC_LEADER_NORMAN, .encounterMusic_gender = -#line 4883 +#line 4948 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 4884 +#line 4949 .items = { ITEM_HYPER_POTION, ITEM_HYPER_POTION }, -#line 4885 +#line 4950 .doubleBattle = FALSE, -#line 4886 +#line 4951 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 4888 +#line 4953 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4890 +#line 4955 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 4889 +#line 4954 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4891 +#line 4956 MOVE_TEETER_DANCE, MOVE_PSYBEAM, MOVE_FACADE, @@ -12249,17 +12249,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4896 +#line 4961 .species = SPECIES_VIGOROTH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4898 +#line 4963 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 4897 +#line 4962 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4899 +#line 4964 MOVE_SLASH, MOVE_FACADE, MOVE_ENCORE, @@ -12267,17 +12267,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4904 +#line 4969 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4906 +#line 4971 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 4905 +#line 4970 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4907 +#line 4972 MOVE_SLASH, MOVE_BELLY_DRUM, MOVE_FACADE, @@ -12285,19 +12285,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4912 +#line 4977 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4912 +#line 4977 .heldItem = ITEM_SITRUS_BERRY, -#line 4914 +#line 4979 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4913 +#line 4978 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4915 +#line 4980 MOVE_COUNTER, MOVE_YAWN, MOVE_FACADE, @@ -12306,41 +12306,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 4920 +#line 4985 [TRAINER_WINONA_1] = { -#line 4921 +#line 4986 .trainerName = _("WINONA"), -#line 4922 +#line 4987 .trainerClass = TRAINER_CLASS_LEADER, -#line 4923 +#line 4988 .trainerPic = TRAINER_PIC_LEADER_WINONA, .encounterMusic_gender = -#line 4924 +#line 4989 F_TRAINER_FEMALE | -#line 4925 +#line 4990 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 4926 +#line 4991 .items = { ITEM_HYPER_POTION, ITEM_HYPER_POTION }, -#line 4927 +#line 4992 .doubleBattle = FALSE, -#line 4928 +#line 4993 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 4930 +#line 4995 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4932 +#line 4997 .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), -#line 4931 +#line 4996 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4933 +#line 4998 MOVE_PERISH_SONG, MOVE_MIRROR_MOVE, MOVE_SAFEGUARD, @@ -12348,17 +12348,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4938 +#line 5003 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4940 +#line 5005 .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), -#line 4939 +#line 5004 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4941 +#line 5006 MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, @@ -12366,17 +12366,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4946 +#line 5011 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4948 +#line 5013 .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), -#line 4947 +#line 5012 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4949 +#line 5014 MOVE_WATER_GUN, MOVE_SUPERSONIC, MOVE_PROTECT, @@ -12384,17 +12384,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4954 +#line 5019 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4956 +#line 5021 .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), -#line 4955 +#line 5020 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4957 +#line 5022 MOVE_SAND_ATTACK, MOVE_FURY_ATTACK, MOVE_STEEL_WING, @@ -12402,19 +12402,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4962 +#line 5027 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4962 +#line 5027 .heldItem = ITEM_ORAN_BERRY, -#line 4964 +#line 5029 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 4963 +#line 5028 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4965 +#line 5030 MOVE_EARTHQUAKE, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE, @@ -12423,39 +12423,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 4970 +#line 5035 [TRAINER_TATE_AND_LIZA_1] = { -#line 4971 +#line 5036 .trainerName = _("TATE&LIZA"), -#line 4972 +#line 5037 .trainerClass = TRAINER_CLASS_LEADER, -#line 4973 +#line 5038 .trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA, .encounterMusic_gender = -#line 4975 +#line 5040 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 4976 +#line 5041 .items = { ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_HYPER_POTION }, -#line 4977 +#line 5042 .doubleBattle = TRUE, -#line 4978 +#line 5043 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 4980 +#line 5045 .species = SPECIES_CLAYDOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4982 +#line 5047 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4981 +#line 5046 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4983 +#line 5048 MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_PSYCHIC, @@ -12463,17 +12463,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4988 +#line 5053 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4990 +#line 5055 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4989 +#line 5054 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4991 +#line 5056 MOVE_PSYCHIC, MOVE_SUNNY_DAY, MOVE_CONFUSE_RAY, @@ -12481,19 +12481,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4996 +#line 5061 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4996 +#line 5061 .heldItem = ITEM_SITRUS_BERRY, -#line 4998 +#line 5063 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4997 +#line 5062 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4999 +#line 5064 MOVE_LIGHT_SCREEN, MOVE_PSYCHIC, MOVE_HYPNOSIS, @@ -12501,19 +12501,19 @@ F_TRAINER_FEMALE | }, }, { -#line 5004 +#line 5069 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5004 +#line 5069 .heldItem = ITEM_SITRUS_BERRY, -#line 5006 +#line 5071 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 5005 +#line 5070 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5007 +#line 5072 MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, @@ -12522,39 +12522,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 5012 +#line 5077 [TRAINER_JUAN_1] = { -#line 5013 +#line 5078 .trainerName = _("JUAN"), -#line 5014 +#line 5079 .trainerClass = TRAINER_CLASS_LEADER, -#line 5015 +#line 5080 .trainerPic = TRAINER_PIC_LEADER_JUAN, .encounterMusic_gender = -#line 5017 +#line 5082 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5018 +#line 5083 .items = { ITEM_HYPER_POTION, ITEM_HYPER_POTION }, -#line 5019 +#line 5084 .doubleBattle = FALSE, -#line 5020 +#line 5085 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 5022 +#line 5087 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5024 +#line 5089 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 5023 +#line 5088 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5025 +#line 5090 MOVE_WATER_PULSE, MOVE_ATTRACT, MOVE_SWEET_KISS, @@ -12562,17 +12562,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5030 +#line 5095 .species = SPECIES_WHISCASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5032 +#line 5097 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 5031 +#line 5096 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5033 +#line 5098 MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_AMNESIA, @@ -12580,17 +12580,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5038 +#line 5103 .species = SPECIES_SEALEO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5040 +#line 5105 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 5039 +#line 5104 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5041 +#line 5106 MOVE_ENCORE, MOVE_BODY_SLAM, MOVE_AURORA_BEAM, @@ -12598,17 +12598,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5046 +#line 5111 .species = SPECIES_CRAWDAUNT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5048 +#line 5113 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 5047 +#line 5112 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5049 +#line 5114 MOVE_WATER_PULSE, MOVE_CRABHAMMER, MOVE_TAUNT, @@ -12616,19 +12616,19 @@ F_TRAINER_FEMALE | }, }, { -#line 5054 +#line 5119 .species = SPECIES_KINGDRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5054 +#line 5119 .heldItem = ITEM_CHESTO_BERRY, -#line 5056 +#line 5121 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 5055 +#line 5120 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5057 +#line 5122 MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, @@ -12637,597 +12637,597 @@ F_TRAINER_FEMALE | }, }, }, -#line 5062 +#line 5127 [TRAINER_JERRY_1] = { -#line 5063 +#line 5128 .trainerName = _("JERRY"), -#line 5064 +#line 5129 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5065 +#line 5130 .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .encounterMusic_gender = -#line 5067 +#line 5132 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5068 +#line 5133 .doubleBattle = FALSE, -#line 5069 +#line 5134 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5071 +#line 5136 .species = SPECIES_RALTS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5073 +#line 5138 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5072 +#line 5137 .lvl = 9, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5075 +#line 5140 [TRAINER_TED] = { -#line 5076 +#line 5141 .trainerName = _("TED"), -#line 5077 +#line 5142 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5078 +#line 5143 .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .encounterMusic_gender = -#line 5080 +#line 5145 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5081 +#line 5146 .doubleBattle = FALSE, -#line 5082 +#line 5147 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5084 +#line 5149 .species = SPECIES_RALTS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5086 +#line 5151 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5085 +#line 5150 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5088 +#line 5153 [TRAINER_PAUL] = { -#line 5089 +#line 5154 .trainerName = _("PAUL"), -#line 5090 +#line 5155 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5091 +#line 5156 .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .encounterMusic_gender = -#line 5093 +#line 5158 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5094 +#line 5159 .doubleBattle = FALSE, -#line 5095 +#line 5160 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 5097 +#line 5162 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5099 +#line 5164 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5098 +#line 5163 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5101 +#line 5166 .species = SPECIES_ODDISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5103 +#line 5168 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5102 +#line 5167 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5105 +#line 5170 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5107 +#line 5172 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5106 +#line 5171 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5109 +#line 5174 [TRAINER_JERRY_2] = { -#line 5110 +#line 5175 .trainerName = _("JERRY"), -#line 5111 +#line 5176 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5112 +#line 5177 .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .encounterMusic_gender = -#line 5114 +#line 5179 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5115 +#line 5180 .doubleBattle = FALSE, -#line 5116 +#line 5181 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5118 +#line 5183 .species = SPECIES_RALTS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5120 +#line 5185 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 5119 +#line 5184 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5122 +#line 5187 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5124 +#line 5189 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 5123 +#line 5188 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5126 +#line 5191 [TRAINER_JERRY_3] = { -#line 5127 +#line 5192 .trainerName = _("JERRY"), -#line 5128 +#line 5193 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5129 +#line 5194 .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .encounterMusic_gender = -#line 5131 +#line 5196 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5132 +#line 5197 .doubleBattle = FALSE, -#line 5133 +#line 5198 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5135 +#line 5200 .species = SPECIES_KIRLIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5137 +#line 5202 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5136 +#line 5201 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5139 +#line 5204 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5141 +#line 5206 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5140 +#line 5205 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5143 +#line 5208 [TRAINER_JERRY_4] = { -#line 5144 +#line 5209 .trainerName = _("JERRY"), -#line 5145 +#line 5210 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5146 +#line 5211 .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .encounterMusic_gender = -#line 5148 +#line 5213 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5149 +#line 5214 .doubleBattle = FALSE, -#line 5150 +#line 5215 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5152 +#line 5217 .species = SPECIES_KIRLIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5154 +#line 5219 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 5153 +#line 5218 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5156 +#line 5221 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5158 +#line 5223 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 5157 +#line 5222 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5160 +#line 5225 [TRAINER_JERRY_5] = { -#line 5161 +#line 5226 .trainerName = _("JERRY"), -#line 5162 +#line 5227 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5163 +#line 5228 .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .encounterMusic_gender = -#line 5165 +#line 5230 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5166 +#line 5231 .doubleBattle = FALSE, -#line 5167 +#line 5232 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 5169 +#line 5234 .species = SPECIES_KIRLIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5171 +#line 5236 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 5170 +#line 5235 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5173 +#line 5238 .species = SPECIES_BANETTE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5175 +#line 5240 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 5174 +#line 5239 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5177 +#line 5242 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5179 +#line 5244 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 5178 +#line 5243 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5181 +#line 5246 [TRAINER_KAREN_1] = { -#line 5182 +#line 5247 .trainerName = _("KAREN"), -#line 5183 +#line 5248 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5184 +#line 5249 .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .encounterMusic_gender = -#line 5185 +#line 5250 F_TRAINER_FEMALE | -#line 5186 +#line 5251 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 5187 +#line 5252 .doubleBattle = FALSE, -#line 5188 +#line 5253 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5190 +#line 5255 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5192 +#line 5257 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5191 +#line 5256 .lvl = 9, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5194 +#line 5259 [TRAINER_GEORGIA] = { -#line 5195 +#line 5260 .trainerName = _("GEORGIA"), -#line 5196 +#line 5261 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5197 +#line 5262 .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .encounterMusic_gender = -#line 5198 +#line 5263 F_TRAINER_FEMALE | -#line 5199 +#line 5264 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 5200 +#line 5265 .doubleBattle = FALSE, -#line 5201 +#line 5266 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5203 +#line 5268 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5205 +#line 5270 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5204 +#line 5269 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5207 +#line 5272 .species = SPECIES_BEAUTIFLY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5209 +#line 5274 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5208 +#line 5273 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5211 +#line 5276 [TRAINER_KAREN_2] = { -#line 5212 +#line 5277 .trainerName = _("KAREN"), -#line 5213 +#line 5278 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5214 +#line 5279 .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .encounterMusic_gender = -#line 5215 +#line 5280 F_TRAINER_FEMALE | -#line 5216 +#line 5281 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 5217 +#line 5282 .doubleBattle = FALSE, -#line 5218 +#line 5283 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5220 +#line 5285 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5222 +#line 5287 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 5221 +#line 5286 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5224 +#line 5289 .species = SPECIES_WHISMUR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5226 +#line 5291 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 5225 +#line 5290 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5228 +#line 5293 [TRAINER_KAREN_3] = { -#line 5229 +#line 5294 .trainerName = _("KAREN"), -#line 5230 +#line 5295 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5231 +#line 5296 .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .encounterMusic_gender = -#line 5232 +#line 5297 F_TRAINER_FEMALE | -#line 5233 +#line 5298 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 5234 +#line 5299 .doubleBattle = FALSE, -#line 5235 +#line 5300 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5237 +#line 5302 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5239 +#line 5304 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5238 +#line 5303 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5241 +#line 5306 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5243 +#line 5308 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5242 +#line 5307 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5245 +#line 5310 [TRAINER_KAREN_4] = { -#line 5246 +#line 5311 .trainerName = _("KAREN"), -#line 5247 +#line 5312 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5248 +#line 5313 .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .encounterMusic_gender = -#line 5249 +#line 5314 F_TRAINER_FEMALE | -#line 5250 +#line 5315 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 5251 +#line 5316 .doubleBattle = FALSE, -#line 5252 +#line 5317 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5254 +#line 5319 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5256 +#line 5321 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 5255 +#line 5320 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5258 +#line 5323 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5260 +#line 5325 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 5259 +#line 5324 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5262 +#line 5327 [TRAINER_KAREN_5] = { -#line 5263 +#line 5328 .trainerName = _("KAREN"), -#line 5264 +#line 5329 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5265 +#line 5330 .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .encounterMusic_gender = -#line 5266 +#line 5331 F_TRAINER_FEMALE | -#line 5267 +#line 5332 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 5268 +#line 5333 .doubleBattle = FALSE, -#line 5269 +#line 5334 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5271 +#line 5336 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5273 +#line 5338 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 5272 +#line 5337 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5275 +#line 5340 .species = SPECIES_EXPLOUD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5277 +#line 5342 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 5276 +#line 5341 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5279 +#line 5344 [TRAINER_KATE_AND_JOY] = { -#line 5280 +#line 5345 .trainerName = _("KATE & JOY"), -#line 5281 +#line 5346 .trainerClass = TRAINER_CLASS_SR_AND_JR, -#line 5282 +#line 5347 .trainerPic = TRAINER_PIC_SR_AND_JR, .encounterMusic_gender = -#line 5284 +#line 5349 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5285 +#line 5350 .doubleBattle = TRUE, -#line 5286 +#line 5351 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5288 +#line 5353 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5290 +#line 5355 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5289 +#line 5354 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5291 +#line 5356 MOVE_HYPNOSIS, MOVE_PSYBEAM, MOVE_DIZZY_PUNCH, @@ -13235,17 +13235,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5296 +#line 5361 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5298 +#line 5363 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5297 +#line 5362 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5299 +#line 5364 MOVE_FOCUS_PUNCH, MOVE_YAWN, MOVE_SLACK_OFF, @@ -13254,37 +13254,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 5304 +#line 5369 [TRAINER_ANNA_AND_MEG_1] = { -#line 5305 +#line 5370 .trainerName = _("ANNA & MEG"), -#line 5306 +#line 5371 .trainerClass = TRAINER_CLASS_SR_AND_JR, -#line 5307 +#line 5372 .trainerPic = TRAINER_PIC_SR_AND_JR, .encounterMusic_gender = -#line 5309 +#line 5374 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5310 +#line 5375 .doubleBattle = TRUE, -#line 5311 +#line 5376 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5313 +#line 5378 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5315 +#line 5380 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5314 +#line 5379 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5316 +#line 5381 MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, @@ -13292,17 +13292,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5321 +#line 5386 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5323 +#line 5388 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5322 +#line 5387 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5324 +#line 5389 MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, @@ -13310,37 +13310,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 5328 +#line 5393 [TRAINER_ANNA_AND_MEG_2] = { -#line 5329 +#line 5394 .trainerName = _("ANNA & MEG"), -#line 5330 +#line 5395 .trainerClass = TRAINER_CLASS_SR_AND_JR, -#line 5331 +#line 5396 .trainerPic = TRAINER_PIC_SR_AND_JR, .encounterMusic_gender = -#line 5333 +#line 5398 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5334 +#line 5399 .doubleBattle = TRUE, -#line 5335 +#line 5400 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5337 +#line 5402 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5339 +#line 5404 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5338 +#line 5403 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5340 +#line 5405 MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, @@ -13348,17 +13348,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5345 +#line 5410 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5347 +#line 5412 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5346 +#line 5411 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5348 +#line 5413 MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, @@ -13366,37 +13366,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 5352 +#line 5417 [TRAINER_ANNA_AND_MEG_3] = { -#line 5353 +#line 5418 .trainerName = _("ANNA & MEG"), -#line 5354 +#line 5419 .trainerClass = TRAINER_CLASS_SR_AND_JR, -#line 5355 +#line 5420 .trainerPic = TRAINER_PIC_SR_AND_JR, .encounterMusic_gender = -#line 5357 +#line 5422 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5358 +#line 5423 .doubleBattle = TRUE, -#line 5359 +#line 5424 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5361 +#line 5426 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5363 +#line 5428 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 5362 +#line 5427 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5364 +#line 5429 MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, @@ -13404,17 +13404,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5369 +#line 5434 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5371 +#line 5436 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 5370 +#line 5435 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5372 +#line 5437 MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, @@ -13422,37 +13422,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 5376 +#line 5441 [TRAINER_ANNA_AND_MEG_4] = { -#line 5377 +#line 5442 .trainerName = _("ANNA & MEG"), -#line 5378 +#line 5443 .trainerClass = TRAINER_CLASS_SR_AND_JR, -#line 5379 +#line 5444 .trainerPic = TRAINER_PIC_SR_AND_JR, .encounterMusic_gender = -#line 5381 +#line 5446 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5382 +#line 5447 .doubleBattle = TRUE, -#line 5383 +#line 5448 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5385 +#line 5450 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5387 +#line 5452 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5386 +#line 5451 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5388 +#line 5453 MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, @@ -13460,17 +13460,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5393 +#line 5458 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5395 +#line 5460 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5394 +#line 5459 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5396 +#line 5461 MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, @@ -13478,37 +13478,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 5400 +#line 5465 [TRAINER_ANNA_AND_MEG_5] = { -#line 5401 +#line 5466 .trainerName = _("ANNA & MEG"), -#line 5402 +#line 5467 .trainerClass = TRAINER_CLASS_SR_AND_JR, -#line 5403 +#line 5468 .trainerPic = TRAINER_PIC_SR_AND_JR, .encounterMusic_gender = -#line 5405 +#line 5470 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5406 +#line 5471 .doubleBattle = TRUE, -#line 5407 +#line 5472 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5409 +#line 5474 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5411 +#line 5476 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 5410 +#line 5475 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5412 +#line 5477 MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, @@ -13516,17 +13516,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5417 +#line 5482 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5419 +#line 5484 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 5418 +#line 5483 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5420 +#line 5485 MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, @@ -13534,120 +13534,120 @@ F_TRAINER_FEMALE | }, }, }, -#line 5424 +#line 5489 [TRAINER_VICTOR] = { -#line 5425 +#line 5490 .trainerName = _("VICTOR"), -#line 5426 +#line 5491 .trainerClass = TRAINER_CLASS_WINSTRATE, -#line 5427 +#line 5492 .trainerPic = TRAINER_PIC_POKEFAN_M, .encounterMusic_gender = -#line 5429 +#line 5494 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5430 +#line 5495 .doubleBattle = FALSE, -#line 5431 +#line 5496 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5433 +#line 5498 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5433 +#line 5498 .heldItem = ITEM_ORAN_BERRY, -#line 5435 +#line 5500 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5434 +#line 5499 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5437 +#line 5502 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5437 +#line 5502 .heldItem = ITEM_ORAN_BERRY, -#line 5439 +#line 5504 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5438 +#line 5503 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5441 +#line 5506 [TRAINER_MIGUEL_1] = { -#line 5442 +#line 5507 .trainerName = _("MIGUEL"), -#line 5443 +#line 5508 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5444 +#line 5509 .trainerPic = TRAINER_PIC_POKEFAN_M, .encounterMusic_gender = -#line 5446 +#line 5511 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5447 +#line 5512 .doubleBattle = FALSE, -#line 5448 +#line 5513 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5450 +#line 5515 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5450 +#line 5515 .heldItem = ITEM_ORAN_BERRY, -#line 5452 +#line 5517 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5451 +#line 5516 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5454 +#line 5519 [TRAINER_COLTON] = { -#line 5455 +#line 5520 .trainerName = _("COLTON"), -#line 5456 +#line 5521 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5457 +#line 5522 .trainerPic = TRAINER_PIC_POKEFAN_M, .encounterMusic_gender = -#line 5459 +#line 5524 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5460 +#line 5525 .doubleBattle = FALSE, -#line 5461 +#line 5526 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 5463 +#line 5528 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5463 +#line 5528 .heldItem = ITEM_ORAN_BERRY, -#line 5465 +#line 5530 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5464 +#line 5529 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5466 +#line 5531 MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK, @@ -13655,19 +13655,19 @@ F_TRAINER_FEMALE | }, }, { -#line 5471 +#line 5536 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5471 +#line 5536 .heldItem = ITEM_ORAN_BERRY, -#line 5473 +#line 5538 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5472 +#line 5537 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5474 +#line 5539 MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK, @@ -13675,19 +13675,19 @@ F_TRAINER_FEMALE | }, }, { -#line 5479 +#line 5544 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5479 +#line 5544 .heldItem = ITEM_ORAN_BERRY, -#line 5481 +#line 5546 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5480 +#line 5545 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5482 +#line 5547 MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK, @@ -13695,19 +13695,19 @@ F_TRAINER_FEMALE | }, }, { -#line 5487 +#line 5552 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5487 +#line 5552 .heldItem = ITEM_ORAN_BERRY, -#line 5489 +#line 5554 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5488 +#line 5553 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5490 +#line 5555 MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK, @@ -13715,19 +13715,19 @@ F_TRAINER_FEMALE | }, }, { -#line 5495 +#line 5560 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5495 +#line 5560 .heldItem = ITEM_ORAN_BERRY, -#line 5497 +#line 5562 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5496 +#line 5561 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5498 +#line 5563 MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK, @@ -13735,19 +13735,19 @@ F_TRAINER_FEMALE | }, }, { -#line 5503 +#line 5568 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5503 +#line 5568 .heldItem = ITEM_ORAN_BERRY, -#line 5505 +#line 5570 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5504 +#line 5569 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5506 +#line 5571 MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK, @@ -13756,584 +13756,584 @@ F_TRAINER_FEMALE | }, }, }, -#line 5511 +#line 5576 [TRAINER_MIGUEL_2] = { -#line 5512 +#line 5577 .trainerName = _("MIGUEL"), -#line 5513 +#line 5578 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5514 +#line 5579 .trainerPic = TRAINER_PIC_POKEFAN_M, .encounterMusic_gender = -#line 5516 +#line 5581 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5517 +#line 5582 .doubleBattle = FALSE, -#line 5518 +#line 5583 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5520 +#line 5585 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5520 +#line 5585 .heldItem = ITEM_ORAN_BERRY, -#line 5522 +#line 5587 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5521 +#line 5586 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5524 +#line 5589 [TRAINER_MIGUEL_3] = { -#line 5525 +#line 5590 .trainerName = _("MIGUEL"), -#line 5526 +#line 5591 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5527 +#line 5592 .trainerPic = TRAINER_PIC_POKEFAN_M, .encounterMusic_gender = -#line 5529 +#line 5594 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5530 +#line 5595 .doubleBattle = FALSE, -#line 5531 +#line 5596 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5533 +#line 5598 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5533 +#line 5598 .heldItem = ITEM_ORAN_BERRY, -#line 5535 +#line 5600 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5534 +#line 5599 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5537 +#line 5602 [TRAINER_MIGUEL_4] = { -#line 5538 +#line 5603 .trainerName = _("MIGUEL"), -#line 5539 +#line 5604 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5540 +#line 5605 .trainerPic = TRAINER_PIC_POKEFAN_M, .encounterMusic_gender = -#line 5542 +#line 5607 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5543 +#line 5608 .doubleBattle = FALSE, -#line 5544 +#line 5609 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5546 +#line 5611 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5546 +#line 5611 .heldItem = ITEM_ORAN_BERRY, -#line 5548 +#line 5613 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5547 +#line 5612 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5550 +#line 5615 [TRAINER_MIGUEL_5] = { -#line 5551 +#line 5616 .trainerName = _("MIGUEL"), -#line 5552 +#line 5617 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5553 +#line 5618 .trainerPic = TRAINER_PIC_POKEFAN_M, .encounterMusic_gender = -#line 5555 +#line 5620 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5556 +#line 5621 .doubleBattle = FALSE, -#line 5557 +#line 5622 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5559 +#line 5624 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5559 +#line 5624 .heldItem = ITEM_SITRUS_BERRY, -#line 5561 +#line 5626 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5560 +#line 5625 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5563 +#line 5628 [TRAINER_VICTORIA] = { -#line 5564 +#line 5629 .trainerName = _("VICTORIA"), -#line 5565 +#line 5630 .trainerClass = TRAINER_CLASS_WINSTRATE, -#line 5566 +#line 5631 .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = -#line 5567 +#line 5632 F_TRAINER_FEMALE | -#line 5568 +#line 5633 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5569 +#line 5634 .doubleBattle = FALSE, -#line 5570 +#line 5635 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5572 +#line 5637 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5572 +#line 5637 .heldItem = ITEM_ORAN_BERRY, -#line 5574 +#line 5639 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 5573 +#line 5638 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5576 +#line 5641 [TRAINER_VANESSA] = { -#line 5577 +#line 5642 .trainerName = _("VANESSA"), -#line 5578 +#line 5643 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5579 +#line 5644 .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = -#line 5580 +#line 5645 F_TRAINER_FEMALE | -#line 5581 +#line 5646 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5582 +#line 5647 .doubleBattle = FALSE, -#line 5583 +#line 5648 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5585 +#line 5650 .species = SPECIES_PIKACHU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5585 +#line 5650 .heldItem = ITEM_ORAN_BERRY, -#line 5587 +#line 5652 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5586 +#line 5651 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5589 +#line 5654 [TRAINER_BETHANY] = { -#line 5590 +#line 5655 .trainerName = _("BETHANY"), -#line 5591 +#line 5656 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5592 +#line 5657 .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = -#line 5593 +#line 5658 F_TRAINER_FEMALE | -#line 5594 +#line 5659 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5595 +#line 5660 .doubleBattle = FALSE, -#line 5596 +#line 5661 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 5598 +#line 5663 .species = SPECIES_AZURILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5598 +#line 5663 .heldItem = ITEM_ORAN_BERRY, -#line 5600 +#line 5665 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 5599 +#line 5664 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5602 +#line 5667 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5602 +#line 5667 .heldItem = ITEM_ORAN_BERRY, -#line 5604 +#line 5669 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 5603 +#line 5668 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5606 +#line 5671 .species = SPECIES_AZUMARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5606 +#line 5671 .heldItem = ITEM_ORAN_BERRY, -#line 5608 +#line 5673 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 5607 +#line 5672 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5610 +#line 5675 [TRAINER_ISABEL_1] = { -#line 5611 +#line 5676 .trainerName = _("ISABEL"), -#line 5612 +#line 5677 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5613 +#line 5678 .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = -#line 5614 +#line 5679 F_TRAINER_FEMALE | -#line 5615 +#line 5680 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5616 +#line 5681 .doubleBattle = FALSE, -#line 5617 +#line 5682 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5619 +#line 5684 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5619 +#line 5684 .heldItem = ITEM_ORAN_BERRY, -#line 5621 +#line 5686 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5620 +#line 5685 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5623 +#line 5688 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5623 +#line 5688 .heldItem = ITEM_ORAN_BERRY, -#line 5625 +#line 5690 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5624 +#line 5689 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5627 +#line 5692 [TRAINER_ISABEL_2] = { -#line 5628 +#line 5693 .trainerName = _("ISABEL"), -#line 5629 +#line 5694 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5630 +#line 5695 .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = -#line 5631 +#line 5696 F_TRAINER_FEMALE | -#line 5632 +#line 5697 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5633 +#line 5698 .doubleBattle = FALSE, -#line 5634 +#line 5699 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5636 +#line 5701 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5636 +#line 5701 .heldItem = ITEM_ORAN_BERRY, -#line 5638 +#line 5703 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5637 +#line 5702 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5640 +#line 5705 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5640 +#line 5705 .heldItem = ITEM_ORAN_BERRY, -#line 5642 +#line 5707 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5641 +#line 5706 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5644 +#line 5709 [TRAINER_ISABEL_3] = { -#line 5645 +#line 5710 .trainerName = _("ISABEL"), -#line 5646 +#line 5711 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5647 +#line 5712 .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = -#line 5648 +#line 5713 F_TRAINER_FEMALE | -#line 5649 +#line 5714 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5650 +#line 5715 .doubleBattle = FALSE, -#line 5651 +#line 5716 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5653 +#line 5718 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5653 +#line 5718 .heldItem = ITEM_ORAN_BERRY, -#line 5655 +#line 5720 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 5654 +#line 5719 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5657 +#line 5722 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5657 +#line 5722 .heldItem = ITEM_ORAN_BERRY, -#line 5659 +#line 5724 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 5658 +#line 5723 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5661 +#line 5726 [TRAINER_ISABEL_4] = { -#line 5662 +#line 5727 .trainerName = _("ISABEL"), -#line 5663 +#line 5728 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5664 +#line 5729 .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = -#line 5665 +#line 5730 F_TRAINER_FEMALE | -#line 5666 +#line 5731 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5667 +#line 5732 .doubleBattle = FALSE, -#line 5668 +#line 5733 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5670 +#line 5735 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5670 +#line 5735 .heldItem = ITEM_ORAN_BERRY, -#line 5672 +#line 5737 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5671 +#line 5736 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5674 +#line 5739 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5674 +#line 5739 .heldItem = ITEM_ORAN_BERRY, -#line 5676 +#line 5741 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5675 +#line 5740 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5678 +#line 5743 [TRAINER_ISABEL_5] = { -#line 5679 +#line 5744 .trainerName = _("ISABEL"), -#line 5680 +#line 5745 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5681 +#line 5746 .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = -#line 5682 +#line 5747 F_TRAINER_FEMALE | -#line 5683 +#line 5748 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5684 +#line 5749 .doubleBattle = FALSE, -#line 5685 +#line 5750 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5687 +#line 5752 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5687 +#line 5752 .heldItem = ITEM_SITRUS_BERRY, -#line 5689 +#line 5754 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 5688 +#line 5753 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5691 +#line 5756 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5691 +#line 5756 .heldItem = ITEM_SITRUS_BERRY, -#line 5693 +#line 5758 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 5692 +#line 5757 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5695 +#line 5760 [TRAINER_TIMOTHY_1] = { -#line 5696 +#line 5761 .trainerName = _("TIMOTHY"), -#line 5697 +#line 5762 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5698 +#line 5763 .trainerPic = TRAINER_PIC_EXPERT_M, .encounterMusic_gender = -#line 5700 +#line 5765 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5701 +#line 5766 .doubleBattle = FALSE, -#line 5702 +#line 5767 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5704 +#line 5769 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5706 +#line 5771 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 5705 +#line 5770 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5708 +#line 5773 [TRAINER_TIMOTHY_2] = { -#line 5709 +#line 5774 .trainerName = _("TIMOTHY"), -#line 5710 +#line 5775 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5711 +#line 5776 .trainerPic = TRAINER_PIC_EXPERT_M, .encounterMusic_gender = -#line 5713 +#line 5778 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5714 +#line 5779 .doubleBattle = FALSE, -#line 5715 +#line 5780 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5717 +#line 5782 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5719 +#line 5784 .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), -#line 5718 +#line 5783 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5720 +#line 5785 MOVE_ARM_THRUST, MOVE_KNOCK_OFF, MOVE_SAND_ATTACK, @@ -14342,37 +14342,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 5725 +#line 5790 [TRAINER_TIMOTHY_3] = { -#line 5726 +#line 5791 .trainerName = _("TIMOTHY"), -#line 5727 +#line 5792 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5728 +#line 5793 .trainerPic = TRAINER_PIC_EXPERT_M, .encounterMusic_gender = -#line 5730 +#line 5795 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5731 +#line 5796 .doubleBattle = FALSE, -#line 5732 +#line 5797 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5734 +#line 5799 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5736 +#line 5801 .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), -#line 5735 +#line 5800 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5737 +#line 5802 MOVE_ARM_THRUST, MOVE_KNOCK_OFF, MOVE_SAND_ATTACK, @@ -14381,37 +14381,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 5742 +#line 5807 [TRAINER_TIMOTHY_4] = { -#line 5743 +#line 5808 .trainerName = _("TIMOTHY"), -#line 5744 +#line 5809 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5745 +#line 5810 .trainerPic = TRAINER_PIC_EXPERT_M, .encounterMusic_gender = -#line 5747 +#line 5812 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5748 +#line 5813 .doubleBattle = FALSE, -#line 5749 +#line 5814 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5751 +#line 5816 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5753 +#line 5818 .iv = TRAINER_PARTY_IVS(27, 27, 27, 27, 27, 27), -#line 5752 +#line 5817 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5754 +#line 5819 MOVE_ARM_THRUST, MOVE_BELLY_DRUM, MOVE_SAND_ATTACK, @@ -14420,37 +14420,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 5759 +#line 5824 [TRAINER_TIMOTHY_5] = { -#line 5760 +#line 5825 .trainerName = _("TIMOTHY"), -#line 5761 +#line 5826 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5762 +#line 5827 .trainerPic = TRAINER_PIC_EXPERT_M, .encounterMusic_gender = -#line 5764 +#line 5829 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5765 +#line 5830 .doubleBattle = FALSE, -#line 5766 +#line 5831 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5768 +#line 5833 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5770 +#line 5835 .iv = TRAINER_PARTY_IVS(29, 29, 29, 29, 29, 29), -#line 5769 +#line 5834 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5771 +#line 5836 MOVE_ARM_THRUST, MOVE_BELLY_DRUM, MOVE_SAND_ATTACK, @@ -14459,39 +14459,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 5776 +#line 5841 [TRAINER_VICKY] = { -#line 5777 +#line 5842 .trainerName = _("VICKY"), -#line 5778 +#line 5843 .trainerClass = TRAINER_CLASS_WINSTRATE, -#line 5779 +#line 5844 .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = -#line 5780 +#line 5845 F_TRAINER_FEMALE | -#line 5781 +#line 5846 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5782 +#line 5847 .doubleBattle = FALSE, -#line 5783 +#line 5848 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5785 +#line 5850 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5787 +#line 5852 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 5786 +#line 5851 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5788 +#line 5853 MOVE_HIGH_JUMP_KICK, MOVE_MEDITATE, MOVE_CONFUSION, @@ -14500,448 +14500,448 @@ F_TRAINER_FEMALE | }, }, }, -#line 5793 +#line 5858 [TRAINER_SHELBY_1] = { -#line 5794 +#line 5859 .trainerName = _("SHELBY"), -#line 5795 +#line 5860 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5796 +#line 5861 .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = -#line 5797 +#line 5862 F_TRAINER_FEMALE | -#line 5798 +#line 5863 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5799 +#line 5864 .doubleBattle = FALSE, -#line 5800 +#line 5865 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5802 +#line 5867 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5804 +#line 5869 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 5803 +#line 5868 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5806 +#line 5871 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5808 +#line 5873 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 5807 +#line 5872 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5810 +#line 5875 [TRAINER_SHELBY_2] = { -#line 5811 +#line 5876 .trainerName = _("SHELBY"), -#line 5812 +#line 5877 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5813 +#line 5878 .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = -#line 5814 +#line 5879 F_TRAINER_FEMALE | -#line 5815 +#line 5880 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5816 +#line 5881 .doubleBattle = FALSE, -#line 5817 +#line 5882 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5819 +#line 5884 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5821 +#line 5886 .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), -#line 5820 +#line 5885 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5823 +#line 5888 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5825 +#line 5890 .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), -#line 5824 +#line 5889 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5827 +#line 5892 [TRAINER_SHELBY_3] = { -#line 5828 +#line 5893 .trainerName = _("SHELBY"), -#line 5829 +#line 5894 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5830 +#line 5895 .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = -#line 5831 +#line 5896 F_TRAINER_FEMALE | -#line 5832 +#line 5897 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5833 +#line 5898 .doubleBattle = FALSE, -#line 5834 +#line 5899 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5836 +#line 5901 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5838 +#line 5903 .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), -#line 5837 +#line 5902 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5840 +#line 5905 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5842 +#line 5907 .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), -#line 5841 +#line 5906 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5844 +#line 5909 [TRAINER_SHELBY_4] = { -#line 5845 +#line 5910 .trainerName = _("SHELBY"), -#line 5846 +#line 5911 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5847 +#line 5912 .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = -#line 5848 +#line 5913 F_TRAINER_FEMALE | -#line 5849 +#line 5914 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5850 +#line 5915 .doubleBattle = FALSE, -#line 5851 +#line 5916 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5853 +#line 5918 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5855 +#line 5920 .iv = TRAINER_PARTY_IVS(27, 27, 27, 27, 27, 27), -#line 5854 +#line 5919 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5857 +#line 5922 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5859 +#line 5924 .iv = TRAINER_PARTY_IVS(27, 27, 27, 27, 27, 27), -#line 5858 +#line 5923 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5861 +#line 5926 [TRAINER_SHELBY_5] = { -#line 5862 +#line 5927 .trainerName = _("SHELBY"), -#line 5863 +#line 5928 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5864 +#line 5929 .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = -#line 5865 +#line 5930 F_TRAINER_FEMALE | -#line 5866 +#line 5931 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5867 +#line 5932 .doubleBattle = FALSE, -#line 5868 +#line 5933 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5870 +#line 5935 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5872 +#line 5937 .iv = TRAINER_PARTY_IVS(29, 29, 29, 29, 29, 29), -#line 5871 +#line 5936 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5874 +#line 5939 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5876 +#line 5941 .iv = TRAINER_PARTY_IVS(29, 29, 29, 29, 29, 29), -#line 5875 +#line 5940 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5878 +#line 5943 [TRAINER_CALVIN_1] = { -#line 5879 +#line 5944 .trainerName = _("CALVIN"), -#line 5880 +#line 5945 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 5881 +#line 5946 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 5883 +#line 5948 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5884 +#line 5949 .doubleBattle = FALSE, -#line 5885 +#line 5950 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5887 +#line 5952 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5889 +#line 5954 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5888 +#line 5953 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5891 +#line 5956 [TRAINER_BILLY] = { -#line 5892 +#line 5957 .trainerName = _("BILLY"), -#line 5893 +#line 5958 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 5894 +#line 5959 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 5896 +#line 5961 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5897 +#line 5962 .doubleBattle = FALSE, -#line 5898 +#line 5963 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5900 +#line 5965 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5902 +#line 5967 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5901 +#line 5966 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5904 +#line 5969 .species = SPECIES_SEEDOT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5906 +#line 5971 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5905 +#line 5970 .lvl = 7, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5908 +#line 5973 [TRAINER_JOSH] = { -#line 5909 +#line 5974 .trainerName = _("JOSH"), -#line 5910 +#line 5975 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 5911 +#line 5976 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 5913 +#line 5978 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5914 +#line 5979 .doubleBattle = FALSE, -#line 5915 +#line 5980 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5917 +#line 5982 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5919 +#line 5984 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 5918 +#line 5983 .lvl = 10, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5920 +#line 5985 MOVE_TACKLE, }, }, }, }, -#line 5922 +#line 5987 [TRAINER_TOMMY] = { -#line 5923 +#line 5988 .trainerName = _("TOMMY"), -#line 5924 +#line 5989 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 5925 +#line 5990 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 5927 +#line 5992 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5928 +#line 5993 .doubleBattle = FALSE, -#line 5929 +#line 5994 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5931 +#line 5996 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5933 +#line 5998 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 5932 +#line 5997 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5935 +#line 6000 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5937 +#line 6002 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 5936 +#line 6001 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5939 +#line 6004 [TRAINER_JOEY] = { -#line 5940 +#line 6005 .trainerName = _("JOEY"), -#line 5941 +#line 6006 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 5942 +#line 6007 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 5944 +#line 6009 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5945 +#line 6010 .doubleBattle = FALSE, -#line 5946 +#line 6011 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5948 +#line 6013 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5950 +#line 6015 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5949 +#line 6014 .lvl = 9, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5952 +#line 6017 [TRAINER_BEN] = { -#line 5953 +#line 6018 .trainerName = _("BEN"), -#line 5954 +#line 6019 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 5955 +#line 6020 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 5957 +#line 6022 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5958 +#line 6023 .doubleBattle = FALSE, -#line 5959 +#line 6024 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5961 +#line 6026 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5963 +#line 6028 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 5962 +#line 6027 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5964 +#line 6029 MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_GROWL, @@ -14949,17 +14949,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5969 +#line 6034 .species = SPECIES_GULPIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5971 +#line 6036 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 5970 +#line 6035 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5972 +#line 6037 MOVE_AMNESIA, MOVE_SLUDGE, MOVE_YAWN, @@ -14968,39 +14968,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 5977 +#line 6042 [TRAINER_QUINCY] = { -#line 5978 +#line 6043 .trainerName = _("QUINCY"), -#line 5979 +#line 6044 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 5980 +#line 6045 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 5982 +#line 6047 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 5983 +#line 6048 .items = { ITEM_FULL_RESTORE }, -#line 5984 +#line 6049 .doubleBattle = FALSE, -#line 5985 +#line 6050 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5987 +#line 6052 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5989 +#line 6054 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 5988 +#line 6053 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5990 +#line 6055 MOVE_ATTRACT, MOVE_ICE_BEAM, MOVE_THUNDERBOLT, @@ -15008,17 +15008,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5995 +#line 6060 .species = SPECIES_DUSCLOPS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5997 +#line 6062 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 5996 +#line 6061 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5998 +#line 6063 MOVE_SKILL_SWAP, MOVE_PROTECT, MOVE_WILL_O_WISP, @@ -15027,41 +15027,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 6003 +#line 6068 [TRAINER_KATELYNN] = { -#line 6004 +#line 6069 .trainerName = _("KATELYNN"), -#line 6005 +#line 6070 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 6006 +#line 6071 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 6007 +#line 6072 F_TRAINER_FEMALE | -#line 6008 +#line 6073 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 6009 +#line 6074 .items = { ITEM_FULL_RESTORE }, -#line 6010 +#line 6075 .doubleBattle = FALSE, -#line 6011 +#line 6076 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6013 +#line 6078 .species = SPECIES_GARDEVOIR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6015 +#line 6080 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 6014 +#line 6079 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 6016 +#line 6081 MOVE_SKILL_SWAP, MOVE_PSYCHIC, MOVE_THUNDERBOLT, @@ -15069,17 +15069,17 @@ F_TRAINER_FEMALE | }, }, { -#line 6021 +#line 6086 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6023 +#line 6088 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 6022 +#line 6087 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 6024 +#line 6089 MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_AERIAL_ACE, @@ -15088,418 +15088,418 @@ F_TRAINER_FEMALE | }, }, }, -#line 6029 +#line 6094 [TRAINER_JAYLEN] = { -#line 6030 +#line 6095 .trainerName = _("JAYLEN"), -#line 6031 +#line 6096 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6032 +#line 6097 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6034 +#line 6099 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6035 +#line 6100 .doubleBattle = FALSE, -#line 6036 +#line 6101 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6038 +#line 6103 .species = SPECIES_TRAPINCH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6040 +#line 6105 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6039 +#line 6104 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6042 +#line 6107 [TRAINER_DILLON] = { -#line 6043 +#line 6108 .trainerName = _("DILLON"), -#line 6044 +#line 6109 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6045 +#line 6110 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6047 +#line 6112 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6048 +#line 6113 .doubleBattle = FALSE, -#line 6049 +#line 6114 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6051 +#line 6116 .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6053 +#line 6118 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6052 +#line 6117 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6055 +#line 6120 [TRAINER_CALVIN_2] = { -#line 6056 +#line 6121 .trainerName = _("CALVIN"), -#line 6057 +#line 6122 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6058 +#line 6123 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6060 +#line 6125 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6061 +#line 6126 .doubleBattle = FALSE, -#line 6062 +#line 6127 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6064 +#line 6129 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6066 +#line 6131 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6065 +#line 6130 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6068 +#line 6133 [TRAINER_CALVIN_3] = { -#line 6069 +#line 6134 .trainerName = _("CALVIN"), -#line 6070 +#line 6135 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6071 +#line 6136 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6073 +#line 6138 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6074 +#line 6139 .doubleBattle = FALSE, -#line 6075 +#line 6140 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6077 +#line 6142 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6079 +#line 6144 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6078 +#line 6143 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6081 +#line 6146 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6083 +#line 6148 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6082 +#line 6147 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6085 +#line 6150 [TRAINER_CALVIN_4] = { -#line 6086 +#line 6151 .trainerName = _("CALVIN"), -#line 6087 +#line 6152 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6088 +#line 6153 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6090 +#line 6155 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6091 +#line 6156 .doubleBattle = FALSE, -#line 6092 +#line 6157 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 6094 +#line 6159 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6096 +#line 6161 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6095 +#line 6160 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6098 +#line 6163 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6100 +#line 6165 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6099 +#line 6164 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6102 +#line 6167 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6104 +#line 6169 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6103 +#line 6168 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6106 +#line 6171 [TRAINER_CALVIN_5] = { -#line 6107 +#line 6172 .trainerName = _("CALVIN"), -#line 6108 +#line 6173 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6109 +#line 6174 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6111 +#line 6176 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6112 +#line 6177 .doubleBattle = FALSE, -#line 6113 +#line 6178 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 6115 +#line 6180 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6117 +#line 6182 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6116 +#line 6181 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6119 +#line 6184 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6121 +#line 6186 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6120 +#line 6185 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6123 +#line 6188 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6125 +#line 6190 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6124 +#line 6189 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6127 +#line 6192 [TRAINER_EDDIE] = { -#line 6128 +#line 6193 .trainerName = _("EDDIE"), -#line 6129 +#line 6194 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6130 +#line 6195 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6132 +#line 6197 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6133 +#line 6198 .doubleBattle = FALSE, -#line 6134 +#line 6199 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6136 +#line 6201 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6138 +#line 6203 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6137 +#line 6202 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6140 +#line 6205 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6142 +#line 6207 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6141 +#line 6206 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6144 +#line 6209 [TRAINER_ALLEN] = { -#line 6145 +#line 6210 .trainerName = _("ALLEN"), -#line 6146 +#line 6211 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6147 +#line 6212 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6149 +#line 6214 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6150 +#line 6215 .doubleBattle = FALSE, -#line 6151 +#line 6216 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6153 +#line 6218 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6155 +#line 6220 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6154 +#line 6219 .lvl = 4, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6157 +#line 6222 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6159 +#line 6224 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6158 +#line 6223 .lvl = 3, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6161 +#line 6226 [TRAINER_TIMMY] = { -#line 6162 +#line 6227 .trainerName = _("TIMMY"), -#line 6163 +#line 6228 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6164 +#line 6229 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6166 +#line 6231 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6167 +#line 6232 .doubleBattle = FALSE, -#line 6168 +#line 6233 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6170 +#line 6235 .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6172 +#line 6237 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6171 +#line 6236 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6174 +#line 6239 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6176 +#line 6241 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6175 +#line 6240 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6178 +#line 6243 [TRAINER_WALLACE] = { -#line 6179 +#line 6244 .trainerName = _("WALLACE"), -#line 6180 +#line 6245 .trainerClass = TRAINER_CLASS_CHAMPION, -#line 6181 +#line 6246 .trainerPic = TRAINER_PIC_CHAMPION_WALLACE, .encounterMusic_gender = -#line 6183 +#line 6248 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6184 +#line 6249 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 6185 +#line 6250 .doubleBattle = FALSE, -#line 6186 +#line 6251 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, -#line 6187 +#line 6252 .mugshotEnabled = TRUE, .mugshotColor = MUGSHOT_COLOR_YELLOW, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 6189 +#line 6254 .species = SPECIES_WAILORD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6191 +#line 6256 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 6190 +#line 6255 .lvl = 57, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 6192 +#line 6257 MOVE_RAIN_DANCE, MOVE_WATER_SPOUT, MOVE_DOUBLE_EDGE, @@ -15507,17 +15507,17 @@ F_TRAINER_FEMALE | }, }, { -#line 6197 +#line 6262 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6199 +#line 6264 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 6198 +#line 6263 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 6200 +#line 6265 MOVE_TOXIC, MOVE_HYDRO_PUMP, MOVE_SLUDGE_BOMB, @@ -15525,17 +15525,17 @@ F_TRAINER_FEMALE | }, }, { -#line 6205 +#line 6270 .species = SPECIES_LUDICOLO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6207 +#line 6272 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 6206 +#line 6271 .lvl = 56, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 6208 +#line 6273 MOVE_GIGA_DRAIN, MOVE_SURF, MOVE_LEECH_SEED, @@ -15543,17 +15543,17 @@ F_TRAINER_FEMALE | }, }, { -#line 6213 +#line 6278 .species = SPECIES_WHISCASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6215 +#line 6280 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 6214 +#line 6279 .lvl = 56, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 6216 +#line 6281 MOVE_EARTHQUAKE, MOVE_SURF, MOVE_AMNESIA, @@ -15561,17 +15561,17 @@ F_TRAINER_FEMALE | }, }, { -#line 6221 +#line 6286 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6223 +#line 6288 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 6222 +#line 6287 .lvl = 56, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 6224 +#line 6289 MOVE_DRAGON_DANCE, MOVE_EARTHQUAKE, MOVE_HYPER_BEAM, @@ -15579,19 +15579,19 @@ F_TRAINER_FEMALE | }, }, { -#line 6229 +#line 6294 .species = SPECIES_MILOTIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6229 +#line 6294 .heldItem = ITEM_SITRUS_BERRY, -#line 6231 +#line 6296 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 6230 +#line 6295 .lvl = 58, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 6232 +#line 6297 MOVE_RECOVER, MOVE_SURF, MOVE_ICE_BEAM, @@ -15600,2548 +15600,2548 @@ F_TRAINER_FEMALE | }, }, }, -#line 6237 +#line 6302 [TRAINER_ANDREW] = { -#line 6238 +#line 6303 .trainerName = _("ANDREW"), -#line 6239 +#line 6304 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6240 +#line 6305 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6242 +#line 6307 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6243 +#line 6308 .doubleBattle = FALSE, -#line 6244 +#line 6309 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 6246 +#line 6311 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6248 +#line 6313 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6247 +#line 6312 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6250 +#line 6315 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6252 +#line 6317 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6251 +#line 6316 .lvl = 10, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6254 +#line 6319 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6256 +#line 6321 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6255 +#line 6320 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6258 +#line 6323 [TRAINER_IVAN] = { -#line 6259 +#line 6324 .trainerName = _("IVAN"), -#line 6260 +#line 6325 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6261 +#line 6326 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6263 +#line 6328 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6264 +#line 6329 .doubleBattle = FALSE, -#line 6265 +#line 6330 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 6267 +#line 6332 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6269 +#line 6334 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6268 +#line 6333 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6271 +#line 6336 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6273 +#line 6338 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6272 +#line 6337 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6275 +#line 6340 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6277 +#line 6342 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6276 +#line 6341 .lvl = 7, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6279 +#line 6344 [TRAINER_CLAUDE] = { -#line 6280 +#line 6345 .trainerName = _("CLAUDE"), -#line 6281 +#line 6346 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6282 +#line 6347 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6284 +#line 6349 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6285 +#line 6350 .doubleBattle = FALSE, -#line 6286 +#line 6351 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 6288 +#line 6353 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6290 +#line 6355 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6289 +#line 6354 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6292 +#line 6357 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6294 +#line 6359 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6293 +#line 6358 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6296 +#line 6361 .species = SPECIES_BARBOACH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6298 +#line 6363 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6297 +#line 6362 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6300 +#line 6365 [TRAINER_ELLIOT_1] = { -#line 6301 +#line 6366 .trainerName = _("ELLIOT"), -#line 6302 +#line 6367 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6303 +#line 6368 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6305 +#line 6370 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6306 +#line 6371 .doubleBattle = FALSE, -#line 6307 +#line 6372 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 6309 +#line 6374 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6311 +#line 6376 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6310 +#line 6375 .lvl = 10, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6313 +#line 6378 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6315 +#line 6380 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6314 +#line 6379 .lvl = 7, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6317 +#line 6382 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6319 +#line 6384 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6318 +#line 6383 .lvl = 10, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6321 +#line 6386 [TRAINER_NED] = { -#line 6322 +#line 6387 .trainerName = _("NED"), -#line 6323 +#line 6388 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6324 +#line 6389 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6326 +#line 6391 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6327 +#line 6392 .doubleBattle = FALSE, -#line 6328 +#line 6393 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6330 +#line 6395 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6332 +#line 6397 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6331 +#line 6396 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6334 +#line 6399 [TRAINER_DALE] = { -#line 6335 +#line 6400 .trainerName = _("DALE"), -#line 6336 +#line 6401 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6337 +#line 6402 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6339 +#line 6404 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6340 +#line 6405 .doubleBattle = FALSE, -#line 6341 +#line 6406 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 6343 +#line 6408 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6345 +#line 6410 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6344 +#line 6409 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6347 +#line 6412 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6349 +#line 6414 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6348 +#line 6413 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6351 +#line 6416 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6353 +#line 6418 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6352 +#line 6417 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6355 +#line 6420 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6357 +#line 6422 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6356 +#line 6421 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6359 +#line 6424 [TRAINER_NOLAN] = { -#line 6360 +#line 6425 .trainerName = _("NOLAN"), -#line 6361 +#line 6426 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6362 +#line 6427 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6364 +#line 6429 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6365 +#line 6430 .doubleBattle = FALSE, -#line 6366 +#line 6431 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6368 +#line 6433 .species = SPECIES_BARBOACH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6370 +#line 6435 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6369 +#line 6434 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6372 +#line 6437 [TRAINER_BARNY] = { -#line 6373 +#line 6438 .trainerName = _("BARNY"), -#line 6374 +#line 6439 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6375 +#line 6440 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6377 +#line 6442 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6378 +#line 6443 .doubleBattle = FALSE, -#line 6379 +#line 6444 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6381 +#line 6446 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6383 +#line 6448 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6382 +#line 6447 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6385 +#line 6450 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6387 +#line 6452 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6386 +#line 6451 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6389 +#line 6454 [TRAINER_WADE] = { -#line 6390 +#line 6455 .trainerName = _("WADE"), -#line 6391 +#line 6456 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6392 +#line 6457 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6394 +#line 6459 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6395 +#line 6460 .doubleBattle = FALSE, -#line 6396 +#line 6461 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6398 +#line 6463 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6400 +#line 6465 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6399 +#line 6464 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6402 +#line 6467 [TRAINER_CARTER] = { -#line 6403 +#line 6468 .trainerName = _("CARTER"), -#line 6404 +#line 6469 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6405 +#line 6470 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6407 +#line 6472 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6408 +#line 6473 .doubleBattle = FALSE, -#line 6409 +#line 6474 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6411 +#line 6476 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6413 +#line 6478 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6412 +#line 6477 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6415 +#line 6480 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6417 +#line 6482 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6416 +#line 6481 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6419 +#line 6484 [TRAINER_ELLIOT_2] = { -#line 6420 +#line 6485 .trainerName = _("ELLIOT"), -#line 6421 +#line 6486 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6422 +#line 6487 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6424 +#line 6489 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6425 +#line 6490 .doubleBattle = FALSE, -#line 6426 +#line 6491 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 6428 +#line 6493 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6430 +#line 6495 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6429 +#line 6494 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6432 +#line 6497 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6434 +#line 6499 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6433 +#line 6498 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6436 +#line 6501 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6438 +#line 6503 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6437 +#line 6502 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6440 +#line 6505 [TRAINER_ELLIOT_3] = { -#line 6441 +#line 6506 .trainerName = _("ELLIOT"), -#line 6442 +#line 6507 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6443 +#line 6508 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6445 +#line 6510 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6446 +#line 6511 .doubleBattle = FALSE, -#line 6447 +#line 6512 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 6449 +#line 6514 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6451 +#line 6516 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6450 +#line 6515 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6453 +#line 6518 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6455 +#line 6520 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6454 +#line 6519 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6457 +#line 6522 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6459 +#line 6524 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6458 +#line 6523 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6461 +#line 6526 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6463 +#line 6528 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6462 +#line 6527 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6465 +#line 6530 [TRAINER_ELLIOT_4] = { -#line 6466 +#line 6531 .trainerName = _("ELLIOT"), -#line 6467 +#line 6532 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6468 +#line 6533 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6470 +#line 6535 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6471 +#line 6536 .doubleBattle = FALSE, -#line 6472 +#line 6537 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 6474 +#line 6539 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6476 +#line 6541 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6475 +#line 6540 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6478 +#line 6543 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6480 +#line 6545 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6479 +#line 6544 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6482 +#line 6547 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6484 +#line 6549 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6483 +#line 6548 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6486 +#line 6551 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6488 +#line 6553 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6487 +#line 6552 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6490 +#line 6555 [TRAINER_ELLIOT_5] = { -#line 6491 +#line 6556 .trainerName = _("ELLIOT"), -#line 6492 +#line 6557 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6493 +#line 6558 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6495 +#line 6560 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6496 +#line 6561 .doubleBattle = FALSE, -#line 6497 +#line 6562 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 6499 +#line 6564 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6501 +#line 6566 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6500 +#line 6565 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6503 +#line 6568 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6505 +#line 6570 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6504 +#line 6569 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6507 +#line 6572 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6509 +#line 6574 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6508 +#line 6573 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6511 +#line 6576 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6513 +#line 6578 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6512 +#line 6577 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6515 +#line 6580 [TRAINER_RONALD] = { -#line 6516 +#line 6581 .trainerName = _("RONALD"), -#line 6517 +#line 6582 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6518 +#line 6583 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6520 +#line 6585 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6521 +#line 6586 .doubleBattle = FALSE, -#line 6522 +#line 6587 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 6524 +#line 6589 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6526 +#line 6591 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6525 +#line 6590 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6528 +#line 6593 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6530 +#line 6595 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6529 +#line 6594 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6532 +#line 6597 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6534 +#line 6599 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6533 +#line 6598 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6536 +#line 6601 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6538 +#line 6603 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6537 +#line 6602 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6540 +#line 6605 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6542 +#line 6607 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6541 +#line 6606 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6544 +#line 6609 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6546 +#line 6611 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6545 +#line 6610 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6548 +#line 6613 [TRAINER_JACOB] = { -#line 6549 +#line 6614 .trainerName = _("JACOB"), -#line 6550 +#line 6615 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6551 +#line 6616 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .encounterMusic_gender = -#line 6553 +#line 6618 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6554 +#line 6619 .doubleBattle = FALSE, -#line 6555 +#line 6620 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 6557 +#line 6622 .species = SPECIES_VOLTORB, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6559 +#line 6624 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6558 +#line 6623 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6561 +#line 6626 .species = SPECIES_VOLTORB, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6563 +#line 6628 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6562 +#line 6627 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6565 +#line 6630 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6567 +#line 6632 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 6566 +#line 6631 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6569 +#line 6634 [TRAINER_ANTHONY] = { -#line 6570 +#line 6635 .trainerName = _("ANTHONY"), -#line 6571 +#line 6636 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6572 +#line 6637 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .encounterMusic_gender = -#line 6574 +#line 6639 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6575 +#line 6640 .doubleBattle = FALSE, -#line 6576 +#line 6641 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6578 +#line 6643 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6580 +#line 6645 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6579 +#line 6644 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6582 +#line 6647 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6584 +#line 6649 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6583 +#line 6648 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6586 +#line 6651 [TRAINER_BENJAMIN_1] = { -#line 6587 +#line 6652 .trainerName = _("BENJAMIN"), -#line 6588 +#line 6653 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6589 +#line 6654 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .encounterMusic_gender = -#line 6591 +#line 6656 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6592 +#line 6657 .doubleBattle = FALSE, -#line 6593 +#line 6658 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6595 +#line 6660 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6597 +#line 6662 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6596 +#line 6661 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6599 +#line 6664 [TRAINER_BENJAMIN_2] = { -#line 6600 +#line 6665 .trainerName = _("BENJAMIN"), -#line 6601 +#line 6666 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6602 +#line 6667 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .encounterMusic_gender = -#line 6604 +#line 6669 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6605 +#line 6670 .doubleBattle = FALSE, -#line 6606 +#line 6671 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6608 +#line 6673 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6610 +#line 6675 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6609 +#line 6674 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6612 +#line 6677 [TRAINER_BENJAMIN_3] = { -#line 6613 +#line 6678 .trainerName = _("BENJAMIN"), -#line 6614 +#line 6679 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6615 +#line 6680 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .encounterMusic_gender = -#line 6617 +#line 6682 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6618 +#line 6683 .doubleBattle = FALSE, -#line 6619 +#line 6684 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6621 +#line 6686 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6623 +#line 6688 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6622 +#line 6687 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6625 +#line 6690 [TRAINER_BENJAMIN_4] = { -#line 6626 +#line 6691 .trainerName = _("BENJAMIN"), -#line 6627 +#line 6692 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6628 +#line 6693 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .encounterMusic_gender = -#line 6630 +#line 6695 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6631 +#line 6696 .doubleBattle = FALSE, -#line 6632 +#line 6697 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6634 +#line 6699 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6636 +#line 6701 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6635 +#line 6700 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6638 +#line 6703 [TRAINER_BENJAMIN_5] = { -#line 6639 +#line 6704 .trainerName = _("BENJAMIN"), -#line 6640 +#line 6705 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6641 +#line 6706 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .encounterMusic_gender = -#line 6643 +#line 6708 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6644 +#line 6709 .doubleBattle = FALSE, -#line 6645 +#line 6710 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6647 +#line 6712 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6649 +#line 6714 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6648 +#line 6713 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6651 +#line 6716 [TRAINER_ABIGAIL_1] = { -#line 6652 +#line 6717 .trainerName = _("ABIGAIL"), -#line 6653 +#line 6718 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6654 +#line 6719 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .encounterMusic_gender = -#line 6655 +#line 6720 F_TRAINER_FEMALE | -#line 6656 +#line 6721 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 6657 +#line 6722 .doubleBattle = FALSE, -#line 6658 +#line 6723 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6660 +#line 6725 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6662 +#line 6727 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6661 +#line 6726 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6664 +#line 6729 [TRAINER_JASMINE] = { -#line 6665 +#line 6730 .trainerName = _("JASMINE"), -#line 6666 +#line 6731 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6667 +#line 6732 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .encounterMusic_gender = -#line 6668 +#line 6733 F_TRAINER_FEMALE | -#line 6669 +#line 6734 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 6670 +#line 6735 .doubleBattle = FALSE, -#line 6671 +#line 6736 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 6673 +#line 6738 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6675 +#line 6740 .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 6674 +#line 6739 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6677 +#line 6742 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6679 +#line 6744 .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 6678 +#line 6743 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6681 +#line 6746 .species = SPECIES_VOLTORB, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6683 +#line 6748 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6682 +#line 6747 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6685 +#line 6750 [TRAINER_ABIGAIL_2] = { -#line 6686 +#line 6751 .trainerName = _("ABIGAIL"), -#line 6687 +#line 6752 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6688 +#line 6753 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .encounterMusic_gender = -#line 6689 +#line 6754 F_TRAINER_FEMALE | -#line 6690 +#line 6755 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 6691 +#line 6756 .doubleBattle = FALSE, -#line 6692 +#line 6757 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6694 +#line 6759 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6696 +#line 6761 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6695 +#line 6760 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6698 +#line 6763 [TRAINER_ABIGAIL_3] = { -#line 6699 +#line 6764 .trainerName = _("ABIGAIL"), -#line 6700 +#line 6765 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6701 +#line 6766 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .encounterMusic_gender = -#line 6702 +#line 6767 F_TRAINER_FEMALE | -#line 6703 +#line 6768 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 6704 +#line 6769 .doubleBattle = FALSE, -#line 6705 +#line 6770 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6707 +#line 6772 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6709 +#line 6774 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6708 +#line 6773 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6711 +#line 6776 [TRAINER_ABIGAIL_4] = { -#line 6712 +#line 6777 .trainerName = _("ABIGAIL"), -#line 6713 +#line 6778 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6714 +#line 6779 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .encounterMusic_gender = -#line 6715 +#line 6780 F_TRAINER_FEMALE | -#line 6716 +#line 6781 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 6717 +#line 6782 .doubleBattle = FALSE, -#line 6718 +#line 6783 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6720 +#line 6785 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6722 +#line 6787 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6721 +#line 6786 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6724 +#line 6789 [TRAINER_ABIGAIL_5] = { -#line 6725 +#line 6790 .trainerName = _("ABIGAIL"), -#line 6726 +#line 6791 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6727 +#line 6792 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .encounterMusic_gender = -#line 6728 +#line 6793 F_TRAINER_FEMALE | -#line 6729 +#line 6794 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 6730 +#line 6795 .doubleBattle = FALSE, -#line 6731 +#line 6796 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6733 +#line 6798 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6735 +#line 6800 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6734 +#line 6799 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6737 +#line 6802 [TRAINER_DYLAN_1] = { -#line 6738 +#line 6803 .trainerName = _("DYLAN"), -#line 6739 +#line 6804 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6740 +#line 6805 .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M, .encounterMusic_gender = -#line 6742 +#line 6807 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6743 +#line 6808 .doubleBattle = FALSE, -#line 6744 +#line 6809 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6746 +#line 6811 .species = SPECIES_DODUO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6748 +#line 6813 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6747 +#line 6812 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6750 +#line 6815 [TRAINER_DYLAN_2] = { -#line 6751 +#line 6816 .trainerName = _("DYLAN"), -#line 6752 +#line 6817 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6753 +#line 6818 .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M, .encounterMusic_gender = -#line 6755 +#line 6820 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6756 +#line 6821 .doubleBattle = FALSE, -#line 6757 +#line 6822 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6759 +#line 6824 .species = SPECIES_DODUO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6761 +#line 6826 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6760 +#line 6825 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6763 +#line 6828 [TRAINER_DYLAN_3] = { -#line 6764 +#line 6829 .trainerName = _("DYLAN"), -#line 6765 +#line 6830 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6766 +#line 6831 .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M, .encounterMusic_gender = -#line 6768 +#line 6833 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6769 +#line 6834 .doubleBattle = FALSE, -#line 6770 +#line 6835 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6772 +#line 6837 .species = SPECIES_DODUO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6774 +#line 6839 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6773 +#line 6838 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6776 +#line 6841 [TRAINER_DYLAN_4] = { -#line 6777 +#line 6842 .trainerName = _("DYLAN"), -#line 6778 +#line 6843 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6779 +#line 6844 .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M, .encounterMusic_gender = -#line 6781 +#line 6846 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6782 +#line 6847 .doubleBattle = FALSE, -#line 6783 +#line 6848 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6785 +#line 6850 .species = SPECIES_DODRIO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6787 +#line 6852 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6786 +#line 6851 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6789 +#line 6854 [TRAINER_DYLAN_5] = { -#line 6790 +#line 6855 .trainerName = _("DYLAN"), -#line 6791 +#line 6856 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6792 +#line 6857 .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M, .encounterMusic_gender = -#line 6794 +#line 6859 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6795 +#line 6860 .doubleBattle = FALSE, -#line 6796 +#line 6861 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6798 +#line 6863 .species = SPECIES_DODRIO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6800 +#line 6865 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6799 +#line 6864 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6802 +#line 6867 [TRAINER_MARIA_1] = { -#line 6803 +#line 6868 .trainerName = _("MARIA"), -#line 6804 +#line 6869 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6805 +#line 6870 .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .encounterMusic_gender = -#line 6806 +#line 6871 F_TRAINER_FEMALE | -#line 6807 +#line 6872 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 6808 +#line 6873 .doubleBattle = FALSE, -#line 6809 +#line 6874 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6811 +#line 6876 .species = SPECIES_DODUO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6813 +#line 6878 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6812 +#line 6877 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6815 +#line 6880 [TRAINER_MARIA_2] = { -#line 6816 +#line 6881 .trainerName = _("MARIA"), -#line 6817 +#line 6882 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6818 +#line 6883 .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .encounterMusic_gender = -#line 6819 +#line 6884 F_TRAINER_FEMALE | -#line 6820 +#line 6885 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 6821 +#line 6886 .doubleBattle = FALSE, -#line 6822 +#line 6887 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6824 +#line 6889 .species = SPECIES_DODUO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6826 +#line 6891 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6825 +#line 6890 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6828 +#line 6893 [TRAINER_MARIA_3] = { -#line 6829 +#line 6894 .trainerName = _("MARIA"), -#line 6830 +#line 6895 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6831 +#line 6896 .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .encounterMusic_gender = -#line 6832 +#line 6897 F_TRAINER_FEMALE | -#line 6833 +#line 6898 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 6834 +#line 6899 .doubleBattle = FALSE, -#line 6835 +#line 6900 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6837 +#line 6902 .species = SPECIES_DODUO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6839 +#line 6904 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6838 +#line 6903 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6841 +#line 6906 [TRAINER_MARIA_4] = { -#line 6842 +#line 6907 .trainerName = _("MARIA"), -#line 6843 +#line 6908 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6844 +#line 6909 .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .encounterMusic_gender = -#line 6845 +#line 6910 F_TRAINER_FEMALE | -#line 6846 +#line 6911 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 6847 +#line 6912 .doubleBattle = FALSE, -#line 6848 +#line 6913 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6850 +#line 6915 .species = SPECIES_DODRIO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6852 +#line 6917 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6851 +#line 6916 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6854 +#line 6919 [TRAINER_MARIA_5] = { -#line 6855 +#line 6920 .trainerName = _("MARIA"), -#line 6856 +#line 6921 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6857 +#line 6922 .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .encounterMusic_gender = -#line 6858 +#line 6923 F_TRAINER_FEMALE | -#line 6859 +#line 6924 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 6860 +#line 6925 .doubleBattle = FALSE, -#line 6861 +#line 6926 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6863 +#line 6928 .species = SPECIES_DODRIO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6865 +#line 6930 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6864 +#line 6929 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6867 +#line 6932 [TRAINER_CAMDEN] = { -#line 6868 +#line 6933 .trainerName = _("CAMDEN"), -#line 6869 +#line 6934 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6870 +#line 6935 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 6872 +#line 6937 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 6873 +#line 6938 .doubleBattle = FALSE, -#line 6874 +#line 6939 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6876 +#line 6941 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6878 +#line 6943 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6877 +#line 6942 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6880 +#line 6945 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6882 +#line 6947 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6881 +#line 6946 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6884 +#line 6949 [TRAINER_DEMETRIUS] = { -#line 6885 +#line 6950 .trainerName = _("DEMETRIUS"), -#line 6886 +#line 6951 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6887 +#line 6952 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6889 +#line 6954 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6890 +#line 6955 .doubleBattle = FALSE, -#line 6891 +#line 6956 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6893 +#line 6958 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6895 +#line 6960 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6894 +#line 6959 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6897 +#line 6962 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6899 +#line 6964 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6898 +#line 6963 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6901 +#line 6966 [TRAINER_ISAIAH_1] = { -#line 6902 +#line 6967 .trainerName = _("ISAIAH"), -#line 6903 +#line 6968 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6904 +#line 6969 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 6906 +#line 6971 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 6907 +#line 6972 .doubleBattle = FALSE, -#line 6908 +#line 6973 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6910 +#line 6975 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6912 +#line 6977 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6911 +#line 6976 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6914 +#line 6979 [TRAINER_PABLO_1] = { -#line 6915 +#line 6980 .trainerName = _("PABLO"), -#line 6916 +#line 6981 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6917 +#line 6982 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 6919 +#line 6984 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 6920 +#line 6985 .doubleBattle = FALSE, -#line 6921 +#line 6986 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6923 +#line 6988 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6925 +#line 6990 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6924 +#line 6989 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6927 +#line 6992 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6929 +#line 6994 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6928 +#line 6993 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6931 +#line 6996 [TRAINER_CHASE] = { -#line 6932 +#line 6997 .trainerName = _("CHASE"), -#line 6933 +#line 6998 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6934 +#line 6999 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 6936 +#line 7001 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 6937 +#line 7002 .doubleBattle = FALSE, -#line 6938 +#line 7003 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6940 +#line 7005 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6942 +#line 7007 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6941 +#line 7006 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6944 +#line 7009 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6946 +#line 7011 .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 6945 +#line 7010 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6948 +#line 7013 [TRAINER_ISAIAH_2] = { -#line 6949 +#line 7014 .trainerName = _("ISAIAH"), -#line 6950 +#line 7015 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6951 +#line 7016 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 6953 +#line 7018 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 6954 +#line 7019 .doubleBattle = FALSE, -#line 6955 +#line 7020 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6957 +#line 7022 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6959 +#line 7024 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6958 +#line 7023 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6961 +#line 7026 [TRAINER_ISAIAH_3] = { -#line 6962 +#line 7027 .trainerName = _("ISAIAH"), -#line 6963 +#line 7028 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6964 +#line 7029 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 6966 +#line 7031 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 6967 +#line 7032 .doubleBattle = FALSE, -#line 6968 +#line 7033 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6970 +#line 7035 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6972 +#line 7037 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6971 +#line 7036 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6974 +#line 7039 [TRAINER_ISAIAH_4] = { -#line 6975 +#line 7040 .trainerName = _("ISAIAH"), -#line 6976 +#line 7041 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6977 +#line 7042 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 6979 +#line 7044 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 6980 +#line 7045 .doubleBattle = FALSE, -#line 6981 +#line 7046 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6983 +#line 7048 .species = SPECIES_STARMIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6985 +#line 7050 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6984 +#line 7049 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6987 +#line 7052 [TRAINER_ISAIAH_5] = { -#line 6988 +#line 7053 .trainerName = _("ISAIAH"), -#line 6989 +#line 7054 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6990 +#line 7055 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 6992 +#line 7057 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 6993 +#line 7058 .doubleBattle = FALSE, -#line 6994 +#line 7059 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6996 +#line 7061 .species = SPECIES_STARMIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6998 +#line 7063 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6997 +#line 7062 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7000 +#line 7065 [TRAINER_ISOBEL] = { -#line 7001 +#line 7066 .trainerName = _("ISOBEL"), -#line 7002 +#line 7067 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 7003 +#line 7068 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = -#line 7004 +#line 7069 F_TRAINER_FEMALE | -#line 7005 +#line 7070 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 7006 +#line 7071 .doubleBattle = FALSE, -#line 7007 +#line 7072 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7009 +#line 7074 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7011 +#line 7076 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7010 +#line 7075 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7013 +#line 7078 [TRAINER_DONNY] = { -#line 7014 +#line 7079 .trainerName = _("DONNY"), -#line 7015 +#line 7080 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 7016 +#line 7081 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = -#line 7017 +#line 7082 F_TRAINER_FEMALE | -#line 7018 +#line 7083 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 7019 +#line 7084 .doubleBattle = FALSE, -#line 7020 +#line 7085 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7022 +#line 7087 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7024 +#line 7089 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7023 +#line 7088 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7026 +#line 7091 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7028 +#line 7093 .iv = TRAINER_PARTY_IVS(19, 19, 19, 19, 19, 19), -#line 7027 +#line 7092 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7030 +#line 7095 [TRAINER_TALIA] = { -#line 7031 +#line 7096 .trainerName = _("TALIA"), -#line 7032 +#line 7097 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 7033 +#line 7098 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = -#line 7034 +#line 7099 F_TRAINER_FEMALE | -#line 7035 +#line 7100 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 7036 +#line 7101 .doubleBattle = FALSE, -#line 7037 +#line 7102 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7039 +#line 7104 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7041 +#line 7106 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7040 +#line 7105 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7043 +#line 7108 [TRAINER_KATELYN_1] = { -#line 7044 +#line 7109 .trainerName = _("KATELYN"), -#line 7045 +#line 7110 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 7046 +#line 7111 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = -#line 7047 +#line 7112 F_TRAINER_FEMALE | -#line 7048 +#line 7113 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 7049 +#line 7114 .doubleBattle = FALSE, -#line 7050 +#line 7115 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7052 +#line 7117 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7054 +#line 7119 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7053 +#line 7118 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7056 +#line 7121 [TRAINER_ALLISON] = { -#line 7057 +#line 7122 .trainerName = _("ALLISON"), -#line 7058 +#line 7123 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 7059 +#line 7124 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = -#line 7060 +#line 7125 F_TRAINER_FEMALE | -#line 7061 +#line 7126 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 7062 +#line 7127 .doubleBattle = FALSE, -#line 7063 +#line 7128 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7065 +#line 7130 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7067 +#line 7132 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7066 +#line 7131 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7069 +#line 7134 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7071 +#line 7136 .iv = TRAINER_PARTY_IVS(29, 29, 29, 29, 29, 29), -#line 7070 +#line 7135 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7073 +#line 7138 [TRAINER_KATELYN_2] = { -#line 7074 +#line 7139 .trainerName = _("KATELYN"), -#line 7075 +#line 7140 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 7076 +#line 7141 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = -#line 7077 +#line 7142 F_TRAINER_FEMALE | -#line 7078 +#line 7143 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 7079 +#line 7144 .doubleBattle = FALSE, -#line 7080 +#line 7145 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7082 +#line 7147 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7084 +#line 7149 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 7083 +#line 7148 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7086 +#line 7151 [TRAINER_KATELYN_3] = { -#line 7087 +#line 7152 .trainerName = _("KATELYN"), -#line 7088 +#line 7153 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 7089 +#line 7154 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = -#line 7090 +#line 7155 F_TRAINER_FEMALE | -#line 7091 +#line 7156 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 7092 +#line 7157 .doubleBattle = FALSE, -#line 7093 +#line 7158 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7095 +#line 7160 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7097 +#line 7162 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 7096 +#line 7161 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7099 +#line 7164 [TRAINER_KATELYN_4] = { -#line 7100 +#line 7165 .trainerName = _("KATELYN"), -#line 7101 +#line 7166 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 7102 +#line 7167 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = -#line 7103 +#line 7168 F_TRAINER_FEMALE | -#line 7104 +#line 7169 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 7105 +#line 7170 .doubleBattle = FALSE, -#line 7106 +#line 7171 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7108 +#line 7173 .species = SPECIES_STARMIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7110 +#line 7175 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 7109 +#line 7174 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7112 +#line 7177 [TRAINER_KATELYN_5] = { -#line 7113 +#line 7178 .trainerName = _("KATELYN"), -#line 7114 +#line 7179 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 7115 +#line 7180 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = -#line 7116 +#line 7181 F_TRAINER_FEMALE | -#line 7117 +#line 7182 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 7118 +#line 7183 .doubleBattle = FALSE, -#line 7119 +#line 7184 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7121 +#line 7186 .species = SPECIES_STARMIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7123 +#line 7188 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 7122 +#line 7187 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7125 +#line 7190 [TRAINER_NICOLAS_1] = { -#line 7126 +#line 7191 .trainerName = _("NICOLAS"), -#line 7127 +#line 7192 .trainerClass = TRAINER_CLASS_DRAGON_TAMER, -#line 7128 +#line 7193 .trainerPic = TRAINER_PIC_DRAGON_TAMER, .encounterMusic_gender = -#line 7130 +#line 7195 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7131 +#line 7196 .doubleBattle = FALSE, -#line 7132 +#line 7197 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7134 +#line 7199 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7136 +#line 7201 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 7135 +#line 7200 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7138 +#line 7203 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7140 +#line 7205 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 7139 +#line 7204 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7142 +#line 7207 [TRAINER_NICOLAS_2] = { -#line 7143 +#line 7208 .trainerName = _("NICOLAS"), -#line 7144 +#line 7209 .trainerClass = TRAINER_CLASS_DRAGON_TAMER, -#line 7145 +#line 7210 .trainerPic = TRAINER_PIC_DRAGON_TAMER, .encounterMusic_gender = -#line 7147 +#line 7212 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7148 +#line 7213 .doubleBattle = FALSE, -#line 7149 +#line 7214 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7151 +#line 7216 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7153 +#line 7218 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 7152 +#line 7217 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7155 +#line 7220 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7157 +#line 7222 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 7156 +#line 7221 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7159 +#line 7224 [TRAINER_NICOLAS_3] = { -#line 7160 +#line 7225 .trainerName = _("NICOLAS"), -#line 7161 +#line 7226 .trainerClass = TRAINER_CLASS_DRAGON_TAMER, -#line 7162 +#line 7227 .trainerPic = TRAINER_PIC_DRAGON_TAMER, .encounterMusic_gender = -#line 7164 +#line 7229 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7165 +#line 7230 .doubleBattle = FALSE, -#line 7166 +#line 7231 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7168 +#line 7233 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7170 +#line 7235 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 7169 +#line 7234 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7172 +#line 7237 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7174 +#line 7239 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 7173 +#line 7238 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7176 +#line 7241 [TRAINER_NICOLAS_4] = { -#line 7177 +#line 7242 .trainerName = _("NICOLAS"), -#line 7178 +#line 7243 .trainerClass = TRAINER_CLASS_DRAGON_TAMER, -#line 7179 +#line 7244 .trainerPic = TRAINER_PIC_DRAGON_TAMER, .encounterMusic_gender = -#line 7181 +#line 7246 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7182 +#line 7247 .doubleBattle = FALSE, -#line 7183 +#line 7248 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 7185 +#line 7250 .species = SPECIES_BAGON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7187 +#line 7252 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 7186 +#line 7251 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7189 +#line 7254 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7191 +#line 7256 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 7190 +#line 7255 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7193 +#line 7258 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7195 +#line 7260 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 7194 +#line 7259 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7197 +#line 7262 [TRAINER_NICOLAS_5] = { -#line 7198 +#line 7263 .trainerName = _("NICOLAS"), -#line 7199 +#line 7264 .trainerClass = TRAINER_CLASS_DRAGON_TAMER, -#line 7200 +#line 7265 .trainerPic = TRAINER_PIC_DRAGON_TAMER, .encounterMusic_gender = -#line 7202 +#line 7267 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7203 +#line 7268 .doubleBattle = FALSE, -#line 7204 +#line 7269 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 7206 +#line 7271 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7208 +#line 7273 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 7207 +#line 7272 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7210 +#line 7275 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7212 +#line 7277 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 7211 +#line 7276 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7214 +#line 7279 .species = SPECIES_SHELGON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7214 +#line 7279 .heldItem = ITEM_DRAGON_FANG, -#line 7216 +#line 7281 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 7215 +#line 7280 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7218 +#line 7283 [TRAINER_AARON] = { -#line 7219 +#line 7284 .trainerName = _("AARON"), -#line 7220 +#line 7285 .trainerClass = TRAINER_CLASS_DRAGON_TAMER, -#line 7221 +#line 7286 .trainerPic = TRAINER_PIC_DRAGON_TAMER, .encounterMusic_gender = -#line 7223 +#line 7288 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7224 +#line 7289 .doubleBattle = FALSE, -#line 7225 +#line 7290 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7227 +#line 7292 .species = SPECIES_BAGON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7229 +#line 7294 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 7228 +#line 7293 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7230 +#line 7295 MOVE_DRAGON_BREATH, MOVE_HEADBUTT, MOVE_FOCUS_ENERGY, @@ -18150,895 +18150,895 @@ F_TRAINER_FEMALE | }, }, }, -#line 7235 +#line 7300 [TRAINER_PERRY] = { -#line 7236 +#line 7301 .trainerName = _("PERRY"), -#line 7237 +#line 7302 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7238 +#line 7303 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7240 +#line 7305 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7241 +#line 7306 .doubleBattle = FALSE, -#line 7242 +#line 7307 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7244 +#line 7309 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7246 +#line 7311 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7245 +#line 7310 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7248 +#line 7313 [TRAINER_HUGH] = { -#line 7249 +#line 7314 .trainerName = _("HUGH"), -#line 7250 +#line 7315 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7251 +#line 7316 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7253 +#line 7318 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7254 +#line 7319 .doubleBattle = FALSE, -#line 7255 +#line 7320 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7257 +#line 7322 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7259 +#line 7324 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7258 +#line 7323 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7261 +#line 7326 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7263 +#line 7328 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7262 +#line 7327 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7265 +#line 7330 [TRAINER_PHIL] = { -#line 7266 +#line 7331 .trainerName = _("PHIL"), -#line 7267 +#line 7332 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7268 +#line 7333 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7270 +#line 7335 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7271 +#line 7336 .doubleBattle = FALSE, -#line 7272 +#line 7337 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7274 +#line 7339 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7276 +#line 7341 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7275 +#line 7340 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7278 +#line 7343 [TRAINER_JARED] = { -#line 7279 +#line 7344 .trainerName = _("JARED"), -#line 7280 +#line 7345 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7281 +#line 7346 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7283 +#line 7348 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7284 +#line 7349 .doubleBattle = FALSE, -#line 7285 +#line 7350 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 7287 +#line 7352 .species = SPECIES_DODUO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7289 +#line 7354 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 7288 +#line 7353 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7291 +#line 7356 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7293 +#line 7358 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 7292 +#line 7357 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7295 +#line 7360 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7297 +#line 7362 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 7296 +#line 7361 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7299 +#line 7364 [TRAINER_HUMBERTO] = { -#line 7300 +#line 7365 .trainerName = _("HUMBERTO"), -#line 7301 +#line 7366 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7302 +#line 7367 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7304 +#line 7369 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7305 +#line 7370 .doubleBattle = FALSE, -#line 7306 +#line 7371 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7308 +#line 7373 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7310 +#line 7375 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 7309 +#line 7374 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7312 +#line 7377 [TRAINER_PRESLEY] = { -#line 7313 +#line 7378 .trainerName = _("PRESLEY"), -#line 7314 +#line 7379 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7315 +#line 7380 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7317 +#line 7382 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7318 +#line 7383 .doubleBattle = FALSE, -#line 7319 +#line 7384 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7321 +#line 7386 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7323 +#line 7388 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7322 +#line 7387 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7325 +#line 7390 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7327 +#line 7392 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7326 +#line 7391 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7329 +#line 7394 [TRAINER_EDWARDO] = { -#line 7330 +#line 7395 .trainerName = _("EDWARDO"), -#line 7331 +#line 7396 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7332 +#line 7397 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7334 +#line 7399 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7335 +#line 7400 .doubleBattle = FALSE, -#line 7336 +#line 7401 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7338 +#line 7403 .species = SPECIES_DODUO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7340 +#line 7405 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 7339 +#line 7404 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7342 +#line 7407 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7344 +#line 7409 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 7343 +#line 7408 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7346 +#line 7411 [TRAINER_COLIN] = { -#line 7347 +#line 7412 .trainerName = _("COLIN"), -#line 7348 +#line 7413 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7349 +#line 7414 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7351 +#line 7416 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7352 +#line 7417 .doubleBattle = FALSE, -#line 7353 +#line 7418 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7355 +#line 7420 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7357 +#line 7422 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7356 +#line 7421 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7359 +#line 7424 .species = SPECIES_NATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7361 +#line 7426 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7360 +#line 7425 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7363 +#line 7428 [TRAINER_ROBERT_1] = { -#line 7364 +#line 7429 .trainerName = _("ROBERT"), -#line 7365 +#line 7430 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7366 +#line 7431 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7368 +#line 7433 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7369 +#line 7434 .doubleBattle = FALSE, -#line 7370 +#line 7435 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7372 +#line 7437 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7374 +#line 7439 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7373 +#line 7438 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7376 +#line 7441 [TRAINER_BENNY] = { -#line 7377 +#line 7442 .trainerName = _("BENNY"), -#line 7378 +#line 7443 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7379 +#line 7444 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7381 +#line 7446 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7382 +#line 7447 .doubleBattle = FALSE, -#line 7383 +#line 7448 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 7385 +#line 7450 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7387 +#line 7452 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7386 +#line 7451 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7389 +#line 7454 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7391 +#line 7456 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7390 +#line 7455 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7393 +#line 7458 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7395 +#line 7460 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7394 +#line 7459 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7397 +#line 7462 [TRAINER_CHESTER] = { -#line 7398 +#line 7463 .trainerName = _("CHESTER"), -#line 7399 +#line 7464 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7400 +#line 7465 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7402 +#line 7467 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7403 +#line 7468 .doubleBattle = FALSE, -#line 7404 +#line 7469 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7406 +#line 7471 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7408 +#line 7473 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7407 +#line 7472 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7410 +#line 7475 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7412 +#line 7477 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7411 +#line 7476 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7414 +#line 7479 [TRAINER_ROBERT_2] = { -#line 7415 +#line 7480 .trainerName = _("ROBERT"), -#line 7416 +#line 7481 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7417 +#line 7482 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7419 +#line 7484 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7420 +#line 7485 .doubleBattle = FALSE, -#line 7421 +#line 7486 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7423 +#line 7488 .species = SPECIES_NATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7425 +#line 7490 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 7424 +#line 7489 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7427 +#line 7492 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7429 +#line 7494 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 7428 +#line 7493 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7431 +#line 7496 [TRAINER_ROBERT_3] = { -#line 7432 +#line 7497 .trainerName = _("ROBERT"), -#line 7433 +#line 7498 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7434 +#line 7499 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7436 +#line 7501 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7437 +#line 7502 .doubleBattle = FALSE, -#line 7438 +#line 7503 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7440 +#line 7505 .species = SPECIES_NATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7442 +#line 7507 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 7441 +#line 7506 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7444 +#line 7509 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7446 +#line 7511 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 7445 +#line 7510 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7448 +#line 7513 [TRAINER_ROBERT_4] = { -#line 7449 +#line 7514 .trainerName = _("ROBERT"), -#line 7450 +#line 7515 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7451 +#line 7516 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7453 +#line 7518 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7454 +#line 7519 .doubleBattle = FALSE, -#line 7455 +#line 7520 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7457 +#line 7522 .species = SPECIES_NATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7459 +#line 7524 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 7458 +#line 7523 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7461 +#line 7526 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7463 +#line 7528 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 7462 +#line 7527 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7465 +#line 7530 [TRAINER_ROBERT_5] = { -#line 7466 +#line 7531 .trainerName = _("ROBERT"), -#line 7467 +#line 7532 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7468 +#line 7533 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7470 +#line 7535 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7471 +#line 7536 .doubleBattle = FALSE, -#line 7472 +#line 7537 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7474 +#line 7539 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7476 +#line 7541 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 7475 +#line 7540 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7478 +#line 7543 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7480 +#line 7545 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 7479 +#line 7544 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7482 +#line 7547 [TRAINER_ALEX] = { -#line 7483 +#line 7548 .trainerName = _("ALEX"), -#line 7484 +#line 7549 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7485 +#line 7550 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7487 +#line 7552 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7488 +#line 7553 .doubleBattle = FALSE, -#line 7489 +#line 7554 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7491 +#line 7556 .species = SPECIES_NATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7493 +#line 7558 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 7492 +#line 7557 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7495 +#line 7560 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7497 +#line 7562 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 7496 +#line 7561 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7499 +#line 7564 [TRAINER_BECK] = { -#line 7500 +#line 7565 .trainerName = _("BECK"), -#line 7501 +#line 7566 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7502 +#line 7567 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7504 +#line 7569 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7505 +#line 7570 .doubleBattle = FALSE, -#line 7506 +#line 7571 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7508 +#line 7573 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7510 +#line 7575 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7509 +#line 7574 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7512 +#line 7577 [TRAINER_YASU] = { -#line 7513 +#line 7578 .trainerName = _("YASU"), -#line 7514 +#line 7579 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 7515 +#line 7580 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 7517 +#line 7582 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 7518 +#line 7583 .doubleBattle = FALSE, -#line 7519 +#line 7584 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7521 +#line 7586 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7523 +#line 7588 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7522 +#line 7587 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7525 +#line 7590 [TRAINER_TAKASHI] = { -#line 7526 +#line 7591 .trainerName = _("TAKASHI"), -#line 7527 +#line 7592 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 7528 +#line 7593 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 7530 +#line 7595 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 7531 +#line 7596 .doubleBattle = FALSE, -#line 7532 +#line 7597 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7534 +#line 7599 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7536 +#line 7601 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7535 +#line 7600 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7538 +#line 7603 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7540 +#line 7605 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7539 +#line 7604 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7542 +#line 7607 [TRAINER_DIANNE] = { -#line 7543 +#line 7608 .trainerName = _("DIANNE"), -#line 7544 +#line 7609 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 7545 +#line 7610 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 7546 +#line 7611 F_TRAINER_FEMALE | -#line 7547 +#line 7612 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7548 +#line 7613 .items = { ITEM_FULL_RESTORE }, -#line 7549 +#line 7614 .doubleBattle = FALSE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7551 +#line 7616 .species = SPECIES_CLAYDOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7553 +#line 7618 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7552 +#line 7617 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7554 +#line 7619 MOVE_SKILL_SWAP, MOVE_EARTHQUAKE, }, }, { -#line 7557 +#line 7622 .species = SPECIES_LANTURN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7559 +#line 7624 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7558 +#line 7623 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7560 +#line 7625 MOVE_THUNDERBOLT, MOVE_EARTHQUAKE, }, }, }, }, -#line 7563 +#line 7628 [TRAINER_JANI] = { -#line 7564 +#line 7629 .trainerName = _("JANI"), -#line 7565 +#line 7630 .trainerClass = TRAINER_CLASS_TUBER_F, -#line 7566 +#line 7631 .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = -#line 7567 +#line 7632 F_TRAINER_FEMALE | -#line 7568 +#line 7633 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 7569 +#line 7634 .doubleBattle = FALSE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7571 +#line 7636 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7573 +#line 7638 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7572 +#line 7637 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7575 +#line 7640 [TRAINER_LAO_1] = { -#line 7576 +#line 7641 .trainerName = _("LAO"), -#line 7577 +#line 7642 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 7578 +#line 7643 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 7580 +#line 7645 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 7581 +#line 7646 .doubleBattle = FALSE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 7583 +#line 7648 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7585 +#line 7650 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7584 +#line 7649 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7586 +#line 7651 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SMOG, @@ -19046,17 +19046,17 @@ F_TRAINER_FEMALE | }, }, { -#line 7591 +#line 7656 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7593 +#line 7658 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7592 +#line 7657 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7594 +#line 7659 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SMOG, @@ -19064,17 +19064,17 @@ F_TRAINER_FEMALE | }, }, { -#line 7599 +#line 7664 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7601 +#line 7666 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7600 +#line 7665 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7602 +#line 7667 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, @@ -19083,76 +19083,76 @@ F_TRAINER_FEMALE | }, }, }, -#line 7607 +#line 7672 [TRAINER_LUNG] = { -#line 7608 +#line 7673 .trainerName = _("LUNG"), -#line 7609 +#line 7674 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 7610 +#line 7675 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 7612 +#line 7677 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 7613 +#line 7678 .doubleBattle = FALSE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7615 +#line 7680 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7617 +#line 7682 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7616 +#line 7681 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7619 +#line 7684 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7621 +#line 7686 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7620 +#line 7685 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7623 +#line 7688 [TRAINER_LAO_2] = { -#line 7624 +#line 7689 .trainerName = _("LAO"), -#line 7625 +#line 7690 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 7626 +#line 7691 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 7628 +#line 7693 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 7629 +#line 7694 .doubleBattle = FALSE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 7631 +#line 7696 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7633 +#line 7698 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7632 +#line 7697 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7634 +#line 7699 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, @@ -19160,34 +19160,34 @@ F_TRAINER_FEMALE | }, }, { -#line 7639 +#line 7704 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7641 +#line 7706 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7640 +#line 7705 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7642 +#line 7707 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, }, }, { -#line 7646 +#line 7711 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7648 +#line 7713 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7647 +#line 7712 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7649 +#line 7714 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, @@ -19195,52 +19195,52 @@ F_TRAINER_FEMALE | }, }, { -#line 7654 +#line 7719 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7656 +#line 7721 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7655 +#line 7720 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7657 +#line 7722 MOVE_TACKLE, MOVE_SLUDGE, }, }, }, }, -#line 7660 +#line 7725 [TRAINER_LAO_3] = { -#line 7661 +#line 7726 .trainerName = _("LAO"), -#line 7662 +#line 7727 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 7663 +#line 7728 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 7665 +#line 7730 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 7666 +#line 7731 .doubleBattle = FALSE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 7668 +#line 7733 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7670 +#line 7735 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 7669 +#line 7734 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7671 +#line 7736 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, @@ -19248,17 +19248,17 @@ F_TRAINER_FEMALE | }, }, { -#line 7676 +#line 7741 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7678 +#line 7743 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 7677 +#line 7742 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7679 +#line 7744 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, @@ -19266,172 +19266,172 @@ F_TRAINER_FEMALE | }, }, { -#line 7684 +#line 7749 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7686 +#line 7751 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 7685 +#line 7750 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7687 +#line 7752 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, }, }, { -#line 7691 +#line 7756 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7693 +#line 7758 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 7692 +#line 7757 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7694 +#line 7759 MOVE_TACKLE, MOVE_SLUDGE, }, }, }, }, -#line 7697 +#line 7762 [TRAINER_LAO_4] = { -#line 7698 +#line 7763 .trainerName = _("LAO"), -#line 7699 +#line 7764 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 7700 +#line 7765 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 7702 +#line 7767 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 7703 +#line 7768 .doubleBattle = FALSE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 7705 +#line 7770 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7707 +#line 7772 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 7706 +#line 7771 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7708 +#line 7773 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, }, }, { -#line 7712 +#line 7777 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7714 +#line 7779 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 7713 +#line 7778 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7715 +#line 7780 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, }, }, { -#line 7719 +#line 7784 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7721 +#line 7786 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 7720 +#line 7785 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7722 +#line 7787 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, }, }, { -#line 7726 +#line 7791 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7728 +#line 7793 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 7727 +#line 7792 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7729 +#line 7794 MOVE_TACKLE, MOVE_SLUDGE, }, }, }, }, -#line 7732 +#line 7797 [TRAINER_LAO_5] = { -#line 7733 +#line 7798 .trainerName = _("LAO"), -#line 7734 +#line 7799 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 7735 +#line 7800 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 7737 +#line 7802 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 7738 +#line 7803 .doubleBattle = FALSE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 7740 +#line 7805 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7742 +#line 7807 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 7741 +#line 7806 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7743 +#line 7808 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, }, }, { -#line 7747 +#line 7812 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7749 +#line 7814 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 7748 +#line 7813 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7750 +#line 7815 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, @@ -19439,17 +19439,17 @@ F_TRAINER_FEMALE | }, }, { -#line 7755 +#line 7820 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7757 +#line 7822 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 7756 +#line 7821 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7758 +#line 7823 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, @@ -19457,419 +19457,419 @@ F_TRAINER_FEMALE | }, }, { -#line 7763 +#line 7828 .species = SPECIES_WEEZING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7763 +#line 7828 .heldItem = ITEM_SMOKE_BALL, -#line 7765 +#line 7830 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 7764 +#line 7829 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7766 +#line 7831 MOVE_TACKLE, MOVE_SLUDGE, }, }, }, }, -#line 7769 +#line 7834 [TRAINER_JOCELYN] = { -#line 7770 +#line 7835 .trainerName = _("JOCELYN"), -#line 7771 +#line 7836 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 7772 +#line 7837 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 7773 +#line 7838 F_TRAINER_FEMALE | -#line 7774 +#line 7839 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7775 +#line 7840 .doubleBattle = FALSE, -#line 7776 +#line 7841 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7778 +#line 7843 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7780 +#line 7845 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 7779 +#line 7844 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7782 +#line 7847 [TRAINER_LAURA] = { -#line 7783 +#line 7848 .trainerName = _("LAURA"), -#line 7784 +#line 7849 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 7785 +#line 7850 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 7786 +#line 7851 F_TRAINER_FEMALE | -#line 7787 +#line 7852 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7788 +#line 7853 .doubleBattle = FALSE, -#line 7789 +#line 7854 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7791 +#line 7856 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7793 +#line 7858 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 7792 +#line 7857 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7795 +#line 7860 [TRAINER_CYNDY_1] = { -#line 7796 +#line 7861 .trainerName = _("CYNDY"), -#line 7797 +#line 7862 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 7798 +#line 7863 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 7799 +#line 7864 F_TRAINER_FEMALE | -#line 7800 +#line 7865 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7801 +#line 7866 .doubleBattle = FALSE, -#line 7802 +#line 7867 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7804 +#line 7869 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7806 +#line 7871 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 7805 +#line 7870 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7808 +#line 7873 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7810 +#line 7875 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 7809 +#line 7874 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7812 +#line 7877 [TRAINER_CORA] = { -#line 7813 +#line 7878 .trainerName = _("CORA"), -#line 7814 +#line 7879 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 7815 +#line 7880 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 7816 +#line 7881 F_TRAINER_FEMALE | -#line 7817 +#line 7882 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7818 +#line 7883 .doubleBattle = FALSE, -#line 7819 +#line 7884 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7821 +#line 7886 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7823 +#line 7888 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 7822 +#line 7887 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7825 +#line 7890 [TRAINER_PAULA] = { -#line 7826 +#line 7891 .trainerName = _("PAULA"), -#line 7827 +#line 7892 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 7828 +#line 7893 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 7829 +#line 7894 F_TRAINER_FEMALE | -#line 7830 +#line 7895 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7831 +#line 7896 .doubleBattle = FALSE, -#line 7832 +#line 7897 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7834 +#line 7899 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7836 +#line 7901 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 7835 +#line 7900 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7838 +#line 7903 [TRAINER_CYNDY_2] = { -#line 7839 +#line 7904 .trainerName = _("CYNDY"), -#line 7840 +#line 7905 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 7841 +#line 7906 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 7842 +#line 7907 F_TRAINER_FEMALE | -#line 7843 +#line 7908 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7844 +#line 7909 .doubleBattle = FALSE, -#line 7845 +#line 7910 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7847 +#line 7912 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7849 +#line 7914 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 7848 +#line 7913 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7851 +#line 7916 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7853 +#line 7918 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 7852 +#line 7917 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7855 +#line 7920 [TRAINER_CYNDY_3] = { -#line 7856 +#line 7921 .trainerName = _("CYNDY"), -#line 7857 +#line 7922 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 7858 +#line 7923 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 7859 +#line 7924 F_TRAINER_FEMALE | -#line 7860 +#line 7925 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7861 +#line 7926 .doubleBattle = FALSE, -#line 7862 +#line 7927 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7864 +#line 7929 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7866 +#line 7931 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 7865 +#line 7930 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7868 +#line 7933 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7870 +#line 7935 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 7869 +#line 7934 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7872 +#line 7937 [TRAINER_CYNDY_4] = { -#line 7873 +#line 7938 .trainerName = _("CYNDY"), -#line 7874 +#line 7939 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 7875 +#line 7940 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 7876 +#line 7941 F_TRAINER_FEMALE | -#line 7877 +#line 7942 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7878 +#line 7943 .doubleBattle = FALSE, -#line 7879 +#line 7944 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7881 +#line 7946 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7883 +#line 7948 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 7882 +#line 7947 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7885 +#line 7950 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7887 +#line 7952 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 7886 +#line 7951 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7889 +#line 7954 [TRAINER_CYNDY_5] = { -#line 7890 +#line 7955 .trainerName = _("CYNDY"), -#line 7891 +#line 7956 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 7892 +#line 7957 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 7893 +#line 7958 F_TRAINER_FEMALE | -#line 7894 +#line 7959 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7895 +#line 7960 .doubleBattle = FALSE, -#line 7896 +#line 7961 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7898 +#line 7963 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7900 +#line 7965 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 7899 +#line 7964 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7902 +#line 7967 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7904 +#line 7969 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 7903 +#line 7968 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7906 +#line 7971 [TRAINER_MADELINE_1] = { -#line 7907 +#line 7972 .trainerName = _("MADELINE"), -#line 7908 +#line 7973 .trainerClass = TRAINER_CLASS_PARASOL_LADY, -#line 7909 +#line 7974 .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = -#line 7910 +#line 7975 F_TRAINER_FEMALE | -#line 7911 +#line 7976 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 7912 +#line 7977 .doubleBattle = FALSE, -#line 7913 +#line 7978 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7915 +#line 7980 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7917 +#line 7982 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7916 +#line 7981 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7918 +#line 7983 MOVE_EMBER, MOVE_TACKLE, MOVE_MAGNITUDE, @@ -19878,84 +19878,84 @@ F_TRAINER_FEMALE | }, }, }, -#line 7923 +#line 7988 [TRAINER_CLARISSA] = { -#line 7924 +#line 7989 .trainerName = _("CLARISSA"), -#line 7925 +#line 7990 .trainerClass = TRAINER_CLASS_PARASOL_LADY, -#line 7926 +#line 7991 .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = -#line 7927 +#line 7992 F_TRAINER_FEMALE | -#line 7928 +#line 7993 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 7929 +#line 7994 .doubleBattle = FALSE, -#line 7930 +#line 7995 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7932 +#line 7997 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7934 +#line 7999 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7933 +#line 7998 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7936 +#line 8001 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7938 +#line 8003 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7937 +#line 8002 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7940 +#line 8005 [TRAINER_ANGELICA] = { -#line 7941 +#line 8006 .trainerName = _("ANGELICA"), -#line 7942 +#line 8007 .trainerClass = TRAINER_CLASS_PARASOL_LADY, -#line 7943 +#line 8008 .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = -#line 7944 +#line 8009 F_TRAINER_FEMALE | -#line 7945 +#line 8010 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 7946 +#line 8011 .doubleBattle = FALSE, -#line 7947 +#line 8012 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7949 +#line 8014 .species = SPECIES_CASTFORM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7951 +#line 8016 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 7950 +#line 8015 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7952 +#line 8017 MOVE_RAIN_DANCE, MOVE_WEATHER_BALL, MOVE_THUNDER, @@ -19964,39 +19964,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 7957 +#line 8022 [TRAINER_MADELINE_2] = { -#line 7958 +#line 8023 .trainerName = _("MADELINE"), -#line 7959 +#line 8024 .trainerClass = TRAINER_CLASS_PARASOL_LADY, -#line 7960 +#line 8025 .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = -#line 7961 +#line 8026 F_TRAINER_FEMALE | -#line 7962 +#line 8027 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 7963 +#line 8028 .doubleBattle = FALSE, -#line 7964 +#line 8029 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7966 +#line 8031 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7968 +#line 8033 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 7967 +#line 8032 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7969 +#line 8034 MOVE_EMBER, MOVE_TACKLE, MOVE_MAGNITUDE, @@ -20005,39 +20005,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 7974 +#line 8039 [TRAINER_MADELINE_3] = { -#line 7975 +#line 8040 .trainerName = _("MADELINE"), -#line 7976 +#line 8041 .trainerClass = TRAINER_CLASS_PARASOL_LADY, -#line 7977 +#line 8042 .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = -#line 7978 +#line 8043 F_TRAINER_FEMALE | -#line 7979 +#line 8044 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 7980 +#line 8045 .doubleBattle = FALSE, -#line 7981 +#line 8046 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7983 +#line 8048 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7985 +#line 8050 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 7984 +#line 8049 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7986 +#line 8051 MOVE_EMBER, MOVE_TAKE_DOWN, MOVE_MAGNITUDE, @@ -20046,39 +20046,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 7991 +#line 8056 [TRAINER_MADELINE_4] = { -#line 7992 +#line 8057 .trainerName = _("MADELINE"), -#line 7993 +#line 8058 .trainerClass = TRAINER_CLASS_PARASOL_LADY, -#line 7994 +#line 8059 .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = -#line 7995 +#line 8060 F_TRAINER_FEMALE | -#line 7996 +#line 8061 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 7997 +#line 8062 .doubleBattle = FALSE, -#line 7998 +#line 8063 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8000 +#line 8065 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8002 +#line 8067 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 8001 +#line 8066 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8003 +#line 8068 MOVE_LEECH_SEED, MOVE_MEGA_DRAIN, MOVE_GRASS_WHISTLE, @@ -20086,17 +20086,17 @@ F_TRAINER_FEMALE | }, }, { -#line 8008 +#line 8073 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8010 +#line 8075 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 8009 +#line 8074 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8011 +#line 8076 MOVE_FLAMETHROWER, MOVE_TAKE_DOWN, MOVE_MAGNITUDE, @@ -20105,39 +20105,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 8016 +#line 8081 [TRAINER_MADELINE_5] = { -#line 8017 +#line 8082 .trainerName = _("MADELINE"), -#line 8018 +#line 8083 .trainerClass = TRAINER_CLASS_PARASOL_LADY, -#line 8019 +#line 8084 .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = -#line 8020 +#line 8085 F_TRAINER_FEMALE | -#line 8021 +#line 8086 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 8022 +#line 8087 .doubleBattle = FALSE, -#line 8023 +#line 8088 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8025 +#line 8090 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8027 +#line 8092 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 8026 +#line 8091 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8028 +#line 8093 MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_SOLAR_BEAM, @@ -20145,17 +20145,17 @@ F_TRAINER_FEMALE | }, }, { -#line 8033 +#line 8098 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8035 +#line 8100 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 8034 +#line 8099 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8036 +#line 8101 MOVE_FLAMETHROWER, MOVE_TAKE_DOWN, MOVE_EARTHQUAKE, @@ -20164,1145 +20164,1145 @@ F_TRAINER_FEMALE | }, }, }, -#line 8041 +#line 8106 [TRAINER_BEVERLY] = { -#line 8042 +#line 8107 .trainerName = _("BEVERLY"), -#line 8043 +#line 8108 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8044 +#line 8109 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8045 +#line 8110 F_TRAINER_FEMALE | -#line 8046 +#line 8111 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8047 +#line 8112 .doubleBattle = FALSE, -#line 8048 +#line 8113 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8050 +#line 8115 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8052 +#line 8117 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8051 +#line 8116 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8054 +#line 8119 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8056 +#line 8121 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8055 +#line 8120 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8058 +#line 8123 [TRAINER_IMANI] = { -#line 8059 +#line 8124 .trainerName = _("IMANI"), -#line 8060 +#line 8125 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8061 +#line 8126 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8062 +#line 8127 F_TRAINER_FEMALE | -#line 8063 +#line 8128 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8064 +#line 8129 .doubleBattle = FALSE, -#line 8065 +#line 8130 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8067 +#line 8132 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8069 +#line 8134 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8068 +#line 8133 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8071 +#line 8136 [TRAINER_KYLA] = { -#line 8072 +#line 8137 .trainerName = _("KYLA"), -#line 8073 +#line 8138 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8074 +#line 8139 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8075 +#line 8140 F_TRAINER_FEMALE | -#line 8076 +#line 8141 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8077 +#line 8142 .doubleBattle = FALSE, -#line 8078 +#line 8143 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8080 +#line 8145 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8082 +#line 8147 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8081 +#line 8146 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8084 +#line 8149 [TRAINER_DENISE] = { -#line 8085 +#line 8150 .trainerName = _("DENISE"), -#line 8086 +#line 8151 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8087 +#line 8152 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8088 +#line 8153 F_TRAINER_FEMALE | -#line 8089 +#line 8154 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8090 +#line 8155 .doubleBattle = FALSE, -#line 8091 +#line 8156 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8093 +#line 8158 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8095 +#line 8160 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8094 +#line 8159 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8097 +#line 8162 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8099 +#line 8164 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8098 +#line 8163 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8101 +#line 8166 [TRAINER_BETH] = { -#line 8102 +#line 8167 .trainerName = _("BETH"), -#line 8103 +#line 8168 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8104 +#line 8169 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8105 +#line 8170 F_TRAINER_FEMALE | -#line 8106 +#line 8171 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8107 +#line 8172 .doubleBattle = FALSE, -#line 8108 +#line 8173 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8110 +#line 8175 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8112 +#line 8177 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8111 +#line 8176 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8114 +#line 8179 [TRAINER_TARA] = { -#line 8115 +#line 8180 .trainerName = _("TARA"), -#line 8116 +#line 8181 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8117 +#line 8182 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8118 +#line 8183 F_TRAINER_FEMALE | -#line 8119 +#line 8184 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8120 +#line 8185 .doubleBattle = FALSE, -#line 8121 +#line 8186 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8123 +#line 8188 .species = SPECIES_HORSEA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8125 +#line 8190 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8124 +#line 8189 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8127 +#line 8192 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8129 +#line 8194 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8128 +#line 8193 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8131 +#line 8196 [TRAINER_MISSY] = { -#line 8132 +#line 8197 .trainerName = _("MISSY"), -#line 8133 +#line 8198 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8134 +#line 8199 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8135 +#line 8200 F_TRAINER_FEMALE | -#line 8136 +#line 8201 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8137 +#line 8202 .doubleBattle = FALSE, -#line 8138 +#line 8203 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8140 +#line 8205 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8142 +#line 8207 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8141 +#line 8206 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8144 +#line 8209 [TRAINER_ALICE] = { -#line 8145 +#line 8210 .trainerName = _("ALICE"), -#line 8146 +#line 8211 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8147 +#line 8212 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8148 +#line 8213 F_TRAINER_FEMALE | -#line 8149 +#line 8214 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8150 +#line 8215 .doubleBattle = FALSE, -#line 8151 +#line 8216 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8153 +#line 8218 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8155 +#line 8220 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8154 +#line 8219 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8157 +#line 8222 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8159 +#line 8224 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8158 +#line 8223 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8161 +#line 8226 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8163 +#line 8228 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8162 +#line 8227 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8165 +#line 8230 [TRAINER_JENNY_1] = { -#line 8166 +#line 8231 .trainerName = _("JENNY"), -#line 8167 +#line 8232 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8168 +#line 8233 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8169 +#line 8234 F_TRAINER_FEMALE | -#line 8170 +#line 8235 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8171 +#line 8236 .doubleBattle = FALSE, -#line 8172 +#line 8237 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8174 +#line 8239 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8176 +#line 8241 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8175 +#line 8240 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8178 +#line 8243 [TRAINER_GRACE] = { -#line 8179 +#line 8244 .trainerName = _("GRACE"), -#line 8180 +#line 8245 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8181 +#line 8246 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8182 +#line 8247 F_TRAINER_FEMALE | -#line 8183 +#line 8248 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8184 +#line 8249 .doubleBattle = FALSE, -#line 8185 +#line 8250 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8187 +#line 8252 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8189 +#line 8254 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8188 +#line 8253 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8191 +#line 8256 [TRAINER_TANYA] = { -#line 8192 +#line 8257 .trainerName = _("TANYA"), -#line 8193 +#line 8258 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8194 +#line 8259 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8195 +#line 8260 F_TRAINER_FEMALE | -#line 8196 +#line 8261 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8197 +#line 8262 .doubleBattle = FALSE, -#line 8198 +#line 8263 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8200 +#line 8265 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8202 +#line 8267 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8201 +#line 8266 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8204 +#line 8269 [TRAINER_SHARON] = { -#line 8205 +#line 8270 .trainerName = _("SHARON"), -#line 8206 +#line 8271 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8207 +#line 8272 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8208 +#line 8273 F_TRAINER_FEMALE | -#line 8209 +#line 8274 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8210 +#line 8275 .doubleBattle = FALSE, -#line 8211 +#line 8276 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8213 +#line 8278 .species = SPECIES_SEAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8215 +#line 8280 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8214 +#line 8279 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8217 +#line 8282 [TRAINER_NIKKI] = { -#line 8218 +#line 8283 .trainerName = _("NIKKI"), -#line 8219 +#line 8284 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8220 +#line 8285 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8221 +#line 8286 F_TRAINER_FEMALE | -#line 8222 +#line 8287 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8223 +#line 8288 .doubleBattle = FALSE, -#line 8224 +#line 8289 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8226 +#line 8291 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8228 +#line 8293 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8227 +#line 8292 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8230 +#line 8295 .species = SPECIES_SPHEAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8232 +#line 8297 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8231 +#line 8296 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8234 +#line 8299 [TRAINER_BRENDA] = { -#line 8235 +#line 8300 .trainerName = _("BRENDA"), -#line 8236 +#line 8301 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8237 +#line 8302 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8238 +#line 8303 F_TRAINER_FEMALE | -#line 8239 +#line 8304 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8240 +#line 8305 .doubleBattle = FALSE, -#line 8241 +#line 8306 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8243 +#line 8308 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8245 +#line 8310 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8244 +#line 8309 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8247 +#line 8312 [TRAINER_KATIE] = { -#line 8248 +#line 8313 .trainerName = _("KATIE"), -#line 8249 +#line 8314 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8250 +#line 8315 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8251 +#line 8316 F_TRAINER_FEMALE | -#line 8252 +#line 8317 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8253 +#line 8318 .doubleBattle = FALSE, -#line 8254 +#line 8319 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8256 +#line 8321 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8258 +#line 8323 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8257 +#line 8322 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8260 +#line 8325 .species = SPECIES_SPHEAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8262 +#line 8327 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8261 +#line 8326 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8264 +#line 8329 [TRAINER_SUSIE] = { -#line 8265 +#line 8330 .trainerName = _("SUSIE"), -#line 8266 +#line 8331 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8267 +#line 8332 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8268 +#line 8333 F_TRAINER_FEMALE | -#line 8269 +#line 8334 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8270 +#line 8335 .doubleBattle = FALSE, -#line 8271 +#line 8336 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8273 +#line 8338 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8275 +#line 8340 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8274 +#line 8339 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8277 +#line 8342 [TRAINER_KARA] = { -#line 8278 +#line 8343 .trainerName = _("KARA"), -#line 8279 +#line 8344 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8280 +#line 8345 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8281 +#line 8346 F_TRAINER_FEMALE | -#line 8282 +#line 8347 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8283 +#line 8348 .doubleBattle = FALSE, -#line 8284 +#line 8349 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8286 +#line 8351 .species = SPECIES_SEAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8288 +#line 8353 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8287 +#line 8352 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8290 +#line 8355 [TRAINER_DANA] = { -#line 8291 +#line 8356 .trainerName = _("DANA"), -#line 8292 +#line 8357 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8293 +#line 8358 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8294 +#line 8359 F_TRAINER_FEMALE | -#line 8295 +#line 8360 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8296 +#line 8361 .doubleBattle = FALSE, -#line 8297 +#line 8362 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8299 +#line 8364 .species = SPECIES_AZUMARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8301 +#line 8366 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8300 +#line 8365 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8303 +#line 8368 [TRAINER_SIENNA] = { -#line 8304 +#line 8369 .trainerName = _("SIENNA"), -#line 8305 +#line 8370 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8306 +#line 8371 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8307 +#line 8372 F_TRAINER_FEMALE | -#line 8308 +#line 8373 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8309 +#line 8374 .doubleBattle = FALSE, -#line 8310 +#line 8375 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8312 +#line 8377 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8314 +#line 8379 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8313 +#line 8378 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8316 +#line 8381 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8318 +#line 8383 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8317 +#line 8382 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8320 +#line 8385 [TRAINER_DEBRA] = { -#line 8321 +#line 8386 .trainerName = _("DEBRA"), -#line 8322 +#line 8387 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8323 +#line 8388 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8324 +#line 8389 F_TRAINER_FEMALE | -#line 8325 +#line 8390 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8326 +#line 8391 .doubleBattle = FALSE, -#line 8327 +#line 8392 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8329 +#line 8394 .species = SPECIES_SEAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8331 +#line 8396 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8330 +#line 8395 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8333 +#line 8398 [TRAINER_LINDA] = { -#line 8334 +#line 8399 .trainerName = _("LINDA"), -#line 8335 +#line 8400 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8336 +#line 8401 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8337 +#line 8402 F_TRAINER_FEMALE | -#line 8338 +#line 8403 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8339 +#line 8404 .doubleBattle = FALSE, -#line 8340 +#line 8405 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8342 +#line 8407 .species = SPECIES_HORSEA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8344 +#line 8409 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8343 +#line 8408 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8346 +#line 8411 .species = SPECIES_SEADRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8348 +#line 8413 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8347 +#line 8412 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8350 +#line 8415 [TRAINER_KAYLEE] = { -#line 8351 +#line 8416 .trainerName = _("KAYLEE"), -#line 8352 +#line 8417 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8353 +#line 8418 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8354 +#line 8419 F_TRAINER_FEMALE | -#line 8355 +#line 8420 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8356 +#line 8421 .doubleBattle = FALSE, -#line 8357 +#line 8422 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8359 +#line 8424 .species = SPECIES_LANTURN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8361 +#line 8426 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8360 +#line 8425 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8363 +#line 8428 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8365 +#line 8430 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8364 +#line 8429 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8367 +#line 8432 [TRAINER_LAUREL] = { -#line 8368 +#line 8433 .trainerName = _("LAUREL"), -#line 8369 +#line 8434 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8370 +#line 8435 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8371 +#line 8436 F_TRAINER_FEMALE | -#line 8372 +#line 8437 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8373 +#line 8438 .doubleBattle = FALSE, -#line 8374 +#line 8439 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8376 +#line 8441 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8378 +#line 8443 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8377 +#line 8442 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8380 +#line 8445 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8382 +#line 8447 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8381 +#line 8446 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8384 +#line 8449 [TRAINER_CARLEE] = { -#line 8385 +#line 8450 .trainerName = _("CARLEE"), -#line 8386 +#line 8451 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8387 +#line 8452 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8388 +#line 8453 F_TRAINER_FEMALE | -#line 8389 +#line 8454 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8390 +#line 8455 .doubleBattle = FALSE, -#line 8391 +#line 8456 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8393 +#line 8458 .species = SPECIES_SEAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8395 +#line 8460 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8394 +#line 8459 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8397 +#line 8462 [TRAINER_JENNY_2] = { -#line 8398 +#line 8463 .trainerName = _("JENNY"), -#line 8399 +#line 8464 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8400 +#line 8465 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8401 +#line 8466 F_TRAINER_FEMALE | -#line 8402 +#line 8467 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8403 +#line 8468 .doubleBattle = FALSE, -#line 8404 +#line 8469 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8406 +#line 8471 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8408 +#line 8473 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8407 +#line 8472 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8410 +#line 8475 [TRAINER_JENNY_3] = { -#line 8411 +#line 8476 .trainerName = _("JENNY"), -#line 8412 +#line 8477 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8413 +#line 8478 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8414 +#line 8479 F_TRAINER_FEMALE | -#line 8415 +#line 8480 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8416 +#line 8481 .doubleBattle = FALSE, -#line 8417 +#line 8482 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8419 +#line 8484 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8421 +#line 8486 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8420 +#line 8485 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8423 +#line 8488 [TRAINER_JENNY_4] = { -#line 8424 +#line 8489 .trainerName = _("JENNY"), -#line 8425 +#line 8490 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8426 +#line 8491 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8427 +#line 8492 F_TRAINER_FEMALE | -#line 8428 +#line 8493 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8429 +#line 8494 .doubleBattle = FALSE, -#line 8430 +#line 8495 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8432 +#line 8497 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8434 +#line 8499 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8433 +#line 8498 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8436 +#line 8501 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8438 +#line 8503 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8437 +#line 8502 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8440 +#line 8505 [TRAINER_JENNY_5] = { -#line 8441 +#line 8506 .trainerName = _("JENNY"), -#line 8442 +#line 8507 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8443 +#line 8508 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8444 +#line 8509 F_TRAINER_FEMALE | -#line 8445 +#line 8510 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8446 +#line 8511 .doubleBattle = FALSE, -#line 8447 +#line 8512 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8449 +#line 8514 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8451 +#line 8516 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8450 +#line 8515 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8453 +#line 8518 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8455 +#line 8520 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8454 +#line 8519 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8457 +#line 8522 .species = SPECIES_STARMIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8459 +#line 8524 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8458 +#line 8523 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8461 +#line 8526 [TRAINER_HEIDI] = { -#line 8462 +#line 8527 .trainerName = _("HEIDI"), -#line 8463 +#line 8528 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8464 +#line 8529 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8465 +#line 8530 F_TRAINER_FEMALE | -#line 8466 +#line 8531 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8467 +#line 8532 .doubleBattle = FALSE, -#line 8468 +#line 8533 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8470 +#line 8535 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8472 +#line 8537 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8471 +#line 8536 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8473 +#line 8538 MOVE_DIG, MOVE_SAND_ATTACK, MOVE_POISON_STING, @@ -21310,17 +21310,17 @@ F_TRAINER_FEMALE | }, }, { -#line 8478 +#line 8543 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8480 +#line 8545 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8479 +#line 8544 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8481 +#line 8546 MOVE_RAPID_SPIN, MOVE_MUD_SLAP, MOVE_PSYBEAM, @@ -21329,39 +21329,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 8486 +#line 8551 [TRAINER_BECKY] = { -#line 8487 +#line 8552 .trainerName = _("BECKY"), -#line 8488 +#line 8553 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8489 +#line 8554 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8490 +#line 8555 F_TRAINER_FEMALE | -#line 8491 +#line 8556 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8492 +#line 8557 .doubleBattle = FALSE, -#line 8493 +#line 8558 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8495 +#line 8560 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8497 +#line 8562 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8496 +#line 8561 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8498 +#line 8563 MOVE_SAND_ATTACK, MOVE_POISON_STING, MOVE_SLASH, @@ -21369,17 +21369,17 @@ F_TRAINER_FEMALE | }, }, { -#line 8503 +#line 8568 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8505 +#line 8570 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8504 +#line 8569 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8506 +#line 8571 MOVE_ROLLOUT, MOVE_BUBBLE_BEAM, MOVE_TAIL_WHIP, @@ -21388,228 +21388,228 @@ F_TRAINER_FEMALE | }, }, }, -#line 8511 +#line 8576 [TRAINER_CAROL] = { -#line 8512 +#line 8577 .trainerName = _("CAROL"), -#line 8513 +#line 8578 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8514 +#line 8579 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8515 +#line 8580 F_TRAINER_FEMALE | -#line 8516 +#line 8581 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8517 +#line 8582 .doubleBattle = FALSE, -#line 8518 +#line 8583 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8520 +#line 8585 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8522 +#line 8587 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8521 +#line 8586 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8524 +#line 8589 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8526 +#line 8591 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8525 +#line 8590 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8528 +#line 8593 [TRAINER_NANCY] = { -#line 8529 +#line 8594 .trainerName = _("NANCY"), -#line 8530 +#line 8595 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8531 +#line 8596 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8532 +#line 8597 F_TRAINER_FEMALE | -#line 8533 +#line 8598 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8534 +#line 8599 .doubleBattle = FALSE, -#line 8535 +#line 8600 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8537 +#line 8602 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8539 +#line 8604 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8538 +#line 8603 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8541 +#line 8606 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8543 +#line 8608 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8542 +#line 8607 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8545 +#line 8610 [TRAINER_MARTHA] = { -#line 8546 +#line 8611 .trainerName = _("MARTHA"), -#line 8547 +#line 8612 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8548 +#line 8613 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8549 +#line 8614 F_TRAINER_FEMALE | -#line 8550 +#line 8615 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8551 +#line 8616 .doubleBattle = FALSE, -#line 8552 +#line 8617 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8554 +#line 8619 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8556 +#line 8621 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8555 +#line 8620 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8558 +#line 8623 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8560 +#line 8625 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8559 +#line 8624 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8562 +#line 8627 [TRAINER_DIANA_1] = { -#line 8563 +#line 8628 .trainerName = _("DIANA"), -#line 8564 +#line 8629 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8565 +#line 8630 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8566 +#line 8631 F_TRAINER_FEMALE | -#line 8567 +#line 8632 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8568 +#line 8633 .doubleBattle = FALSE, -#line 8569 +#line 8634 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8571 +#line 8636 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8573 +#line 8638 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8572 +#line 8637 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8575 +#line 8640 .species = SPECIES_ODDISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8577 +#line 8642 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8576 +#line 8641 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8579 +#line 8644 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8581 +#line 8646 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8580 +#line 8645 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8583 +#line 8648 [TRAINER_CEDRIC] = { -#line 8584 +#line 8649 .trainerName = _("CEDRIC"), -#line 8585 +#line 8650 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 8586 +#line 8651 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 8588 +#line 8653 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 8589 +#line 8654 .doubleBattle = FALSE, -#line 8590 +#line 8655 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8592 +#line 8657 .species = SPECIES_WOBBUFFET, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8594 +#line 8659 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8593 +#line 8658 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8595 +#line 8660 MOVE_DESTINY_BOND, MOVE_SAFEGUARD, MOVE_COUNTER, @@ -21618,617 +21618,617 @@ F_TRAINER_FEMALE | }, }, }, -#line 8600 +#line 8665 [TRAINER_IRENE] = { -#line 8601 +#line 8666 .trainerName = _("IRENE"), -#line 8602 +#line 8667 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8603 +#line 8668 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8604 +#line 8669 F_TRAINER_FEMALE | -#line 8605 +#line 8670 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8606 +#line 8671 .doubleBattle = FALSE, -#line 8607 +#line 8672 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8609 +#line 8674 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8611 +#line 8676 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8610 +#line 8675 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8613 +#line 8678 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8615 +#line 8680 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8614 +#line 8679 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8617 +#line 8682 [TRAINER_DIANA_2] = { -#line 8618 +#line 8683 .trainerName = _("DIANA"), -#line 8619 +#line 8684 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8620 +#line 8685 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8621 +#line 8686 F_TRAINER_FEMALE | -#line 8622 +#line 8687 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8623 +#line 8688 .doubleBattle = FALSE, -#line 8624 +#line 8689 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8626 +#line 8691 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8628 +#line 8693 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 8627 +#line 8692 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8630 +#line 8695 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8632 +#line 8697 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 8631 +#line 8696 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8634 +#line 8699 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8636 +#line 8701 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 8635 +#line 8700 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8638 +#line 8703 [TRAINER_DIANA_3] = { -#line 8639 +#line 8704 .trainerName = _("DIANA"), -#line 8640 +#line 8705 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8641 +#line 8706 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8642 +#line 8707 F_TRAINER_FEMALE | -#line 8643 +#line 8708 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8644 +#line 8709 .doubleBattle = FALSE, -#line 8645 +#line 8710 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8647 +#line 8712 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8649 +#line 8714 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 8648 +#line 8713 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8651 +#line 8716 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8653 +#line 8718 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 8652 +#line 8717 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8655 +#line 8720 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8657 +#line 8722 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 8656 +#line 8721 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8659 +#line 8724 [TRAINER_DIANA_4] = { -#line 8660 +#line 8725 .trainerName = _("DIANA"), -#line 8661 +#line 8726 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8662 +#line 8727 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8663 +#line 8728 F_TRAINER_FEMALE | -#line 8664 +#line 8729 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8665 +#line 8730 .doubleBattle = FALSE, -#line 8666 +#line 8731 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8668 +#line 8733 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8670 +#line 8735 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 8669 +#line 8734 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8672 +#line 8737 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8674 +#line 8739 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 8673 +#line 8738 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8676 +#line 8741 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8678 +#line 8743 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 8677 +#line 8742 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8680 +#line 8745 [TRAINER_DIANA_5] = { -#line 8681 +#line 8746 .trainerName = _("DIANA"), -#line 8682 +#line 8747 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8683 +#line 8748 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8684 +#line 8749 F_TRAINER_FEMALE | -#line 8685 +#line 8750 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8686 +#line 8751 .doubleBattle = FALSE, -#line 8687 +#line 8752 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8689 +#line 8754 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8691 +#line 8756 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 8690 +#line 8755 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8693 +#line 8758 .species = SPECIES_VILEPLUME, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8695 +#line 8760 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 8694 +#line 8759 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8697 +#line 8762 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8699 +#line 8764 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 8698 +#line 8763 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8701 +#line 8766 [TRAINER_AMY_AND_LIV_1] = { -#line 8702 +#line 8767 .trainerName = _("AMY & LIV"), -#line 8703 +#line 8768 .trainerClass = TRAINER_CLASS_TWINS, -#line 8704 +#line 8769 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 8706 +#line 8771 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 8707 +#line 8772 .doubleBattle = TRUE, -#line 8708 +#line 8773 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8710 +#line 8775 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8712 +#line 8777 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8711 +#line 8776 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8714 +#line 8779 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8716 +#line 8781 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8715 +#line 8780 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8718 +#line 8783 [TRAINER_AMY_AND_LIV_2] = { -#line 8719 +#line 8784 .trainerName = _("AMY & LIV"), -#line 8720 +#line 8785 .trainerClass = TRAINER_CLASS_TWINS, -#line 8721 +#line 8786 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 8723 +#line 8788 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 8724 +#line 8789 .doubleBattle = TRUE, -#line 8725 +#line 8790 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8727 +#line 8792 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8729 +#line 8794 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 8728 +#line 8793 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8731 +#line 8796 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8733 +#line 8798 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 8732 +#line 8797 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8735 +#line 8800 [TRAINER_GINA_AND_MIA_1] = { -#line 8736 +#line 8801 .trainerName = _("GINA & MIA"), -#line 8737 +#line 8802 .trainerClass = TRAINER_CLASS_TWINS, -#line 8738 +#line 8803 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 8740 +#line 8805 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 8741 +#line 8806 .doubleBattle = TRUE, -#line 8742 +#line 8807 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8744 +#line 8809 .species = SPECIES_SEEDOT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8746 +#line 8811 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8745 +#line 8810 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8748 +#line 8813 .species = SPECIES_LOTAD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8750 +#line 8815 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8749 +#line 8814 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8752 +#line 8817 [TRAINER_MIU_AND_YUKI] = { -#line 8753 +#line 8818 .trainerName = _("MIU & YUKI"), -#line 8754 +#line 8819 .trainerClass = TRAINER_CLASS_TWINS, -#line 8755 +#line 8820 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 8757 +#line 8822 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 8758 +#line 8823 .doubleBattle = TRUE, -#line 8759 +#line 8824 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8761 +#line 8826 .species = SPECIES_BEAUTIFLY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8763 +#line 8828 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8762 +#line 8827 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8765 +#line 8830 .species = SPECIES_DUSTOX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8767 +#line 8832 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8766 +#line 8831 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8769 +#line 8834 [TRAINER_AMY_AND_LIV_3] = { -#line 8770 +#line 8835 .trainerName = _("AMY & LIV"), -#line 8771 +#line 8836 .trainerClass = TRAINER_CLASS_TWINS, -#line 8772 +#line 8837 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 8774 +#line 8839 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 8775 +#line 8840 .doubleBattle = TRUE, -#line 8776 +#line 8841 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8778 +#line 8843 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8780 +#line 8845 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8779 +#line 8844 .lvl = 9, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8782 +#line 8847 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8784 +#line 8849 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8783 +#line 8848 .lvl = 9, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8786 +#line 8851 [TRAINER_GINA_AND_MIA_2] = { -#line 8787 +#line 8852 .trainerName = _("GINA & MIA"), -#line 8788 +#line 8853 .trainerClass = TRAINER_CLASS_TWINS, -#line 8789 +#line 8854 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 8791 +#line 8856 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 8792 +#line 8857 .doubleBattle = TRUE, -#line 8793 +#line 8858 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8795 +#line 8860 .species = SPECIES_DUSKULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8797 +#line 8862 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8796 +#line 8861 .lvl = 10, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8798 +#line 8863 MOVE_NIGHT_SHADE, MOVE_DISABLE, }, }, { -#line 8801 +#line 8866 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8803 +#line 8868 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8802 +#line 8867 .lvl = 10, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8804 +#line 8869 MOVE_ABSORB, MOVE_LEECH_SEED, }, }, }, }, -#line 8807 +#line 8872 [TRAINER_AMY_AND_LIV_4] = { -#line 8808 +#line 8873 .trainerName = _("AMY & LIV"), -#line 8809 +#line 8874 .trainerClass = TRAINER_CLASS_TWINS, -#line 8810 +#line 8875 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 8812 +#line 8877 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 8813 +#line 8878 .doubleBattle = TRUE, -#line 8814 +#line 8879 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8816 +#line 8881 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8818 +#line 8883 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 8817 +#line 8882 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8820 +#line 8885 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8822 +#line 8887 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 8821 +#line 8886 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8824 +#line 8889 [TRAINER_AMY_AND_LIV_5] = { -#line 8825 +#line 8890 .trainerName = _("AMY & LIV"), -#line 8826 +#line 8891 .trainerClass = TRAINER_CLASS_TWINS, -#line 8827 +#line 8892 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 8829 +#line 8894 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 8830 +#line 8895 .doubleBattle = TRUE, -#line 8831 +#line 8896 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8833 +#line 8898 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8835 +#line 8900 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 8834 +#line 8899 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8836 +#line 8901 MOVE_SPARK, MOVE_CHARGE, MOVE_FAKE_TEARS, @@ -22236,17 +22236,17 @@ F_TRAINER_FEMALE | }, }, { -#line 8841 +#line 8906 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8843 +#line 8908 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 8842 +#line 8907 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8844 +#line 8909 MOVE_SPARK, MOVE_CHARGE, MOVE_CHARM, @@ -22255,37 +22255,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 8849 +#line 8914 [TRAINER_AMY_AND_LIV_6] = { -#line 8850 +#line 8915 .trainerName = _("AMY & LIV"), -#line 8851 +#line 8916 .trainerClass = TRAINER_CLASS_TWINS, -#line 8852 +#line 8917 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 8854 +#line 8919 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 8855 +#line 8920 .doubleBattle = TRUE, -#line 8856 +#line 8921 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8858 +#line 8923 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8860 +#line 8925 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 8859 +#line 8924 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8861 +#line 8926 MOVE_THUNDER, MOVE_CHARGE, MOVE_FAKE_TEARS, @@ -22293,17 +22293,17 @@ F_TRAINER_FEMALE | }, }, { -#line 8866 +#line 8931 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8868 +#line 8933 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 8867 +#line 8932 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8869 +#line 8934 MOVE_THUNDER, MOVE_CHARGE, MOVE_CHARM, @@ -22312,601 +22312,601 @@ F_TRAINER_FEMALE | }, }, }, -#line 8874 +#line 8939 [TRAINER_HUEY] = { -#line 8875 +#line 8940 .trainerName = _("HUEY"), -#line 8876 +#line 8941 .trainerClass = TRAINER_CLASS_SAILOR, -#line 8877 +#line 8942 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 8879 +#line 8944 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 8880 +#line 8945 .doubleBattle = FALSE, -#line 8881 +#line 8946 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8883 +#line 8948 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8885 +#line 8950 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 8884 +#line 8949 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8887 +#line 8952 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8889 +#line 8954 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 8888 +#line 8953 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8891 +#line 8956 [TRAINER_EDMOND] = { -#line 8892 +#line 8957 .trainerName = _("EDMOND"), -#line 8893 +#line 8958 .trainerClass = TRAINER_CLASS_SAILOR, -#line 8894 +#line 8959 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 8896 +#line 8961 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 8897 +#line 8962 .doubleBattle = FALSE, -#line 8898 +#line 8963 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8900 +#line 8965 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8902 +#line 8967 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8901 +#line 8966 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8904 +#line 8969 [TRAINER_ERNEST_1] = { -#line 8905 +#line 8970 .trainerName = _("ERNEST"), -#line 8906 +#line 8971 .trainerClass = TRAINER_CLASS_SAILOR, -#line 8907 +#line 8972 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 8909 +#line 8974 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 8910 +#line 8975 .doubleBattle = FALSE, -#line 8911 +#line 8976 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8913 +#line 8978 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8915 +#line 8980 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8914 +#line 8979 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8917 +#line 8982 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8919 +#line 8984 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8918 +#line 8983 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8921 +#line 8986 [TRAINER_DWAYNE] = { -#line 8922 +#line 8987 .trainerName = _("DWAYNE"), -#line 8923 +#line 8988 .trainerClass = TRAINER_CLASS_SAILOR, -#line 8924 +#line 8989 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 8926 +#line 8991 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 8927 +#line 8992 .doubleBattle = FALSE, -#line 8928 +#line 8993 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8930 +#line 8995 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8932 +#line 8997 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8931 +#line 8996 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8934 +#line 8999 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8936 +#line 9001 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8935 +#line 9000 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8938 +#line 9003 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8940 +#line 9005 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8939 +#line 9004 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8942 +#line 9007 [TRAINER_PHILLIP] = { -#line 8943 +#line 9008 .trainerName = _("PHILLIP"), -#line 8944 +#line 9009 .trainerClass = TRAINER_CLASS_SAILOR, -#line 8945 +#line 9010 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 8947 +#line 9012 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 8948 +#line 9013 .doubleBattle = FALSE, -#line 8949 +#line 9014 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8951 +#line 9016 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8953 +#line 9018 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8952 +#line 9017 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8955 +#line 9020 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8957 +#line 9022 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8956 +#line 9021 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8959 +#line 9024 [TRAINER_LEONARD] = { -#line 8960 +#line 9025 .trainerName = _("LEONARD"), -#line 8961 +#line 9026 .trainerClass = TRAINER_CLASS_SAILOR, -#line 8962 +#line 9027 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 8964 +#line 9029 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 8965 +#line 9030 .doubleBattle = FALSE, -#line 8966 +#line 9031 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8968 +#line 9033 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8970 +#line 9035 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8969 +#line 9034 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8972 +#line 9037 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8974 +#line 9039 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8973 +#line 9038 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8976 +#line 9041 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8978 +#line 9043 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8977 +#line 9042 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8980 +#line 9045 [TRAINER_DUNCAN] = { -#line 8981 +#line 9046 .trainerName = _("DUNCAN"), -#line 8982 +#line 9047 .trainerClass = TRAINER_CLASS_SAILOR, -#line 8983 +#line 9048 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 8985 +#line 9050 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 8986 +#line 9051 .doubleBattle = FALSE, -#line 8987 +#line 9052 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8989 +#line 9054 .species = SPECIES_SPHEAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8991 +#line 9056 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8990 +#line 9055 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8993 +#line 9058 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8995 +#line 9060 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8994 +#line 9059 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8997 +#line 9062 [TRAINER_ERNEST_2] = { -#line 8998 +#line 9063 .trainerName = _("ERNEST"), -#line 8999 +#line 9064 .trainerClass = TRAINER_CLASS_SAILOR, -#line 9000 +#line 9065 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 9002 +#line 9067 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9003 +#line 9068 .doubleBattle = FALSE, -#line 9004 +#line 9069 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9006 +#line 9071 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9008 +#line 9073 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 9007 +#line 9072 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9010 +#line 9075 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9012 +#line 9077 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 9011 +#line 9076 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9014 +#line 9079 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9016 +#line 9081 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 9015 +#line 9080 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9018 +#line 9083 [TRAINER_ERNEST_3] = { -#line 9019 +#line 9084 .trainerName = _("ERNEST"), -#line 9020 +#line 9085 .trainerClass = TRAINER_CLASS_SAILOR, -#line 9021 +#line 9086 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 9023 +#line 9088 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9024 +#line 9089 .doubleBattle = FALSE, -#line 9025 +#line 9090 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9027 +#line 9092 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9029 +#line 9094 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 9028 +#line 9093 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9031 +#line 9096 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9033 +#line 9098 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 9032 +#line 9097 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9035 +#line 9100 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9037 +#line 9102 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 9036 +#line 9101 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9039 +#line 9104 [TRAINER_ERNEST_4] = { -#line 9040 +#line 9105 .trainerName = _("ERNEST"), -#line 9041 +#line 9106 .trainerClass = TRAINER_CLASS_SAILOR, -#line 9042 +#line 9107 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 9044 +#line 9109 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9045 +#line 9110 .doubleBattle = FALSE, -#line 9046 +#line 9111 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9048 +#line 9113 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9050 +#line 9115 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 9049 +#line 9114 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9052 +#line 9117 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9054 +#line 9119 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 9053 +#line 9118 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9056 +#line 9121 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9058 +#line 9123 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 9057 +#line 9122 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9060 +#line 9125 [TRAINER_ERNEST_5] = { -#line 9061 +#line 9126 .trainerName = _("ERNEST"), -#line 9062 +#line 9127 .trainerClass = TRAINER_CLASS_SAILOR, -#line 9063 +#line 9128 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 9065 +#line 9130 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9066 +#line 9131 .doubleBattle = FALSE, -#line 9067 +#line 9132 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9069 +#line 9134 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9071 +#line 9136 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 9070 +#line 9135 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9073 +#line 9138 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9075 +#line 9140 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 9074 +#line 9139 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9077 +#line 9142 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9079 +#line 9144 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 9078 +#line 9143 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9081 +#line 9146 [TRAINER_ELI] = { -#line 9082 +#line 9147 .trainerName = _("ELI"), -#line 9083 +#line 9148 .trainerClass = TRAINER_CLASS_HIKER, -#line 9084 +#line 9149 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 9086 +#line 9151 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 9087 +#line 9152 .doubleBattle = FALSE, -#line 9088 +#line 9153 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9090 +#line 9155 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9092 +#line 9157 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9091 +#line 9156 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9094 +#line 9159 [TRAINER_ANNIKA] = { -#line 9095 +#line 9160 .trainerName = _("ANNIKA"), -#line 9096 +#line 9161 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 9097 +#line 9162 .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = -#line 9098 +#line 9163 F_TRAINER_FEMALE | -#line 9099 +#line 9164 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 9100 +#line 9165 .doubleBattle = FALSE, -#line 9101 +#line 9166 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9103 +#line 9168 .species = SPECIES_FEEBAS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9103 +#line 9168 .heldItem = ITEM_ORAN_BERRY, -#line 9105 +#line 9170 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9104 +#line 9169 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9106 +#line 9171 MOVE_FLAIL, MOVE_WATER_PULSE, MOVE_RETURN, @@ -22914,19 +22914,19 @@ F_TRAINER_FEMALE | }, }, { -#line 9111 +#line 9176 .species = SPECIES_FEEBAS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9111 +#line 9176 .heldItem = ITEM_ORAN_BERRY, -#line 9113 +#line 9178 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9112 +#line 9177 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9114 +#line 9179 MOVE_FLAIL, MOVE_WATER_PULSE, MOVE_RETURN, @@ -22935,73 +22935,73 @@ F_TRAINER_FEMALE | }, }, }, -#line 9119 +#line 9184 [TRAINER_JAZMYN] = { -#line 9120 +#line 9185 .trainerName = _("JAZMYN"), -#line 9121 +#line 9186 .trainerClass = TRAINER_CLASS_COOLTRAINER_2, -#line 9122 +#line 9187 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 9123 +#line 9188 F_TRAINER_FEMALE | -#line 9124 +#line 9189 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 9125 +#line 9190 .items = { ITEM_HYPER_POTION }, -#line 9126 +#line 9191 .doubleBattle = FALSE, -#line 9127 +#line 9192 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9129 +#line 9194 .species = SPECIES_ABSOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9131 +#line 9196 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9130 +#line 9195 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9133 +#line 9198 [TRAINER_JONAS] = { -#line 9134 +#line 9199 .trainerName = _("JONAS"), -#line 9135 +#line 9200 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 9136 +#line 9201 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 9138 +#line 9203 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 9139 +#line 9204 .doubleBattle = FALSE, -#line 9140 +#line 9205 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9142 +#line 9207 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9144 +#line 9209 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9143 +#line 9208 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9145 +#line 9210 MOVE_TOXIC, MOVE_THUNDER, MOVE_SELF_DESTRUCT, @@ -23010,39 +23010,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 9150 +#line 9215 [TRAINER_KAYLEY] = { -#line 9151 +#line 9216 .trainerName = _("KAYLEY"), -#line 9152 +#line 9217 .trainerClass = TRAINER_CLASS_PARASOL_LADY, -#line 9153 +#line 9218 .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = -#line 9154 +#line 9219 F_TRAINER_FEMALE | -#line 9155 +#line 9220 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9156 +#line 9221 .doubleBattle = FALSE, -#line 9157 +#line 9222 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9159 +#line 9224 .species = SPECIES_CASTFORM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9161 +#line 9226 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9160 +#line 9225 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9162 +#line 9227 MOVE_SUNNY_DAY, MOVE_WEATHER_BALL, MOVE_FLAMETHROWER, @@ -23051,127 +23051,127 @@ F_TRAINER_FEMALE | }, }, }, -#line 9167 +#line 9232 [TRAINER_AURON] = { -#line 9168 +#line 9233 .trainerName = _("AURON"), -#line 9169 +#line 9234 .trainerClass = TRAINER_CLASS_EXPERT, -#line 9170 +#line 9235 .trainerPic = TRAINER_PIC_EXPERT_M, .encounterMusic_gender = -#line 9172 +#line 9237 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 9173 +#line 9238 .doubleBattle = FALSE, -#line 9174 +#line 9239 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9176 +#line 9241 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9178 +#line 9243 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9177 +#line 9242 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9180 +#line 9245 .species = SPECIES_MACHAMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9182 +#line 9247 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9181 +#line 9246 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9184 +#line 9249 [TRAINER_KELVIN] = { -#line 9185 +#line 9250 .trainerName = _("KELVIN"), -#line 9186 +#line 9251 .trainerClass = TRAINER_CLASS_SAILOR, -#line 9187 +#line 9252 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 9189 +#line 9254 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9190 +#line 9255 .doubleBattle = FALSE, -#line 9191 +#line 9256 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9193 +#line 9258 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9195 +#line 9260 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9194 +#line 9259 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9197 +#line 9262 .species = SPECIES_SPHEAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9199 +#line 9264 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9198 +#line 9263 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9201 +#line 9266 [TRAINER_MARLEY] = { -#line 9202 +#line 9267 .trainerName = _("MARLEY"), -#line 9203 +#line 9268 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 9204 +#line 9269 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 9205 +#line 9270 F_TRAINER_FEMALE | -#line 9206 +#line 9271 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 9207 +#line 9272 .items = { ITEM_HYPER_POTION }, -#line 9208 +#line 9273 .doubleBattle = FALSE, -#line 9209 +#line 9274 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9211 +#line 9276 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9213 +#line 9278 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 9212 +#line 9277 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9214 +#line 9279 MOVE_BITE, MOVE_ROAR, MOVE_THUNDER_WAVE, @@ -23180,471 +23180,471 @@ F_TRAINER_FEMALE | }, }, }, -#line 9219 +#line 9284 [TRAINER_REYNA] = { -#line 9220 +#line 9285 .trainerName = _("REYNA"), -#line 9221 +#line 9286 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 9222 +#line 9287 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 9223 +#line 9288 F_TRAINER_FEMALE | -#line 9224 +#line 9289 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 9225 +#line 9290 .doubleBattle = FALSE, -#line 9226 +#line 9291 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9228 +#line 9293 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9230 +#line 9295 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9229 +#line 9294 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9232 +#line 9297 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9234 +#line 9299 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 9233 +#line 9298 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9236 +#line 9301 [TRAINER_HUDSON] = { -#line 9237 +#line 9302 .trainerName = _("HUDSON"), -#line 9238 +#line 9303 .trainerClass = TRAINER_CLASS_SAILOR, -#line 9239 +#line 9304 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 9241 +#line 9306 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9242 +#line 9307 .doubleBattle = FALSE, -#line 9243 +#line 9308 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9245 +#line 9310 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9247 +#line 9312 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9246 +#line 9311 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9249 +#line 9314 [TRAINER_CONOR] = { -#line 9250 +#line 9315 .trainerName = _("CONOR"), -#line 9251 +#line 9316 .trainerClass = TRAINER_CLASS_EXPERT, -#line 9252 +#line 9317 .trainerPic = TRAINER_PIC_EXPERT_M, .encounterMusic_gender = -#line 9254 +#line 9319 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 9255 +#line 9320 .doubleBattle = FALSE, -#line 9256 +#line 9321 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9258 +#line 9323 .species = SPECIES_CHINCHOU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9260 +#line 9325 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9259 +#line 9324 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9262 +#line 9327 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9264 +#line 9329 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 9263 +#line 9328 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9266 +#line 9331 [TRAINER_EDWIN_1] = { -#line 9267 +#line 9332 .trainerName = _("EDWIN"), -#line 9268 +#line 9333 .trainerClass = TRAINER_CLASS_COLLECTOR, -#line 9269 +#line 9334 .trainerPic = TRAINER_PIC_COLLECTOR, .encounterMusic_gender = -#line 9271 +#line 9336 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 9272 +#line 9337 .doubleBattle = FALSE, -#line 9273 +#line 9338 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9275 +#line 9340 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9277 +#line 9342 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9276 +#line 9341 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9279 +#line 9344 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9281 +#line 9346 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9280 +#line 9345 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9283 +#line 9348 [TRAINER_HECTOR] = { -#line 9284 +#line 9349 .trainerName = _("HECTOR"), -#line 9285 +#line 9350 .trainerClass = TRAINER_CLASS_COLLECTOR, -#line 9286 +#line 9351 .trainerPic = TRAINER_PIC_COLLECTOR, .encounterMusic_gender = -#line 9288 +#line 9353 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 9289 +#line 9354 .doubleBattle = FALSE, -#line 9290 +#line 9355 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9292 +#line 9357 .species = SPECIES_ZANGOOSE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9294 +#line 9359 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9293 +#line 9358 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9296 +#line 9361 .species = SPECIES_SEVIPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9298 +#line 9363 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9297 +#line 9362 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9300 +#line 9365 [TRAINER_TABITHA_MOSSDEEP] = { -#line 9301 +#line 9366 .trainerName = _("TABITHA"), -#line 9302 +#line 9367 .trainerClass = TRAINER_CLASS_MAGMA_ADMIN, -#line 9303 +#line 9368 .trainerPic = TRAINER_PIC_MAGMA_ADMIN, .encounterMusic_gender = -#line 9305 +#line 9370 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 9306 +#line 9371 .doubleBattle = FALSE, -#line 9307 +#line 9372 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9309 +#line 9374 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9311 +#line 9376 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9310 +#line 9375 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9313 +#line 9378 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9315 +#line 9380 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9314 +#line 9379 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9317 +#line 9382 .species = SPECIES_GOLBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9319 +#line 9384 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9318 +#line 9383 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9321 +#line 9386 [TRAINER_EDWIN_2] = { -#line 9322 +#line 9387 .trainerName = _("EDWIN"), -#line 9323 +#line 9388 .trainerClass = TRAINER_CLASS_COLLECTOR, -#line 9324 +#line 9389 .trainerPic = TRAINER_PIC_COLLECTOR, .encounterMusic_gender = -#line 9326 +#line 9391 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 9327 +#line 9392 .doubleBattle = FALSE, -#line 9328 +#line 9393 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9330 +#line 9395 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9332 +#line 9397 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9331 +#line 9396 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9334 +#line 9399 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9336 +#line 9401 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9335 +#line 9400 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9338 +#line 9403 [TRAINER_EDWIN_3] = { -#line 9339 +#line 9404 .trainerName = _("EDWIN"), -#line 9340 +#line 9405 .trainerClass = TRAINER_CLASS_COLLECTOR, -#line 9341 +#line 9406 .trainerPic = TRAINER_PIC_COLLECTOR, .encounterMusic_gender = -#line 9343 +#line 9408 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 9344 +#line 9409 .doubleBattle = FALSE, -#line 9345 +#line 9410 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9347 +#line 9412 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9349 +#line 9414 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9348 +#line 9413 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9351 +#line 9416 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9353 +#line 9418 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9352 +#line 9417 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9355 +#line 9420 [TRAINER_EDWIN_4] = { -#line 9356 +#line 9421 .trainerName = _("EDWIN"), -#line 9357 +#line 9422 .trainerClass = TRAINER_CLASS_COLLECTOR, -#line 9358 +#line 9423 .trainerPic = TRAINER_PIC_COLLECTOR, .encounterMusic_gender = -#line 9360 +#line 9425 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 9361 +#line 9426 .doubleBattle = FALSE, -#line 9362 +#line 9427 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9364 +#line 9429 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9366 +#line 9431 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9365 +#line 9430 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9368 +#line 9433 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9370 +#line 9435 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9369 +#line 9434 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9372 +#line 9437 [TRAINER_EDWIN_5] = { -#line 9373 +#line 9438 .trainerName = _("EDWIN"), -#line 9374 +#line 9439 .trainerClass = TRAINER_CLASS_COLLECTOR, -#line 9375 +#line 9440 .trainerPic = TRAINER_PIC_COLLECTOR, .encounterMusic_gender = -#line 9377 +#line 9442 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 9378 +#line 9443 .doubleBattle = FALSE, -#line 9379 +#line 9444 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9381 +#line 9446 .species = SPECIES_LUDICOLO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9383 +#line 9448 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9382 +#line 9447 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9385 +#line 9450 .species = SPECIES_SHIFTRY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9387 +#line 9452 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9386 +#line 9451 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9389 +#line 9454 [TRAINER_WALLY_VR_1] = { -#line 9390 +#line 9455 .trainerName = _("WALLY"), -#line 9391 +#line 9456 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9392 +#line 9457 .trainerPic = TRAINER_PIC_WALLY, .encounterMusic_gender = -#line 9394 +#line 9459 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9395 +#line 9460 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 9396 +#line 9461 .doubleBattle = FALSE, -#line 9397 +#line 9462 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 9399 +#line 9464 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9401 +#line 9466 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9400 +#line 9465 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9402 +#line 9467 MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, @@ -23652,17 +23652,17 @@ F_TRAINER_FEMALE | }, }, { -#line 9407 +#line 9472 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9409 +#line 9474 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9408 +#line 9473 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9410 +#line 9475 MOVE_SING, MOVE_ASSIST, MOVE_CHARM, @@ -23670,17 +23670,17 @@ F_TRAINER_FEMALE | }, }, { -#line 9415 +#line 9480 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9417 +#line 9482 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9416 +#line 9481 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9418 +#line 9483 MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, @@ -23688,17 +23688,17 @@ F_TRAINER_FEMALE | }, }, { -#line 9423 +#line 9488 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9425 +#line 9490 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9424 +#line 9489 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9426 +#line 9491 MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, @@ -23706,17 +23706,17 @@ F_TRAINER_FEMALE | }, }, { -#line 9431 +#line 9496 .species = SPECIES_GARDEVOIR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9433 +#line 9498 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 9432 +#line 9497 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9434 +#line 9499 MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, @@ -23725,1014 +23725,1014 @@ F_TRAINER_FEMALE | }, }, }, -#line 9439 +#line 9504 [TRAINER_BRENDAN_ROUTE_103_MUDKIP] = { -#line 9440 +#line 9505 .trainerName = _("BRENDAN"), -#line 9441 +#line 9506 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9442 +#line 9507 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 9444 +#line 9509 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9445 +#line 9510 .doubleBattle = FALSE, -#line 9446 +#line 9511 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9448 +#line 9513 .species = SPECIES_TREECKO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9450 +#line 9515 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9449 +#line 9514 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9452 +#line 9517 [TRAINER_BRENDAN_ROUTE_110_MUDKIP] = { -#line 9453 +#line 9518 .trainerName = _("BRENDAN"), -#line 9454 +#line 9519 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9455 +#line 9520 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 9457 +#line 9522 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9458 +#line 9523 .doubleBattle = FALSE, -#line 9459 +#line 9524 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9461 +#line 9526 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9463 +#line 9528 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9462 +#line 9527 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9465 +#line 9530 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9467 +#line 9532 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9466 +#line 9531 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9469 +#line 9534 .species = SPECIES_GROVYLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9471 +#line 9536 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9470 +#line 9535 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9473 +#line 9538 [TRAINER_BRENDAN_ROUTE_119_MUDKIP] = { -#line 9474 +#line 9539 .trainerName = _("BRENDAN"), -#line 9475 +#line 9540 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9476 +#line 9541 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 9478 +#line 9543 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9479 +#line 9544 .doubleBattle = FALSE, -#line 9480 +#line 9545 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9482 +#line 9547 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9484 +#line 9549 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9483 +#line 9548 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9486 +#line 9551 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9488 +#line 9553 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9487 +#line 9552 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9490 +#line 9555 .species = SPECIES_GROVYLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9492 +#line 9557 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9491 +#line 9556 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9494 +#line 9559 [TRAINER_BRENDAN_ROUTE_103_TREECKO] = { -#line 9495 +#line 9560 .trainerName = _("BRENDAN"), -#line 9496 +#line 9561 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9497 +#line 9562 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 9499 +#line 9564 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9500 +#line 9565 .doubleBattle = FALSE, -#line 9501 +#line 9566 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9503 +#line 9568 .species = SPECIES_TORCHIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9505 +#line 9570 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9504 +#line 9569 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9507 +#line 9572 [TRAINER_BRENDAN_ROUTE_110_TREECKO] = { -#line 9508 +#line 9573 .trainerName = _("BRENDAN"), -#line 9509 +#line 9574 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9510 +#line 9575 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 9512 +#line 9577 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9513 +#line 9578 .doubleBattle = FALSE, -#line 9514 +#line 9579 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9516 +#line 9581 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9518 +#line 9583 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9517 +#line 9582 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9520 +#line 9585 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9522 +#line 9587 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9521 +#line 9586 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9524 +#line 9589 .species = SPECIES_COMBUSKEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9526 +#line 9591 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9525 +#line 9590 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9528 +#line 9593 [TRAINER_BRENDAN_ROUTE_119_TREECKO] = { -#line 9529 +#line 9594 .trainerName = _("BRENDAN"), -#line 9530 +#line 9595 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9531 +#line 9596 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 9533 +#line 9598 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9534 +#line 9599 .doubleBattle = FALSE, -#line 9535 +#line 9600 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9537 +#line 9602 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9539 +#line 9604 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9538 +#line 9603 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9541 +#line 9606 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9543 +#line 9608 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9542 +#line 9607 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9545 +#line 9610 .species = SPECIES_COMBUSKEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9547 +#line 9612 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9546 +#line 9611 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9549 +#line 9614 [TRAINER_BRENDAN_ROUTE_103_TORCHIC] = { -#line 9550 +#line 9615 .trainerName = _("BRENDAN"), -#line 9551 +#line 9616 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9552 +#line 9617 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 9554 +#line 9619 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9555 +#line 9620 .doubleBattle = FALSE, -#line 9556 +#line 9621 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9558 +#line 9623 .species = SPECIES_MUDKIP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9560 +#line 9625 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9559 +#line 9624 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9562 +#line 9627 [TRAINER_BRENDAN_ROUTE_110_TORCHIC] = { -#line 9563 +#line 9628 .trainerName = _("BRENDAN"), -#line 9564 +#line 9629 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9565 +#line 9630 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 9567 +#line 9632 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9568 +#line 9633 .doubleBattle = FALSE, -#line 9569 +#line 9634 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9571 +#line 9636 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9573 +#line 9638 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9572 +#line 9637 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9575 +#line 9640 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9577 +#line 9642 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9576 +#line 9641 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9579 +#line 9644 .species = SPECIES_MARSHTOMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9581 +#line 9646 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9580 +#line 9645 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9583 +#line 9648 [TRAINER_BRENDAN_ROUTE_119_TORCHIC] = { -#line 9584 +#line 9649 .trainerName = _("BRENDAN"), -#line 9585 +#line 9650 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9586 +#line 9651 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 9588 +#line 9653 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9589 +#line 9654 .doubleBattle = FALSE, -#line 9590 +#line 9655 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9592 +#line 9657 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9594 +#line 9659 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9593 +#line 9658 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9596 +#line 9661 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9598 +#line 9663 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9597 +#line 9662 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9600 +#line 9665 .species = SPECIES_MARSHTOMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9602 +#line 9667 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9601 +#line 9666 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9604 +#line 9669 [TRAINER_MAY_ROUTE_103_MUDKIP] = { -#line 9605 +#line 9670 .trainerName = _("MAY"), -#line 9606 +#line 9671 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9607 +#line 9672 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 9608 +#line 9673 F_TRAINER_FEMALE | -#line 9609 +#line 9674 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9610 +#line 9675 .doubleBattle = FALSE, -#line 9611 +#line 9676 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9613 +#line 9678 .species = SPECIES_TREECKO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9615 +#line 9680 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9614 +#line 9679 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9617 +#line 9682 [TRAINER_MAY_ROUTE_110_MUDKIP] = { -#line 9618 +#line 9683 .trainerName = _("MAY"), -#line 9619 +#line 9684 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9620 +#line 9685 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 9621 +#line 9686 F_TRAINER_FEMALE | -#line 9622 +#line 9687 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9623 +#line 9688 .doubleBattle = FALSE, -#line 9624 +#line 9689 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9626 +#line 9691 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9628 +#line 9693 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9627 +#line 9692 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9630 +#line 9695 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9632 +#line 9697 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9631 +#line 9696 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9634 +#line 9699 .species = SPECIES_GROVYLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9636 +#line 9701 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9635 +#line 9700 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9638 +#line 9703 [TRAINER_MAY_ROUTE_119_MUDKIP] = { -#line 9639 +#line 9704 .trainerName = _("MAY"), -#line 9640 +#line 9705 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9641 +#line 9706 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 9642 +#line 9707 F_TRAINER_FEMALE | -#line 9643 +#line 9708 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9644 +#line 9709 .doubleBattle = FALSE, -#line 9645 +#line 9710 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9647 +#line 9712 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9649 +#line 9714 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9648 +#line 9713 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9651 +#line 9716 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9653 +#line 9718 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9652 +#line 9717 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9655 +#line 9720 .species = SPECIES_GROVYLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9657 +#line 9722 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9656 +#line 9721 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9659 +#line 9724 [TRAINER_MAY_ROUTE_103_TREECKO] = { -#line 9660 +#line 9725 .trainerName = _("MAY"), -#line 9661 +#line 9726 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9662 +#line 9727 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 9663 +#line 9728 F_TRAINER_FEMALE | -#line 9664 +#line 9729 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9665 +#line 9730 .doubleBattle = FALSE, -#line 9666 +#line 9731 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9668 +#line 9733 .species = SPECIES_TORCHIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9670 +#line 9735 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9669 +#line 9734 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9672 +#line 9737 [TRAINER_MAY_ROUTE_110_TREECKO] = { -#line 9673 +#line 9738 .trainerName = _("MAY"), -#line 9674 +#line 9739 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9675 +#line 9740 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 9676 +#line 9741 F_TRAINER_FEMALE | -#line 9677 +#line 9742 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9678 +#line 9743 .doubleBattle = FALSE, -#line 9679 +#line 9744 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9681 +#line 9746 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9683 +#line 9748 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9682 +#line 9747 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9685 +#line 9750 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9687 +#line 9752 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9686 +#line 9751 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9689 +#line 9754 .species = SPECIES_COMBUSKEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9691 +#line 9756 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9690 +#line 9755 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9693 +#line 9758 [TRAINER_MAY_ROUTE_119_TREECKO] = { -#line 9694 +#line 9759 .trainerName = _("MAY"), -#line 9695 +#line 9760 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9696 +#line 9761 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 9697 +#line 9762 F_TRAINER_FEMALE | -#line 9698 +#line 9763 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9699 +#line 9764 .doubleBattle = FALSE, -#line 9700 +#line 9765 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9702 +#line 9767 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9704 +#line 9769 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9703 +#line 9768 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9706 +#line 9771 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9708 +#line 9773 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9707 +#line 9772 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9710 +#line 9775 .species = SPECIES_COMBUSKEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9712 +#line 9777 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9711 +#line 9776 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9714 +#line 9779 [TRAINER_MAY_ROUTE_103_TORCHIC] = { -#line 9715 +#line 9780 .trainerName = _("MAY"), -#line 9716 +#line 9781 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9717 +#line 9782 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 9718 +#line 9783 F_TRAINER_FEMALE | -#line 9719 +#line 9784 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9720 +#line 9785 .doubleBattle = FALSE, -#line 9721 +#line 9786 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9723 +#line 9788 .species = SPECIES_MUDKIP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9725 +#line 9790 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9724 +#line 9789 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9727 +#line 9792 [TRAINER_MAY_ROUTE_110_TORCHIC] = { -#line 9728 +#line 9793 .trainerName = _("MAY"), -#line 9729 +#line 9794 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9730 +#line 9795 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 9731 +#line 9796 F_TRAINER_FEMALE | -#line 9732 +#line 9797 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9733 +#line 9798 .doubleBattle = FALSE, -#line 9734 +#line 9799 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9736 +#line 9801 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9738 +#line 9803 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9737 +#line 9802 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9740 +#line 9805 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9742 +#line 9807 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9741 +#line 9806 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9744 +#line 9809 .species = SPECIES_MARSHTOMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9746 +#line 9811 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9745 +#line 9810 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9748 +#line 9813 [TRAINER_MAY_ROUTE_119_TORCHIC] = { -#line 9749 +#line 9814 .trainerName = _("MAY"), -#line 9750 +#line 9815 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9751 +#line 9816 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 9752 +#line 9817 F_TRAINER_FEMALE | -#line 9753 +#line 9818 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9754 +#line 9819 .doubleBattle = FALSE, -#line 9755 +#line 9820 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9757 +#line 9822 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9759 +#line 9824 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9758 +#line 9823 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9761 +#line 9826 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9763 +#line 9828 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9762 +#line 9827 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9765 +#line 9830 .species = SPECIES_MARSHTOMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9767 +#line 9832 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9766 +#line 9831 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9769 +#line 9834 [TRAINER_ISAAC_1] = { -#line 9770 +#line 9835 .trainerName = _("ISAAC"), -#line 9771 +#line 9836 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 9772 +#line 9837 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M, .encounterMusic_gender = -#line 9774 +#line 9839 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9775 +#line 9840 .doubleBattle = FALSE, -#line 9776 +#line 9841 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 9778 +#line 9843 .species = SPECIES_WHISMUR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9780 +#line 9845 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9779 +#line 9844 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9782 +#line 9847 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9784 +#line 9849 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9783 +#line 9848 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9786 +#line 9851 .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9788 +#line 9853 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9787 +#line 9852 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9790 +#line 9855 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9792 +#line 9857 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9791 +#line 9856 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9794 +#line 9859 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9796 +#line 9861 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9795 +#line 9860 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9798 +#line 9863 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9800 +#line 9865 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9799 +#line 9864 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9802 +#line 9867 [TRAINER_DAVIS] = { -#line 9803 +#line 9868 .trainerName = _("DAVIS"), -#line 9804 +#line 9869 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 9805 +#line 9870 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 9807 +#line 9872 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9808 +#line 9873 .doubleBattle = FALSE, -#line 9809 +#line 9874 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9811 +#line 9876 .species = SPECIES_PINSIR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9813 +#line 9878 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9812 +#line 9877 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9815 +#line 9880 [TRAINER_MITCHELL] = { -#line 9816 +#line 9881 .trainerName = _("MITCHELL"), -#line 9817 +#line 9882 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 9818 +#line 9883 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 9820 +#line 9885 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 9821 +#line 9886 .doubleBattle = FALSE, -#line 9822 +#line 9887 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9824 +#line 9889 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9826 +#line 9891 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9825 +#line 9890 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9827 +#line 9892 MOVE_EXPLOSION, MOVE_REFLECT, MOVE_LIGHT_SCREEN, @@ -24740,17 +24740,17 @@ F_TRAINER_FEMALE | }, }, { -#line 9832 +#line 9897 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9834 +#line 9899 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9833 +#line 9898 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9835 +#line 9900 MOVE_EXPLOSION, MOVE_REFLECT, MOVE_LIGHT_SCREEN, @@ -24759,5077 +24759,5077 @@ F_TRAINER_FEMALE | }, }, }, -#line 9840 +#line 9905 [TRAINER_ISAAC_2] = { -#line 9841 +#line 9906 .trainerName = _("ISAAC"), -#line 9842 +#line 9907 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 9843 +#line 9908 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M, .encounterMusic_gender = -#line 9845 +#line 9910 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9846 +#line 9911 .doubleBattle = FALSE, -#line 9847 +#line 9912 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 9849 +#line 9914 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9851 +#line 9916 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 9850 +#line 9915 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9853 +#line 9918 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9855 +#line 9920 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 9854 +#line 9919 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9857 +#line 9922 .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9859 +#line 9924 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 9858 +#line 9923 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9861 +#line 9926 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9863 +#line 9928 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 9862 +#line 9927 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9865 +#line 9930 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9867 +#line 9932 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 9866 +#line 9931 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9869 +#line 9934 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9871 +#line 9936 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 9870 +#line 9935 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9873 +#line 9938 [TRAINER_ISAAC_3] = { -#line 9874 +#line 9939 .trainerName = _("ISAAC"), -#line 9875 +#line 9940 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 9876 +#line 9941 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M, .encounterMusic_gender = -#line 9878 +#line 9943 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9879 +#line 9944 .doubleBattle = FALSE, -#line 9880 +#line 9945 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 9882 +#line 9947 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9884 +#line 9949 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 9883 +#line 9948 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9886 +#line 9951 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9888 +#line 9953 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 9887 +#line 9952 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9890 +#line 9955 .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9892 +#line 9957 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 9891 +#line 9956 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9894 +#line 9959 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9896 +#line 9961 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 9895 +#line 9960 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9898 +#line 9963 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9900 +#line 9965 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 9899 +#line 9964 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9902 +#line 9967 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9904 +#line 9969 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 9903 +#line 9968 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9906 +#line 9971 [TRAINER_ISAAC_4] = { -#line 9907 +#line 9972 .trainerName = _("ISAAC"), -#line 9908 +#line 9973 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 9909 +#line 9974 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M, .encounterMusic_gender = -#line 9911 +#line 9976 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9912 +#line 9977 .doubleBattle = FALSE, -#line 9913 +#line 9978 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 9915 +#line 9980 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9917 +#line 9982 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 9916 +#line 9981 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9919 +#line 9984 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9921 +#line 9986 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 9920 +#line 9985 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9923 +#line 9988 .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9925 +#line 9990 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 9924 +#line 9989 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9927 +#line 9992 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9929 +#line 9994 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 9928 +#line 9993 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9931 +#line 9996 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9933 +#line 9998 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 9932 +#line 9997 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9935 +#line 10000 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9937 +#line 10002 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 9936 +#line 10001 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9939 +#line 10004 [TRAINER_ISAAC_5] = { -#line 9940 +#line 10005 .trainerName = _("ISAAC"), -#line 9941 +#line 10006 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 9942 +#line 10007 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M, .encounterMusic_gender = -#line 9944 +#line 10009 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9945 +#line 10010 .doubleBattle = FALSE, -#line 9946 +#line 10011 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 9948 +#line 10013 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9950 +#line 10015 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 9949 +#line 10014 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9952 +#line 10017 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9954 +#line 10019 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 9953 +#line 10018 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9956 +#line 10021 .species = SPECIES_LAIRON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9958 +#line 10023 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 9957 +#line 10022 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9960 +#line 10025 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9962 +#line 10027 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 9961 +#line 10026 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9964 +#line 10029 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9966 +#line 10031 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 9965 +#line 10030 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9968 +#line 10033 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9970 +#line 10035 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 9969 +#line 10034 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9972 +#line 10037 [TRAINER_LYDIA_1] = { -#line 9973 +#line 10038 .trainerName = _("LYDIA"), -#line 9974 +#line 10039 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 9975 +#line 10040 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 9976 +#line 10041 F_TRAINER_FEMALE | -#line 9977 +#line 10042 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9978 +#line 10043 .doubleBattle = FALSE, -#line 9979 +#line 10044 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 9981 +#line 10046 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9983 +#line 10048 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9982 +#line 10047 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9985 +#line 10050 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9987 +#line 10052 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9986 +#line 10051 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9989 +#line 10054 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9991 +#line 10056 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9990 +#line 10055 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9993 +#line 10058 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9995 +#line 10060 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9994 +#line 10059 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9997 +#line 10062 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9999 +#line 10064 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9998 +#line 10063 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10001 +#line 10066 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10003 +#line 10068 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10002 +#line 10067 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10005 +#line 10070 [TRAINER_HALLE] = { -#line 10006 +#line 10071 .trainerName = _("HALLE"), -#line 10007 +#line 10072 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 10008 +#line 10073 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 10009 +#line 10074 F_TRAINER_FEMALE | -#line 10010 +#line 10075 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10011 +#line 10076 .items = { ITEM_FULL_RESTORE }, -#line 10012 +#line 10077 .doubleBattle = FALSE, -#line 10013 +#line 10078 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10015 +#line 10080 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10017 +#line 10082 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10016 +#line 10081 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10019 +#line 10084 .species = SPECIES_ABSOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10021 +#line 10086 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10020 +#line 10085 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10023 +#line 10088 [TRAINER_GARRISON] = { -#line 10024 +#line 10089 .trainerName = _("GARRISON"), -#line 10025 +#line 10090 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 10026 +#line 10091 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 10028 +#line 10093 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 10029 +#line 10094 .doubleBattle = FALSE, -#line 10030 +#line 10095 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10032 +#line 10097 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10034 +#line 10099 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10033 +#line 10098 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10036 +#line 10101 [TRAINER_LYDIA_2] = { -#line 10037 +#line 10102 .trainerName = _("LYDIA"), -#line 10038 +#line 10103 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 10039 +#line 10104 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 10040 +#line 10105 F_TRAINER_FEMALE | -#line 10041 +#line 10106 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 10042 +#line 10107 .doubleBattle = FALSE, -#line 10043 +#line 10108 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 10045 +#line 10110 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10047 +#line 10112 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 10046 +#line 10111 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10049 +#line 10114 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10051 +#line 10116 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 10050 +#line 10115 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10053 +#line 10118 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10055 +#line 10120 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 10054 +#line 10119 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10057 +#line 10122 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10059 +#line 10124 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 10058 +#line 10123 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10061 +#line 10126 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10063 +#line 10128 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 10062 +#line 10127 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10065 +#line 10130 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10067 +#line 10132 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 10066 +#line 10131 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10069 +#line 10134 [TRAINER_LYDIA_3] = { -#line 10070 +#line 10135 .trainerName = _("LYDIA"), -#line 10071 +#line 10136 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 10072 +#line 10137 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 10073 +#line 10138 F_TRAINER_FEMALE | -#line 10074 +#line 10139 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 10075 +#line 10140 .doubleBattle = FALSE, -#line 10076 +#line 10141 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 10078 +#line 10143 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10080 +#line 10145 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 10079 +#line 10144 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10082 +#line 10147 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10084 +#line 10149 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 10083 +#line 10148 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10086 +#line 10151 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10088 +#line 10153 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 10087 +#line 10152 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10090 +#line 10155 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10092 +#line 10157 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 10091 +#line 10156 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10094 +#line 10159 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10096 +#line 10161 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 10095 +#line 10160 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10098 +#line 10163 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10100 +#line 10165 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 10099 +#line 10164 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10102 +#line 10167 [TRAINER_LYDIA_4] = { -#line 10103 +#line 10168 .trainerName = _("LYDIA"), -#line 10104 +#line 10169 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 10105 +#line 10170 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 10106 +#line 10171 F_TRAINER_FEMALE | -#line 10107 +#line 10172 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 10108 +#line 10173 .doubleBattle = FALSE, -#line 10109 +#line 10174 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 10111 +#line 10176 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10113 +#line 10178 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10112 +#line 10177 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10115 +#line 10180 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10117 +#line 10182 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10116 +#line 10181 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10119 +#line 10184 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10121 +#line 10186 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10120 +#line 10185 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10123 +#line 10188 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10125 +#line 10190 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10124 +#line 10189 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10127 +#line 10192 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10129 +#line 10194 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10128 +#line 10193 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10131 +#line 10196 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10133 +#line 10198 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10132 +#line 10197 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10135 +#line 10200 [TRAINER_LYDIA_5] = { -#line 10136 +#line 10201 .trainerName = _("LYDIA"), -#line 10137 +#line 10202 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 10138 +#line 10203 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 10139 +#line 10204 F_TRAINER_FEMALE | -#line 10140 +#line 10205 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 10141 +#line 10206 .doubleBattle = FALSE, -#line 10142 +#line 10207 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 10144 +#line 10209 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10146 +#line 10211 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 10145 +#line 10210 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10148 +#line 10213 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10150 +#line 10215 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 10149 +#line 10214 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10152 +#line 10217 .species = SPECIES_AZUMARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10154 +#line 10219 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 10153 +#line 10218 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10156 +#line 10221 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10158 +#line 10223 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 10157 +#line 10222 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10160 +#line 10225 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10162 +#line 10227 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 10161 +#line 10226 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10164 +#line 10229 .species = SPECIES_SEAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10166 +#line 10231 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 10165 +#line 10230 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10168 +#line 10233 [TRAINER_JACKSON_1] = { -#line 10169 +#line 10234 .trainerName = _("JACKSON"), -#line 10170 +#line 10235 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10171 +#line 10236 .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, .encounterMusic_gender = -#line 10173 +#line 10238 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10174 +#line 10239 .items = { ITEM_FULL_RESTORE }, -#line 10175 +#line 10240 .doubleBattle = FALSE, -#line 10176 +#line 10241 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10178 +#line 10243 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10180 +#line 10245 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10179 +#line 10244 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10182 +#line 10247 [TRAINER_LORENZO] = { -#line 10183 +#line 10248 .trainerName = _("LORENZO"), -#line 10184 +#line 10249 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10185 +#line 10250 .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, .encounterMusic_gender = -#line 10187 +#line 10252 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10188 +#line 10253 .items = { ITEM_FULL_RESTORE }, -#line 10189 +#line 10254 .doubleBattle = FALSE, -#line 10190 +#line 10255 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 10192 +#line 10257 .species = SPECIES_SEEDOT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10194 +#line 10259 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10193 +#line 10258 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10196 +#line 10261 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10198 +#line 10263 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10197 +#line 10262 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10200 +#line 10265 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10202 +#line 10267 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10201 +#line 10266 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10204 +#line 10269 [TRAINER_SEBASTIAN] = { -#line 10205 +#line 10270 .trainerName = _("SEBASTIAN"), -#line 10206 +#line 10271 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10207 +#line 10272 .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, .encounterMusic_gender = -#line 10209 +#line 10274 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10210 +#line 10275 .items = { ITEM_FULL_RESTORE }, -#line 10211 +#line 10276 .doubleBattle = FALSE, -#line 10212 +#line 10277 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10214 +#line 10279 .species = SPECIES_CACTURNE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10216 +#line 10281 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10215 +#line 10280 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10218 +#line 10283 [TRAINER_JACKSON_2] = { -#line 10219 +#line 10284 .trainerName = _("JACKSON"), -#line 10220 +#line 10285 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10221 +#line 10286 .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, .encounterMusic_gender = -#line 10223 +#line 10288 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10224 +#line 10289 .items = { ITEM_FULL_RESTORE }, -#line 10225 +#line 10290 .doubleBattle = FALSE, -#line 10226 +#line 10291 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10228 +#line 10293 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10230 +#line 10295 .iv = TRAINER_PARTY_IVS(7, 7, 7, 7, 7, 7), -#line 10229 +#line 10294 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10232 +#line 10297 [TRAINER_JACKSON_3] = { -#line 10233 +#line 10298 .trainerName = _("JACKSON"), -#line 10234 +#line 10299 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10235 +#line 10300 .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, .encounterMusic_gender = -#line 10237 +#line 10302 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10238 +#line 10303 .items = { ITEM_FULL_RESTORE }, -#line 10239 +#line 10304 .doubleBattle = FALSE, -#line 10240 +#line 10305 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10242 +#line 10307 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10244 +#line 10309 .iv = TRAINER_PARTY_IVS(8, 8, 8, 8, 8, 8), -#line 10243 +#line 10308 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10246 +#line 10311 [TRAINER_JACKSON_4] = { -#line 10247 +#line 10312 .trainerName = _("JACKSON"), -#line 10248 +#line 10313 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10249 +#line 10314 .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, .encounterMusic_gender = -#line 10251 +#line 10316 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10252 +#line 10317 .items = { ITEM_FULL_RESTORE }, -#line 10253 +#line 10318 .doubleBattle = FALSE, -#line 10254 +#line 10319 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10256 +#line 10321 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10258 +#line 10323 .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 10257 +#line 10322 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10260 +#line 10325 [TRAINER_JACKSON_5] = { -#line 10261 +#line 10326 .trainerName = _("JACKSON"), -#line 10262 +#line 10327 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10263 +#line 10328 .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, .encounterMusic_gender = -#line 10265 +#line 10330 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10266 +#line 10331 .items = { ITEM_FULL_RESTORE }, -#line 10267 +#line 10332 .doubleBattle = FALSE, -#line 10268 +#line 10333 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10270 +#line 10335 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10272 +#line 10337 .iv = TRAINER_PARTY_IVS(10, 10, 10, 10, 10, 10), -#line 10271 +#line 10336 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10274 +#line 10339 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10276 +#line 10341 .iv = TRAINER_PARTY_IVS(10, 10, 10, 10, 10, 10), -#line 10275 +#line 10340 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10278 +#line 10343 [TRAINER_CATHERINE_1] = { -#line 10279 +#line 10344 .trainerName = _("CATHERINE"), -#line 10280 +#line 10345 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10281 +#line 10346 .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = -#line 10282 +#line 10347 F_TRAINER_FEMALE | -#line 10283 +#line 10348 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10284 +#line 10349 .items = { ITEM_FULL_RESTORE }, -#line 10285 +#line 10350 .doubleBattle = FALSE, -#line 10286 +#line 10351 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10288 +#line 10353 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10290 +#line 10355 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10289 +#line 10354 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10292 +#line 10357 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10294 +#line 10359 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10293 +#line 10358 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10296 +#line 10361 [TRAINER_JENNA] = { -#line 10297 +#line 10362 .trainerName = _("JENNA"), -#line 10298 +#line 10363 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10299 +#line 10364 .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = -#line 10300 +#line 10365 F_TRAINER_FEMALE | -#line 10301 +#line 10366 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10302 +#line 10367 .items = { ITEM_FULL_RESTORE }, -#line 10303 +#line 10368 .doubleBattle = FALSE, -#line 10304 +#line 10369 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 10306 +#line 10371 .species = SPECIES_LOTAD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10308 +#line 10373 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10307 +#line 10372 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10310 +#line 10375 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10312 +#line 10377 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10311 +#line 10376 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10314 +#line 10379 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10316 +#line 10381 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10315 +#line 10380 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10318 +#line 10383 [TRAINER_SOPHIA] = { -#line 10319 +#line 10384 .trainerName = _("SOPHIA"), -#line 10320 +#line 10385 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10321 +#line 10386 .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = -#line 10322 +#line 10387 F_TRAINER_FEMALE | -#line 10323 +#line 10388 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10324 +#line 10389 .items = { ITEM_FULL_RESTORE }, -#line 10325 +#line 10390 .doubleBattle = FALSE, -#line 10326 +#line 10391 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10328 +#line 10393 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10330 +#line 10395 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10329 +#line 10394 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10332 +#line 10397 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10334 +#line 10399 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10333 +#line 10398 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10336 +#line 10401 [TRAINER_CATHERINE_2] = { -#line 10337 +#line 10402 .trainerName = _("CATHERINE"), -#line 10338 +#line 10403 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10339 +#line 10404 .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = -#line 10340 +#line 10405 F_TRAINER_FEMALE | -#line 10341 +#line 10406 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10342 +#line 10407 .items = { ITEM_FULL_RESTORE }, -#line 10343 +#line 10408 .doubleBattle = FALSE, -#line 10344 +#line 10409 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10346 +#line 10411 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10348 +#line 10413 .iv = TRAINER_PARTY_IVS(7, 7, 7, 7, 7, 7), -#line 10347 +#line 10412 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10350 +#line 10415 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10352 +#line 10417 .iv = TRAINER_PARTY_IVS(7, 7, 7, 7, 7, 7), -#line 10351 +#line 10416 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10354 +#line 10419 [TRAINER_CATHERINE_3] = { -#line 10355 +#line 10420 .trainerName = _("CATHERINE"), -#line 10356 +#line 10421 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10357 +#line 10422 .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = -#line 10358 +#line 10423 F_TRAINER_FEMALE | -#line 10359 +#line 10424 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10360 +#line 10425 .items = { ITEM_FULL_RESTORE }, -#line 10361 +#line 10426 .doubleBattle = FALSE, -#line 10362 +#line 10427 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10364 +#line 10429 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10366 +#line 10431 .iv = TRAINER_PARTY_IVS(8, 8, 8, 8, 8, 8), -#line 10365 +#line 10430 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10368 +#line 10433 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10370 +#line 10435 .iv = TRAINER_PARTY_IVS(8, 8, 8, 8, 8, 8), -#line 10369 +#line 10434 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10372 +#line 10437 [TRAINER_CATHERINE_4] = { -#line 10373 +#line 10438 .trainerName = _("CATHERINE"), -#line 10374 +#line 10439 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10375 +#line 10440 .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = -#line 10376 +#line 10441 F_TRAINER_FEMALE | -#line 10377 +#line 10442 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10378 +#line 10443 .items = { ITEM_FULL_RESTORE }, -#line 10379 +#line 10444 .doubleBattle = FALSE, -#line 10380 +#line 10445 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10382 +#line 10447 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10384 +#line 10449 .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 10383 +#line 10448 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10386 +#line 10451 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10388 +#line 10453 .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 10387 +#line 10452 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10390 +#line 10455 [TRAINER_CATHERINE_5] = { -#line 10391 +#line 10456 .trainerName = _("CATHERINE"), -#line 10392 +#line 10457 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10393 +#line 10458 .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = -#line 10394 +#line 10459 F_TRAINER_FEMALE | -#line 10395 +#line 10460 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10396 +#line 10461 .items = { ITEM_FULL_RESTORE }, -#line 10397 +#line 10462 .doubleBattle = FALSE, -#line 10398 +#line 10463 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10400 +#line 10465 .species = SPECIES_BELLOSSOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10402 +#line 10467 .iv = TRAINER_PARTY_IVS(10, 10, 10, 10, 10, 10), -#line 10401 +#line 10466 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10404 +#line 10469 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10406 +#line 10471 .iv = TRAINER_PARTY_IVS(10, 10, 10, 10, 10, 10), -#line 10405 +#line 10470 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10408 +#line 10473 [TRAINER_JULIO] = { -#line 10409 +#line 10474 .trainerName = _("JULIO"), -#line 10410 +#line 10475 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 10411 +#line 10476 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .encounterMusic_gender = -#line 10413 +#line 10478 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 10414 +#line 10479 .doubleBattle = FALSE, -#line 10415 +#line 10480 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10417 +#line 10482 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10419 +#line 10484 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10418 +#line 10483 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10421 +#line 10486 [TRAINER_GRUNT_SEAFLOOR_CAVERN_5] = { -#line 10422 +#line 10487 .trainerName = _("GRUNT"), -#line 10423 +#line 10488 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 10424 +#line 10489 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 10426 +#line 10491 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 10427 +#line 10492 .doubleBattle = FALSE, -#line 10428 +#line 10493 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10430 +#line 10495 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10432 +#line 10497 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10431 +#line 10496 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10434 +#line 10499 .species = SPECIES_GOLBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10436 +#line 10501 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10435 +#line 10500 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10438 +#line 10503 [TRAINER_GRUNT_UNUSED] = { -#line 10439 +#line 10504 .trainerName = _("GRUNT"), -#line 10440 +#line 10505 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 10441 +#line 10506 .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = -#line 10442 +#line 10507 F_TRAINER_FEMALE | -#line 10443 +#line 10508 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 10444 +#line 10509 .doubleBattle = FALSE, -#line 10445 +#line 10510 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10447 +#line 10512 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10449 +#line 10514 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10448 +#line 10513 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10451 +#line 10516 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10453 +#line 10518 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10452 +#line 10517 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10455 +#line 10520 [TRAINER_GRUNT_MT_PYRE_4] = { -#line 10456 +#line 10521 .trainerName = _("GRUNT"), -#line 10457 +#line 10522 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 10458 +#line 10523 .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = -#line 10459 +#line 10524 F_TRAINER_FEMALE | -#line 10460 +#line 10525 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 10461 +#line 10526 .doubleBattle = FALSE, -#line 10462 +#line 10527 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10464 +#line 10529 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10466 +#line 10531 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10465 +#line 10530 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10468 +#line 10533 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10470 +#line 10535 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10469 +#line 10534 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10472 +#line 10537 [TRAINER_GRUNT_JAGGED_PASS] = { -#line 10473 +#line 10538 .trainerName = _("GRUNT"), -#line 10474 +#line 10539 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 10475 +#line 10540 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 10477 +#line 10542 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10478 +#line 10543 .doubleBattle = FALSE, -#line 10479 +#line 10544 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10481 +#line 10546 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10483 +#line 10548 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10482 +#line 10547 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10485 +#line 10550 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10487 +#line 10552 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10486 +#line 10551 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10489 +#line 10554 [TRAINER_MARC] = { -#line 10490 +#line 10555 .trainerName = _("MARC"), -#line 10491 +#line 10556 .trainerClass = TRAINER_CLASS_HIKER, -#line 10492 +#line 10557 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 10494 +#line 10559 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 10495 +#line 10560 .doubleBattle = FALSE, -#line 10496 +#line 10561 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10498 +#line 10563 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10500 +#line 10565 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 10499 +#line 10564 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10502 +#line 10567 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10504 +#line 10569 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 10503 +#line 10568 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10506 +#line 10571 [TRAINER_BRENDEN] = { -#line 10507 +#line 10572 .trainerName = _("BRENDEN"), -#line 10508 +#line 10573 .trainerClass = TRAINER_CLASS_SAILOR, -#line 10509 +#line 10574 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 10511 +#line 10576 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 10512 +#line 10577 .doubleBattle = FALSE, -#line 10513 +#line 10578 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10515 +#line 10580 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10517 +#line 10582 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 10516 +#line 10581 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10519 +#line 10584 [TRAINER_LILITH] = { -#line 10520 +#line 10585 .trainerName = _("LILITH"), -#line 10521 +#line 10586 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 10522 +#line 10587 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 10523 +#line 10588 F_TRAINER_FEMALE | -#line 10524 +#line 10589 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 10525 +#line 10590 .doubleBattle = FALSE, -#line 10526 +#line 10591 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10528 +#line 10593 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10530 +#line 10595 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 10529 +#line 10594 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10532 +#line 10597 [TRAINER_CRISTIAN] = { -#line 10533 +#line 10598 .trainerName = _("CRISTIAN"), -#line 10534 +#line 10599 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 10535 +#line 10600 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 10537 +#line 10602 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 10538 +#line 10603 .doubleBattle = FALSE, -#line 10539 +#line 10604 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10541 +#line 10606 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10543 +#line 10608 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 10542 +#line 10607 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10545 +#line 10610 [TRAINER_SYLVIA] = { -#line 10546 +#line 10611 .trainerName = _("SYLVIA"), -#line 10547 +#line 10612 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 10548 +#line 10613 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 10549 +#line 10614 F_TRAINER_FEMALE | -#line 10550 +#line 10615 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 10551 +#line 10616 .doubleBattle = FALSE, -#line 10552 +#line 10617 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10554 +#line 10619 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10556 +#line 10621 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 10555 +#line 10620 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10558 +#line 10623 [TRAINER_LEONARDO] = { -#line 10559 +#line 10624 .trainerName = _("LEONARDO"), -#line 10560 +#line 10625 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 10561 +#line 10626 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 10563 +#line 10628 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 10564 +#line 10629 .doubleBattle = FALSE, -#line 10565 +#line 10630 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10567 +#line 10632 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10569 +#line 10634 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10568 +#line 10633 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10571 +#line 10636 [TRAINER_ATHENA] = { -#line 10572 +#line 10637 .trainerName = _("ATHENA"), -#line 10573 +#line 10638 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 10574 +#line 10639 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 10575 +#line 10640 F_TRAINER_FEMALE | -#line 10576 +#line 10641 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10577 +#line 10642 .items = { ITEM_HYPER_POTION }, -#line 10578 +#line 10643 .doubleBattle = FALSE, -#line 10579 +#line 10644 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10581 +#line 10646 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10583 +#line 10648 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 10582 +#line 10647 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 10584 +#line 10649 MOVE_THUNDER, MOVE_THUNDER_WAVE, MOVE_QUICK_ATTACK, }, }, { -#line 10588 +#line 10653 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10590 +#line 10655 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 10589 +#line 10654 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 10591 +#line 10656 MOVE_SURF, MOVE_THIEF, }, }, }, }, -#line 10594 +#line 10659 [TRAINER_HARRISON] = { -#line 10595 +#line 10660 .trainerName = _("HARRISON"), -#line 10596 +#line 10661 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 10597 +#line 10662 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 10599 +#line 10664 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 10600 +#line 10665 .doubleBattle = FALSE, -#line 10601 +#line 10666 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10603 +#line 10668 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10605 +#line 10670 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10604 +#line 10669 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10607 +#line 10672 [TRAINER_GRUNT_MT_CHIMNEY_2] = { -#line 10608 +#line 10673 .trainerName = _("GRUNT"), -#line 10609 +#line 10674 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 10610 +#line 10675 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 10612 +#line 10677 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10613 +#line 10678 .doubleBattle = FALSE, -#line 10614 +#line 10679 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10616 +#line 10681 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10618 +#line 10683 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10617 +#line 10682 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10620 +#line 10685 [TRAINER_CLARENCE] = { -#line 10621 +#line 10686 .trainerName = _("CLARENCE"), -#line 10622 +#line 10687 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 10623 +#line 10688 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 10625 +#line 10690 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 10626 +#line 10691 .doubleBattle = FALSE, -#line 10627 +#line 10692 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10629 +#line 10694 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10631 +#line 10696 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10630 +#line 10695 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10633 +#line 10698 [TRAINER_TERRY] = { -#line 10634 +#line 10699 .trainerName = _("TERRY"), -#line 10635 +#line 10700 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 10636 +#line 10701 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 10637 +#line 10702 F_TRAINER_FEMALE | -#line 10638 +#line 10703 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 10639 +#line 10704 .doubleBattle = FALSE, -#line 10640 +#line 10705 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10642 +#line 10707 .species = SPECIES_GIRAFARIG, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10644 +#line 10709 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10643 +#line 10708 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10646 +#line 10711 [TRAINER_NATE] = { -#line 10647 +#line 10712 .trainerName = _("NATE"), -#line 10648 +#line 10713 .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 10649 +#line 10714 .trainerPic = TRAINER_PIC_GENTLEMAN, .encounterMusic_gender = -#line 10651 +#line 10716 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 10652 +#line 10717 .doubleBattle = FALSE, -#line 10653 +#line 10718 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10655 +#line 10720 .species = SPECIES_SPOINK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10657 +#line 10722 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 10656 +#line 10721 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10659 +#line 10724 [TRAINER_KATHLEEN] = { -#line 10660 +#line 10725 .trainerName = _("KATHLEEN"), -#line 10661 +#line 10726 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 10662 +#line 10727 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 10663 +#line 10728 F_TRAINER_FEMALE | -#line 10664 +#line 10729 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 10665 +#line 10730 .doubleBattle = FALSE, -#line 10666 +#line 10731 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10668 +#line 10733 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10670 +#line 10735 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 10669 +#line 10734 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10672 +#line 10737 [TRAINER_CLIFFORD] = { -#line 10673 +#line 10738 .trainerName = _("CLIFFORD"), -#line 10674 +#line 10739 .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 10675 +#line 10740 .trainerPic = TRAINER_PIC_GENTLEMAN, .encounterMusic_gender = -#line 10677 +#line 10742 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 10678 +#line 10743 .doubleBattle = FALSE, -#line 10679 +#line 10744 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10681 +#line 10746 .species = SPECIES_GIRAFARIG, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10683 +#line 10748 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10682 +#line 10747 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10685 +#line 10750 [TRAINER_NICHOLAS] = { -#line 10686 +#line 10751 .trainerName = _("NICHOLAS"), -#line 10687 +#line 10752 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 10688 +#line 10753 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 10690 +#line 10755 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 10691 +#line 10756 .doubleBattle = FALSE, -#line 10692 +#line 10757 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10694 +#line 10759 .species = SPECIES_WOBBUFFET, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10696 +#line 10761 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10695 +#line 10760 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10698 +#line 10763 [TRAINER_GRUNT_SPACE_CENTER_3] = { -#line 10699 +#line 10764 .trainerName = _("GRUNT"), -#line 10700 +#line 10765 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 10701 +#line 10766 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, .encounterMusic_gender = -#line 10702 +#line 10767 F_TRAINER_FEMALE | -#line 10703 +#line 10768 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10704 +#line 10769 .doubleBattle = FALSE, -#line 10705 +#line 10770 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10707 +#line 10772 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10709 +#line 10774 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10708 +#line 10773 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10711 +#line 10776 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10713 +#line 10778 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10712 +#line 10777 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10715 +#line 10780 [TRAINER_GRUNT_SPACE_CENTER_4] = { -#line 10716 +#line 10781 .trainerName = _("GRUNT"), -#line 10717 +#line 10782 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 10718 +#line 10783 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 10720 +#line 10785 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10721 +#line 10786 .doubleBattle = FALSE, -#line 10722 +#line 10787 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10724 +#line 10789 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10726 +#line 10791 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10725 +#line 10790 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10728 +#line 10793 [TRAINER_GRUNT_SPACE_CENTER_5] = { -#line 10729 +#line 10794 .trainerName = _("GRUNT"), -#line 10730 +#line 10795 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 10731 +#line 10796 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 10733 +#line 10798 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10734 +#line 10799 .doubleBattle = FALSE, -#line 10735 +#line 10800 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10737 +#line 10802 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10739 +#line 10804 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10738 +#line 10803 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10741 +#line 10806 [TRAINER_GRUNT_SPACE_CENTER_6] = { -#line 10742 +#line 10807 .trainerName = _("GRUNT"), -#line 10743 +#line 10808 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 10744 +#line 10809 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 10746 +#line 10811 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10747 +#line 10812 .doubleBattle = FALSE, -#line 10748 +#line 10813 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10750 +#line 10815 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10752 +#line 10817 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10751 +#line 10816 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10754 +#line 10819 [TRAINER_GRUNT_SPACE_CENTER_7] = { -#line 10755 +#line 10820 .trainerName = _("GRUNT"), -#line 10756 +#line 10821 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 10757 +#line 10822 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 10759 +#line 10824 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10760 +#line 10825 .doubleBattle = FALSE, -#line 10761 +#line 10826 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10763 +#line 10828 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10765 +#line 10830 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10764 +#line 10829 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10767 +#line 10832 [TRAINER_MACEY] = { -#line 10768 +#line 10833 .trainerName = _("MACEY"), -#line 10769 +#line 10834 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 10770 +#line 10835 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 10771 +#line 10836 F_TRAINER_FEMALE | -#line 10772 +#line 10837 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 10773 +#line 10838 .doubleBattle = FALSE, -#line 10774 +#line 10839 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10776 +#line 10841 .species = SPECIES_NATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10778 +#line 10843 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10777 +#line 10842 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10780 +#line 10845 [TRAINER_BRENDAN_RUSTBORO_TREECKO] = { -#line 10781 +#line 10846 .trainerName = _("BRENDAN"), -#line 10782 +#line 10847 .trainerClass = TRAINER_CLASS_RIVAL, -#line 10783 +#line 10848 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 10785 +#line 10850 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 10786 +#line 10851 .doubleBattle = FALSE, -#line 10787 +#line 10852 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10789 +#line 10854 .species = SPECIES_LOTAD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10791 +#line 10856 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10790 +#line 10855 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10793 +#line 10858 .species = SPECIES_TORCHIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10795 +#line 10860 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10794 +#line 10859 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10797 +#line 10862 [TRAINER_BRENDAN_RUSTBORO_MUDKIP] = { -#line 10798 +#line 10863 .trainerName = _("BRENDAN"), -#line 10799 +#line 10864 .trainerClass = TRAINER_CLASS_RIVAL, -#line 10800 +#line 10865 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 10802 +#line 10867 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 10803 +#line 10868 .doubleBattle = FALSE, -#line 10804 +#line 10869 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10806 +#line 10871 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10808 +#line 10873 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10807 +#line 10872 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10810 +#line 10875 .species = SPECIES_TREECKO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10812 +#line 10877 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10811 +#line 10876 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10814 +#line 10879 [TRAINER_PAXTON] = { -#line 10815 +#line 10880 .trainerName = _("PAXTON"), -#line 10816 +#line 10881 .trainerClass = TRAINER_CLASS_EXPERT, -#line 10817 +#line 10882 .trainerPic = TRAINER_PIC_EXPERT_M, .encounterMusic_gender = -#line 10819 +#line 10884 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 10820 +#line 10885 .doubleBattle = FALSE, -#line 10821 +#line 10886 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10823 +#line 10888 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10825 +#line 10890 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10824 +#line 10889 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10827 +#line 10892 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10829 +#line 10894 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10828 +#line 10893 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10831 +#line 10896 [TRAINER_ISABELLA] = { -#line 10832 +#line 10897 .trainerName = _("ISABELLA"), -#line 10833 +#line 10898 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 10834 +#line 10899 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = -#line 10835 +#line 10900 F_TRAINER_FEMALE | -#line 10836 +#line 10901 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 10837 +#line 10902 .doubleBattle = FALSE, -#line 10838 +#line 10903 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10840 +#line 10905 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10842 +#line 10907 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10841 +#line 10906 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10844 +#line 10909 [TRAINER_GRUNT_WEATHER_INST_5] = { -#line 10845 +#line 10910 .trainerName = _("GRUNT"), -#line 10846 +#line 10911 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 10847 +#line 10912 .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = -#line 10848 +#line 10913 F_TRAINER_FEMALE | -#line 10849 +#line 10914 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 10850 +#line 10915 .doubleBattle = FALSE, -#line 10851 +#line 10916 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10853 +#line 10918 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10855 +#line 10920 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10854 +#line 10919 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10857 +#line 10922 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10859 +#line 10924 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10858 +#line 10923 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10861 +#line 10926 [TRAINER_TABITHA_MT_CHIMNEY] = { -#line 10862 +#line 10927 .trainerName = _("TABITHA"), -#line 10863 +#line 10928 .trainerClass = TRAINER_CLASS_MAGMA_ADMIN, -#line 10864 +#line 10929 .trainerPic = TRAINER_PIC_MAGMA_ADMIN, .encounterMusic_gender = -#line 10866 +#line 10931 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10867 +#line 10932 .doubleBattle = FALSE, -#line 10868 +#line 10933 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 10870 +#line 10935 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10872 +#line 10937 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10871 +#line 10936 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10874 +#line 10939 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10876 +#line 10941 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10875 +#line 10940 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10878 +#line 10943 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10880 +#line 10945 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10879 +#line 10944 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10882 +#line 10947 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10884 +#line 10949 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10883 +#line 10948 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10886 +#line 10951 [TRAINER_JONATHAN] = { -#line 10887 +#line 10952 .trainerName = _("JONATHAN"), -#line 10888 +#line 10953 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 10889 +#line 10954 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 10891 +#line 10956 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10892 +#line 10957 .items = { ITEM_HYPER_POTION }, -#line 10893 +#line 10958 .doubleBattle = FALSE, -#line 10894 +#line 10959 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10896 +#line 10961 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10898 +#line 10963 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10897 +#line 10962 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10900 +#line 10965 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10902 +#line 10967 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10901 +#line 10966 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10904 +#line 10969 [TRAINER_BRENDAN_RUSTBORO_TORCHIC] = { -#line 10905 +#line 10970 .trainerName = _("BRENDAN"), -#line 10906 +#line 10971 .trainerClass = TRAINER_CLASS_RIVAL, -#line 10907 +#line 10972 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 10909 +#line 10974 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 10910 +#line 10975 .doubleBattle = FALSE, -#line 10911 +#line 10976 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10913 +#line 10978 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10915 +#line 10980 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10914 +#line 10979 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10917 +#line 10982 .species = SPECIES_MUDKIP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10919 +#line 10984 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10918 +#line 10983 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10921 +#line 10986 [TRAINER_MAY_RUSTBORO_MUDKIP] = { -#line 10922 +#line 10987 .trainerName = _("MAY"), -#line 10923 +#line 10988 .trainerClass = TRAINER_CLASS_RIVAL, -#line 10924 +#line 10989 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 10925 +#line 10990 F_TRAINER_FEMALE | -#line 10926 +#line 10991 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 10927 +#line 10992 .doubleBattle = FALSE, -#line 10928 +#line 10993 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10930 +#line 10995 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10932 +#line 10997 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10931 +#line 10996 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10934 +#line 10999 .species = SPECIES_TREECKO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10936 +#line 11001 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10935 +#line 11000 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10938 +#line 11003 [TRAINER_MAXIE_MAGMA_HIDEOUT] = { -#line 10939 +#line 11004 .trainerName = _("MAXIE"), -#line 10940 +#line 11005 .trainerClass = TRAINER_CLASS_MAGMA_LEADER, -#line 10941 +#line 11006 .trainerPic = TRAINER_PIC_MAGMA_LEADER_MAXIE, .encounterMusic_gender = -#line 10943 +#line 11008 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10944 +#line 11009 .items = { ITEM_SUPER_POTION, ITEM_SUPER_POTION }, -#line 10945 +#line 11010 .doubleBattle = FALSE, -#line 10946 +#line 11011 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 10948 +#line 11013 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10950 +#line 11015 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 10949 +#line 11014 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10952 +#line 11017 .species = SPECIES_CROBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10954 +#line 11019 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 10953 +#line 11018 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10956 +#line 11021 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10958 +#line 11023 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 10957 +#line 11022 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10960 +#line 11025 [TRAINER_MAXIE_MT_CHIMNEY] = { -#line 10961 +#line 11026 .trainerName = _("MAXIE"), -#line 10962 +#line 11027 .trainerClass = TRAINER_CLASS_MAGMA_LEADER, -#line 10963 +#line 11028 .trainerPic = TRAINER_PIC_MAGMA_LEADER_MAXIE, .encounterMusic_gender = -#line 10965 +#line 11030 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10966 +#line 11031 .items = { ITEM_SUPER_POTION, ITEM_SUPER_POTION }, -#line 10967 +#line 11032 .doubleBattle = FALSE, -#line 10968 +#line 11033 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 10970 +#line 11035 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10972 +#line 11037 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 10971 +#line 11036 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10974 +#line 11039 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10976 +#line 11041 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 10975 +#line 11040 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10978 +#line 11043 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10980 +#line 11045 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 10979 +#line 11044 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10982 +#line 11047 [TRAINER_TIANA] = { -#line 10983 +#line 11048 .trainerName = _("TIANA"), -#line 10984 +#line 11049 .trainerClass = TRAINER_CLASS_LASS, -#line 10985 +#line 11050 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 10986 +#line 11051 F_TRAINER_FEMALE | -#line 10987 +#line 11052 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 10988 +#line 11053 .doubleBattle = FALSE, -#line 10989 +#line 11054 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10991 +#line 11056 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10993 +#line 11058 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10992 +#line 11057 .lvl = 4, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10995 +#line 11060 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10997 +#line 11062 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10996 +#line 11061 .lvl = 4, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10999 +#line 11064 [TRAINER_HALEY_1] = { -#line 11000 +#line 11065 .trainerName = _("HALEY"), -#line 11001 +#line 11066 .trainerClass = TRAINER_CLASS_LASS, -#line 11002 +#line 11067 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11003 +#line 11068 F_TRAINER_FEMALE | -#line 11004 +#line 11069 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11005 +#line 11070 .doubleBattle = FALSE, -#line 11006 +#line 11071 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11008 +#line 11073 .species = SPECIES_LOTAD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11010 +#line 11075 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11009 +#line 11074 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11012 +#line 11077 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11014 +#line 11079 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11013 +#line 11078 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11016 +#line 11081 [TRAINER_JANICE] = { -#line 11017 +#line 11082 .trainerName = _("JANICE"), -#line 11018 +#line 11083 .trainerClass = TRAINER_CLASS_LASS, -#line 11019 +#line 11084 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11020 +#line 11085 F_TRAINER_FEMALE | -#line 11021 +#line 11086 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11022 +#line 11087 .doubleBattle = FALSE, -#line 11023 +#line 11088 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11025 +#line 11090 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11027 +#line 11092 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11026 +#line 11091 .lvl = 9, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11029 +#line 11094 [TRAINER_VIVI] = { -#line 11030 +#line 11095 .trainerName = _("VIVI"), -#line 11031 +#line 11096 .trainerClass = TRAINER_CLASS_WINSTRATE, -#line 11032 +#line 11097 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11033 +#line 11098 F_TRAINER_FEMALE | -#line 11034 +#line 11099 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11035 +#line 11100 .doubleBattle = FALSE, -#line 11036 +#line 11101 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 11038 +#line 11103 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11040 +#line 11105 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11039 +#line 11104 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11042 +#line 11107 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11044 +#line 11109 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11043 +#line 11108 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11046 +#line 11111 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11048 +#line 11113 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11047 +#line 11112 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11050 +#line 11115 [TRAINER_HALEY_2] = { -#line 11051 +#line 11116 .trainerName = _("HALEY"), -#line 11052 +#line 11117 .trainerClass = TRAINER_CLASS_LASS, -#line 11053 +#line 11118 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11054 +#line 11119 F_TRAINER_FEMALE | -#line 11055 +#line 11120 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11056 +#line 11121 .doubleBattle = FALSE, -#line 11057 +#line 11122 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11059 +#line 11124 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11061 +#line 11126 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 11060 +#line 11125 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11063 +#line 11128 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11065 +#line 11130 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 11064 +#line 11129 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11067 +#line 11132 [TRAINER_HALEY_3] = { -#line 11068 +#line 11133 .trainerName = _("HALEY"), -#line 11069 +#line 11134 .trainerClass = TRAINER_CLASS_LASS, -#line 11070 +#line 11135 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11071 +#line 11136 F_TRAINER_FEMALE | -#line 11072 +#line 11137 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11073 +#line 11138 .doubleBattle = FALSE, -#line 11074 +#line 11139 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11076 +#line 11141 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11078 +#line 11143 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11077 +#line 11142 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11080 +#line 11145 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11082 +#line 11147 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11081 +#line 11146 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11084 +#line 11149 [TRAINER_HALEY_4] = { -#line 11085 +#line 11150 .trainerName = _("HALEY"), -#line 11086 +#line 11151 .trainerClass = TRAINER_CLASS_LASS, -#line 11087 +#line 11152 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11088 +#line 11153 F_TRAINER_FEMALE | -#line 11089 +#line 11154 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11090 +#line 11155 .doubleBattle = FALSE, -#line 11091 +#line 11156 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11093 +#line 11158 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11095 +#line 11160 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11094 +#line 11159 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11097 +#line 11162 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11099 +#line 11164 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11098 +#line 11163 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11101 +#line 11166 [TRAINER_HALEY_5] = { -#line 11102 +#line 11167 .trainerName = _("HALEY"), -#line 11103 +#line 11168 .trainerClass = TRAINER_CLASS_LASS, -#line 11104 +#line 11169 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11105 +#line 11170 F_TRAINER_FEMALE | -#line 11106 +#line 11171 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11107 +#line 11172 .doubleBattle = FALSE, -#line 11108 +#line 11173 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 11110 +#line 11175 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11112 +#line 11177 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11111 +#line 11176 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11114 +#line 11179 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11116 +#line 11181 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11115 +#line 11180 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11118 +#line 11183 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11120 +#line 11185 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11119 +#line 11184 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11122 +#line 11187 [TRAINER_SALLY] = { -#line 11123 +#line 11188 .trainerName = _("SALLY"), -#line 11124 +#line 11189 .trainerClass = TRAINER_CLASS_LASS, -#line 11125 +#line 11190 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11126 +#line 11191 F_TRAINER_FEMALE | -#line 11127 +#line 11192 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11128 +#line 11193 .doubleBattle = FALSE, -#line 11129 +#line 11194 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11131 +#line 11196 .species = SPECIES_ODDISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11133 +#line 11198 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11132 +#line 11197 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11135 +#line 11200 [TRAINER_ROBIN] = { -#line 11136 +#line 11201 .trainerName = _("ROBIN"), -#line 11137 +#line 11202 .trainerClass = TRAINER_CLASS_LASS, -#line 11138 +#line 11203 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11139 +#line 11204 F_TRAINER_FEMALE | -#line 11140 +#line 11205 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11141 +#line 11206 .doubleBattle = FALSE, -#line 11142 +#line 11207 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 11144 +#line 11209 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11146 +#line 11211 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11145 +#line 11210 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11148 +#line 11213 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11150 +#line 11215 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11149 +#line 11214 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11152 +#line 11217 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11154 +#line 11219 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11153 +#line 11218 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11156 +#line 11221 [TRAINER_ANDREA] = { -#line 11157 +#line 11222 .trainerName = _("ANDREA"), -#line 11158 +#line 11223 .trainerClass = TRAINER_CLASS_LASS, -#line 11159 +#line 11224 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11160 +#line 11225 F_TRAINER_FEMALE | -#line 11161 +#line 11226 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11162 +#line 11227 .doubleBattle = FALSE, -#line 11163 +#line 11228 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11165 +#line 11230 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11167 +#line 11232 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11166 +#line 11231 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11169 +#line 11234 [TRAINER_CRISSY] = { -#line 11170 +#line 11235 .trainerName = _("CRISSY"), -#line 11171 +#line 11236 .trainerClass = TRAINER_CLASS_LASS, -#line 11172 +#line 11237 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11173 +#line 11238 F_TRAINER_FEMALE | -#line 11174 +#line 11239 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11175 +#line 11240 .doubleBattle = FALSE, -#line 11176 +#line 11241 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11178 +#line 11243 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11180 +#line 11245 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11179 +#line 11244 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11182 +#line 11247 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11184 +#line 11249 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11183 +#line 11248 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11186 +#line 11251 [TRAINER_RICK] = { -#line 11187 +#line 11252 .trainerName = _("RICK"), -#line 11188 +#line 11253 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11189 +#line 11254 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11191 +#line 11256 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11192 +#line 11257 .doubleBattle = FALSE, -#line 11193 +#line 11258 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11195 +#line 11260 .species = SPECIES_WURMPLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11197 +#line 11262 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11196 +#line 11261 .lvl = 4, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11199 +#line 11264 .species = SPECIES_WURMPLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11201 +#line 11266 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11200 +#line 11265 .lvl = 4, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11203 +#line 11268 [TRAINER_LYLE] = { -#line 11204 +#line 11269 .trainerName = _("LYLE"), -#line 11205 +#line 11270 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11206 +#line 11271 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11208 +#line 11273 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11209 +#line 11274 .doubleBattle = FALSE, -#line 11210 +#line 11275 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 11212 +#line 11277 .species = SPECIES_WURMPLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11214 +#line 11279 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11213 +#line 11278 .lvl = 3, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11216 +#line 11281 .species = SPECIES_WURMPLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11218 +#line 11283 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11217 +#line 11282 .lvl = 3, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11220 +#line 11285 .species = SPECIES_WURMPLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11222 +#line 11287 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11221 +#line 11286 .lvl = 3, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11224 +#line 11289 .species = SPECIES_WURMPLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11226 +#line 11291 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11225 +#line 11290 .lvl = 3, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11228 +#line 11293 [TRAINER_JOSE] = { -#line 11229 +#line 11294 .trainerName = _("JOSE"), -#line 11230 +#line 11295 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11231 +#line 11296 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11233 +#line 11298 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11234 +#line 11299 .doubleBattle = FALSE, -#line 11235 +#line 11300 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11237 +#line 11302 .species = SPECIES_WURMPLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11239 +#line 11304 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 11238 +#line 11303 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11241 +#line 11306 .species = SPECIES_NINCADA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11243 +#line 11308 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 11242 +#line 11307 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11245 +#line 11310 [TRAINER_DOUG] = { -#line 11246 +#line 11311 .trainerName = _("DOUG"), -#line 11247 +#line 11312 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11248 +#line 11313 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11250 +#line 11315 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11251 +#line 11316 .doubleBattle = FALSE, -#line 11252 +#line 11317 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11254 +#line 11319 .species = SPECIES_NINCADA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11256 +#line 11321 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11255 +#line 11320 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11258 +#line 11323 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11260 +#line 11325 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11259 +#line 11324 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11262 +#line 11327 [TRAINER_GREG] = { -#line 11263 +#line 11328 .trainerName = _("GREG"), -#line 11264 +#line 11329 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11265 +#line 11330 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11267 +#line 11332 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11268 +#line 11333 .doubleBattle = FALSE, -#line 11269 +#line 11334 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11271 +#line 11336 .species = SPECIES_VOLBEAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11273 +#line 11338 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11272 +#line 11337 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11275 +#line 11340 .species = SPECIES_ILLUMISE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11277 +#line 11342 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11276 +#line 11341 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11279 +#line 11344 [TRAINER_KENT] = { -#line 11280 +#line 11345 .trainerName = _("KENT"), -#line 11281 +#line 11346 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11282 +#line 11347 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11284 +#line 11349 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11285 +#line 11350 .doubleBattle = FALSE, -#line 11286 +#line 11351 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11288 +#line 11353 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11290 +#line 11355 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11289 +#line 11354 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11292 +#line 11357 [TRAINER_JAMES_1] = { -#line 11293 +#line 11358 .trainerName = _("JAMES"), -#line 11294 +#line 11359 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11295 +#line 11360 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11297 +#line 11362 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11298 +#line 11363 .doubleBattle = FALSE, -#line 11299 +#line 11364 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11301 +#line 11366 .species = SPECIES_NINCADA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11303 +#line 11368 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11302 +#line 11367 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11305 +#line 11370 .species = SPECIES_NINCADA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11307 +#line 11372 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11306 +#line 11371 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11309 +#line 11374 [TRAINER_JAMES_2] = { -#line 11310 +#line 11375 .trainerName = _("JAMES"), -#line 11311 +#line 11376 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11312 +#line 11377 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11314 +#line 11379 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11315 +#line 11380 .doubleBattle = FALSE, -#line 11316 +#line 11381 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11318 +#line 11383 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11320 +#line 11385 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 11319 +#line 11384 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11322 +#line 11387 [TRAINER_JAMES_3] = { -#line 11323 +#line 11388 .trainerName = _("JAMES"), -#line 11324 +#line 11389 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11325 +#line 11390 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11327 +#line 11392 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11328 +#line 11393 .doubleBattle = FALSE, -#line 11329 +#line 11394 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11331 +#line 11396 .species = SPECIES_DUSTOX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11333 +#line 11398 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11332 +#line 11397 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11335 +#line 11400 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11337 +#line 11402 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11336 +#line 11401 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11339 +#line 11404 [TRAINER_JAMES_4] = { -#line 11340 +#line 11405 .trainerName = _("JAMES"), -#line 11341 +#line 11406 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11342 +#line 11407 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11344 +#line 11409 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11345 +#line 11410 .doubleBattle = FALSE, -#line 11346 +#line 11411 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 11348 +#line 11413 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11350 +#line 11415 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11349 +#line 11414 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11352 +#line 11417 .species = SPECIES_DUSTOX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11354 +#line 11419 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11353 +#line 11418 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11356 +#line 11421 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11358 +#line 11423 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11357 +#line 11422 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11360 +#line 11425 [TRAINER_JAMES_5] = { -#line 11361 +#line 11426 .trainerName = _("JAMES"), -#line 11362 +#line 11427 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11363 +#line 11428 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11365 +#line 11430 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11366 +#line 11431 .doubleBattle = FALSE, -#line 11367 +#line 11432 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 11369 +#line 11434 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11371 +#line 11436 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11370 +#line 11435 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11373 +#line 11438 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11375 +#line 11440 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11374 +#line 11439 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11377 +#line 11442 .species = SPECIES_DUSTOX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11379 +#line 11444 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11378 +#line 11443 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11381 +#line 11446 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11383 +#line 11448 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11382 +#line 11447 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11385 +#line 11450 [TRAINER_BRICE] = { -#line 11386 +#line 11451 .trainerName = _("BRICE"), -#line 11387 +#line 11452 .trainerClass = TRAINER_CLASS_HIKER, -#line 11388 +#line 11453 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11390 +#line 11455 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11391 +#line 11456 .doubleBattle = FALSE, -#line 11392 +#line 11457 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11394 +#line 11459 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11396 +#line 11461 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11395 +#line 11460 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11398 +#line 11463 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11400 +#line 11465 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11399 +#line 11464 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11402 +#line 11467 [TRAINER_TRENT_1] = { -#line 11403 +#line 11468 .trainerName = _("TRENT"), -#line 11404 +#line 11469 .trainerClass = TRAINER_CLASS_HIKER, -#line 11405 +#line 11470 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11407 +#line 11472 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11408 +#line 11473 .doubleBattle = FALSE, -#line 11409 +#line 11474 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 11411 +#line 11476 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11413 +#line 11478 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11412 +#line 11477 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11415 +#line 11480 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11417 +#line 11482 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11416 +#line 11481 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11419 +#line 11484 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11421 +#line 11486 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11420 +#line 11485 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11423 +#line 11488 [TRAINER_LENNY] = { -#line 11424 +#line 11489 .trainerName = _("LENNY"), -#line 11425 +#line 11490 .trainerClass = TRAINER_CLASS_HIKER, -#line 11426 +#line 11491 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11428 +#line 11493 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11429 +#line 11494 .doubleBattle = FALSE, -#line 11430 +#line 11495 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11432 +#line 11497 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11434 +#line 11499 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11433 +#line 11498 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11436 +#line 11501 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11438 +#line 11503 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11437 +#line 11502 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11440 +#line 11505 [TRAINER_LUCAS_1] = { -#line 11441 +#line 11506 .trainerName = _("LUCAS"), -#line 11442 +#line 11507 .trainerClass = TRAINER_CLASS_HIKER, -#line 11443 +#line 11508 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11445 +#line 11510 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11446 +#line 11511 .doubleBattle = FALSE, -#line 11447 +#line 11512 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11449 +#line 11514 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11451 +#line 11516 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11450 +#line 11515 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11453 +#line 11518 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11455 +#line 11520 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11454 +#line 11519 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11457 +#line 11522 [TRAINER_ALAN] = { -#line 11458 +#line 11523 .trainerName = _("ALAN"), -#line 11459 +#line 11524 .trainerClass = TRAINER_CLASS_HIKER, -#line 11460 +#line 11525 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11462 +#line 11527 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11463 +#line 11528 .doubleBattle = FALSE, -#line 11464 +#line 11529 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 11466 +#line 11531 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11468 +#line 11533 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11467 +#line 11532 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11470 +#line 11535 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11472 +#line 11537 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11471 +#line 11536 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11474 +#line 11539 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11476 +#line 11541 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11475 +#line 11540 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11478 +#line 11543 [TRAINER_CLARK] = { -#line 11479 +#line 11544 .trainerName = _("CLARK"), -#line 11480 +#line 11545 .trainerClass = TRAINER_CLASS_HIKER, -#line 11481 +#line 11546 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11483 +#line 11548 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11484 +#line 11549 .doubleBattle = FALSE, -#line 11485 +#line 11550 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11487 +#line 11552 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11489 +#line 11554 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11488 +#line 11553 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11491 +#line 11556 [TRAINER_ERIC] = { -#line 11492 +#line 11557 .trainerName = _("ERIC"), -#line 11493 +#line 11558 .trainerClass = TRAINER_CLASS_HIKER, -#line 11494 +#line 11559 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11496 +#line 11561 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11497 +#line 11562 .doubleBattle = FALSE, -#line 11498 +#line 11563 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11500 +#line 11565 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11502 +#line 11567 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11501 +#line 11566 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11504 +#line 11569 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11506 +#line 11571 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11505 +#line 11570 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11508 +#line 11573 [TRAINER_LUCAS_2] = { -#line 11509 +#line 11574 .trainerName = _("LUCAS"), -#line 11510 +#line 11575 .trainerClass = TRAINER_CLASS_HIKER, -#line 11511 +#line 11576 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11513 +#line 11578 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11514 +#line 11579 .doubleBattle = FALSE, -#line 11515 +#line 11580 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11517 +#line 11582 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11519 +#line 11584 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11518 +#line 11583 .lvl = 9, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11520 +#line 11585 MOVE_SPLASH, MOVE_WATER_GUN, }, }, }, }, -#line 11523 +#line 11588 [TRAINER_MIKE_1] = { -#line 11524 +#line 11589 .trainerName = _("MIKE"), -#line 11525 +#line 11590 .trainerClass = TRAINER_CLASS_HIKER, -#line 11526 +#line 11591 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11528 +#line 11593 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11529 +#line 11594 .doubleBattle = FALSE, -#line 11530 +#line 11595 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11532 +#line 11597 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11534 +#line 11599 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11533 +#line 11598 .lvl = 10, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11535 +#line 11600 MOVE_GUST, MOVE_GROWL, }, }, { -#line 11538 +#line 11603 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11540 +#line 11605 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11539 +#line 11604 .lvl = 10, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11541 +#line 11606 MOVE_BITE, MOVE_SCARY_FACE, }, }, }, }, -#line 11544 +#line 11609 [TRAINER_MIKE_2] = { -#line 11545 +#line 11610 .trainerName = _("MIKE"), -#line 11546 +#line 11611 .trainerClass = TRAINER_CLASS_HIKER, -#line 11547 +#line 11612 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11549 +#line 11614 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11550 +#line 11615 .doubleBattle = FALSE, -#line 11551 +#line 11616 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 11553 +#line 11618 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11555 +#line 11620 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11554 +#line 11619 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11557 +#line 11622 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11559 +#line 11624 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11558 +#line 11623 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11561 +#line 11626 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11563 +#line 11628 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11562 +#line 11627 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11565 +#line 11630 [TRAINER_TRENT_2] = { -#line 11566 +#line 11631 .trainerName = _("TRENT"), -#line 11567 +#line 11632 .trainerClass = TRAINER_CLASS_HIKER, -#line 11568 +#line 11633 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11570 +#line 11635 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11571 +#line 11636 .doubleBattle = FALSE, -#line 11572 +#line 11637 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 11574 +#line 11639 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11576 +#line 11641 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 11575 +#line 11640 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11578 +#line 11643 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11580 +#line 11645 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 11579 +#line 11644 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11582 +#line 11647 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11584 +#line 11649 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 11583 +#line 11648 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11586 +#line 11651 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11588 +#line 11653 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 11587 +#line 11652 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11590 +#line 11655 [TRAINER_TRENT_3] = { -#line 11591 +#line 11656 .trainerName = _("TRENT"), -#line 11592 +#line 11657 .trainerClass = TRAINER_CLASS_HIKER, -#line 11593 +#line 11658 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11595 +#line 11660 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11596 +#line 11661 .doubleBattle = FALSE, -#line 11597 +#line 11662 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 11599 +#line 11664 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11601 +#line 11666 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11600 +#line 11665 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11603 +#line 11668 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11605 +#line 11670 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11604 +#line 11669 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11607 +#line 11672 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11609 +#line 11674 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11608 +#line 11673 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11611 +#line 11676 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11613 +#line 11678 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11612 +#line 11677 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11615 +#line 11680 [TRAINER_TRENT_4] = { -#line 11616 +#line 11681 .trainerName = _("TRENT"), -#line 11617 +#line 11682 .trainerClass = TRAINER_CLASS_HIKER, -#line 11618 +#line 11683 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11620 +#line 11685 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11621 +#line 11686 .doubleBattle = FALSE, -#line 11622 +#line 11687 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 11624 +#line 11689 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11626 +#line 11691 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11625 +#line 11690 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11628 +#line 11693 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11630 +#line 11695 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11629 +#line 11694 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11632 +#line 11697 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11634 +#line 11699 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11633 +#line 11698 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11636 +#line 11701 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11638 +#line 11703 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11637 +#line 11702 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11640 +#line 11705 [TRAINER_TRENT_5] = { -#line 11641 +#line 11706 .trainerName = _("TRENT"), -#line 11642 +#line 11707 .trainerClass = TRAINER_CLASS_HIKER, -#line 11643 +#line 11708 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11645 +#line 11710 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11646 +#line 11711 .doubleBattle = FALSE, -#line 11647 +#line 11712 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 11649 +#line 11714 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11651 +#line 11716 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11650 +#line 11715 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11653 +#line 11718 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11655 +#line 11720 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11654 +#line 11719 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11657 +#line 11722 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11659 +#line 11724 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11658 +#line 11723 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11661 +#line 11726 .species = SPECIES_GOLEM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11663 +#line 11728 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11662 +#line 11727 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11665 +#line 11730 [TRAINER_DEZ_AND_LUKE] = { -#line 11666 +#line 11731 .trainerName = _("DEZ & LUKE"), -#line 11667 +#line 11732 .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, -#line 11668 +#line 11733 .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .encounterMusic_gender = -#line 11670 +#line 11735 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 11671 +#line 11736 .doubleBattle = TRUE, -#line 11672 +#line 11737 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11674 +#line 11739 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11676 +#line 11741 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11675 +#line 11740 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11678 +#line 11743 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11680 +#line 11745 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11679 +#line 11744 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11682 +#line 11747 [TRAINER_LEA_AND_JED] = { -#line 11683 +#line 11748 .trainerName = _("LEA & JED"), -#line 11684 +#line 11749 .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, -#line 11685 +#line 11750 .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .encounterMusic_gender = -#line 11687 +#line 11752 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 11688 +#line 11753 .doubleBattle = TRUE, -#line 11689 +#line 11754 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11691 +#line 11756 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11693 +#line 11758 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11692 +#line 11757 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11695 +#line 11760 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11697 +#line 11762 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11696 +#line 11761 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11699 +#line 11764 [TRAINER_KIRA_AND_DAN_1] = { -#line 11700 +#line 11765 .trainerName = _("KIRA & DAN"), -#line 11701 +#line 11766 .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, -#line 11702 +#line 11767 .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .encounterMusic_gender = -#line 11704 +#line 11769 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 11705 +#line 11770 .doubleBattle = TRUE, -#line 11706 +#line 11771 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11708 +#line 11773 .species = SPECIES_VOLBEAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11710 +#line 11775 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11709 +#line 11774 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11712 +#line 11777 .species = SPECIES_ILLUMISE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11714 +#line 11779 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11713 +#line 11778 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11716 +#line 11781 [TRAINER_KIRA_AND_DAN_2] = { -#line 11717 +#line 11782 .trainerName = _("KIRA & DAN"), -#line 11718 +#line 11783 .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, -#line 11719 +#line 11784 .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .encounterMusic_gender = -#line 11721 +#line 11786 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 11722 +#line 11787 .doubleBattle = TRUE, -#line 11723 +#line 11788 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11725 +#line 11790 .species = SPECIES_VOLBEAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11727 +#line 11792 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 11726 +#line 11791 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11729 +#line 11794 .species = SPECIES_ILLUMISE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11731 +#line 11796 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 11730 +#line 11795 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11733 +#line 11798 [TRAINER_KIRA_AND_DAN_3] = { -#line 11734 +#line 11799 .trainerName = _("KIRA & DAN"), -#line 11735 +#line 11800 .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, -#line 11736 +#line 11801 .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .encounterMusic_gender = -#line 11738 +#line 11803 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 11739 +#line 11804 .doubleBattle = TRUE, -#line 11740 +#line 11805 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11742 +#line 11807 .species = SPECIES_VOLBEAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11744 +#line 11809 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11743 +#line 11808 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11746 +#line 11811 .species = SPECIES_ILLUMISE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11748 +#line 11813 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11747 +#line 11812 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11750 +#line 11815 [TRAINER_KIRA_AND_DAN_4] = { -#line 11751 +#line 11816 .trainerName = _("KIRA & DAN"), -#line 11752 +#line 11817 .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, -#line 11753 +#line 11818 .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .encounterMusic_gender = -#line 11755 +#line 11820 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 11756 +#line 11821 .doubleBattle = TRUE, -#line 11757 +#line 11822 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11759 +#line 11824 .species = SPECIES_VOLBEAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11761 +#line 11826 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11760 +#line 11825 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11763 +#line 11828 .species = SPECIES_ILLUMISE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11765 +#line 11830 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11764 +#line 11829 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11767 +#line 11832 [TRAINER_KIRA_AND_DAN_5] = { -#line 11768 +#line 11833 .trainerName = _("KIRA & DAN"), -#line 11769 +#line 11834 .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, -#line 11770 +#line 11835 .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .encounterMusic_gender = -#line 11772 +#line 11837 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 11773 +#line 11838 .doubleBattle = TRUE, -#line 11774 +#line 11839 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11776 +#line 11841 .species = SPECIES_VOLBEAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11778 +#line 11843 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11777 +#line 11842 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11780 +#line 11845 .species = SPECIES_ILLUMISE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11782 +#line 11847 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11781 +#line 11846 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11784 +#line 11849 [TRAINER_JOHANNA] = { -#line 11785 +#line 11850 .trainerName = _("JOHANNA"), -#line 11786 +#line 11851 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 11787 +#line 11852 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 11788 +#line 11853 F_TRAINER_FEMALE | -#line 11789 +#line 11854 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11790 +#line 11855 .doubleBattle = FALSE, -#line 11791 +#line 11856 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11793 +#line 11858 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11795 +#line 11860 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11794 +#line 11859 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11797 +#line 11862 [TRAINER_GERALD] = { -#line 11798 +#line 11863 .trainerName = _("GERALD"), -#line 11799 +#line 11864 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 11800 +#line 11865 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 11802 +#line 11867 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 11803 +#line 11868 .items = { ITEM_HYPER_POTION }, -#line 11804 +#line 11869 .doubleBattle = FALSE, -#line 11805 +#line 11870 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11807 +#line 11872 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11809 +#line 11874 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11808 +#line 11873 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11810 +#line 11875 MOVE_FLAMETHROWER, MOVE_FURY_SWIPES, MOVE_FEINT_ATTACK, @@ -29838,39 +29838,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 11815 +#line 11880 [TRAINER_VIVIAN] = { -#line 11816 +#line 11881 .trainerName = _("VIVIAN"), -#line 11817 +#line 11882 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 11818 +#line 11883 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 11819 +#line 11884 F_TRAINER_FEMALE | -#line 11820 +#line 11885 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 11821 +#line 11886 .doubleBattle = FALSE, -#line 11822 +#line 11887 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11824 +#line 11889 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11826 +#line 11891 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11825 +#line 11890 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11827 +#line 11892 MOVE_BIDE, MOVE_DETECT, MOVE_CONFUSION, @@ -29878,17 +29878,17 @@ F_TRAINER_FEMALE | }, }, { -#line 11832 +#line 11897 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11834 +#line 11899 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11833 +#line 11898 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11835 +#line 11900 MOVE_THUNDER_PUNCH, MOVE_DETECT, MOVE_CONFUSION, @@ -29897,39 +29897,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 11840 +#line 11905 [TRAINER_DANIELLE] = { -#line 11841 +#line 11906 .trainerName = _("DANIELLE"), -#line 11842 +#line 11907 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 11843 +#line 11908 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 11844 +#line 11909 F_TRAINER_FEMALE | -#line 11845 +#line 11910 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 11846 +#line 11911 .doubleBattle = FALSE, -#line 11847 +#line 11912 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11849 +#line 11914 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11851 +#line 11916 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11850 +#line 11915 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11852 +#line 11917 MOVE_BIDE, MOVE_DETECT, MOVE_CONFUSION, @@ -29938,37 +29938,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 11857 +#line 11922 [TRAINER_HIDEO] = { -#line 11858 +#line 11923 .trainerName = _("HIDEO"), -#line 11859 +#line 11924 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 11860 +#line 11925 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 11862 +#line 11927 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 11863 +#line 11928 .doubleBattle = FALSE, -#line 11864 +#line 11929 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11866 +#line 11931 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11868 +#line 11933 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11867 +#line 11932 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11869 +#line 11934 MOVE_TACKLE, MOVE_SELF_DESTRUCT, MOVE_SLUDGE, @@ -29976,17 +29976,17 @@ F_TRAINER_FEMALE | }, }, { -#line 11874 +#line 11939 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11876 +#line 11941 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11875 +#line 11940 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11877 +#line 11942 MOVE_TACKLE, MOVE_POISON_GAS, MOVE_SLUDGE, @@ -29995,37 +29995,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 11882 +#line 11947 [TRAINER_KEIGO] = { -#line 11883 +#line 11948 .trainerName = _("KEIGO"), -#line 11884 +#line 11949 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 11885 +#line 11950 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 11887 +#line 11952 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 11888 +#line 11953 .doubleBattle = FALSE, -#line 11889 +#line 11954 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11891 +#line 11956 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11893 +#line 11958 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11892 +#line 11957 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11894 +#line 11959 MOVE_POISON_GAS, MOVE_SELF_DESTRUCT, MOVE_SLUDGE, @@ -30033,17 +30033,17 @@ F_TRAINER_FEMALE | }, }, { -#line 11899 +#line 11964 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11901 +#line 11966 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11900 +#line 11965 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11902 +#line 11967 MOVE_SAND_ATTACK, MOVE_DOUBLE_TEAM, MOVE_FURY_CUTTER, @@ -30052,37 +30052,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 11907 +#line 11972 [TRAINER_RILEY] = { -#line 11908 +#line 11973 .trainerName = _("RILEY"), -#line 11909 +#line 11974 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 11910 +#line 11975 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 11912 +#line 11977 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 11913 +#line 11978 .doubleBattle = FALSE, -#line 11914 +#line 11979 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11916 +#line 11981 .species = SPECIES_NINCADA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11918 +#line 11983 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11917 +#line 11982 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11919 +#line 11984 MOVE_LEECH_LIFE, MOVE_FURY_SWIPES, MOVE_MIND_READER, @@ -30090,17 +30090,17 @@ F_TRAINER_FEMALE | }, }, { -#line 11924 +#line 11989 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11926 +#line 11991 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11925 +#line 11990 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11927 +#line 11992 MOVE_TACKLE, MOVE_SELF_DESTRUCT, MOVE_SLUDGE, @@ -30109,170 +30109,170 @@ F_TRAINER_FEMALE | }, }, }, -#line 11932 +#line 11997 [TRAINER_FLINT] = { -#line 11933 +#line 11998 .trainerName = _("FLINT"), -#line 11934 +#line 11999 .trainerClass = TRAINER_CLASS_CAMPER, -#line 11935 +#line 12000 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 11937 +#line 12002 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11938 +#line 12003 .doubleBattle = FALSE, -#line 11939 +#line 12004 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11941 +#line 12006 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11943 +#line 12008 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 11942 +#line 12007 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11945 +#line 12010 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11947 +#line 12012 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 11946 +#line 12011 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11949 +#line 12014 [TRAINER_ASHLEY] = { -#line 11950 +#line 12015 .trainerName = _("ASHLEY"), -#line 11951 +#line 12016 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 11952 +#line 12017 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 11953 +#line 12018 F_TRAINER_FEMALE | -#line 11954 +#line 12019 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 11955 +#line 12020 .doubleBattle = FALSE, -#line 11956 +#line 12021 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 11958 +#line 12023 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11960 +#line 12025 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11959 +#line 12024 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11962 +#line 12027 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11964 +#line 12029 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11963 +#line 12028 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11966 +#line 12031 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11968 +#line 12033 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11967 +#line 12032 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11970 +#line 12035 [TRAINER_WALLY_MAUVILLE] = { -#line 11971 +#line 12036 .trainerName = _("WALLY"), -#line 11972 +#line 12037 .trainerClass = TRAINER_CLASS_RIVAL, -#line 11973 +#line 12038 .trainerPic = TRAINER_PIC_WALLY, .encounterMusic_gender = -#line 11975 +#line 12040 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11976 +#line 12041 .doubleBattle = FALSE, -#line 11977 +#line 12042 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11979 +#line 12044 .species = SPECIES_RALTS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11981 +#line 12046 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11980 +#line 12045 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11983 +#line 12048 [TRAINER_WALLY_VR_2] = { -#line 11984 +#line 12049 .trainerName = _("WALLY"), -#line 11985 +#line 12050 .trainerClass = TRAINER_CLASS_RIVAL, -#line 11986 +#line 12051 .trainerPic = TRAINER_PIC_WALLY, .encounterMusic_gender = -#line 11988 +#line 12053 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11989 +#line 12054 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 11990 +#line 12055 .doubleBattle = FALSE, -#line 11991 +#line 12056 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 11993 +#line 12058 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11995 +#line 12060 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 11994 +#line 12059 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11996 +#line 12061 MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, @@ -30280,17 +30280,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12001 +#line 12066 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12003 +#line 12068 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12002 +#line 12067 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12004 +#line 12069 MOVE_SING, MOVE_ASSIST, MOVE_CHARM, @@ -30298,17 +30298,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12009 +#line 12074 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12011 +#line 12076 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12010 +#line 12075 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12012 +#line 12077 MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, @@ -30316,17 +30316,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12017 +#line 12082 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12019 +#line 12084 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12018 +#line 12083 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12020 +#line 12085 MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, @@ -30334,17 +30334,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12025 +#line 12090 .species = SPECIES_GARDEVOIR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12027 +#line 12092 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 12026 +#line 12091 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12028 +#line 12093 MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, @@ -30353,39 +30353,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 12033 +#line 12098 [TRAINER_WALLY_VR_3] = { -#line 12034 +#line 12099 .trainerName = _("WALLY"), -#line 12035 +#line 12100 .trainerClass = TRAINER_CLASS_RIVAL, -#line 12036 +#line 12101 .trainerPic = TRAINER_PIC_WALLY, .encounterMusic_gender = -#line 12038 +#line 12103 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 12039 +#line 12104 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 12040 +#line 12105 .doubleBattle = FALSE, -#line 12041 +#line 12106 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 12043 +#line 12108 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12045 +#line 12110 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12044 +#line 12109 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12046 +#line 12111 MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, @@ -30393,17 +30393,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12051 +#line 12116 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12053 +#line 12118 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12052 +#line 12117 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12054 +#line 12119 MOVE_SING, MOVE_ASSIST, MOVE_CHARM, @@ -30411,17 +30411,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12059 +#line 12124 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12061 +#line 12126 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12060 +#line 12125 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12062 +#line 12127 MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, @@ -30429,17 +30429,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12067 +#line 12132 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12069 +#line 12134 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12068 +#line 12133 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12070 +#line 12135 MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, @@ -30447,17 +30447,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12075 +#line 12140 .species = SPECIES_GARDEVOIR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12077 +#line 12142 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 12076 +#line 12141 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12078 +#line 12143 MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, @@ -30466,39 +30466,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 12083 +#line 12148 [TRAINER_WALLY_VR_4] = { -#line 12084 +#line 12149 .trainerName = _("WALLY"), -#line 12085 +#line 12150 .trainerClass = TRAINER_CLASS_RIVAL, -#line 12086 +#line 12151 .trainerPic = TRAINER_PIC_WALLY, .encounterMusic_gender = -#line 12088 +#line 12153 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 12089 +#line 12154 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 12090 +#line 12155 .doubleBattle = FALSE, -#line 12091 +#line 12156 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 12093 +#line 12158 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12095 +#line 12160 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12094 +#line 12159 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12096 +#line 12161 MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, @@ -30506,17 +30506,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12101 +#line 12166 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12103 +#line 12168 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12102 +#line 12167 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12104 +#line 12169 MOVE_SING, MOVE_ASSIST, MOVE_CHARM, @@ -30524,17 +30524,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12109 +#line 12174 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12111 +#line 12176 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12110 +#line 12175 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12112 +#line 12177 MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, @@ -30542,17 +30542,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12117 +#line 12182 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12119 +#line 12184 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12118 +#line 12183 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12120 +#line 12185 MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, @@ -30560,17 +30560,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12125 +#line 12190 .species = SPECIES_GARDEVOIR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12127 +#line 12192 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 12126 +#line 12191 .lvl = 54, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12128 +#line 12193 MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, @@ -30579,39 +30579,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 12133 +#line 12198 [TRAINER_WALLY_VR_5] = { -#line 12134 +#line 12199 .trainerName = _("WALLY"), -#line 12135 +#line 12200 .trainerClass = TRAINER_CLASS_RIVAL, -#line 12136 +#line 12201 .trainerPic = TRAINER_PIC_WALLY, .encounterMusic_gender = -#line 12138 +#line 12203 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 12139 +#line 12204 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 12140 +#line 12205 .doubleBattle = FALSE, -#line 12141 +#line 12206 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 12143 +#line 12208 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12145 +#line 12210 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12144 +#line 12209 .lvl = 56, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12146 +#line 12211 MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, @@ -30619,17 +30619,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12151 +#line 12216 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12153 +#line 12218 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12152 +#line 12217 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12154 +#line 12219 MOVE_SING, MOVE_ASSIST, MOVE_CHARM, @@ -30637,17 +30637,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12159 +#line 12224 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12161 +#line 12226 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12160 +#line 12225 .lvl = 56, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12162 +#line 12227 MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, @@ -30655,17 +30655,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12167 +#line 12232 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12169 +#line 12234 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12168 +#line 12233 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12170 +#line 12235 MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, @@ -30673,17 +30673,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12175 +#line 12240 .species = SPECIES_GARDEVOIR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12177 +#line 12242 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 12176 +#line 12241 .lvl = 57, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12178 +#line 12243 MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, @@ -30692,925 +30692,925 @@ F_TRAINER_FEMALE | }, }, }, -#line 12183 +#line 12248 [TRAINER_BRENDAN_LILYCOVE_MUDKIP] = { -#line 12184 +#line 12249 .trainerName = _("BRENDAN"), -#line 12185 +#line 12250 .trainerClass = TRAINER_CLASS_RIVAL, -#line 12186 +#line 12251 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 12188 +#line 12253 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 12189 +#line 12254 .doubleBattle = FALSE, -#line 12190 +#line 12255 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 12192 +#line 12257 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12194 +#line 12259 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12193 +#line 12258 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12196 +#line 12261 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12198 +#line 12263 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12197 +#line 12262 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12200 +#line 12265 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12202 +#line 12267 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12201 +#line 12266 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12204 +#line 12269 .species = SPECIES_GROVYLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12206 +#line 12271 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 12205 +#line 12270 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12208 +#line 12273 [TRAINER_BRENDAN_LILYCOVE_TREECKO] = { -#line 12209 +#line 12274 .trainerName = _("BRENDAN"), -#line 12210 +#line 12275 .trainerClass = TRAINER_CLASS_RIVAL, -#line 12211 +#line 12276 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 12213 +#line 12278 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 12214 +#line 12279 .doubleBattle = FALSE, -#line 12215 +#line 12280 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 12217 +#line 12282 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12219 +#line 12284 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12218 +#line 12283 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12221 +#line 12286 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12223 +#line 12288 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12222 +#line 12287 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12225 +#line 12290 .species = SPECIES_LUDICOLO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12227 +#line 12292 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12226 +#line 12291 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12229 +#line 12294 .species = SPECIES_COMBUSKEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12231 +#line 12296 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 12230 +#line 12295 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12233 +#line 12298 [TRAINER_BRENDAN_LILYCOVE_TORCHIC] = { -#line 12234 +#line 12299 .trainerName = _("BRENDAN"), -#line 12235 +#line 12300 .trainerClass = TRAINER_CLASS_RIVAL, -#line 12236 +#line 12301 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 12238 +#line 12303 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 12239 +#line 12304 .doubleBattle = FALSE, -#line 12240 +#line 12305 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 12242 +#line 12307 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12244 +#line 12309 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12243 +#line 12308 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12246 +#line 12311 .species = SPECIES_LUDICOLO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12248 +#line 12313 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12247 +#line 12312 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12250 +#line 12315 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12252 +#line 12317 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12251 +#line 12316 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12254 +#line 12319 .species = SPECIES_MARSHTOMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12256 +#line 12321 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 12255 +#line 12320 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12258 +#line 12323 [TRAINER_MAY_LILYCOVE_MUDKIP] = { -#line 12259 +#line 12324 .trainerName = _("MAY"), -#line 12260 +#line 12325 .trainerClass = TRAINER_CLASS_RIVAL, -#line 12261 +#line 12326 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 12262 +#line 12327 F_TRAINER_FEMALE | -#line 12263 +#line 12328 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 12264 +#line 12329 .doubleBattle = FALSE, -#line 12265 +#line 12330 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 12267 +#line 12332 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12269 +#line 12334 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12268 +#line 12333 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12271 +#line 12336 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12273 +#line 12338 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12272 +#line 12337 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12275 +#line 12340 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12277 +#line 12342 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12276 +#line 12341 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12279 +#line 12344 .species = SPECIES_GROVYLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12281 +#line 12346 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 12280 +#line 12345 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12283 +#line 12348 [TRAINER_MAY_LILYCOVE_TREECKO] = { -#line 12284 +#line 12349 .trainerName = _("MAY"), -#line 12285 +#line 12350 .trainerClass = TRAINER_CLASS_RIVAL, -#line 12286 +#line 12351 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 12287 +#line 12352 F_TRAINER_FEMALE | -#line 12288 +#line 12353 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 12289 +#line 12354 .doubleBattle = FALSE, -#line 12290 +#line 12355 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 12292 +#line 12357 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12294 +#line 12359 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12293 +#line 12358 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12296 +#line 12361 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12298 +#line 12363 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12297 +#line 12362 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12300 +#line 12365 .species = SPECIES_LUDICOLO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12302 +#line 12367 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12301 +#line 12366 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12304 +#line 12369 .species = SPECIES_COMBUSKEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12306 +#line 12371 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 12305 +#line 12370 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12308 +#line 12373 [TRAINER_MAY_LILYCOVE_TORCHIC] = { -#line 12309 +#line 12374 .trainerName = _("MAY"), -#line 12310 +#line 12375 .trainerClass = TRAINER_CLASS_RIVAL, -#line 12311 +#line 12376 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 12312 +#line 12377 F_TRAINER_FEMALE | -#line 12313 +#line 12378 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 12314 +#line 12379 .doubleBattle = FALSE, -#line 12315 +#line 12380 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 12317 +#line 12382 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12319 +#line 12384 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12318 +#line 12383 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12321 +#line 12386 .species = SPECIES_LUDICOLO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12323 +#line 12388 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12322 +#line 12387 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12325 +#line 12390 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12327 +#line 12392 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12326 +#line 12391 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12329 +#line 12394 .species = SPECIES_MARSHTOMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12331 +#line 12396 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 12330 +#line 12395 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12333 +#line 12398 [TRAINER_JONAH] = { -#line 12334 +#line 12399 .trainerName = _("JONAH"), -#line 12335 +#line 12400 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 12336 +#line 12401 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 12338 +#line 12403 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 12339 +#line 12404 .doubleBattle = FALSE, -#line 12340 +#line 12405 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 12342 +#line 12407 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12344 +#line 12409 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12343 +#line 12408 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12346 +#line 12411 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12348 +#line 12413 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12347 +#line 12412 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12350 +#line 12415 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12352 +#line 12417 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12351 +#line 12416 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12354 +#line 12419 [TRAINER_HENRY] = { -#line 12355 +#line 12420 .trainerName = _("HENRY"), -#line 12356 +#line 12421 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 12357 +#line 12422 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 12359 +#line 12424 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 12360 +#line 12425 .doubleBattle = FALSE, -#line 12361 +#line 12426 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12363 +#line 12428 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12365 +#line 12430 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12364 +#line 12429 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12367 +#line 12432 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12369 +#line 12434 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12368 +#line 12433 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12371 +#line 12436 [TRAINER_ROGER] = { -#line 12372 +#line 12437 .trainerName = _("ROGER"), -#line 12373 +#line 12438 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 12374 +#line 12439 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 12376 +#line 12441 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 12377 +#line 12442 .doubleBattle = FALSE, -#line 12378 +#line 12443 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 12380 +#line 12445 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12382 +#line 12447 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12381 +#line 12446 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12384 +#line 12449 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12386 +#line 12451 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12385 +#line 12450 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12388 +#line 12453 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12390 +#line 12455 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12389 +#line 12454 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12392 +#line 12457 [TRAINER_ALEXA] = { -#line 12393 +#line 12458 .trainerName = _("ALEXA"), -#line 12394 +#line 12459 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 12395 +#line 12460 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 12396 +#line 12461 F_TRAINER_FEMALE | -#line 12397 +#line 12462 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 12398 +#line 12463 .items = { ITEM_FULL_RESTORE }, -#line 12399 +#line 12464 .doubleBattle = FALSE, -#line 12400 +#line 12465 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12402 +#line 12467 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12404 +#line 12469 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 12403 +#line 12468 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12406 +#line 12471 .species = SPECIES_AZUMARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12408 +#line 12473 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 12407 +#line 12472 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12410 +#line 12475 [TRAINER_RUBEN] = { -#line 12411 +#line 12476 .trainerName = _("RUBEN"), -#line 12412 +#line 12477 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 12413 +#line 12478 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 12415 +#line 12480 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 12416 +#line 12481 .items = { ITEM_HYPER_POTION }, -#line 12417 +#line 12482 .doubleBattle = FALSE, -#line 12418 +#line 12483 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12420 +#line 12485 .species = SPECIES_SHIFTRY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12422 +#line 12487 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 12421 +#line 12486 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12424 +#line 12489 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12426 +#line 12491 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 12425 +#line 12490 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12428 +#line 12493 [TRAINER_KOJI_1] = { -#line 12429 +#line 12494 .trainerName = _("KOJI"), -#line 12430 +#line 12495 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 12431 +#line 12496 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 12433 +#line 12498 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 12434 +#line 12499 .doubleBattle = FALSE, -#line 12435 +#line 12500 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 12437 +#line 12502 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12439 +#line 12504 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12438 +#line 12503 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12441 +#line 12506 [TRAINER_WAYNE] = { -#line 12442 +#line 12507 .trainerName = _("WAYNE"), -#line 12443 +#line 12508 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 12444 +#line 12509 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 12446 +#line 12511 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 12447 +#line 12512 .doubleBattle = FALSE, -#line 12448 +#line 12513 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 12450 +#line 12515 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12452 +#line 12517 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12451 +#line 12516 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12454 +#line 12519 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12456 +#line 12521 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12455 +#line 12520 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12458 +#line 12523 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12460 +#line 12525 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12459 +#line 12524 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12462 +#line 12527 [TRAINER_AIDAN] = { -#line 12463 +#line 12528 .trainerName = _("AIDAN"), -#line 12464 +#line 12529 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 12465 +#line 12530 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 12467 +#line 12532 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 12468 +#line 12533 .doubleBattle = FALSE, -#line 12469 +#line 12534 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12471 +#line 12536 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12473 +#line 12538 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12472 +#line 12537 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12475 +#line 12540 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12477 +#line 12542 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12476 +#line 12541 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12479 +#line 12544 [TRAINER_REED] = { -#line 12480 +#line 12545 .trainerName = _("REED"), -#line 12481 +#line 12546 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 12482 +#line 12547 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 12484 +#line 12549 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 12485 +#line 12550 .doubleBattle = FALSE, -#line 12486 +#line 12551 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12488 +#line 12553 .species = SPECIES_SPHEAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12490 +#line 12555 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12489 +#line 12554 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12492 +#line 12557 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12494 +#line 12559 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12493 +#line 12558 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12496 +#line 12561 [TRAINER_TISHA] = { -#line 12497 +#line 12562 .trainerName = _("TISHA"), -#line 12498 +#line 12563 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 12499 +#line 12564 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 12500 +#line 12565 F_TRAINER_FEMALE | -#line 12501 +#line 12566 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 12502 +#line 12567 .doubleBattle = FALSE, -#line 12503 +#line 12568 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 12505 +#line 12570 .species = SPECIES_CHINCHOU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12507 +#line 12572 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12506 +#line 12571 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12509 +#line 12574 [TRAINER_TORI_AND_TIA] = { -#line 12510 +#line 12575 .trainerName = _("TORI & TIA"), -#line 12511 +#line 12576 .trainerClass = TRAINER_CLASS_TWINS, -#line 12512 +#line 12577 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 12514 +#line 12579 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 12515 +#line 12580 .doubleBattle = TRUE, -#line 12516 +#line 12581 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12518 +#line 12583 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12520 +#line 12585 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12519 +#line 12584 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12522 +#line 12587 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12524 +#line 12589 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12523 +#line 12588 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12526 +#line 12591 [TRAINER_KIM_AND_IRIS] = { -#line 12527 +#line 12592 .trainerName = _("KIM & IRIS"), -#line 12528 +#line 12593 .trainerClass = TRAINER_CLASS_SR_AND_JR, -#line 12529 +#line 12594 .trainerPic = TRAINER_PIC_SR_AND_JR, .encounterMusic_gender = -#line 12531 +#line 12596 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 12532 +#line 12597 .doubleBattle = TRUE, -#line 12533 +#line 12598 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12535 +#line 12600 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12537 +#line 12602 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12536 +#line 12601 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12538 +#line 12603 MOVE_SING, MOVE_FURY_ATTACK, MOVE_SAFEGUARD, @@ -31618,17 +31618,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12543 +#line 12608 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12545 +#line 12610 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12544 +#line 12609 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12546 +#line 12611 MOVE_FLAMETHROWER, MOVE_TAKE_DOWN, MOVE_REST, @@ -31637,37 +31637,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 12551 +#line 12616 [TRAINER_TYRA_AND_IVY] = { -#line 12552 +#line 12617 .trainerName = _("TYRA & IVY"), -#line 12553 +#line 12618 .trainerClass = TRAINER_CLASS_SR_AND_JR, -#line 12554 +#line 12619 .trainerPic = TRAINER_PIC_SR_AND_JR, .encounterMusic_gender = -#line 12556 +#line 12621 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 12557 +#line 12622 .doubleBattle = TRUE, -#line 12558 +#line 12623 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12560 +#line 12625 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12562 +#line 12627 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12561 +#line 12626 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12563 +#line 12628 MOVE_GROWTH, MOVE_STUN_SPORE, MOVE_MEGA_DRAIN, @@ -31675,17 +31675,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12568 +#line 12633 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12570 +#line 12635 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12569 +#line 12634 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12571 +#line 12636 MOVE_DEFENSE_CURL, MOVE_ROLLOUT, MOVE_MUD_SPORT, @@ -31694,37 +31694,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 12576 +#line 12641 [TRAINER_MEL_AND_PAUL] = { -#line 12577 +#line 12642 .trainerName = _("MEL & PAUL"), -#line 12578 +#line 12643 .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, -#line 12579 +#line 12644 .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .encounterMusic_gender = -#line 12581 +#line 12646 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 12582 +#line 12647 .doubleBattle = TRUE, -#line 12583 +#line 12648 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12585 +#line 12650 .species = SPECIES_DUSTOX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12587 +#line 12652 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12586 +#line 12651 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12588 +#line 12653 MOVE_GUST, MOVE_PSYBEAM, MOVE_TOXIC, @@ -31732,17 +31732,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12593 +#line 12658 .species = SPECIES_BEAUTIFLY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12595 +#line 12660 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12594 +#line 12659 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12596 +#line 12661 MOVE_GUST, MOVE_MEGA_DRAIN, MOVE_ATTRACT, @@ -31751,37 +31751,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 12601 +#line 12666 [TRAINER_JOHN_AND_JAY_1] = { -#line 12602 +#line 12667 .trainerName = _("JOHN & JAY"), -#line 12603 +#line 12668 .trainerClass = TRAINER_CLASS_OLD_COUPLE, -#line 12604 +#line 12669 .trainerPic = TRAINER_PIC_OLD_COUPLE, .encounterMusic_gender = -#line 12606 +#line 12671 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 12607 +#line 12672 .doubleBattle = TRUE, -#line 12608 +#line 12673 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12610 +#line 12675 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12612 +#line 12677 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 12611 +#line 12676 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12613 +#line 12678 MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, @@ -31789,17 +31789,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12618 +#line 12683 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12620 +#line 12685 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 12619 +#line 12684 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12621 +#line 12686 MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, @@ -31808,37 +31808,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 12626 +#line 12691 [TRAINER_JOHN_AND_JAY_2] = { -#line 12627 +#line 12692 .trainerName = _("JOHN & JAY"), -#line 12628 +#line 12693 .trainerClass = TRAINER_CLASS_OLD_COUPLE, -#line 12629 +#line 12694 .trainerPic = TRAINER_PIC_OLD_COUPLE, .encounterMusic_gender = -#line 12631 +#line 12696 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 12632 +#line 12697 .doubleBattle = TRUE, -#line 12633 +#line 12698 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12635 +#line 12700 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12637 +#line 12702 .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), -#line 12636 +#line 12701 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12638 +#line 12703 MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, @@ -31846,17 +31846,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12643 +#line 12708 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12645 +#line 12710 .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), -#line 12644 +#line 12709 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12646 +#line 12711 MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, @@ -31865,37 +31865,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 12651 +#line 12716 [TRAINER_JOHN_AND_JAY_3] = { -#line 12652 +#line 12717 .trainerName = _("JOHN & JAY"), -#line 12653 +#line 12718 .trainerClass = TRAINER_CLASS_OLD_COUPLE, -#line 12654 +#line 12719 .trainerPic = TRAINER_PIC_OLD_COUPLE, .encounterMusic_gender = -#line 12656 +#line 12721 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 12657 +#line 12722 .doubleBattle = TRUE, -#line 12658 +#line 12723 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12660 +#line 12725 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12662 +#line 12727 .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), -#line 12661 +#line 12726 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12663 +#line 12728 MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, @@ -31903,17 +31903,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12668 +#line 12733 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12670 +#line 12735 .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), -#line 12669 +#line 12734 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12671 +#line 12736 MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, @@ -31922,37 +31922,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 12676 +#line 12741 [TRAINER_JOHN_AND_JAY_4] = { -#line 12677 +#line 12742 .trainerName = _("JOHN & JAY"), -#line 12678 +#line 12743 .trainerClass = TRAINER_CLASS_OLD_COUPLE, -#line 12679 +#line 12744 .trainerPic = TRAINER_PIC_OLD_COUPLE, .encounterMusic_gender = -#line 12681 +#line 12746 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 12682 +#line 12747 .doubleBattle = TRUE, -#line 12683 +#line 12748 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12685 +#line 12750 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12687 +#line 12752 .iv = TRAINER_PARTY_IVS(27, 27, 27, 27, 27, 27), -#line 12686 +#line 12751 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12688 +#line 12753 MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, @@ -31960,17 +31960,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12693 +#line 12758 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12695 +#line 12760 .iv = TRAINER_PARTY_IVS(27, 27, 27, 27, 27, 27), -#line 12694 +#line 12759 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12696 +#line 12761 MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, @@ -31979,37 +31979,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 12701 +#line 12766 [TRAINER_JOHN_AND_JAY_5] = { -#line 12702 +#line 12767 .trainerName = _("JOHN & JAY"), -#line 12703 +#line 12768 .trainerClass = TRAINER_CLASS_OLD_COUPLE, -#line 12704 +#line 12769 .trainerPic = TRAINER_PIC_OLD_COUPLE, .encounterMusic_gender = -#line 12706 +#line 12771 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 12707 +#line 12772 .doubleBattle = TRUE, -#line 12708 +#line 12773 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12710 +#line 12775 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12712 +#line 12777 .iv = TRAINER_PARTY_IVS(29, 29, 29, 29, 29, 29), -#line 12711 +#line 12776 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12713 +#line 12778 MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, @@ -32017,17 +32017,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12718 +#line 12783 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12720 +#line 12785 .iv = TRAINER_PARTY_IVS(29, 29, 29, 29, 29, 29), -#line 12719 +#line 12784 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12721 +#line 12786 MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, @@ -32036,3098 +32036,3098 @@ F_TRAINER_FEMALE | }, }, }, -#line 12726 +#line 12791 [TRAINER_RELI_AND_IAN] = { -#line 12727 +#line 12792 .trainerName = _("RELI & IAN"), -#line 12728 +#line 12793 .trainerClass = TRAINER_CLASS_SIS_AND_BRO, -#line 12729 +#line 12794 .trainerPic = TRAINER_PIC_SIS_AND_BRO, .encounterMusic_gender = -#line 12731 +#line 12796 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 12732 +#line 12797 .doubleBattle = TRUE, -#line 12733 +#line 12798 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12735 +#line 12800 .species = SPECIES_AZUMARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12737 +#line 12802 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12736 +#line 12801 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12739 +#line 12804 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12741 +#line 12806 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12740 +#line 12805 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12743 +#line 12808 [TRAINER_LILA_AND_ROY_1] = { -#line 12744 +#line 12809 .trainerName = _("LILA & ROY"), -#line 12745 +#line 12810 .trainerClass = TRAINER_CLASS_SIS_AND_BRO, -#line 12746 +#line 12811 .trainerPic = TRAINER_PIC_SIS_AND_BRO, .encounterMusic_gender = -#line 12748 +#line 12813 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 12749 +#line 12814 .doubleBattle = TRUE, -#line 12750 +#line 12815 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12752 +#line 12817 .species = SPECIES_CHINCHOU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12754 +#line 12819 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12753 +#line 12818 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12756 +#line 12821 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12758 +#line 12823 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12757 +#line 12822 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12760 +#line 12825 [TRAINER_LILA_AND_ROY_2] = { -#line 12761 +#line 12826 .trainerName = _("LILA & ROY"), -#line 12762 +#line 12827 .trainerClass = TRAINER_CLASS_SIS_AND_BRO, -#line 12763 +#line 12828 .trainerPic = TRAINER_PIC_SIS_AND_BRO, .encounterMusic_gender = -#line 12765 +#line 12830 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 12766 +#line 12831 .doubleBattle = TRUE, -#line 12767 +#line 12832 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12769 +#line 12834 .species = SPECIES_CHINCHOU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12771 +#line 12836 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12770 +#line 12835 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12773 +#line 12838 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12775 +#line 12840 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12774 +#line 12839 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12777 +#line 12842 [TRAINER_LILA_AND_ROY_3] = { -#line 12778 +#line 12843 .trainerName = _("LILA & ROY"), -#line 12779 +#line 12844 .trainerClass = TRAINER_CLASS_SIS_AND_BRO, -#line 12780 +#line 12845 .trainerPic = TRAINER_PIC_SIS_AND_BRO, .encounterMusic_gender = -#line 12782 +#line 12847 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 12783 +#line 12848 .doubleBattle = TRUE, -#line 12784 +#line 12849 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12786 +#line 12851 .species = SPECIES_LANTURN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12788 +#line 12853 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12787 +#line 12852 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12790 +#line 12855 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12792 +#line 12857 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12791 +#line 12856 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12794 +#line 12859 [TRAINER_LILA_AND_ROY_4] = { -#line 12795 +#line 12860 .trainerName = _("LILA & ROY"), -#line 12796 +#line 12861 .trainerClass = TRAINER_CLASS_SIS_AND_BRO, -#line 12797 +#line 12862 .trainerPic = TRAINER_PIC_SIS_AND_BRO, .encounterMusic_gender = -#line 12799 +#line 12864 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 12800 +#line 12865 .doubleBattle = TRUE, -#line 12801 +#line 12866 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12803 +#line 12868 .species = SPECIES_LANTURN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12805 +#line 12870 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12804 +#line 12869 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12807 +#line 12872 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12809 +#line 12874 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12808 +#line 12873 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12811 +#line 12876 [TRAINER_LILA_AND_ROY_5] = { -#line 12812 +#line 12877 .trainerName = _("LILA & ROY"), -#line 12813 +#line 12878 .trainerClass = TRAINER_CLASS_SIS_AND_BRO, -#line 12814 +#line 12879 .trainerPic = TRAINER_PIC_SIS_AND_BRO, .encounterMusic_gender = -#line 12816 +#line 12881 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 12817 +#line 12882 .doubleBattle = TRUE, -#line 12818 +#line 12883 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12820 +#line 12885 .species = SPECIES_LANTURN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12822 +#line 12887 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12821 +#line 12886 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12824 +#line 12889 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12826 +#line 12891 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12825 +#line 12890 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12828 +#line 12893 [TRAINER_LISA_AND_RAY] = { -#line 12829 +#line 12894 .trainerName = _("LISA & RAY"), -#line 12830 +#line 12895 .trainerClass = TRAINER_CLASS_SIS_AND_BRO, -#line 12831 +#line 12896 .trainerPic = TRAINER_PIC_SIS_AND_BRO, .encounterMusic_gender = -#line 12833 +#line 12898 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 12834 +#line 12899 .doubleBattle = TRUE, -#line 12835 +#line 12900 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12837 +#line 12902 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12839 +#line 12904 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12838 +#line 12903 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12841 +#line 12906 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12843 +#line 12908 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12842 +#line 12907 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12845 +#line 12910 [TRAINER_CHRIS] = { -#line 12846 +#line 12911 .trainerName = _("CHRIS"), -#line 12847 +#line 12912 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 12848 +#line 12913 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 12850 +#line 12915 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 12851 +#line 12916 .doubleBattle = FALSE, -#line 12852 +#line 12917 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 12854 +#line 12919 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12856 +#line 12921 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12855 +#line 12920 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12858 +#line 12923 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12860 +#line 12925 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12859 +#line 12924 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12862 +#line 12927 .species = SPECIES_FEEBAS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12864 +#line 12929 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12863 +#line 12928 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12866 +#line 12931 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12868 +#line 12933 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12867 +#line 12932 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12870 +#line 12935 [TRAINER_DAWSON] = { -#line 12871 +#line 12936 .trainerName = _("DAWSON"), -#line 12872 +#line 12937 .trainerClass = TRAINER_CLASS_RICH_BOY, -#line 12873 +#line 12938 .trainerPic = TRAINER_PIC_RICH_BOY, .encounterMusic_gender = -#line 12875 +#line 12940 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 12876 +#line 12941 .doubleBattle = FALSE, -#line 12877 +#line 12942 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12879 +#line 12944 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12879 +#line 12944 .heldItem = ITEM_NUGGET, -#line 12881 +#line 12946 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12880 +#line 12945 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12883 +#line 12948 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12885 +#line 12950 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12884 +#line 12949 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12887 +#line 12952 [TRAINER_SARAH] = { -#line 12888 +#line 12953 .trainerName = _("SARAH"), -#line 12889 +#line 12954 .trainerClass = TRAINER_CLASS_LADY, -#line 12890 +#line 12955 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 12891 +#line 12956 F_TRAINER_FEMALE | -#line 12892 +#line 12957 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 12893 +#line 12958 .items = { ITEM_FULL_RESTORE }, -#line 12894 +#line 12959 .doubleBattle = FALSE, -#line 12895 +#line 12960 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12897 +#line 12962 .species = SPECIES_LOTAD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12899 +#line 12964 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12898 +#line 12963 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12901 +#line 12966 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12901 +#line 12966 .heldItem = ITEM_NUGGET, -#line 12903 +#line 12968 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12902 +#line 12967 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12905 +#line 12970 [TRAINER_DARIAN] = { -#line 12906 +#line 12971 .trainerName = _("DARIAN"), -#line 12907 +#line 12972 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 12908 +#line 12973 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 12910 +#line 12975 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 12911 +#line 12976 .doubleBattle = FALSE, -#line 12912 +#line 12977 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 12914 +#line 12979 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12916 +#line 12981 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12915 +#line 12980 .lvl = 9, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12918 +#line 12983 [TRAINER_HAILEY] = { -#line 12919 +#line 12984 .trainerName = _("HAILEY"), -#line 12920 +#line 12985 .trainerClass = TRAINER_CLASS_TUBER_F, -#line 12921 +#line 12986 .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = -#line 12922 +#line 12987 F_TRAINER_FEMALE | -#line 12923 +#line 12988 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 12924 +#line 12989 .doubleBattle = FALSE, -#line 12925 +#line 12990 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 12927 +#line 12992 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12929 +#line 12994 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12928 +#line 12993 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12931 +#line 12996 [TRAINER_CHANDLER] = { -#line 12932 +#line 12997 .trainerName = _("CHANDLER"), -#line 12933 +#line 12998 .trainerClass = TRAINER_CLASS_TUBER_M, -#line 12934 +#line 12999 .trainerPic = TRAINER_PIC_TUBER_M, .encounterMusic_gender = -#line 12936 +#line 13001 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 12937 +#line 13002 .doubleBattle = FALSE, -#line 12938 +#line 13003 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12940 +#line 13005 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12942 +#line 13007 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12941 +#line 13006 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12944 +#line 13009 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12946 +#line 13011 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12945 +#line 13010 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12948 +#line 13013 [TRAINER_KALEB] = { -#line 12949 +#line 13014 .trainerName = _("KALEB"), -#line 12950 +#line 13015 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 12951 +#line 13016 .trainerPic = TRAINER_PIC_POKEFAN_M, .encounterMusic_gender = -#line 12953 +#line 13018 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 12954 +#line 13019 .doubleBattle = FALSE, -#line 12955 +#line 13020 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12957 +#line 13022 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12957 +#line 13022 .heldItem = ITEM_ORAN_BERRY, -#line 12959 +#line 13024 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12958 +#line 13023 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12961 +#line 13026 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12961 +#line 13026 .heldItem = ITEM_ORAN_BERRY, -#line 12963 +#line 13028 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12962 +#line 13027 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12965 +#line 13030 [TRAINER_JOSEPH] = { -#line 12966 +#line 13031 .trainerName = _("JOSEPH"), -#line 12967 +#line 13032 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 12968 +#line 13033 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 12970 +#line 13035 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 12971 +#line 13036 .doubleBattle = FALSE, -#line 12972 +#line 13037 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12974 +#line 13039 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12976 +#line 13041 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12975 +#line 13040 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12978 +#line 13043 .species = SPECIES_VOLTORB, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12980 +#line 13045 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12979 +#line 13044 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12982 +#line 13047 [TRAINER_ALYSSA] = { -#line 12983 +#line 13048 .trainerName = _("ALYSSA"), -#line 12984 +#line 13049 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 12985 +#line 13050 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .encounterMusic_gender = -#line 12986 +#line 13051 F_TRAINER_FEMALE | -#line 12987 +#line 13052 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 12988 +#line 13053 .doubleBattle = FALSE, -#line 12989 +#line 13054 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 12991 +#line 13056 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12993 +#line 13058 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12992 +#line 13057 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12995 +#line 13060 [TRAINER_MARCOS] = { -#line 12996 +#line 13061 .trainerName = _("MARCOS"), -#line 12997 +#line 13062 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 12998 +#line 13063 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 13000 +#line 13065 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13001 +#line 13066 .doubleBattle = FALSE, -#line 13002 +#line 13067 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13004 +#line 13069 .species = SPECIES_VOLTORB, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13006 +#line 13071 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 13005 +#line 13070 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13008 +#line 13073 [TRAINER_RHETT] = { -#line 13009 +#line 13074 .trainerName = _("RHETT"), -#line 13010 +#line 13075 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 13011 +#line 13076 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 13013 +#line 13078 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13014 +#line 13079 .doubleBattle = FALSE, -#line 13015 +#line 13080 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13017 +#line 13082 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13019 +#line 13084 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 13018 +#line 13083 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13021 +#line 13086 [TRAINER_TYRON] = { -#line 13022 +#line 13087 .trainerName = _("TYRON"), -#line 13023 +#line 13088 .trainerClass = TRAINER_CLASS_CAMPER, -#line 13024 +#line 13089 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 13026 +#line 13091 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 13027 +#line 13092 .doubleBattle = FALSE, -#line 13028 +#line 13093 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13030 +#line 13095 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13032 +#line 13097 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13031 +#line 13096 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13034 +#line 13099 [TRAINER_CELINA] = { -#line 13035 +#line 13100 .trainerName = _("CELINA"), -#line 13036 +#line 13101 .trainerClass = TRAINER_CLASS_AROMA_LADY, -#line 13037 +#line 13102 .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = -#line 13038 +#line 13103 F_TRAINER_FEMALE | -#line 13039 +#line 13104 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 13040 +#line 13105 .doubleBattle = FALSE, -#line 13041 +#line 13106 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13043 +#line 13108 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13045 +#line 13110 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13044 +#line 13109 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13047 +#line 13112 [TRAINER_BIANCA] = { -#line 13048 +#line 13113 .trainerName = _("BIANCA"), -#line 13049 +#line 13114 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 13050 +#line 13115 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 13051 +#line 13116 F_TRAINER_FEMALE | -#line 13052 +#line 13117 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 13053 +#line 13118 .doubleBattle = FALSE, -#line 13054 +#line 13119 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13056 +#line 13121 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13058 +#line 13123 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13057 +#line 13122 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13060 +#line 13125 [TRAINER_HAYDEN] = { -#line 13061 +#line 13126 .trainerName = _("HAYDEN"), -#line 13062 +#line 13127 .trainerClass = TRAINER_CLASS_KINDLER, -#line 13063 +#line 13128 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 13065 +#line 13130 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 13066 +#line 13131 .doubleBattle = FALSE, -#line 13067 +#line 13132 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13069 +#line 13134 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13071 +#line 13136 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13070 +#line 13135 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13073 +#line 13138 [TRAINER_SOPHIE] = { -#line 13074 +#line 13139 .trainerName = _("SOPHIE"), -#line 13075 +#line 13140 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 13076 +#line 13141 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 13077 +#line 13142 F_TRAINER_FEMALE | -#line 13078 +#line 13143 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 13079 +#line 13144 .doubleBattle = FALSE, -#line 13080 +#line 13145 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13082 +#line 13147 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13084 +#line 13149 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13083 +#line 13148 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13086 +#line 13151 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13088 +#line 13153 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13087 +#line 13152 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13090 +#line 13155 [TRAINER_COBY] = { -#line 13091 +#line 13156 .trainerName = _("COBY"), -#line 13092 +#line 13157 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 13093 +#line 13158 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 13095 +#line 13160 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 13096 +#line 13161 .doubleBattle = FALSE, -#line 13097 +#line 13162 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13099 +#line 13164 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13101 +#line 13166 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13100 +#line 13165 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13103 +#line 13168 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13105 +#line 13170 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13104 +#line 13169 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13107 +#line 13172 [TRAINER_LAWRENCE] = { -#line 13108 +#line 13173 .trainerName = _("LAWRENCE"), -#line 13109 +#line 13174 .trainerClass = TRAINER_CLASS_CAMPER, -#line 13110 +#line 13175 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 13112 +#line 13177 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 13113 +#line 13178 .doubleBattle = FALSE, -#line 13114 +#line 13179 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13116 +#line 13181 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13118 +#line 13183 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13117 +#line 13182 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13120 +#line 13185 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13122 +#line 13187 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13121 +#line 13186 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13124 +#line 13189 [TRAINER_WYATT] = { -#line 13125 +#line 13190 .trainerName = _("WYATT"), -#line 13126 +#line 13191 .trainerClass = TRAINER_CLASS_POKEMANIAC, -#line 13127 +#line 13192 .trainerPic = TRAINER_PIC_POKEMANIAC, .encounterMusic_gender = -#line 13129 +#line 13194 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 13130 +#line 13195 .doubleBattle = FALSE, -#line 13131 +#line 13196 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13133 +#line 13198 .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13135 +#line 13200 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13134 +#line 13199 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13137 +#line 13202 .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13139 +#line 13204 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13138 +#line 13203 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13141 +#line 13206 [TRAINER_ANGELINA] = { -#line 13142 +#line 13207 .trainerName = _("ANGELINA"), -#line 13143 +#line 13208 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 13144 +#line 13209 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 13145 +#line 13210 F_TRAINER_FEMALE | -#line 13146 +#line 13211 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 13147 +#line 13212 .doubleBattle = FALSE, -#line 13148 +#line 13213 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13150 +#line 13215 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13152 +#line 13217 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13151 +#line 13216 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13154 +#line 13219 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13156 +#line 13221 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13155 +#line 13220 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13158 +#line 13223 [TRAINER_KAI] = { -#line 13159 +#line 13224 .trainerName = _("KAI"), -#line 13160 +#line 13225 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 13161 +#line 13226 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 13163 +#line 13228 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 13164 +#line 13229 .doubleBattle = FALSE, -#line 13165 +#line 13230 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13167 +#line 13232 .species = SPECIES_BARBOACH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13169 +#line 13234 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13168 +#line 13233 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13171 +#line 13236 [TRAINER_CHARLOTTE] = { -#line 13172 +#line 13237 .trainerName = _("CHARLOTTE"), -#line 13173 +#line 13238 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 13174 +#line 13239 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 13175 +#line 13240 F_TRAINER_FEMALE | -#line 13176 +#line 13241 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 13177 +#line 13242 .doubleBattle = FALSE, -#line 13178 +#line 13243 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13180 +#line 13245 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13182 +#line 13247 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13181 +#line 13246 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13184 +#line 13249 [TRAINER_DEANDRE] = { -#line 13185 +#line 13250 .trainerName = _("DEANDRE"), -#line 13186 +#line 13251 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 13187 +#line 13252 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 13189 +#line 13254 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 13190 +#line 13255 .doubleBattle = FALSE, -#line 13191 +#line 13256 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 13193 +#line 13258 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13195 +#line 13260 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13194 +#line 13259 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13197 +#line 13262 .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13199 +#line 13264 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13198 +#line 13263 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13201 +#line 13266 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13203 +#line 13268 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13202 +#line 13267 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13205 +#line 13270 [TRAINER_GRUNT_MAGMA_HIDEOUT_1] = { -#line 13206 +#line 13271 .trainerName = _("GRUNT"), -#line 13207 +#line 13272 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13208 +#line 13273 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13210 +#line 13275 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13211 +#line 13276 .doubleBattle = FALSE, -#line 13212 +#line 13277 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13214 +#line 13279 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13216 +#line 13281 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13215 +#line 13280 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13218 +#line 13283 [TRAINER_GRUNT_MAGMA_HIDEOUT_2] = { -#line 13219 +#line 13284 .trainerName = _("GRUNT"), -#line 13220 +#line 13285 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13221 +#line 13286 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13223 +#line 13288 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13224 +#line 13289 .doubleBattle = FALSE, -#line 13225 +#line 13290 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13227 +#line 13292 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13229 +#line 13294 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13228 +#line 13293 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13231 +#line 13296 [TRAINER_GRUNT_MAGMA_HIDEOUT_3] = { -#line 13232 +#line 13297 .trainerName = _("GRUNT"), -#line 13233 +#line 13298 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13234 +#line 13299 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13236 +#line 13301 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13237 +#line 13302 .doubleBattle = FALSE, -#line 13238 +#line 13303 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13240 +#line 13305 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13242 +#line 13307 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13241 +#line 13306 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13244 +#line 13309 [TRAINER_GRUNT_MAGMA_HIDEOUT_4] = { -#line 13245 +#line 13310 .trainerName = _("GRUNT"), -#line 13246 +#line 13311 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13247 +#line 13312 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13249 +#line 13314 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13250 +#line 13315 .doubleBattle = FALSE, -#line 13251 +#line 13316 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13253 +#line 13318 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13255 +#line 13320 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13254 +#line 13319 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13257 +#line 13322 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13259 +#line 13324 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13258 +#line 13323 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13261 +#line 13326 [TRAINER_GRUNT_MAGMA_HIDEOUT_5] = { -#line 13262 +#line 13327 .trainerName = _("GRUNT"), -#line 13263 +#line 13328 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13264 +#line 13329 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13266 +#line 13331 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13267 +#line 13332 .doubleBattle = FALSE, -#line 13268 +#line 13333 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13270 +#line 13335 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13272 +#line 13337 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13271 +#line 13336 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13274 +#line 13339 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13276 +#line 13341 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13275 +#line 13340 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13278 +#line 13343 [TRAINER_GRUNT_MAGMA_HIDEOUT_6] = { -#line 13279 +#line 13344 .trainerName = _("GRUNT"), -#line 13280 +#line 13345 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13281 +#line 13346 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13283 +#line 13348 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13284 +#line 13349 .doubleBattle = FALSE, -#line 13285 +#line 13350 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13287 +#line 13352 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13289 +#line 13354 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13288 +#line 13353 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13291 +#line 13356 [TRAINER_GRUNT_MAGMA_HIDEOUT_7] = { -#line 13292 +#line 13357 .trainerName = _("GRUNT"), -#line 13293 +#line 13358 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13294 +#line 13359 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13296 +#line 13361 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13297 +#line 13362 .doubleBattle = FALSE, -#line 13298 +#line 13363 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13300 +#line 13365 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13302 +#line 13367 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13301 +#line 13366 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13304 +#line 13369 [TRAINER_GRUNT_MAGMA_HIDEOUT_8] = { -#line 13305 +#line 13370 .trainerName = _("GRUNT"), -#line 13306 +#line 13371 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13307 +#line 13372 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13309 +#line 13374 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13310 +#line 13375 .doubleBattle = FALSE, -#line 13311 +#line 13376 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13313 +#line 13378 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13315 +#line 13380 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13314 +#line 13379 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13317 +#line 13382 [TRAINER_GRUNT_MAGMA_HIDEOUT_9] = { -#line 13318 +#line 13383 .trainerName = _("GRUNT"), -#line 13319 +#line 13384 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13320 +#line 13385 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13322 +#line 13387 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13323 +#line 13388 .doubleBattle = FALSE, -#line 13324 +#line 13389 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13326 +#line 13391 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13328 +#line 13393 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13327 +#line 13392 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13330 +#line 13395 [TRAINER_GRUNT_MAGMA_HIDEOUT_10] = { -#line 13331 +#line 13396 .trainerName = _("GRUNT"), -#line 13332 +#line 13397 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13333 +#line 13398 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13335 +#line 13400 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13336 +#line 13401 .doubleBattle = FALSE, -#line 13337 +#line 13402 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13339 +#line 13404 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13341 +#line 13406 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13340 +#line 13405 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13343 +#line 13408 [TRAINER_GRUNT_MAGMA_HIDEOUT_11] = { -#line 13344 +#line 13409 .trainerName = _("GRUNT"), -#line 13345 +#line 13410 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13346 +#line 13411 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13348 +#line 13413 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13349 +#line 13414 .doubleBattle = FALSE, -#line 13350 +#line 13415 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13352 +#line 13417 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13354 +#line 13419 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13353 +#line 13418 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13356 +#line 13421 [TRAINER_GRUNT_MAGMA_HIDEOUT_12] = { -#line 13357 +#line 13422 .trainerName = _("GRUNT"), -#line 13358 +#line 13423 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13359 +#line 13424 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13361 +#line 13426 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13362 +#line 13427 .doubleBattle = FALSE, -#line 13363 +#line 13428 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13365 +#line 13430 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13367 +#line 13432 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13366 +#line 13431 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13369 +#line 13434 [TRAINER_GRUNT_MAGMA_HIDEOUT_13] = { -#line 13370 +#line 13435 .trainerName = _("GRUNT"), -#line 13371 +#line 13436 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13372 +#line 13437 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13374 +#line 13439 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13375 +#line 13440 .doubleBattle = FALSE, -#line 13376 +#line 13441 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13378 +#line 13443 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13380 +#line 13445 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13379 +#line 13444 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13382 +#line 13447 [TRAINER_GRUNT_MAGMA_HIDEOUT_14] = { -#line 13383 +#line 13448 .trainerName = _("GRUNT"), -#line 13384 +#line 13449 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13385 +#line 13450 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, .encounterMusic_gender = -#line 13386 +#line 13451 F_TRAINER_FEMALE | -#line 13387 +#line 13452 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13388 +#line 13453 .doubleBattle = FALSE, -#line 13389 +#line 13454 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13391 +#line 13456 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13393 +#line 13458 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13392 +#line 13457 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13395 +#line 13460 [TRAINER_GRUNT_MAGMA_HIDEOUT_15] = { -#line 13396 +#line 13461 .trainerName = _("GRUNT"), -#line 13397 +#line 13462 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13398 +#line 13463 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, .encounterMusic_gender = -#line 13399 +#line 13464 F_TRAINER_FEMALE | -#line 13400 +#line 13465 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13401 +#line 13466 .doubleBattle = FALSE, -#line 13402 +#line 13467 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13404 +#line 13469 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13406 +#line 13471 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13405 +#line 13470 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13408 +#line 13473 [TRAINER_GRUNT_MAGMA_HIDEOUT_16] = { -#line 13409 +#line 13474 .trainerName = _("GRUNT"), -#line 13410 +#line 13475 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13411 +#line 13476 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, .encounterMusic_gender = -#line 13412 +#line 13477 F_TRAINER_FEMALE | -#line 13413 +#line 13478 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13414 +#line 13479 .doubleBattle = FALSE, -#line 13415 +#line 13480 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13417 +#line 13482 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13419 +#line 13484 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13418 +#line 13483 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13421 +#line 13486 [TRAINER_TABITHA_MAGMA_HIDEOUT] = { -#line 13422 +#line 13487 .trainerName = _("TABITHA"), -#line 13423 +#line 13488 .trainerClass = TRAINER_CLASS_MAGMA_ADMIN, -#line 13424 +#line 13489 .trainerPic = TRAINER_PIC_MAGMA_ADMIN, .encounterMusic_gender = -#line 13426 +#line 13491 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13427 +#line 13492 .doubleBattle = FALSE, -#line 13428 +#line 13493 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 13430 +#line 13495 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13432 +#line 13497 .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 13431 +#line 13496 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13434 +#line 13499 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13436 +#line 13501 .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 13435 +#line 13500 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13438 +#line 13503 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13440 +#line 13505 .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 13439 +#line 13504 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13442 +#line 13507 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13444 +#line 13509 .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 13443 +#line 13508 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13446 +#line 13511 [TRAINER_DARCY] = { -#line 13447 +#line 13512 .trainerName = _("DARCY"), -#line 13448 +#line 13513 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 13449 +#line 13514 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 13450 +#line 13515 F_TRAINER_FEMALE | -#line 13451 +#line 13516 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 13452 +#line 13517 .items = { ITEM_HYPER_POTION }, -#line 13453 +#line 13518 .doubleBattle = FALSE, -#line 13454 +#line 13519 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13456 +#line 13521 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13458 +#line 13523 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13457 +#line 13522 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13460 +#line 13525 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13462 +#line 13527 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13461 +#line 13526 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13464 +#line 13529 [TRAINER_MAXIE_MOSSDEEP] = { -#line 13465 +#line 13530 .trainerName = _("MAXIE"), -#line 13466 +#line 13531 .trainerClass = TRAINER_CLASS_MAGMA_LEADER, -#line 13467 +#line 13532 .trainerPic = TRAINER_PIC_MAGMA_LEADER_MAXIE, .encounterMusic_gender = -#line 13469 +#line 13534 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13470 +#line 13535 .doubleBattle = FALSE, -#line 13471 +#line 13536 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 13473 +#line 13538 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13475 +#line 13540 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 13474 +#line 13539 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13477 +#line 13542 .species = SPECIES_CROBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13479 +#line 13544 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 13478 +#line 13543 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13481 +#line 13546 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13483 +#line 13548 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 13482 +#line 13547 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13485 +#line 13550 [TRAINER_PETE] = { -#line 13486 +#line 13551 .trainerName = _("PETE"), -#line 13487 +#line 13552 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 13488 +#line 13553 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 13490 +#line 13555 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 13491 +#line 13556 .doubleBattle = FALSE, -#line 13492 +#line 13557 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13494 +#line 13559 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13496 +#line 13561 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13495 +#line 13560 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13498 +#line 13563 [TRAINER_ISABELLE] = { -#line 13499 +#line 13564 .trainerName = _("ISABELLE"), -#line 13500 +#line 13565 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 13501 +#line 13566 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 13502 +#line 13567 F_TRAINER_FEMALE | -#line 13503 +#line 13568 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 13504 +#line 13569 .doubleBattle = FALSE, -#line 13505 +#line 13570 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13507 +#line 13572 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13509 +#line 13574 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13508 +#line 13573 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13511 +#line 13576 [TRAINER_ANDRES_1] = { -#line 13512 +#line 13577 .trainerName = _("ANDRES"), -#line 13513 +#line 13578 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 13514 +#line 13579 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 13516 +#line 13581 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 13517 +#line 13582 .doubleBattle = FALSE, -#line 13518 +#line 13583 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13520 +#line 13585 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13522 +#line 13587 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 13521 +#line 13586 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13524 +#line 13589 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13526 +#line 13591 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 13525 +#line 13590 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13528 +#line 13593 [TRAINER_JOSUE] = { -#line 13529 +#line 13594 .trainerName = _("JOSUE"), -#line 13530 +#line 13595 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 13531 +#line 13596 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 13533 +#line 13598 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 13534 +#line 13599 .doubleBattle = FALSE, -#line 13535 +#line 13600 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13537 +#line 13602 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13539 +#line 13604 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 13538 +#line 13603 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13541 +#line 13606 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13543 +#line 13608 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 13542 +#line 13607 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13545 +#line 13610 [TRAINER_CAMRON] = { -#line 13546 +#line 13611 .trainerName = _("CAMRON"), -#line 13547 +#line 13612 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 13548 +#line 13613 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 13550 +#line 13615 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 13551 +#line 13616 .doubleBattle = FALSE, -#line 13552 +#line 13617 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13554 +#line 13619 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13556 +#line 13621 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13555 +#line 13620 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13558 +#line 13623 [TRAINER_CORY_1] = { -#line 13559 +#line 13624 .trainerName = _("CORY"), -#line 13560 +#line 13625 .trainerClass = TRAINER_CLASS_SAILOR, -#line 13561 +#line 13626 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 13563 +#line 13628 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 13564 +#line 13629 .doubleBattle = FALSE, -#line 13565 +#line 13630 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 13567 +#line 13632 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13569 +#line 13634 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13568 +#line 13633 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13571 +#line 13636 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13573 +#line 13638 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13572 +#line 13637 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13575 +#line 13640 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13577 +#line 13642 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13576 +#line 13641 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13579 +#line 13644 [TRAINER_CAROLINA] = { -#line 13580 +#line 13645 .trainerName = _("CAROLINA"), -#line 13581 +#line 13646 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 13582 +#line 13647 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 13583 +#line 13648 F_TRAINER_FEMALE | -#line 13584 +#line 13649 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 13585 +#line 13650 .items = { ITEM_HYPER_POTION }, -#line 13586 +#line 13651 .doubleBattle = FALSE, -#line 13587 +#line 13652 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 13589 +#line 13654 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13591 +#line 13656 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 13590 +#line 13655 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13593 +#line 13658 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13595 +#line 13660 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 13594 +#line 13659 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13597 +#line 13662 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13599 +#line 13664 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 13598 +#line 13663 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13601 +#line 13666 [TRAINER_ELIJAH] = { -#line 13602 +#line 13667 .trainerName = _("ELIJAH"), -#line 13603 +#line 13668 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 13604 +#line 13669 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 13606 +#line 13671 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 13607 +#line 13672 .doubleBattle = FALSE, -#line 13608 +#line 13673 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13610 +#line 13675 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13612 +#line 13677 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13611 +#line 13676 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13614 +#line 13679 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13616 +#line 13681 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13615 +#line 13680 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13618 +#line 13683 [TRAINER_CELIA] = { -#line 13619 +#line 13684 .trainerName = _("CELIA"), -#line 13620 +#line 13685 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 13621 +#line 13686 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 13622 +#line 13687 F_TRAINER_FEMALE | -#line 13623 +#line 13688 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 13624 +#line 13689 .doubleBattle = FALSE, -#line 13625 +#line 13690 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13627 +#line 13692 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13629 +#line 13694 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13628 +#line 13693 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13631 +#line 13696 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13633 +#line 13698 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13632 +#line 13697 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13635 +#line 13700 [TRAINER_BRYAN] = { -#line 13636 +#line 13701 .trainerName = _("BRYAN"), -#line 13637 +#line 13702 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 13638 +#line 13703 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 13640 +#line 13705 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 13641 +#line 13706 .doubleBattle = FALSE, -#line 13642 +#line 13707 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13644 +#line 13709 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13646 +#line 13711 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13645 +#line 13710 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13648 +#line 13713 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13650 +#line 13715 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13649 +#line 13714 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13652 +#line 13717 [TRAINER_BRANDEN] = { -#line 13653 +#line 13718 .trainerName = _("BRANDEN"), -#line 13654 +#line 13719 .trainerClass = TRAINER_CLASS_CAMPER, -#line 13655 +#line 13720 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 13657 +#line 13722 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 13658 +#line 13723 .doubleBattle = FALSE, -#line 13659 +#line 13724 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13661 +#line 13726 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13663 +#line 13728 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13662 +#line 13727 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13665 +#line 13730 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13667 +#line 13732 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13666 +#line 13731 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13669 +#line 13734 [TRAINER_BRYANT] = { -#line 13670 +#line 13735 .trainerName = _("BRYANT"), -#line 13671 +#line 13736 .trainerClass = TRAINER_CLASS_KINDLER, -#line 13672 +#line 13737 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 13674 +#line 13739 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 13675 +#line 13740 .doubleBattle = FALSE, -#line 13676 +#line 13741 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13678 +#line 13743 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13680 +#line 13745 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13679 +#line 13744 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13682 +#line 13747 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13684 +#line 13749 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13683 +#line 13748 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13686 +#line 13751 [TRAINER_SHAYLA] = { -#line 13687 +#line 13752 .trainerName = _("SHAYLA"), -#line 13688 +#line 13753 .trainerClass = TRAINER_CLASS_AROMA_LADY, -#line 13689 +#line 13754 .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = -#line 13690 +#line 13755 F_TRAINER_FEMALE | -#line 13691 +#line 13756 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 13692 +#line 13757 .doubleBattle = FALSE, -#line 13693 +#line 13758 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13695 +#line 13760 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13697 +#line 13762 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13696 +#line 13761 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13699 +#line 13764 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13701 +#line 13766 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13700 +#line 13765 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13703 +#line 13768 [TRAINER_KYRA] = { -#line 13704 +#line 13769 .trainerName = _("KYRA"), -#line 13705 +#line 13770 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 13706 +#line 13771 .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .encounterMusic_gender = -#line 13707 +#line 13772 F_TRAINER_FEMALE | -#line 13708 +#line 13773 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 13709 +#line 13774 .doubleBattle = FALSE, -#line 13710 +#line 13775 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13712 +#line 13777 .species = SPECIES_DODUO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13714 +#line 13779 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13713 +#line 13778 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13716 +#line 13781 .species = SPECIES_DODRIO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13718 +#line 13783 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13717 +#line 13782 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13720 +#line 13785 [TRAINER_JAIDEN] = { -#line 13721 +#line 13786 .trainerName = _("JAIDEN"), -#line 13722 +#line 13787 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 13723 +#line 13788 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 13725 +#line 13790 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 13726 +#line 13791 .doubleBattle = FALSE, -#line 13727 +#line 13792 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13729 +#line 13794 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13731 +#line 13796 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13730 +#line 13795 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13733 +#line 13798 .species = SPECIES_GULPIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13735 +#line 13800 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13734 +#line 13799 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13737 +#line 13802 [TRAINER_ALIX] = { -#line 13738 +#line 13803 .trainerName = _("ALIX"), -#line 13739 +#line 13804 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 13740 +#line 13805 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 13741 +#line 13806 F_TRAINER_FEMALE | -#line 13742 +#line 13807 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13743 +#line 13808 .doubleBattle = FALSE, -#line 13744 +#line 13809 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13746 +#line 13811 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13748 +#line 13813 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13747 +#line 13812 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13750 +#line 13815 .species = SPECIES_KIRLIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13752 +#line 13817 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13751 +#line 13816 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13754 +#line 13819 [TRAINER_HELENE] = { -#line 13755 +#line 13820 .trainerName = _("HELENE"), -#line 13756 +#line 13821 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 13757 +#line 13822 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 13758 +#line 13823 F_TRAINER_FEMALE | -#line 13759 +#line 13824 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13760 +#line 13825 .doubleBattle = FALSE, -#line 13761 +#line 13826 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13763 +#line 13828 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13765 +#line 13830 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13764 +#line 13829 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13767 +#line 13832 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13769 +#line 13834 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13768 +#line 13833 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13771 +#line 13836 [TRAINER_MARLENE] = { -#line 13772 +#line 13837 .trainerName = _("MARLENE"), -#line 13773 +#line 13838 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 13774 +#line 13839 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 13775 +#line 13840 F_TRAINER_FEMALE | -#line 13776 +#line 13841 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13777 +#line 13842 .doubleBattle = FALSE, -#line 13778 +#line 13843 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13780 +#line 13845 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13782 +#line 13847 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13781 +#line 13846 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13784 +#line 13849 .species = SPECIES_SPOINK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13786 +#line 13851 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13785 +#line 13850 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13788 +#line 13853 [TRAINER_DEVAN] = { -#line 13789 +#line 13854 .trainerName = _("DEVAN"), -#line 13790 +#line 13855 .trainerClass = TRAINER_CLASS_HIKER, -#line 13791 +#line 13856 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 13793 +#line 13858 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 13794 +#line 13859 .doubleBattle = FALSE, -#line 13795 +#line 13860 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13797 +#line 13862 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13799 +#line 13864 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13798 +#line 13863 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13801 +#line 13866 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13803 +#line 13868 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13802 +#line 13867 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13805 +#line 13870 [TRAINER_JOHNSON] = { -#line 13806 +#line 13871 .trainerName = _("JOHNSON"), -#line 13807 +#line 13872 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 13808 +#line 13873 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 13810 +#line 13875 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 13811 +#line 13876 .doubleBattle = FALSE, -#line 13812 +#line 13877 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13814 +#line 13879 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13816 +#line 13881 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13815 +#line 13880 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13818 +#line 13883 .species = SPECIES_LOTAD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13820 +#line 13885 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13819 +#line 13884 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13822 +#line 13887 [TRAINER_MELINA] = { -#line 13823 +#line 13888 .trainerName = _("MELINA"), -#line 13824 +#line 13889 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 13825 +#line 13890 .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .encounterMusic_gender = -#line 13826 +#line 13891 F_TRAINER_FEMALE | -#line 13827 +#line 13892 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 13828 +#line 13893 .doubleBattle = FALSE, -#line 13829 +#line 13894 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13831 +#line 13896 .species = SPECIES_DODUO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13833 +#line 13898 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13832 +#line 13897 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13835 +#line 13900 [TRAINER_BRANDI] = { -#line 13836 +#line 13901 .trainerName = _("BRANDI"), -#line 13837 +#line 13902 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 13838 +#line 13903 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 13839 +#line 13904 F_TRAINER_FEMALE | -#line 13840 +#line 13905 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13841 +#line 13906 .doubleBattle = FALSE, -#line 13842 +#line 13907 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13844 +#line 13909 .species = SPECIES_RALTS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13846 +#line 13911 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13845 +#line 13910 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13848 +#line 13913 [TRAINER_AISHA] = { -#line 13849 +#line 13914 .trainerName = _("AISHA"), -#line 13850 +#line 13915 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 13851 +#line 13916 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 13852 +#line 13917 F_TRAINER_FEMALE | -#line 13853 +#line 13918 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13854 +#line 13919 .doubleBattle = FALSE, -#line 13855 +#line 13920 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13857 +#line 13922 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13859 +#line 13924 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13858 +#line 13923 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13861 +#line 13926 [TRAINER_MAKAYLA] = { -#line 13862 +#line 13927 .trainerName = _("MAKAYLA"), -#line 13863 +#line 13928 .trainerClass = TRAINER_CLASS_EXPERT, -#line 13864 +#line 13929 .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = -#line 13865 +#line 13930 F_TRAINER_FEMALE | -#line 13866 +#line 13931 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13867 +#line 13932 .items = { ITEM_HYPER_POTION }, -#line 13868 +#line 13933 .doubleBattle = FALSE, -#line 13869 +#line 13934 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13871 +#line 13936 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13873 +#line 13938 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13872 +#line 13937 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13875 +#line 13940 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13877 +#line 13942 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13876 +#line 13941 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13879 +#line 13944 [TRAINER_FABIAN] = { -#line 13880 +#line 13945 .trainerName = _("FABIAN"), -#line 13881 +#line 13946 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 13882 +#line 13947 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 13884 +#line 13949 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13885 +#line 13950 .doubleBattle = FALSE, -#line 13886 +#line 13951 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13888 +#line 13953 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13890 +#line 13955 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13889 +#line 13954 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13892 +#line 13957 [TRAINER_DAYTON] = { -#line 13893 +#line 13958 .trainerName = _("DAYTON"), -#line 13894 +#line 13959 .trainerClass = TRAINER_CLASS_KINDLER, -#line 13895 +#line 13960 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 13897 +#line 13962 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 13898 +#line 13963 .doubleBattle = FALSE, -#line 13899 +#line 13964 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13901 +#line 13966 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13903 +#line 13968 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13902 +#line 13967 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13905 +#line 13970 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13907 +#line 13972 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13906 +#line 13971 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13909 +#line 13974 [TRAINER_RACHEL] = { -#line 13910 +#line 13975 .trainerName = _("RACHEL"), -#line 13911 +#line 13976 .trainerClass = TRAINER_CLASS_PARASOL_LADY, -#line 13912 +#line 13977 .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = -#line 13913 +#line 13978 F_TRAINER_FEMALE | -#line 13914 +#line 13979 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 13915 +#line 13980 .doubleBattle = FALSE, -#line 13916 +#line 13981 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13918 +#line 13983 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13920 +#line 13985 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13919 +#line 13984 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13922 +#line 13987 [TRAINER_LEONEL] = { -#line 13923 +#line 13988 .trainerName = _("LEONEL"), -#line 13924 +#line 13989 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 13925 +#line 13990 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 13927 +#line 13992 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 13928 +#line 13993 .items = { ITEM_HYPER_POTION }, -#line 13929 +#line 13994 .doubleBattle = FALSE, -#line 13930 +#line 13995 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13932 +#line 13997 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13934 +#line 13999 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 13933 +#line 13998 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 13935 +#line 14000 MOVE_THUNDER, MOVE_QUICK_ATTACK, MOVE_THUNDER_WAVE, @@ -35135,442 +35135,442 @@ F_TRAINER_FEMALE | }, }, }, -#line 13939 +#line 14004 [TRAINER_CALLIE] = { -#line 13940 +#line 14005 .trainerName = _("CALLIE"), -#line 13941 +#line 14006 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 13942 +#line 14007 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 13943 +#line 14008 F_TRAINER_FEMALE | -#line 13944 +#line 14009 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13945 +#line 14010 .doubleBattle = FALSE, -#line 13946 +#line 14011 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13948 +#line 14013 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13950 +#line 14015 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13949 +#line 14014 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13952 +#line 14017 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13954 +#line 14019 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13953 +#line 14018 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13956 +#line 14021 [TRAINER_CALE] = { -#line 13957 +#line 14022 .trainerName = _("CALE"), -#line 13958 +#line 14023 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 13959 +#line 14024 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 13961 +#line 14026 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 13962 +#line 14027 .doubleBattle = FALSE, -#line 13963 +#line 14028 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13965 +#line 14030 .species = SPECIES_DUSTOX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13967 +#line 14032 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13966 +#line 14031 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13969 +#line 14034 .species = SPECIES_BEAUTIFLY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13971 +#line 14036 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13970 +#line 14035 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13973 +#line 14038 [TRAINER_MYLES] = { -#line 13974 +#line 14039 .trainerName = _("MYLES"), -#line 13975 +#line 14040 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 13976 +#line 14041 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M, .encounterMusic_gender = -#line 13978 +#line 14043 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 13979 +#line 14044 .doubleBattle = FALSE, -#line 13980 +#line 14045 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 13982 +#line 14047 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13984 +#line 14049 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 13983 +#line 14048 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13986 +#line 14051 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13988 +#line 14053 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 13987 +#line 14052 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13990 +#line 14055 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13992 +#line 14057 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 13991 +#line 14056 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13994 +#line 14059 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13996 +#line 14061 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 13995 +#line 14060 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13998 +#line 14063 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14000 +#line 14065 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 13999 +#line 14064 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 14002 +#line 14067 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14004 +#line 14069 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 14003 +#line 14068 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 14006 +#line 14071 [TRAINER_PAT] = { -#line 14007 +#line 14072 .trainerName = _("PAT"), -#line 14008 +#line 14073 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 14009 +#line 14074 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 14010 +#line 14075 F_TRAINER_FEMALE | -#line 14011 +#line 14076 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14012 +#line 14077 .doubleBattle = FALSE, -#line 14013 +#line 14078 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 14015 +#line 14080 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14017 +#line 14082 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 14016 +#line 14081 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 14019 +#line 14084 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14021 +#line 14086 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 14020 +#line 14085 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 14023 +#line 14088 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14025 +#line 14090 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 14024 +#line 14089 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 14027 +#line 14092 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14029 +#line 14094 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 14028 +#line 14093 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 14031 +#line 14096 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14033 +#line 14098 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 14032 +#line 14097 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 14035 +#line 14100 .species = SPECIES_GULPIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14037 +#line 14102 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 14036 +#line 14101 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 14039 +#line 14104 [TRAINER_CRISTIN_1] = { -#line 14040 +#line 14105 .trainerName = _("CRISTIN"), -#line 14041 +#line 14106 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 14042 +#line 14107 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 14043 +#line 14108 F_TRAINER_FEMALE | -#line 14044 +#line 14109 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 14045 +#line 14110 .items = { ITEM_HYPER_POTION }, -#line 14046 +#line 14111 .doubleBattle = FALSE, -#line 14047 +#line 14112 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 14049 +#line 14114 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14051 +#line 14116 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 14050 +#line 14115 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 14053 +#line 14118 .species = SPECIES_VIGOROTH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14055 +#line 14120 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 14054 +#line 14119 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 14057 +#line 14122 [TRAINER_MAY_RUSTBORO_TREECKO] = { -#line 14058 +#line 14123 .trainerName = _("MAY"), -#line 14059 +#line 14124 .trainerClass = TRAINER_CLASS_RIVAL, -#line 14060 +#line 14125 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 14061 +#line 14126 F_TRAINER_FEMALE | -#line 14062 +#line 14127 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14063 +#line 14128 .doubleBattle = FALSE, -#line 14064 +#line 14129 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 14066 +#line 14131 .species = SPECIES_LOTAD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14068 +#line 14133 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 14067 +#line 14132 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 14070 +#line 14135 .species = SPECIES_TORCHIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14072 +#line 14137 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 14071 +#line 14136 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 14074 +#line 14139 [TRAINER_MAY_RUSTBORO_TORCHIC] = { -#line 14075 +#line 14140 .trainerName = _("MAY"), -#line 14076 +#line 14141 .trainerClass = TRAINER_CLASS_RIVAL, -#line 14077 +#line 14142 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 14078 +#line 14143 F_TRAINER_FEMALE | -#line 14079 +#line 14144 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14080 +#line 14145 .doubleBattle = FALSE, -#line 14081 +#line 14146 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 14083 +#line 14148 .species = SPECIES_TORKOAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14085 +#line 14150 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 14084 +#line 14149 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 14087 +#line 14152 .species = SPECIES_MUDKIP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14089 +#line 14154 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 14088 +#line 14153 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 14091 +#line 14156 [TRAINER_ROXANNE_2] = { -#line 14092 +#line 14157 .trainerName = _("ROXANNE"), -#line 14093 +#line 14158 .trainerClass = TRAINER_CLASS_LEADER, -#line 14094 +#line 14159 .trainerPic = TRAINER_PIC_LEADER_ROXANNE, .encounterMusic_gender = -#line 14095 +#line 14160 F_TRAINER_FEMALE | -#line 14096 +#line 14161 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14097 +#line 14162 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14098 +#line 14163 .doubleBattle = TRUE, -#line 14099 +#line 14164 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 14101 +#line 14166 .species = SPECIES_GOLEM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14103 +#line 14168 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14102 +#line 14167 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14104 +#line 14169 MOVE_PROTECT, MOVE_ROLLOUT, MOVE_MAGNITUDE, @@ -35578,19 +35578,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14109 +#line 14174 .species = SPECIES_KABUTO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14109 +#line 14174 .heldItem = ITEM_SITRUS_BERRY, -#line 14111 +#line 14176 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14110 +#line 14175 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14112 +#line 14177 MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, @@ -35598,17 +35598,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14117 +#line 14182 .species = SPECIES_ONIX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14119 +#line 14184 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14118 +#line 14183 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14120 +#line 14185 MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, @@ -35616,19 +35616,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14125 +#line 14190 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14125 +#line 14190 .heldItem = ITEM_SITRUS_BERRY, -#line 14127 +#line 14192 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14126 +#line 14191 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14128 +#line 14193 MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_PROTECT, @@ -35637,41 +35637,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14133 +#line 14198 [TRAINER_ROXANNE_3] = { -#line 14134 +#line 14199 .trainerName = _("ROXANNE"), -#line 14135 +#line 14200 .trainerClass = TRAINER_CLASS_LEADER, -#line 14136 +#line 14201 .trainerPic = TRAINER_PIC_LEADER_ROXANNE, .encounterMusic_gender = -#line 14137 +#line 14202 F_TRAINER_FEMALE | -#line 14138 +#line 14203 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14139 +#line 14204 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14140 +#line 14205 .doubleBattle = TRUE, -#line 14141 +#line 14206 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 14143 +#line 14208 .species = SPECIES_OMANYTE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14145 +#line 14210 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14144 +#line 14209 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14146 +#line 14211 MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, @@ -35679,17 +35679,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14151 +#line 14216 .species = SPECIES_GOLEM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14153 +#line 14218 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14152 +#line 14217 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14154 +#line 14219 MOVE_PROTECT, MOVE_ROLLOUT, MOVE_MAGNITUDE, @@ -35697,19 +35697,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14159 +#line 14224 .species = SPECIES_KABUTOPS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14159 +#line 14224 .heldItem = ITEM_SITRUS_BERRY, -#line 14161 +#line 14226 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14160 +#line 14225 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14162 +#line 14227 MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, @@ -35717,17 +35717,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14167 +#line 14232 .species = SPECIES_ONIX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14169 +#line 14234 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14168 +#line 14233 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14170 +#line 14235 MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, @@ -35735,19 +35735,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14175 +#line 14240 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14175 +#line 14240 .heldItem = ITEM_SITRUS_BERRY, -#line 14177 +#line 14242 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14176 +#line 14241 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14178 +#line 14243 MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_PROTECT, @@ -35756,41 +35756,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14183 +#line 14248 [TRAINER_ROXANNE_4] = { -#line 14184 +#line 14249 .trainerName = _("ROXANNE"), -#line 14185 +#line 14250 .trainerClass = TRAINER_CLASS_LEADER, -#line 14186 +#line 14251 .trainerPic = TRAINER_PIC_LEADER_ROXANNE, .encounterMusic_gender = -#line 14187 +#line 14252 F_TRAINER_FEMALE | -#line 14188 +#line 14253 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14189 +#line 14254 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14190 +#line 14255 .doubleBattle = TRUE, -#line 14191 +#line 14256 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 14193 +#line 14258 .species = SPECIES_OMASTAR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14195 +#line 14260 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14194 +#line 14259 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14196 +#line 14261 MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, @@ -35798,17 +35798,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14201 +#line 14266 .species = SPECIES_GOLEM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14203 +#line 14268 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14202 +#line 14267 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14204 +#line 14269 MOVE_PROTECT, MOVE_ROLLOUT, MOVE_EARTHQUAKE, @@ -35816,19 +35816,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14209 +#line 14274 .species = SPECIES_KABUTOPS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14209 +#line 14274 .heldItem = ITEM_SITRUS_BERRY, -#line 14211 +#line 14276 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14210 +#line 14275 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14212 +#line 14277 MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, @@ -35836,17 +35836,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14217 +#line 14282 .species = SPECIES_ONIX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14219 +#line 14284 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14218 +#line 14283 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14220 +#line 14285 MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, @@ -35854,19 +35854,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14225 +#line 14290 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14225 +#line 14290 .heldItem = ITEM_SITRUS_BERRY, -#line 14227 +#line 14292 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14226 +#line 14291 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14228 +#line 14293 MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_PROTECT, @@ -35875,41 +35875,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14233 +#line 14298 [TRAINER_ROXANNE_5] = { -#line 14234 +#line 14299 .trainerName = _("ROXANNE"), -#line 14235 +#line 14300 .trainerClass = TRAINER_CLASS_LEADER, -#line 14236 +#line 14301 .trainerPic = TRAINER_PIC_LEADER_ROXANNE, .encounterMusic_gender = -#line 14237 +#line 14302 F_TRAINER_FEMALE | -#line 14238 +#line 14303 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14239 +#line 14304 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14240 +#line 14305 .doubleBattle = TRUE, -#line 14241 +#line 14306 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 14243 +#line 14308 .species = SPECIES_AERODACTYL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14245 +#line 14310 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14244 +#line 14309 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14246 +#line 14311 MOVE_ROCK_SLIDE, MOVE_HYPER_BEAM, MOVE_SUPERSONIC, @@ -35917,17 +35917,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14251 +#line 14316 .species = SPECIES_GOLEM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14253 +#line 14318 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14252 +#line 14317 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14254 +#line 14319 MOVE_FOCUS_PUNCH, MOVE_ROLLOUT, MOVE_EARTHQUAKE, @@ -35935,17 +35935,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14259 +#line 14324 .species = SPECIES_OMASTAR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14261 +#line 14326 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14260 +#line 14325 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14262 +#line 14327 MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, @@ -35953,19 +35953,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14267 +#line 14332 .species = SPECIES_KABUTOPS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14267 +#line 14332 .heldItem = ITEM_SITRUS_BERRY, -#line 14269 +#line 14334 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14268 +#line 14333 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14270 +#line 14335 MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, @@ -35973,17 +35973,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14275 +#line 14340 .species = SPECIES_STEELIX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14277 +#line 14342 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14276 +#line 14341 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14278 +#line 14343 MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, @@ -35991,19 +35991,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14283 +#line 14348 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14283 +#line 14348 .heldItem = ITEM_SITRUS_BERRY, -#line 14285 +#line 14350 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14284 +#line 14349 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14286 +#line 14351 MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_PROTECT, @@ -36012,41 +36012,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14291 +#line 14356 [TRAINER_BRAWLY_2] = { -#line 14292 +#line 14357 .trainerName = _("BRAWLY"), -#line 14293 +#line 14358 .trainerClass = TRAINER_CLASS_LEADER, -#line 14294 +#line 14359 .trainerPic = TRAINER_PIC_LEADER_BRAWLY, .encounterMusic_gender = -#line 14296 +#line 14361 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14297 +#line 14362 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14298 +#line 14363 .doubleBattle = TRUE, -#line 14299 +#line 14364 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 14301 +#line 14366 .species = SPECIES_MACHAMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14301 +#line 14366 .heldItem = ITEM_SITRUS_BERRY, -#line 14303 +#line 14368 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14302 +#line 14367 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14304 +#line 14369 MOVE_KARATE_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, @@ -36054,17 +36054,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14309 +#line 14374 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14311 +#line 14376 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14310 +#line 14375 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14312 +#line 14377 MOVE_PSYCHIC, MOVE_LIGHT_SCREEN, MOVE_REFLECT, @@ -36072,17 +36072,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14317 +#line 14382 .species = SPECIES_HITMONTOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14319 +#line 14384 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14318 +#line 14383 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14320 +#line 14385 MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, @@ -36090,19 +36090,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14325 +#line 14390 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14325 +#line 14390 .heldItem = ITEM_SITRUS_BERRY, -#line 14327 +#line 14392 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14326 +#line 14391 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14328 +#line 14393 MOVE_FAKE_OUT, MOVE_FOCUS_PUNCH, MOVE_BELLY_DRUM, @@ -36111,41 +36111,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14333 +#line 14398 [TRAINER_BRAWLY_3] = { -#line 14334 +#line 14399 .trainerName = _("BRAWLY"), -#line 14335 +#line 14400 .trainerClass = TRAINER_CLASS_LEADER, -#line 14336 +#line 14401 .trainerPic = TRAINER_PIC_LEADER_BRAWLY, .encounterMusic_gender = -#line 14338 +#line 14403 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14339 +#line 14404 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14340 +#line 14405 .doubleBattle = TRUE, -#line 14341 +#line 14406 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 14343 +#line 14408 .species = SPECIES_MACHAMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14343 +#line 14408 .heldItem = ITEM_SITRUS_BERRY, -#line 14345 +#line 14410 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14344 +#line 14409 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14346 +#line 14411 MOVE_KARATE_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, @@ -36153,17 +36153,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14351 +#line 14416 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14353 +#line 14418 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14352 +#line 14417 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14354 +#line 14419 MOVE_PSYCHIC, MOVE_LIGHT_SCREEN, MOVE_REFLECT, @@ -36171,17 +36171,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14359 +#line 14424 .species = SPECIES_HITMONTOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14361 +#line 14426 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14360 +#line 14425 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14362 +#line 14427 MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, @@ -36189,19 +36189,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14367 +#line 14432 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14367 +#line 14432 .heldItem = ITEM_SITRUS_BERRY, -#line 14369 +#line 14434 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14368 +#line 14433 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14370 +#line 14435 MOVE_FAKE_OUT, MOVE_FOCUS_PUNCH, MOVE_BELLY_DRUM, @@ -36210,39 +36210,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 14375 +#line 14440 [TRAINER_BRAWLY_4] = { -#line 14376 +#line 14441 .trainerName = _("BRAWLY"), -#line 14377 +#line 14442 .trainerClass = TRAINER_CLASS_LEADER, -#line 14378 +#line 14443 .trainerPic = TRAINER_PIC_LEADER_BRAWLY, .encounterMusic_gender = -#line 14380 +#line 14445 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14381 +#line 14446 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14382 +#line 14447 .doubleBattle = TRUE, -#line 14383 +#line 14448 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 14385 +#line 14450 .species = SPECIES_HITMONCHAN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14387 +#line 14452 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14386 +#line 14451 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14388 +#line 14453 MOVE_SKY_UPPERCUT, MOVE_PROTECT, MOVE_FIRE_PUNCH, @@ -36250,19 +36250,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14393 +#line 14458 .species = SPECIES_MACHAMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14393 +#line 14458 .heldItem = ITEM_SITRUS_BERRY, -#line 14395 +#line 14460 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14394 +#line 14459 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14396 +#line 14461 MOVE_KARATE_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, @@ -36270,17 +36270,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14401 +#line 14466 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14403 +#line 14468 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14402 +#line 14467 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14404 +#line 14469 MOVE_FOCUS_PUNCH, MOVE_LIGHT_SCREEN, MOVE_REFLECT, @@ -36288,17 +36288,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14409 +#line 14474 .species = SPECIES_HITMONTOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14411 +#line 14476 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14410 +#line 14475 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14412 +#line 14477 MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, @@ -36306,19 +36306,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14417 +#line 14482 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14417 +#line 14482 .heldItem = ITEM_SITRUS_BERRY, -#line 14419 +#line 14484 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14418 +#line 14483 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14420 +#line 14485 MOVE_FAKE_OUT, MOVE_FOCUS_PUNCH, MOVE_BELLY_DRUM, @@ -36327,39 +36327,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 14425 +#line 14490 [TRAINER_BRAWLY_5] = { -#line 14426 +#line 14491 .trainerName = _("BRAWLY"), -#line 14427 +#line 14492 .trainerClass = TRAINER_CLASS_LEADER, -#line 14428 +#line 14493 .trainerPic = TRAINER_PIC_LEADER_BRAWLY, .encounterMusic_gender = -#line 14430 +#line 14495 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14431 +#line 14496 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14432 +#line 14497 .doubleBattle = TRUE, -#line 14433 +#line 14498 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 14435 +#line 14500 .species = SPECIES_HITMONLEE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14437 +#line 14502 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14436 +#line 14501 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14438 +#line 14503 MOVE_MEGA_KICK, MOVE_FOCUS_PUNCH, MOVE_EARTHQUAKE, @@ -36367,17 +36367,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14443 +#line 14508 .species = SPECIES_HITMONCHAN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14445 +#line 14510 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14444 +#line 14509 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14446 +#line 14511 MOVE_SKY_UPPERCUT, MOVE_PROTECT, MOVE_FIRE_PUNCH, @@ -36385,19 +36385,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14451 +#line 14516 .species = SPECIES_MACHAMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14451 +#line 14516 .heldItem = ITEM_SITRUS_BERRY, -#line 14453 +#line 14518 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14452 +#line 14517 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14454 +#line 14519 MOVE_CROSS_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, @@ -36405,17 +36405,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14459 +#line 14524 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14461 +#line 14526 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14460 +#line 14525 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14462 +#line 14527 MOVE_FOCUS_PUNCH, MOVE_LIGHT_SCREEN, MOVE_REFLECT, @@ -36423,17 +36423,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14467 +#line 14532 .species = SPECIES_HITMONTOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14469 +#line 14534 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14468 +#line 14533 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14470 +#line 14535 MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, @@ -36441,19 +36441,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14475 +#line 14540 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14475 +#line 14540 .heldItem = ITEM_SITRUS_BERRY, -#line 14477 +#line 14542 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14476 +#line 14541 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14478 +#line 14543 MOVE_FAKE_OUT, MOVE_FOCUS_PUNCH, MOVE_BELLY_DRUM, @@ -36462,39 +36462,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 14483 +#line 14548 [TRAINER_WATTSON_2] = { -#line 14484 +#line 14549 .trainerName = _("WATTSON"), -#line 14485 +#line 14550 .trainerClass = TRAINER_CLASS_LEADER, -#line 14486 +#line 14551 .trainerPic = TRAINER_PIC_LEADER_WATTSON, .encounterMusic_gender = -#line 14488 +#line 14553 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14489 +#line 14554 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14490 +#line 14555 .doubleBattle = TRUE, -#line 14491 +#line 14556 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 14493 +#line 14558 .species = SPECIES_MAREEP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14495 +#line 14560 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14494 +#line 14559 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14496 +#line 14561 MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, @@ -36502,17 +36502,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14501 +#line 14566 .species = SPECIES_ELECTRODE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14503 +#line 14568 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14502 +#line 14567 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14504 +#line 14569 MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, @@ -36520,19 +36520,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14509 +#line 14574 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14509 +#line 14574 .heldItem = ITEM_SITRUS_BERRY, -#line 14511 +#line 14576 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14510 +#line 14575 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14512 +#line 14577 MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, @@ -36540,19 +36540,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14517 +#line 14582 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14517 +#line 14582 .heldItem = ITEM_SITRUS_BERRY, -#line 14519 +#line 14584 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14518 +#line 14583 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14520 +#line 14585 MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_THUNDER, @@ -36561,39 +36561,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 14525 +#line 14590 [TRAINER_WATTSON_3] = { -#line 14526 +#line 14591 .trainerName = _("WATTSON"), -#line 14527 +#line 14592 .trainerClass = TRAINER_CLASS_LEADER, -#line 14528 +#line 14593 .trainerPic = TRAINER_PIC_LEADER_WATTSON, .encounterMusic_gender = -#line 14530 +#line 14595 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14531 +#line 14596 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14532 +#line 14597 .doubleBattle = TRUE, -#line 14533 +#line 14598 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 14535 +#line 14600 .species = SPECIES_PIKACHU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14537 +#line 14602 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14536 +#line 14601 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14538 +#line 14603 MOVE_THUNDER, MOVE_SLAM, MOVE_RAIN_DANCE, @@ -36601,17 +36601,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14543 +#line 14608 .species = SPECIES_FLAAFFY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14545 +#line 14610 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14544 +#line 14609 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14546 +#line 14611 MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, @@ -36619,17 +36619,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14551 +#line 14616 .species = SPECIES_ELECTRODE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14553 +#line 14618 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14552 +#line 14617 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14554 +#line 14619 MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, @@ -36637,19 +36637,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14559 +#line 14624 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14559 +#line 14624 .heldItem = ITEM_SITRUS_BERRY, -#line 14561 +#line 14626 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14560 +#line 14625 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14562 +#line 14627 MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, @@ -36657,19 +36657,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14567 +#line 14632 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14567 +#line 14632 .heldItem = ITEM_SITRUS_BERRY, -#line 14569 +#line 14634 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14568 +#line 14633 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14570 +#line 14635 MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_THUNDER, @@ -36678,39 +36678,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 14575 +#line 14640 [TRAINER_WATTSON_4] = { -#line 14576 +#line 14641 .trainerName = _("WATTSON"), -#line 14577 +#line 14642 .trainerClass = TRAINER_CLASS_LEADER, -#line 14578 +#line 14643 .trainerPic = TRAINER_PIC_LEADER_WATTSON, .encounterMusic_gender = -#line 14580 +#line 14645 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14581 +#line 14646 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14582 +#line 14647 .doubleBattle = TRUE, -#line 14583 +#line 14648 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 14585 +#line 14650 .species = SPECIES_RAICHU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14587 +#line 14652 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14586 +#line 14651 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14588 +#line 14653 MOVE_THUNDER, MOVE_SLAM, MOVE_RAIN_DANCE, @@ -36718,17 +36718,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14593 +#line 14658 .species = SPECIES_AMPHAROS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14595 +#line 14660 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14594 +#line 14659 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14596 +#line 14661 MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, @@ -36736,17 +36736,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14601 +#line 14666 .species = SPECIES_ELECTRODE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14603 +#line 14668 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14602 +#line 14667 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14604 +#line 14669 MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, @@ -36754,19 +36754,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14609 +#line 14674 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14609 +#line 14674 .heldItem = ITEM_SITRUS_BERRY, -#line 14611 +#line 14676 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14610 +#line 14675 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14612 +#line 14677 MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, @@ -36774,19 +36774,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14617 +#line 14682 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14617 +#line 14682 .heldItem = ITEM_SITRUS_BERRY, -#line 14619 +#line 14684 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14618 +#line 14683 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14620 +#line 14685 MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_THUNDER, @@ -36795,39 +36795,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 14625 +#line 14690 [TRAINER_WATTSON_5] = { -#line 14626 +#line 14691 .trainerName = _("WATTSON"), -#line 14627 +#line 14692 .trainerClass = TRAINER_CLASS_LEADER, -#line 14628 +#line 14693 .trainerPic = TRAINER_PIC_LEADER_WATTSON, .encounterMusic_gender = -#line 14630 +#line 14695 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14631 +#line 14696 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14632 +#line 14697 .doubleBattle = TRUE, -#line 14633 +#line 14698 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 14635 +#line 14700 .species = SPECIES_ELECTABUZZ, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14637 +#line 14702 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14636 +#line 14701 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14638 +#line 14703 MOVE_SWIFT, MOVE_FOCUS_PUNCH, MOVE_THUNDER_PUNCH, @@ -36835,17 +36835,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14643 +#line 14708 .species = SPECIES_RAICHU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14645 +#line 14710 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14644 +#line 14709 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14646 +#line 14711 MOVE_THUNDER, MOVE_SLAM, MOVE_RAIN_DANCE, @@ -36853,17 +36853,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14651 +#line 14716 .species = SPECIES_AMPHAROS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14653 +#line 14718 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14652 +#line 14717 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14654 +#line 14719 MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, @@ -36871,17 +36871,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14659 +#line 14724 .species = SPECIES_ELECTRODE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14661 +#line 14726 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14660 +#line 14725 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14662 +#line 14727 MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, @@ -36889,19 +36889,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14667 +#line 14732 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14667 +#line 14732 .heldItem = ITEM_SITRUS_BERRY, -#line 14669 +#line 14734 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14668 +#line 14733 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14670 +#line 14735 MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, @@ -36909,19 +36909,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14675 +#line 14740 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14675 +#line 14740 .heldItem = ITEM_SITRUS_BERRY, -#line 14677 +#line 14742 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14676 +#line 14741 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14678 +#line 14743 MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_THUNDER, @@ -36930,43 +36930,43 @@ F_TRAINER_FEMALE | }, }, }, -#line 14683 +#line 14748 [TRAINER_FLANNERY_2] = { -#line 14684 +#line 14749 .trainerName = _("FLANNERY"), -#line 14685 +#line 14750 .trainerClass = TRAINER_CLASS_LEADER, -#line 14686 +#line 14751 .trainerPic = TRAINER_PIC_LEADER_FLANNERY, .encounterMusic_gender = -#line 14687 +#line 14752 F_TRAINER_FEMALE | -#line 14688 +#line 14753 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14689 +#line 14754 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14690 +#line 14755 .doubleBattle = TRUE, -#line 14691 +#line 14756 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 14693 +#line 14758 .species = SPECIES_MAGCARGO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14693 +#line 14758 .heldItem = ITEM_WHITE_HERB, -#line 14695 +#line 14760 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14694 +#line 14759 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14696 +#line 14761 MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, @@ -36974,17 +36974,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14701 +#line 14766 .species = SPECIES_PONYTA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14703 +#line 14768 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14702 +#line 14767 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14704 +#line 14769 MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, @@ -36992,19 +36992,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14709 +#line 14774 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14709 +#line 14774 .heldItem = ITEM_WHITE_HERB, -#line 14711 +#line 14776 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14710 +#line 14775 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14712 +#line 14777 MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, @@ -37012,19 +37012,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14717 +#line 14782 .species = SPECIES_TORKOAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14717 +#line 14782 .heldItem = ITEM_WHITE_HERB, -#line 14719 +#line 14784 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14718 +#line 14783 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14720 +#line 14785 MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EXPLOSION, @@ -37033,41 +37033,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14725 +#line 14790 [TRAINER_FLANNERY_3] = { -#line 14726 +#line 14791 .trainerName = _("FLANNERY"), -#line 14727 +#line 14792 .trainerClass = TRAINER_CLASS_LEADER, -#line 14728 +#line 14793 .trainerPic = TRAINER_PIC_LEADER_FLANNERY, .encounterMusic_gender = -#line 14729 +#line 14794 F_TRAINER_FEMALE | -#line 14730 +#line 14795 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14731 +#line 14796 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14732 +#line 14797 .doubleBattle = TRUE, -#line 14733 +#line 14798 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 14735 +#line 14800 .species = SPECIES_GROWLITHE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14737 +#line 14802 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14736 +#line 14801 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14738 +#line 14803 MOVE_HELPING_HAND, MOVE_FLAMETHROWER, MOVE_ROAR, @@ -37075,19 +37075,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14743 +#line 14808 .species = SPECIES_MAGCARGO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14743 +#line 14808 .heldItem = ITEM_WHITE_HERB, -#line 14745 +#line 14810 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14744 +#line 14809 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14746 +#line 14811 MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, @@ -37095,17 +37095,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14751 +#line 14816 .species = SPECIES_PONYTA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14753 +#line 14818 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14752 +#line 14817 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14754 +#line 14819 MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, @@ -37113,19 +37113,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14759 +#line 14824 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14759 +#line 14824 .heldItem = ITEM_WHITE_HERB, -#line 14761 +#line 14826 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14760 +#line 14825 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14762 +#line 14827 MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, @@ -37133,19 +37133,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14767 +#line 14832 .species = SPECIES_TORKOAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14767 +#line 14832 .heldItem = ITEM_WHITE_HERB, -#line 14769 +#line 14834 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14768 +#line 14833 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14770 +#line 14835 MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EXPLOSION, @@ -37154,41 +37154,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14775 +#line 14840 [TRAINER_FLANNERY_4] = { -#line 14776 +#line 14841 .trainerName = _("FLANNERY"), -#line 14777 +#line 14842 .trainerClass = TRAINER_CLASS_LEADER, -#line 14778 +#line 14843 .trainerPic = TRAINER_PIC_LEADER_FLANNERY, .encounterMusic_gender = -#line 14779 +#line 14844 F_TRAINER_FEMALE | -#line 14780 +#line 14845 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14781 +#line 14846 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14782 +#line 14847 .doubleBattle = TRUE, -#line 14783 +#line 14848 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 14785 +#line 14850 .species = SPECIES_HOUNDOUR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14787 +#line 14852 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14786 +#line 14851 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14788 +#line 14853 MOVE_ROAR, MOVE_SOLAR_BEAM, MOVE_TAUNT, @@ -37196,17 +37196,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14793 +#line 14858 .species = SPECIES_GROWLITHE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14795 +#line 14860 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14794 +#line 14859 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14796 +#line 14861 MOVE_HELPING_HAND, MOVE_FLAMETHROWER, MOVE_SUNNY_DAY, @@ -37214,19 +37214,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14801 +#line 14866 .species = SPECIES_MAGCARGO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14801 +#line 14866 .heldItem = ITEM_WHITE_HERB, -#line 14803 +#line 14868 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14802 +#line 14867 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14804 +#line 14869 MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, @@ -37234,17 +37234,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14809 +#line 14874 .species = SPECIES_RAPIDASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14811 +#line 14876 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14810 +#line 14875 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14812 +#line 14877 MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, @@ -37252,19 +37252,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14817 +#line 14882 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14817 +#line 14882 .heldItem = ITEM_WHITE_HERB, -#line 14819 +#line 14884 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14818 +#line 14883 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14820 +#line 14885 MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, @@ -37272,19 +37272,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14825 +#line 14890 .species = SPECIES_TORKOAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14825 +#line 14890 .heldItem = ITEM_WHITE_HERB, -#line 14827 +#line 14892 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14826 +#line 14891 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14828 +#line 14893 MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EXPLOSION, @@ -37293,41 +37293,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14833 +#line 14898 [TRAINER_FLANNERY_5] = { -#line 14834 +#line 14899 .trainerName = _("FLANNERY"), -#line 14835 +#line 14900 .trainerClass = TRAINER_CLASS_LEADER, -#line 14836 +#line 14901 .trainerPic = TRAINER_PIC_LEADER_FLANNERY, .encounterMusic_gender = -#line 14837 +#line 14902 F_TRAINER_FEMALE | -#line 14838 +#line 14903 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14839 +#line 14904 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14840 +#line 14905 .doubleBattle = TRUE, -#line 14841 +#line 14906 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 14843 +#line 14908 .species = SPECIES_ARCANINE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14845 +#line 14910 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14844 +#line 14909 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14846 +#line 14911 MOVE_HELPING_HAND, MOVE_FLAMETHROWER, MOVE_SUNNY_DAY, @@ -37335,19 +37335,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14851 +#line 14916 .species = SPECIES_MAGCARGO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14851 +#line 14916 .heldItem = ITEM_WHITE_HERB, -#line 14853 +#line 14918 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14852 +#line 14917 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14854 +#line 14919 MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, @@ -37355,17 +37355,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14859 +#line 14924 .species = SPECIES_HOUNDOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14861 +#line 14926 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14860 +#line 14925 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14862 +#line 14927 MOVE_ROAR, MOVE_SOLAR_BEAM, MOVE_TAUNT, @@ -37373,17 +37373,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14867 +#line 14932 .species = SPECIES_RAPIDASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14869 +#line 14934 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14868 +#line 14933 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14870 +#line 14935 MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, @@ -37391,19 +37391,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14875 +#line 14940 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14875 +#line 14940 .heldItem = ITEM_WHITE_HERB, -#line 14877 +#line 14942 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14876 +#line 14941 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14878 +#line 14943 MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, @@ -37411,19 +37411,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14883 +#line 14948 .species = SPECIES_TORKOAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14883 +#line 14948 .heldItem = ITEM_WHITE_HERB, -#line 14885 +#line 14950 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14884 +#line 14949 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14886 +#line 14951 MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EXPLOSION, @@ -37432,39 +37432,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 14891 +#line 14956 [TRAINER_NORMAN_2] = { -#line 14892 +#line 14957 .trainerName = _("NORMAN"), -#line 14893 +#line 14958 .trainerClass = TRAINER_CLASS_LEADER, -#line 14894 +#line 14959 .trainerPic = TRAINER_PIC_LEADER_NORMAN, .encounterMusic_gender = -#line 14896 +#line 14961 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14897 +#line 14962 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14898 +#line 14963 .doubleBattle = TRUE, -#line 14899 +#line 14964 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 14901 +#line 14966 .species = SPECIES_CHANSEY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14903 +#line 14968 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14902 +#line 14967 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14904 +#line 14969 MOVE_LIGHT_SCREEN, MOVE_SING, MOVE_SKILL_SWAP, @@ -37472,19 +37472,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14909 +#line 14974 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14909 +#line 14974 .heldItem = ITEM_SITRUS_BERRY, -#line 14911 +#line 14976 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14910 +#line 14975 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14912 +#line 14977 MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, @@ -37492,17 +37492,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14917 +#line 14982 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14919 +#line 14984 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14918 +#line 14983 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14920 +#line 14985 MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, @@ -37510,19 +37510,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14925 +#line 14990 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14925 +#line 14990 .heldItem = ITEM_SITRUS_BERRY, -#line 14927 +#line 14992 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14926 +#line 14991 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14928 +#line 14993 MOVE_HYPER_BEAM, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, @@ -37531,41 +37531,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14933 +#line 14998 [TRAINER_NORMAN_3] = { -#line 14934 +#line 14999 .trainerName = _("NORMAN"), -#line 14935 +#line 15000 .trainerClass = TRAINER_CLASS_LEADER, -#line 14936 +#line 15001 .trainerPic = TRAINER_PIC_LEADER_NORMAN, .encounterMusic_gender = -#line 14938 +#line 15003 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14939 +#line 15004 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14940 +#line 15005 .doubleBattle = TRUE, -#line 14941 +#line 15006 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 14943 +#line 15008 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14943 +#line 15008 .heldItem = ITEM_SITRUS_BERRY, -#line 14945 +#line 15010 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14944 +#line 15009 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14946 +#line 15011 MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, @@ -37573,17 +37573,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14951 +#line 15016 .species = SPECIES_CHANSEY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14953 +#line 15018 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14952 +#line 15017 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14954 +#line 15019 MOVE_LIGHT_SCREEN, MOVE_SING, MOVE_SKILL_SWAP, @@ -37591,17 +37591,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14959 +#line 15024 .species = SPECIES_KANGASKHAN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14961 +#line 15026 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14960 +#line 15025 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14962 +#line 15027 MOVE_FAKE_OUT, MOVE_DIZZY_PUNCH, MOVE_ENDURE, @@ -37609,17 +37609,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14967 +#line 15032 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14969 +#line 15034 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14968 +#line 15033 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14970 +#line 15035 MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, @@ -37627,19 +37627,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14975 +#line 15040 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14975 +#line 15040 .heldItem = ITEM_SITRUS_BERRY, -#line 14977 +#line 15042 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14976 +#line 15041 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14978 +#line 15043 MOVE_HYPER_BEAM, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, @@ -37648,41 +37648,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14983 +#line 15048 [TRAINER_NORMAN_4] = { -#line 14984 +#line 15049 .trainerName = _("NORMAN"), -#line 14985 +#line 15050 .trainerClass = TRAINER_CLASS_LEADER, -#line 14986 +#line 15051 .trainerPic = TRAINER_PIC_LEADER_NORMAN, .encounterMusic_gender = -#line 14988 +#line 15053 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14989 +#line 15054 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14990 +#line 15055 .doubleBattle = TRUE, -#line 14991 +#line 15056 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 14993 +#line 15058 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14993 +#line 15058 .heldItem = ITEM_SITRUS_BERRY, -#line 14995 +#line 15060 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14994 +#line 15059 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14996 +#line 15061 MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, @@ -37690,17 +37690,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15001 +#line 15066 .species = SPECIES_BLISSEY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15003 +#line 15068 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15002 +#line 15067 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15004 +#line 15069 MOVE_LIGHT_SCREEN, MOVE_SING, MOVE_SKILL_SWAP, @@ -37708,17 +37708,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15009 +#line 15074 .species = SPECIES_KANGASKHAN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15011 +#line 15076 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15010 +#line 15075 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15012 +#line 15077 MOVE_FAKE_OUT, MOVE_DIZZY_PUNCH, MOVE_ENDURE, @@ -37726,17 +37726,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15017 +#line 15082 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15019 +#line 15084 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15018 +#line 15083 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15020 +#line 15085 MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, @@ -37744,19 +37744,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15025 +#line 15090 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15025 +#line 15090 .heldItem = ITEM_SITRUS_BERRY, -#line 15027 +#line 15092 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15026 +#line 15091 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15028 +#line 15093 MOVE_HYPER_BEAM, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, @@ -37765,41 +37765,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 15033 +#line 15098 [TRAINER_NORMAN_5] = { -#line 15034 +#line 15099 .trainerName = _("NORMAN"), -#line 15035 +#line 15100 .trainerClass = TRAINER_CLASS_LEADER, -#line 15036 +#line 15101 .trainerPic = TRAINER_PIC_LEADER_NORMAN, .encounterMusic_gender = -#line 15038 +#line 15103 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15039 +#line 15104 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15040 +#line 15105 .doubleBattle = TRUE, -#line 15041 +#line 15106 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15043 +#line 15108 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15043 +#line 15108 .heldItem = ITEM_SITRUS_BERRY, -#line 15045 +#line 15110 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15044 +#line 15109 .lvl = 57, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15046 +#line 15111 MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, @@ -37807,17 +37807,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15051 +#line 15116 .species = SPECIES_BLISSEY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15053 +#line 15118 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15052 +#line 15117 .lvl = 57, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15054 +#line 15119 MOVE_PROTECT, MOVE_SING, MOVE_SKILL_SWAP, @@ -37825,17 +37825,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15059 +#line 15124 .species = SPECIES_KANGASKHAN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15061 +#line 15126 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15060 +#line 15125 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15062 +#line 15127 MOVE_FAKE_OUT, MOVE_DIZZY_PUNCH, MOVE_ENDURE, @@ -37843,17 +37843,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15067 +#line 15132 .species = SPECIES_TAUROS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15069 +#line 15134 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15068 +#line 15133 .lvl = 57, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15070 +#line 15135 MOVE_TAKE_DOWN, MOVE_PROTECT, MOVE_FIRE_BLAST, @@ -37861,17 +37861,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15075 +#line 15140 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15077 +#line 15142 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15076 +#line 15141 .lvl = 58, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15078 +#line 15143 MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, @@ -37879,19 +37879,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15083 +#line 15148 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15083 +#line 15148 .heldItem = ITEM_SITRUS_BERRY, -#line 15085 +#line 15150 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15084 +#line 15149 .lvl = 60, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15086 +#line 15151 MOVE_HYPER_BEAM, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, @@ -37900,43 +37900,43 @@ F_TRAINER_FEMALE | }, }, }, -#line 15091 +#line 15156 [TRAINER_WINONA_2] = { -#line 15092 +#line 15157 .trainerName = _("WINONA"), -#line 15093 +#line 15158 .trainerClass = TRAINER_CLASS_LEADER, -#line 15094 +#line 15159 .trainerPic = TRAINER_PIC_LEADER_WINONA, .encounterMusic_gender = -#line 15095 +#line 15160 F_TRAINER_FEMALE | -#line 15096 +#line 15161 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 15097 +#line 15162 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15098 +#line 15163 .doubleBattle = TRUE, -#line 15099 +#line 15164 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 15101 +#line 15166 .species = SPECIES_DRATINI, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15101 +#line 15166 .heldItem = ITEM_SITRUS_BERRY, -#line 15103 +#line 15168 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15102 +#line 15167 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15104 +#line 15169 MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT, MOVE_PROTECT, @@ -37944,17 +37944,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15109 +#line 15174 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15111 +#line 15176 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15110 +#line 15175 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15112 +#line 15177 MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, @@ -37962,17 +37962,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15117 +#line 15182 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15119 +#line 15184 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15118 +#line 15183 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15120 +#line 15185 MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, @@ -37980,17 +37980,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15125 +#line 15190 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15127 +#line 15192 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15126 +#line 15191 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15128 +#line 15193 MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, @@ -37998,19 +37998,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15133 +#line 15198 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15133 +#line 15198 .heldItem = ITEM_CHESTO_BERRY, -#line 15135 +#line 15200 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15134 +#line 15199 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15136 +#line 15201 MOVE_AERIAL_ACE, MOVE_REST, MOVE_DRAGON_DANCE, @@ -38019,41 +38019,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 15141 +#line 15206 [TRAINER_WINONA_3] = { -#line 15142 +#line 15207 .trainerName = _("WINONA"), -#line 15143 +#line 15208 .trainerClass = TRAINER_CLASS_LEADER, -#line 15144 +#line 15209 .trainerPic = TRAINER_PIC_LEADER_WINONA, .encounterMusic_gender = -#line 15145 +#line 15210 F_TRAINER_FEMALE | -#line 15146 +#line 15211 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 15147 +#line 15212 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15148 +#line 15213 .doubleBattle = TRUE, -#line 15149 +#line 15214 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15151 +#line 15216 .species = SPECIES_HOOTHOOT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15153 +#line 15218 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15152 +#line 15217 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15154 +#line 15219 MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_REFLECT, @@ -38061,17 +38061,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15159 +#line 15224 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15161 +#line 15226 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15160 +#line 15225 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15162 +#line 15227 MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, @@ -38079,19 +38079,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15167 +#line 15232 .species = SPECIES_DRAGONAIR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15167 +#line 15232 .heldItem = ITEM_SITRUS_BERRY, -#line 15169 +#line 15234 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15168 +#line 15233 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15170 +#line 15235 MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT, MOVE_PROTECT, @@ -38099,17 +38099,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15175 +#line 15240 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15177 +#line 15242 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15176 +#line 15241 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15178 +#line 15243 MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, @@ -38117,17 +38117,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15183 +#line 15248 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15185 +#line 15250 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15184 +#line 15249 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15186 +#line 15251 MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, @@ -38135,19 +38135,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15191 +#line 15256 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15191 +#line 15256 .heldItem = ITEM_CHESTO_BERRY, -#line 15193 +#line 15258 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15192 +#line 15257 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15194 +#line 15259 MOVE_AERIAL_ACE, MOVE_REST, MOVE_DRAGON_DANCE, @@ -38156,41 +38156,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 15199 +#line 15264 [TRAINER_WINONA_4] = { -#line 15200 +#line 15265 .trainerName = _("WINONA"), -#line 15201 +#line 15266 .trainerClass = TRAINER_CLASS_LEADER, -#line 15202 +#line 15267 .trainerPic = TRAINER_PIC_LEADER_WINONA, .encounterMusic_gender = -#line 15203 +#line 15268 F_TRAINER_FEMALE | -#line 15204 +#line 15269 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 15205 +#line 15270 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15206 +#line 15271 .doubleBattle = TRUE, -#line 15207 +#line 15272 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15209 +#line 15274 .species = SPECIES_NOCTOWL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15211 +#line 15276 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15210 +#line 15275 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15212 +#line 15277 MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_REFLECT, @@ -38198,17 +38198,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15217 +#line 15282 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15219 +#line 15284 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15218 +#line 15283 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15220 +#line 15285 MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, @@ -38216,19 +38216,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15225 +#line 15290 .species = SPECIES_DRAGONAIR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15225 +#line 15290 .heldItem = ITEM_SITRUS_BERRY, -#line 15227 +#line 15292 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15226 +#line 15291 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15228 +#line 15293 MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT, MOVE_PROTECT, @@ -38236,17 +38236,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15233 +#line 15298 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15235 +#line 15300 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15234 +#line 15299 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15236 +#line 15301 MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, @@ -38254,17 +38254,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15241 +#line 15306 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15243 +#line 15308 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15242 +#line 15307 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15244 +#line 15309 MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, @@ -38272,19 +38272,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15249 +#line 15314 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15249 +#line 15314 .heldItem = ITEM_CHESTO_BERRY, -#line 15251 +#line 15316 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15250 +#line 15315 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15252 +#line 15317 MOVE_AERIAL_ACE, MOVE_REST, MOVE_DRAGON_DANCE, @@ -38293,41 +38293,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 15257 +#line 15322 [TRAINER_WINONA_5] = { -#line 15258 +#line 15323 .trainerName = _("WINONA"), -#line 15259 +#line 15324 .trainerClass = TRAINER_CLASS_LEADER, -#line 15260 +#line 15325 .trainerPic = TRAINER_PIC_LEADER_WINONA, .encounterMusic_gender = -#line 15261 +#line 15326 F_TRAINER_FEMALE | -#line 15262 +#line 15327 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 15263 +#line 15328 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15264 +#line 15329 .doubleBattle = TRUE, -#line 15265 +#line 15330 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15267 +#line 15332 .species = SPECIES_NOCTOWL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15269 +#line 15334 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15268 +#line 15333 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15270 +#line 15335 MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_REFLECT, @@ -38335,17 +38335,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15275 +#line 15340 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15277 +#line 15342 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15276 +#line 15341 .lvl = 54, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15278 +#line 15343 MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, @@ -38353,17 +38353,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15283 +#line 15348 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15285 +#line 15350 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15284 +#line 15349 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15286 +#line 15351 MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, @@ -38371,19 +38371,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15291 +#line 15356 .species = SPECIES_DRAGONITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15291 +#line 15356 .heldItem = ITEM_SITRUS_BERRY, -#line 15293 +#line 15358 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15292 +#line 15357 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15294 +#line 15359 MOVE_HYPER_BEAM, MOVE_THUNDERBOLT, MOVE_EARTHQUAKE, @@ -38391,17 +38391,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15299 +#line 15364 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15301 +#line 15366 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15300 +#line 15365 .lvl = 58, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15302 +#line 15367 MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, @@ -38409,19 +38409,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15307 +#line 15372 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15307 +#line 15372 .heldItem = ITEM_CHESTO_BERRY, -#line 15309 +#line 15374 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15308 +#line 15373 .lvl = 60, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15310 +#line 15375 MOVE_SKY_ATTACK, MOVE_REST, MOVE_DRAGON_DANCE, @@ -38430,39 +38430,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 15315 +#line 15380 [TRAINER_TATE_AND_LIZA_2] = { -#line 15316 +#line 15381 .trainerName = _("TATE&LIZA"), -#line 15317 +#line 15382 .trainerClass = TRAINER_CLASS_LEADER, -#line 15318 +#line 15383 .trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA, .encounterMusic_gender = -#line 15320 +#line 15385 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 15321 +#line 15386 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15322 +#line 15387 .doubleBattle = TRUE, -#line 15323 +#line 15388 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 15325 +#line 15390 .species = SPECIES_SLOWPOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15327 +#line 15392 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15326 +#line 15391 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15328 +#line 15393 MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, @@ -38470,17 +38470,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15333 +#line 15398 .species = SPECIES_CLAYDOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15335 +#line 15400 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15334 +#line 15399 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15336 +#line 15401 MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_PSYCHIC, @@ -38488,19 +38488,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15341 +#line 15406 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15341 +#line 15406 .heldItem = ITEM_CHESTO_BERRY, -#line 15343 +#line 15408 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15342 +#line 15407 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15344 +#line 15409 MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, @@ -38508,19 +38508,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15349 +#line 15414 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15349 +#line 15414 .heldItem = ITEM_CHESTO_BERRY, -#line 15351 +#line 15416 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15350 +#line 15415 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15352 +#line 15417 MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, @@ -38528,19 +38528,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15357 +#line 15422 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15357 +#line 15422 .heldItem = ITEM_SITRUS_BERRY, -#line 15359 +#line 15424 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15358 +#line 15423 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15360 +#line 15425 MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, @@ -38549,39 +38549,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 15365 +#line 15430 [TRAINER_TATE_AND_LIZA_3] = { -#line 15366 +#line 15431 .trainerName = _("TATE&LIZA"), -#line 15367 +#line 15432 .trainerClass = TRAINER_CLASS_LEADER, -#line 15368 +#line 15433 .trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA, .encounterMusic_gender = -#line 15370 +#line 15435 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 15371 +#line 15436 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15372 +#line 15437 .doubleBattle = TRUE, -#line 15373 +#line 15438 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15375 +#line 15440 .species = SPECIES_DROWZEE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15377 +#line 15442 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15376 +#line 15441 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15378 +#line 15443 MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_HEADBUTT, @@ -38589,17 +38589,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15383 +#line 15448 .species = SPECIES_SLOWPOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15385 +#line 15450 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15384 +#line 15449 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15386 +#line 15451 MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, @@ -38607,17 +38607,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15391 +#line 15456 .species = SPECIES_CLAYDOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15393 +#line 15458 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15392 +#line 15457 .lvl = 54, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15394 +#line 15459 MOVE_EARTHQUAKE, MOVE_EXPLOSION, MOVE_PSYCHIC, @@ -38625,19 +38625,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15399 +#line 15464 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15399 +#line 15464 .heldItem = ITEM_CHESTO_BERRY, -#line 15401 +#line 15466 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15400 +#line 15465 .lvl = 54, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15402 +#line 15467 MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, @@ -38645,19 +38645,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15407 +#line 15472 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15407 +#line 15472 .heldItem = ITEM_CHESTO_BERRY, -#line 15409 +#line 15474 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15408 +#line 15473 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15410 +#line 15475 MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, @@ -38665,19 +38665,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15415 +#line 15480 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15415 +#line 15480 .heldItem = ITEM_SITRUS_BERRY, -#line 15417 +#line 15482 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15416 +#line 15481 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15418 +#line 15483 MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, @@ -38686,39 +38686,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 15423 +#line 15488 [TRAINER_TATE_AND_LIZA_4] = { -#line 15424 +#line 15489 .trainerName = _("TATE&LIZA"), -#line 15425 +#line 15490 .trainerClass = TRAINER_CLASS_LEADER, -#line 15426 +#line 15491 .trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA, .encounterMusic_gender = -#line 15428 +#line 15493 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 15429 +#line 15494 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15430 +#line 15495 .doubleBattle = TRUE, -#line 15431 +#line 15496 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15433 +#line 15498 .species = SPECIES_HYPNO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15435 +#line 15500 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15434 +#line 15499 .lvl = 58, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15436 +#line 15501 MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_HEADBUTT, @@ -38726,17 +38726,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15441 +#line 15506 .species = SPECIES_CLAYDOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15443 +#line 15508 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15442 +#line 15507 .lvl = 59, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15444 +#line 15509 MOVE_EARTHQUAKE, MOVE_EXPLOSION, MOVE_PSYCHIC, @@ -38744,17 +38744,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15449 +#line 15514 .species = SPECIES_SLOWPOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15451 +#line 15516 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15450 +#line 15515 .lvl = 58, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15452 +#line 15517 MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, @@ -38762,19 +38762,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15457 +#line 15522 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15457 +#line 15522 .heldItem = ITEM_CHESTO_BERRY, -#line 15459 +#line 15524 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15458 +#line 15523 .lvl = 59, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15460 +#line 15525 MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, @@ -38782,19 +38782,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15465 +#line 15530 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15465 +#line 15530 .heldItem = ITEM_CHESTO_BERRY, -#line 15467 +#line 15532 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15466 +#line 15531 .lvl = 60, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15468 +#line 15533 MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, @@ -38802,19 +38802,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15473 +#line 15538 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15473 +#line 15538 .heldItem = ITEM_SITRUS_BERRY, -#line 15475 +#line 15540 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15474 +#line 15539 .lvl = 60, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15476 +#line 15541 MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, @@ -38823,39 +38823,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 15481 +#line 15546 [TRAINER_TATE_AND_LIZA_5] = { -#line 15482 +#line 15547 .trainerName = _("TATE&LIZA"), -#line 15483 +#line 15548 .trainerClass = TRAINER_CLASS_LEADER, -#line 15484 +#line 15549 .trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA, .encounterMusic_gender = -#line 15486 +#line 15551 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 15487 +#line 15552 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15488 +#line 15553 .doubleBattle = TRUE, -#line 15489 +#line 15554 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15491 +#line 15556 .species = SPECIES_HYPNO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15493 +#line 15558 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15492 +#line 15557 .lvl = 63, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15494 +#line 15559 MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_HEADBUTT, @@ -38863,17 +38863,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15499 +#line 15564 .species = SPECIES_CLAYDOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15501 +#line 15566 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15500 +#line 15565 .lvl = 64, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15502 +#line 15567 MOVE_EARTHQUAKE, MOVE_EXPLOSION, MOVE_PSYCHIC, @@ -38881,17 +38881,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15507 +#line 15572 .species = SPECIES_SLOWKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15509 +#line 15574 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15508 +#line 15573 .lvl = 63, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15510 +#line 15575 MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, @@ -38899,19 +38899,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15515 +#line 15580 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15515 +#line 15580 .heldItem = ITEM_CHESTO_BERRY, -#line 15517 +#line 15582 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15516 +#line 15581 .lvl = 64, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15518 +#line 15583 MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, @@ -38919,19 +38919,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15523 +#line 15588 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15523 +#line 15588 .heldItem = ITEM_CHESTO_BERRY, -#line 15525 +#line 15590 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15524 +#line 15589 .lvl = 65, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15526 +#line 15591 MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, @@ -38939,19 +38939,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15531 +#line 15596 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15531 +#line 15596 .heldItem = ITEM_SITRUS_BERRY, -#line 15533 +#line 15598 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15532 +#line 15597 .lvl = 65, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15534 +#line 15599 MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, @@ -38960,39 +38960,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 15539 +#line 15604 [TRAINER_JUAN_2] = { -#line 15540 +#line 15605 .trainerName = _("JUAN"), -#line 15541 +#line 15606 .trainerClass = TRAINER_CLASS_LEADER, -#line 15542 +#line 15607 .trainerPic = TRAINER_PIC_LEADER_JUAN, .encounterMusic_gender = -#line 15544 +#line 15609 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15545 +#line 15610 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15546 +#line 15611 .doubleBattle = TRUE, -#line 15547 +#line 15612 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 15549 +#line 15614 .species = SPECIES_POLIWAG, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15551 +#line 15616 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15550 +#line 15615 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15552 +#line 15617 MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_PROTECT, @@ -39000,17 +39000,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15557 +#line 15622 .species = SPECIES_WHISCASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15559 +#line 15624 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15558 +#line 15623 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15560 +#line 15625 MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, @@ -39018,17 +39018,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15565 +#line 15630 .species = SPECIES_WALREIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15567 +#line 15632 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15566 +#line 15631 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15568 +#line 15633 MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, @@ -39036,19 +39036,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15573 +#line 15638 .species = SPECIES_CRAWDAUNT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15573 +#line 15638 .heldItem = ITEM_CHESTO_BERRY, -#line 15575 +#line 15640 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15574 +#line 15639 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15576 +#line 15641 MOVE_REST, MOVE_CRABHAMMER, MOVE_TAUNT, @@ -39056,19 +39056,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15581 +#line 15646 .species = SPECIES_KINGDRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15581 +#line 15646 .heldItem = ITEM_CHESTO_BERRY, -#line 15583 +#line 15648 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15582 +#line 15647 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15584 +#line 15649 MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, @@ -39077,39 +39077,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 15589 +#line 15654 [TRAINER_JUAN_3] = { -#line 15590 +#line 15655 .trainerName = _("JUAN"), -#line 15591 +#line 15656 .trainerClass = TRAINER_CLASS_LEADER, -#line 15592 +#line 15657 .trainerPic = TRAINER_PIC_LEADER_JUAN, .encounterMusic_gender = -#line 15594 +#line 15659 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15595 +#line 15660 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15596 +#line 15661 .doubleBattle = TRUE, -#line 15597 +#line 15662 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 15599 +#line 15664 .species = SPECIES_POLIWHIRL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15601 +#line 15666 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15600 +#line 15665 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15602 +#line 15667 MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_PROTECT, @@ -39117,17 +39117,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15607 +#line 15672 .species = SPECIES_WHISCASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15609 +#line 15674 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15608 +#line 15673 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15610 +#line 15675 MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, @@ -39135,17 +39135,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15615 +#line 15680 .species = SPECIES_WALREIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15617 +#line 15682 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15616 +#line 15681 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15618 +#line 15683 MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, @@ -39153,19 +39153,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15623 +#line 15688 .species = SPECIES_CRAWDAUNT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15623 +#line 15688 .heldItem = ITEM_CHESTO_BERRY, -#line 15625 +#line 15690 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15624 +#line 15689 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15626 +#line 15691 MOVE_REST, MOVE_GUILLOTINE, MOVE_TAUNT, @@ -39173,19 +39173,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15631 +#line 15696 .species = SPECIES_KINGDRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15631 +#line 15696 .heldItem = ITEM_CHESTO_BERRY, -#line 15633 +#line 15698 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15632 +#line 15697 .lvl = 56, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15634 +#line 15699 MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, @@ -39194,39 +39194,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 15639 +#line 15704 [TRAINER_JUAN_4] = { -#line 15640 +#line 15705 .trainerName = _("JUAN"), -#line 15641 +#line 15706 .trainerClass = TRAINER_CLASS_LEADER, -#line 15642 +#line 15707 .trainerPic = TRAINER_PIC_LEADER_JUAN, .encounterMusic_gender = -#line 15644 +#line 15709 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15645 +#line 15710 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15646 +#line 15711 .doubleBattle = TRUE, -#line 15647 +#line 15712 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15649 +#line 15714 .species = SPECIES_LAPRAS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15651 +#line 15716 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15650 +#line 15715 .lvl = 56, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15652 +#line 15717 MOVE_HYDRO_PUMP, MOVE_PERISH_SONG, MOVE_ICE_BEAM, @@ -39234,17 +39234,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15657 +#line 15722 .species = SPECIES_WHISCASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15659 +#line 15724 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15658 +#line 15723 .lvl = 58, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15660 +#line 15725 MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, @@ -39252,17 +39252,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15665 +#line 15730 .species = SPECIES_POLIWHIRL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15667 +#line 15732 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15666 +#line 15731 .lvl = 56, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15668 +#line 15733 MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_PROTECT, @@ -39270,17 +39270,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15673 +#line 15738 .species = SPECIES_WALREIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15675 +#line 15740 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15674 +#line 15739 .lvl = 58, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15676 +#line 15741 MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, @@ -39288,19 +39288,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15681 +#line 15746 .species = SPECIES_CRAWDAUNT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15681 +#line 15746 .heldItem = ITEM_CHESTO_BERRY, -#line 15683 +#line 15748 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15682 +#line 15747 .lvl = 58, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15684 +#line 15749 MOVE_REST, MOVE_GUILLOTINE, MOVE_TAUNT, @@ -39308,19 +39308,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15689 +#line 15754 .species = SPECIES_KINGDRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15689 +#line 15754 .heldItem = ITEM_CHESTO_BERRY, -#line 15691 +#line 15756 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15690 +#line 15755 .lvl = 61, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15692 +#line 15757 MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, @@ -39329,39 +39329,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 15697 +#line 15762 [TRAINER_JUAN_5] = { -#line 15698 +#line 15763 .trainerName = _("JUAN"), -#line 15699 +#line 15764 .trainerClass = TRAINER_CLASS_LEADER, -#line 15700 +#line 15765 .trainerPic = TRAINER_PIC_LEADER_JUAN, .encounterMusic_gender = -#line 15702 +#line 15767 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15703 +#line 15768 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15704 +#line 15769 .doubleBattle = TRUE, -#line 15705 +#line 15770 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15707 +#line 15772 .species = SPECIES_LAPRAS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15709 +#line 15774 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15708 +#line 15773 .lvl = 61, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15710 +#line 15775 MOVE_HYDRO_PUMP, MOVE_PERISH_SONG, MOVE_ICE_BEAM, @@ -39369,17 +39369,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15715 +#line 15780 .species = SPECIES_WHISCASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15717 +#line 15782 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15716 +#line 15781 .lvl = 63, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15718 +#line 15783 MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, @@ -39387,17 +39387,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15723 +#line 15788 .species = SPECIES_POLITOED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15725 +#line 15790 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15724 +#line 15789 .lvl = 61, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15726 +#line 15791 MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_HYDRO_PUMP, @@ -39405,17 +39405,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15731 +#line 15796 .species = SPECIES_WALREIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15733 +#line 15798 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15732 +#line 15797 .lvl = 63, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15734 +#line 15799 MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, @@ -39423,19 +39423,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15739 +#line 15804 .species = SPECIES_CRAWDAUNT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15739 +#line 15804 .heldItem = ITEM_CHESTO_BERRY, -#line 15741 +#line 15806 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15740 +#line 15805 .lvl = 63, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15742 +#line 15807 MOVE_REST, MOVE_GUILLOTINE, MOVE_TAUNT, @@ -39443,19 +39443,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15747 +#line 15812 .species = SPECIES_KINGDRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15747 +#line 15812 .heldItem = ITEM_CHESTO_BERRY, -#line 15749 +#line 15814 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15748 +#line 15813 .lvl = 66, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15750 +#line 15815 MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, @@ -39464,54 +39464,54 @@ F_TRAINER_FEMALE | }, }, }, -#line 15755 +#line 15820 [TRAINER_ANGELO] = { -#line 15756 +#line 15821 .trainerName = _("ANGELO"), -#line 15757 +#line 15822 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 15758 +#line 15823 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 15760 +#line 15825 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 15761 +#line 15826 .doubleBattle = FALSE, -#line 15762 +#line 15827 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 15764 +#line 15829 .species = SPECIES_ILLUMISE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15766 +#line 15831 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 15765 +#line 15830 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15767 +#line 15832 MOVE_SHOCK_WAVE, MOVE_QUICK_ATTACK, MOVE_CHARM, }, }, { -#line 15771 +#line 15836 .species = SPECIES_VOLBEAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15773 +#line 15838 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 15772 +#line 15837 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15774 +#line 15839 MOVE_SHOCK_WAVE, MOVE_QUICK_ATTACK, MOVE_CONFUSE_RAY, @@ -39519,71 +39519,71 @@ F_TRAINER_FEMALE | }, }, }, -#line 15778 +#line 15843 [TRAINER_DARIUS] = { -#line 15779 +#line 15844 .trainerName = _("DARIUS"), -#line 15780 +#line 15845 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 15781 +#line 15846 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 15783 +#line 15848 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 15784 +#line 15849 .doubleBattle = FALSE, -#line 15785 +#line 15850 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 15787 +#line 15852 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15789 +#line 15854 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 15788 +#line 15853 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 15791 +#line 15856 [TRAINER_STEVEN] = { -#line 15792 +#line 15857 .trainerName = _("STEVEN"), -#line 15793 +#line 15858 .trainerClass = TRAINER_CLASS_RIVAL, -#line 15794 +#line 15859 .trainerPic = TRAINER_PIC_STEVEN, .encounterMusic_gender = -#line 15796 +#line 15861 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15797 +#line 15862 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15798 +#line 15863 .doubleBattle = FALSE, -#line 15799 +#line 15864 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15801 +#line 15866 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15803 +#line 15868 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15802 +#line 15867 .lvl = 77, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15804 +#line 15869 MOVE_TOXIC, MOVE_AERIAL_ACE, MOVE_SPIKES, @@ -39591,17 +39591,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15809 +#line 15874 .species = SPECIES_CLAYDOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15811 +#line 15876 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15810 +#line 15875 .lvl = 75, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15812 +#line 15877 MOVE_REFLECT, MOVE_LIGHT_SCREEN, MOVE_ANCIENT_POWER, @@ -39609,17 +39609,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15817 +#line 15882 .species = SPECIES_AGGRON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15819 +#line 15884 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15818 +#line 15883 .lvl = 76, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15820 +#line 15885 MOVE_THUNDER, MOVE_EARTHQUAKE, MOVE_SOLAR_BEAM, @@ -39627,17 +39627,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15825 +#line 15890 .species = SPECIES_CRADILY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15827 +#line 15892 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15826 +#line 15891 .lvl = 76, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15828 +#line 15893 MOVE_GIGA_DRAIN, MOVE_ANCIENT_POWER, MOVE_INGRAIN, @@ -39645,17 +39645,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15833 +#line 15898 .species = SPECIES_ARMALDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15835 +#line 15900 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15834 +#line 15899 .lvl = 76, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15836 +#line 15901 MOVE_WATER_PULSE, MOVE_ANCIENT_POWER, MOVE_AERIAL_ACE, @@ -39663,19 +39663,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15841 +#line 15906 .species = SPECIES_METAGROSS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15841 +#line 15906 .heldItem = ITEM_SITRUS_BERRY, -#line 15843 +#line 15908 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15842 +#line 15907 .lvl = 78, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15844 +#line 15909 MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_METEOR_MASH, @@ -39684,2499 +39684,2499 @@ F_TRAINER_FEMALE | }, }, }, -#line 15849 +#line 15914 [TRAINER_ANABEL] = { -#line 15850 +#line 15915 .trainerName = _("ANABEL"), -#line 15851 +#line 15916 .trainerClass = TRAINER_CLASS_SALON_MAIDEN, -#line 15852 +#line 15917 .trainerPic = TRAINER_PIC_SALON_MAIDEN_ANABEL, .encounterMusic_gender = -#line 15853 +#line 15918 F_TRAINER_FEMALE | -#line 15854 +#line 15919 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15855 +#line 15920 .doubleBattle = FALSE, -#line 15856 +#line 15921 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 15858 +#line 15923 .species = SPECIES_BELDUM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15860 +#line 15925 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 15859 +#line 15924 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 15862 +#line 15927 [TRAINER_TUCKER] = { -#line 15863 +#line 15928 .trainerName = _("TUCKER"), -#line 15864 +#line 15929 .trainerClass = TRAINER_CLASS_DOME_ACE, -#line 15865 +#line 15930 .trainerPic = TRAINER_PIC_DOME_ACE_TUCKER, .encounterMusic_gender = -#line 15867 +#line 15932 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15868 +#line 15933 .doubleBattle = FALSE, -#line 15869 +#line 15934 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 15871 +#line 15936 .species = SPECIES_BELDUM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15873 +#line 15938 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 15872 +#line 15937 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 15875 +#line 15940 [TRAINER_SPENSER] = { -#line 15876 +#line 15941 .trainerName = _("SPENSER"), -#line 15877 +#line 15942 .trainerClass = TRAINER_CLASS_PALACE_MAVEN, -#line 15878 +#line 15943 .trainerPic = TRAINER_PIC_PALACE_MAVEN_SPENSER, .encounterMusic_gender = -#line 15880 +#line 15945 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15881 +#line 15946 .doubleBattle = FALSE, -#line 15882 +#line 15947 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 15884 +#line 15949 .species = SPECIES_BELDUM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15886 +#line 15951 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 15885 +#line 15950 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 15888 +#line 15953 [TRAINER_GRETA] = { -#line 15889 +#line 15954 .trainerName = _("GRETA"), -#line 15890 +#line 15955 .trainerClass = TRAINER_CLASS_ARENA_TYCOON, -#line 15891 +#line 15956 .trainerPic = TRAINER_PIC_ARENA_TYCOON_GRETA, .encounterMusic_gender = -#line 15892 +#line 15957 F_TRAINER_FEMALE | -#line 15893 +#line 15958 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15894 +#line 15959 .doubleBattle = FALSE, -#line 15895 +#line 15960 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 15897 +#line 15962 .species = SPECIES_BELDUM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15899 +#line 15964 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 15898 +#line 15963 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 15901 +#line 15966 [TRAINER_NOLAND] = { -#line 15902 +#line 15967 .trainerName = _("NOLAND"), -#line 15903 +#line 15968 .trainerClass = TRAINER_CLASS_FACTORY_HEAD, -#line 15904 +#line 15969 .trainerPic = TRAINER_PIC_FACTORY_HEAD_NOLAND, .encounterMusic_gender = -#line 15906 +#line 15971 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15907 +#line 15972 .doubleBattle = FALSE, -#line 15908 +#line 15973 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 15910 +#line 15975 .species = SPECIES_BELDUM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15912 +#line 15977 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 15911 +#line 15976 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 15914 +#line 15979 [TRAINER_LUCY] = { -#line 15915 +#line 15980 .trainerName = _("LUCY"), -#line 15916 +#line 15981 .trainerClass = TRAINER_CLASS_PIKE_QUEEN, -#line 15917 +#line 15982 .trainerPic = TRAINER_PIC_PIKE_QUEEN_LUCY, .encounterMusic_gender = -#line 15918 +#line 15983 F_TRAINER_FEMALE | -#line 15919 +#line 15984 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15920 +#line 15985 .doubleBattle = FALSE, -#line 15921 +#line 15986 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 15923 +#line 15988 .species = SPECIES_BELDUM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15925 +#line 15990 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 15924 +#line 15989 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 15927 +#line 15992 [TRAINER_BRANDON] = { -#line 15928 +#line 15993 .trainerName = _("BRANDON"), -#line 15929 +#line 15994 .trainerClass = TRAINER_CLASS_PYRAMID_KING, -#line 15930 +#line 15995 .trainerPic = TRAINER_PIC_PYRAMID_KING_BRANDON, .encounterMusic_gender = -#line 15932 +#line 15997 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15933 +#line 15998 .doubleBattle = FALSE, -#line 15934 +#line 15999 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 15936 +#line 16001 .species = SPECIES_BELDUM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15938 +#line 16003 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 15937 +#line 16002 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 15940 +#line 16005 [TRAINER_ANDRES_2] = { -#line 15941 +#line 16006 .trainerName = _("ANDRES"), -#line 15942 +#line 16007 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 15943 +#line 16008 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 15945 +#line 16010 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 15946 +#line 16011 .doubleBattle = FALSE, -#line 15947 +#line 16012 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 15949 +#line 16014 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15951 +#line 16016 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 15950 +#line 16015 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 15953 +#line 16018 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15955 +#line 16020 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 15954 +#line 16019 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 15957 +#line 16022 [TRAINER_ANDRES_3] = { -#line 15958 +#line 16023 .trainerName = _("ANDRES"), -#line 15959 +#line 16024 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 15960 +#line 16025 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 15962 +#line 16027 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 15963 +#line 16028 .doubleBattle = FALSE, -#line 15964 +#line 16029 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 15966 +#line 16031 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15968 +#line 16033 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 15967 +#line 16032 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 15970 +#line 16035 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15972 +#line 16037 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 15971 +#line 16036 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 15974 +#line 16039 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15976 +#line 16041 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 15975 +#line 16040 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 15978 +#line 16043 [TRAINER_ANDRES_4] = { -#line 15979 +#line 16044 .trainerName = _("ANDRES"), -#line 15980 +#line 16045 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 15981 +#line 16046 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 15983 +#line 16048 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 15984 +#line 16049 .doubleBattle = FALSE, -#line 15985 +#line 16050 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 15987 +#line 16052 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15989 +#line 16054 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 15988 +#line 16053 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 15991 +#line 16056 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15993 +#line 16058 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 15992 +#line 16057 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 15995 +#line 16060 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15997 +#line 16062 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 15996 +#line 16061 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 15999 +#line 16064 [TRAINER_ANDRES_5] = { -#line 16000 +#line 16065 .trainerName = _("ANDRES"), -#line 16001 +#line 16066 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 16002 +#line 16067 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 16004 +#line 16069 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 16005 +#line 16070 .doubleBattle = FALSE, -#line 16006 +#line 16071 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16008 +#line 16073 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16010 +#line 16075 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16009 +#line 16074 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16012 +#line 16077 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16014 +#line 16079 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16013 +#line 16078 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16016 +#line 16081 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16018 +#line 16083 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16017 +#line 16082 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16020 +#line 16085 [TRAINER_CORY_2] = { -#line 16021 +#line 16086 .trainerName = _("CORY"), -#line 16022 +#line 16087 .trainerClass = TRAINER_CLASS_SAILOR, -#line 16023 +#line 16088 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 16025 +#line 16090 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 16026 +#line 16091 .doubleBattle = FALSE, -#line 16027 +#line 16092 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16029 +#line 16094 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16031 +#line 16096 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16030 +#line 16095 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16033 +#line 16098 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16035 +#line 16100 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16034 +#line 16099 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16037 +#line 16102 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16039 +#line 16104 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16038 +#line 16103 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16041 +#line 16106 [TRAINER_CORY_3] = { -#line 16042 +#line 16107 .trainerName = _("CORY"), -#line 16043 +#line 16108 .trainerClass = TRAINER_CLASS_SAILOR, -#line 16044 +#line 16109 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 16046 +#line 16111 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 16047 +#line 16112 .doubleBattle = FALSE, -#line 16048 +#line 16113 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16050 +#line 16115 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16052 +#line 16117 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16051 +#line 16116 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16054 +#line 16119 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16056 +#line 16121 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16055 +#line 16120 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16058 +#line 16123 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16060 +#line 16125 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16059 +#line 16124 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16062 +#line 16127 [TRAINER_CORY_4] = { -#line 16063 +#line 16128 .trainerName = _("CORY"), -#line 16064 +#line 16129 .trainerClass = TRAINER_CLASS_SAILOR, -#line 16065 +#line 16130 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 16067 +#line 16132 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 16068 +#line 16133 .doubleBattle = FALSE, -#line 16069 +#line 16134 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16071 +#line 16136 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16073 +#line 16138 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16072 +#line 16137 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16075 +#line 16140 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16077 +#line 16142 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16076 +#line 16141 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16079 +#line 16144 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16081 +#line 16146 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16080 +#line 16145 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16083 +#line 16148 [TRAINER_CORY_5] = { -#line 16084 +#line 16149 .trainerName = _("CORY"), -#line 16085 +#line 16150 .trainerClass = TRAINER_CLASS_SAILOR, -#line 16086 +#line 16151 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 16088 +#line 16153 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 16089 +#line 16154 .doubleBattle = FALSE, -#line 16090 +#line 16155 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16092 +#line 16157 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16094 +#line 16159 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16093 +#line 16158 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16096 +#line 16161 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16098 +#line 16163 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16097 +#line 16162 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16100 +#line 16165 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16102 +#line 16167 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16101 +#line 16166 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16104 +#line 16169 [TRAINER_PABLO_2] = { -#line 16105 +#line 16170 .trainerName = _("PABLO"), -#line 16106 +#line 16171 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 16107 +#line 16172 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 16109 +#line 16174 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 16110 +#line 16175 .doubleBattle = FALSE, -#line 16111 +#line 16176 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 16113 +#line 16178 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16115 +#line 16180 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16114 +#line 16179 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16117 +#line 16182 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16119 +#line 16184 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16118 +#line 16183 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16121 +#line 16186 [TRAINER_PABLO_3] = { -#line 16122 +#line 16187 .trainerName = _("PABLO"), -#line 16123 +#line 16188 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 16124 +#line 16189 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 16126 +#line 16191 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 16127 +#line 16192 .doubleBattle = FALSE, -#line 16128 +#line 16193 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16130 +#line 16195 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16132 +#line 16197 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16131 +#line 16196 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16134 +#line 16199 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16136 +#line 16201 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16135 +#line 16200 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16138 +#line 16203 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16140 +#line 16205 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16139 +#line 16204 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16142 +#line 16207 [TRAINER_PABLO_4] = { -#line 16143 +#line 16208 .trainerName = _("PABLO"), -#line 16144 +#line 16209 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 16145 +#line 16210 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 16147 +#line 16212 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 16148 +#line 16213 .doubleBattle = FALSE, -#line 16149 +#line 16214 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16151 +#line 16216 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16153 +#line 16218 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16152 +#line 16217 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16155 +#line 16220 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16157 +#line 16222 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16156 +#line 16221 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16159 +#line 16224 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16161 +#line 16226 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16160 +#line 16225 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16163 +#line 16228 [TRAINER_PABLO_5] = { -#line 16164 +#line 16229 .trainerName = _("PABLO"), -#line 16165 +#line 16230 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 16166 +#line 16231 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 16168 +#line 16233 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 16169 +#line 16234 .doubleBattle = FALSE, -#line 16170 +#line 16235 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16172 +#line 16237 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16174 +#line 16239 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16173 +#line 16238 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16176 +#line 16241 .species = SPECIES_STARMIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16178 +#line 16243 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16177 +#line 16242 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16180 +#line 16245 .species = SPECIES_STARMIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16182 +#line 16247 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16181 +#line 16246 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16184 +#line 16249 [TRAINER_KOJI_2] = { -#line 16185 +#line 16250 .trainerName = _("KOJI"), -#line 16186 +#line 16251 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 16187 +#line 16252 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 16189 +#line 16254 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16190 +#line 16255 .doubleBattle = FALSE, -#line 16191 +#line 16256 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 16193 +#line 16258 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16195 +#line 16260 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16194 +#line 16259 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16197 +#line 16262 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16199 +#line 16264 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16198 +#line 16263 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16201 +#line 16266 [TRAINER_KOJI_3] = { -#line 16202 +#line 16267 .trainerName = _("KOJI"), -#line 16203 +#line 16268 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 16204 +#line 16269 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 16206 +#line 16271 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16207 +#line 16272 .doubleBattle = FALSE, -#line 16208 +#line 16273 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16210 +#line 16275 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16212 +#line 16277 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16211 +#line 16276 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16214 +#line 16279 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16216 +#line 16281 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16215 +#line 16280 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16218 +#line 16283 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16220 +#line 16285 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16219 +#line 16284 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16222 +#line 16287 [TRAINER_KOJI_4] = { -#line 16223 +#line 16288 .trainerName = _("KOJI"), -#line 16224 +#line 16289 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 16225 +#line 16290 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 16227 +#line 16292 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16228 +#line 16293 .doubleBattle = FALSE, -#line 16229 +#line 16294 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16231 +#line 16296 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16233 +#line 16298 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16232 +#line 16297 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16235 +#line 16300 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16237 +#line 16302 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16236 +#line 16301 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16239 +#line 16304 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16241 +#line 16306 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16240 +#line 16305 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16243 +#line 16308 [TRAINER_KOJI_5] = { -#line 16244 +#line 16309 .trainerName = _("KOJI"), -#line 16245 +#line 16310 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 16246 +#line 16311 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 16248 +#line 16313 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16249 +#line 16314 .doubleBattle = FALSE, -#line 16250 +#line 16315 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16252 +#line 16317 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16254 +#line 16319 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16253 +#line 16318 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16256 +#line 16321 .species = SPECIES_MACHAMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16258 +#line 16323 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16257 +#line 16322 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16260 +#line 16325 .species = SPECIES_MACHAMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16262 +#line 16327 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16261 +#line 16326 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16264 +#line 16329 [TRAINER_CRISTIN_2] = { -#line 16265 +#line 16330 .trainerName = _("CRISTIN"), -#line 16266 +#line 16331 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 16267 +#line 16332 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 16268 +#line 16333 F_TRAINER_FEMALE | -#line 16269 +#line 16334 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 16270 +#line 16335 .items = { ITEM_HYPER_POTION }, -#line 16271 +#line 16336 .doubleBattle = FALSE, -#line 16272 +#line 16337 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 16274 +#line 16339 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16276 +#line 16341 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 16275 +#line 16340 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16278 +#line 16343 .species = SPECIES_VIGOROTH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16280 +#line 16345 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 16279 +#line 16344 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16282 +#line 16347 [TRAINER_CRISTIN_3] = { -#line 16283 +#line 16348 .trainerName = _("CRISTIN"), -#line 16284 +#line 16349 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 16285 +#line 16350 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 16286 +#line 16351 F_TRAINER_FEMALE | -#line 16287 +#line 16352 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 16288 +#line 16353 .items = { ITEM_HYPER_POTION }, -#line 16289 +#line 16354 .doubleBattle = FALSE, -#line 16290 +#line 16355 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16292 +#line 16357 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16294 +#line 16359 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 16293 +#line 16358 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16296 +#line 16361 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16298 +#line 16363 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 16297 +#line 16362 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16300 +#line 16365 .species = SPECIES_VIGOROTH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16302 +#line 16367 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 16301 +#line 16366 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16304 +#line 16369 [TRAINER_CRISTIN_4] = { -#line 16305 +#line 16370 .trainerName = _("CRISTIN"), -#line 16306 +#line 16371 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 16307 +#line 16372 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 16308 +#line 16373 F_TRAINER_FEMALE | -#line 16309 +#line 16374 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 16310 +#line 16375 .items = { ITEM_HYPER_POTION }, -#line 16311 +#line 16376 .doubleBattle = FALSE, -#line 16312 +#line 16377 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16314 +#line 16379 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16316 +#line 16381 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 16315 +#line 16380 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16318 +#line 16383 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16320 +#line 16385 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 16319 +#line 16384 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16322 +#line 16387 .species = SPECIES_VIGOROTH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16324 +#line 16389 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 16323 +#line 16388 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16326 +#line 16391 [TRAINER_CRISTIN_5] = { -#line 16327 +#line 16392 .trainerName = _("CRISTIN"), -#line 16328 +#line 16393 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 16329 +#line 16394 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 16330 +#line 16395 F_TRAINER_FEMALE | -#line 16331 +#line 16396 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 16332 +#line 16397 .items = { ITEM_HYPER_POTION }, -#line 16333 +#line 16398 .doubleBattle = FALSE, -#line 16334 +#line 16399 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16336 +#line 16401 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16338 +#line 16403 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 16337 +#line 16402 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16340 +#line 16405 .species = SPECIES_EXPLOUD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16342 +#line 16407 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 16341 +#line 16406 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16344 +#line 16409 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16346 +#line 16411 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 16345 +#line 16410 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16348 +#line 16413 [TRAINER_FERNANDO_2] = { -#line 16349 +#line 16414 .trainerName = _("FERNANDO"), -#line 16350 +#line 16415 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 16351 +#line 16416 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 16353 +#line 16418 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16354 +#line 16419 .doubleBattle = FALSE, -#line 16355 +#line 16420 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16357 +#line 16422 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16359 +#line 16424 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16358 +#line 16423 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16361 +#line 16426 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16363 +#line 16428 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16362 +#line 16427 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16365 +#line 16430 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16367 +#line 16432 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16366 +#line 16431 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16369 +#line 16434 [TRAINER_FERNANDO_3] = { -#line 16370 +#line 16435 .trainerName = _("FERNANDO"), -#line 16371 +#line 16436 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 16372 +#line 16437 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 16374 +#line 16439 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16375 +#line 16440 .doubleBattle = FALSE, -#line 16376 +#line 16441 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16378 +#line 16443 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16380 +#line 16445 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16379 +#line 16444 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16382 +#line 16447 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16384 +#line 16449 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16383 +#line 16448 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16386 +#line 16451 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16388 +#line 16453 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16387 +#line 16452 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16390 +#line 16455 [TRAINER_FERNANDO_4] = { -#line 16391 +#line 16456 .trainerName = _("FERNANDO"), -#line 16392 +#line 16457 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 16393 +#line 16458 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 16395 +#line 16460 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16396 +#line 16461 .doubleBattle = FALSE, -#line 16397 +#line 16462 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16399 +#line 16464 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16401 +#line 16466 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16400 +#line 16465 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16403 +#line 16468 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16405 +#line 16470 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16404 +#line 16469 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16407 +#line 16472 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16409 +#line 16474 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16408 +#line 16473 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16411 +#line 16476 [TRAINER_FERNANDO_5] = { -#line 16412 +#line 16477 .trainerName = _("FERNANDO"), -#line 16413 +#line 16478 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 16414 +#line 16479 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 16416 +#line 16481 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16417 +#line 16482 .doubleBattle = FALSE, -#line 16418 +#line 16483 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16420 +#line 16485 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16422 +#line 16487 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16421 +#line 16486 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16424 +#line 16489 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16426 +#line 16491 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16425 +#line 16490 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16428 +#line 16493 .species = SPECIES_EXPLOUD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16430 +#line 16495 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16429 +#line 16494 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16432 +#line 16497 [TRAINER_SAWYER_2] = { -#line 16433 +#line 16498 .trainerName = _("SAWYER"), -#line 16434 +#line 16499 .trainerClass = TRAINER_CLASS_HIKER, -#line 16435 +#line 16500 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 16437 +#line 16502 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 16438 +#line 16503 .doubleBattle = FALSE, -#line 16439 +#line 16504 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 16441 +#line 16506 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16443 +#line 16508 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16442 +#line 16507 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16445 +#line 16510 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16447 +#line 16512 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16446 +#line 16511 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16449 +#line 16514 [TRAINER_SAWYER_3] = { -#line 16450 +#line 16515 .trainerName = _("SAWYER"), -#line 16451 +#line 16516 .trainerClass = TRAINER_CLASS_HIKER, -#line 16452 +#line 16517 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 16454 +#line 16519 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 16455 +#line 16520 .doubleBattle = FALSE, -#line 16456 +#line 16521 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16458 +#line 16523 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16460 +#line 16525 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16459 +#line 16524 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16462 +#line 16527 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16464 +#line 16529 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16463 +#line 16528 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16466 +#line 16531 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16468 +#line 16533 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16467 +#line 16532 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16470 +#line 16535 [TRAINER_SAWYER_4] = { -#line 16471 +#line 16536 .trainerName = _("SAWYER"), -#line 16472 +#line 16537 .trainerClass = TRAINER_CLASS_HIKER, -#line 16473 +#line 16538 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 16475 +#line 16540 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 16476 +#line 16541 .doubleBattle = FALSE, -#line 16477 +#line 16542 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16479 +#line 16544 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16481 +#line 16546 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16480 +#line 16545 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16483 +#line 16548 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16485 +#line 16550 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16484 +#line 16549 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16487 +#line 16552 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16489 +#line 16554 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16488 +#line 16553 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16491 +#line 16556 [TRAINER_SAWYER_5] = { -#line 16492 +#line 16557 .trainerName = _("SAWYER"), -#line 16493 +#line 16558 .trainerClass = TRAINER_CLASS_HIKER, -#line 16494 +#line 16559 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 16496 +#line 16561 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 16497 +#line 16562 .doubleBattle = FALSE, -#line 16498 +#line 16563 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16500 +#line 16565 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16502 +#line 16567 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16501 +#line 16566 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16504 +#line 16569 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16506 +#line 16571 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16505 +#line 16570 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16508 +#line 16573 .species = SPECIES_GOLEM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16510 +#line 16575 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16509 +#line 16574 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16512 +#line 16577 [TRAINER_GABRIELLE_2] = { -#line 16513 +#line 16578 .trainerName = _("GABRIELLE"), -#line 16514 +#line 16579 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 16515 +#line 16580 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 16516 +#line 16581 F_TRAINER_FEMALE | -#line 16517 +#line 16582 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 16518 +#line 16583 .doubleBattle = FALSE, -#line 16519 +#line 16584 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 16521 +#line 16586 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16523 +#line 16588 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16522 +#line 16587 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16525 +#line 16590 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16527 +#line 16592 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16526 +#line 16591 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16529 +#line 16594 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16531 +#line 16596 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16530 +#line 16595 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16533 +#line 16598 .species = SPECIES_LOTAD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16535 +#line 16600 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16534 +#line 16599 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16537 +#line 16602 .species = SPECIES_SEEDOT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16539 +#line 16604 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16538 +#line 16603 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16541 +#line 16606 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16543 +#line 16608 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16542 +#line 16607 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16545 +#line 16610 [TRAINER_GABRIELLE_3] = { -#line 16546 +#line 16611 .trainerName = _("GABRIELLE"), -#line 16547 +#line 16612 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 16548 +#line 16613 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 16549 +#line 16614 F_TRAINER_FEMALE | -#line 16550 +#line 16615 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 16551 +#line 16616 .doubleBattle = FALSE, -#line 16552 +#line 16617 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 16554 +#line 16619 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16556 +#line 16621 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16555 +#line 16620 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16558 +#line 16623 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16560 +#line 16625 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16559 +#line 16624 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16562 +#line 16627 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16564 +#line 16629 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16563 +#line 16628 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16566 +#line 16631 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16568 +#line 16633 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16567 +#line 16632 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16570 +#line 16635 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16572 +#line 16637 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16571 +#line 16636 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16574 +#line 16639 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16576 +#line 16641 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16575 +#line 16640 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16578 +#line 16643 [TRAINER_GABRIELLE_4] = { -#line 16579 +#line 16644 .trainerName = _("GABRIELLE"), -#line 16580 +#line 16645 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 16581 +#line 16646 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 16582 +#line 16647 F_TRAINER_FEMALE | -#line 16583 +#line 16648 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 16584 +#line 16649 .doubleBattle = FALSE, -#line 16585 +#line 16650 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 16587 +#line 16652 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16589 +#line 16654 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16588 +#line 16653 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16591 +#line 16656 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16593 +#line 16658 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16592 +#line 16657 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16595 +#line 16660 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16597 +#line 16662 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16596 +#line 16661 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16599 +#line 16664 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16601 +#line 16666 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16600 +#line 16665 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16603 +#line 16668 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16605 +#line 16670 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16604 +#line 16669 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16607 +#line 16672 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16609 +#line 16674 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16608 +#line 16673 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16611 +#line 16676 [TRAINER_GABRIELLE_5] = { -#line 16612 +#line 16677 .trainerName = _("GABRIELLE"), -#line 16613 +#line 16678 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 16614 +#line 16679 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 16615 +#line 16680 F_TRAINER_FEMALE | -#line 16616 +#line 16681 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 16617 +#line 16682 .doubleBattle = FALSE, -#line 16618 +#line 16683 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 16620 +#line 16685 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16622 +#line 16687 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16621 +#line 16686 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16624 +#line 16689 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16626 +#line 16691 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16625 +#line 16690 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16628 +#line 16693 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16630 +#line 16695 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16629 +#line 16694 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16632 +#line 16697 .species = SPECIES_LUDICOLO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16634 +#line 16699 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16633 +#line 16698 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16636 +#line 16701 .species = SPECIES_SHIFTRY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16638 +#line 16703 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16637 +#line 16702 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16640 +#line 16705 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16642 +#line 16707 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16641 +#line 16706 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16644 +#line 16709 [TRAINER_THALIA_2] = { -#line 16645 +#line 16710 .trainerName = _("THALIA"), -#line 16646 +#line 16711 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 16647 +#line 16712 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 16648 +#line 16713 F_TRAINER_FEMALE | -#line 16649 +#line 16714 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 16650 +#line 16715 .doubleBattle = FALSE, -#line 16651 +#line 16716 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 16653 +#line 16718 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16655 +#line 16720 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16654 +#line 16719 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16657 +#line 16722 .species = SPECIES_HORSEA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16659 +#line 16724 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16658 +#line 16723 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16661 +#line 16726 [TRAINER_THALIA_3] = { -#line 16662 +#line 16727 .trainerName = _("THALIA"), -#line 16663 +#line 16728 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 16664 +#line 16729 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 16665 +#line 16730 F_TRAINER_FEMALE | -#line 16666 +#line 16731 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 16667 +#line 16732 .doubleBattle = FALSE, -#line 16668 +#line 16733 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16670 +#line 16735 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16672 +#line 16737 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16671 +#line 16736 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16674 +#line 16739 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16676 +#line 16741 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16675 +#line 16740 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16678 +#line 16743 .species = SPECIES_SEADRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16680 +#line 16745 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16679 +#line 16744 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16682 +#line 16747 [TRAINER_THALIA_4] = { -#line 16683 +#line 16748 .trainerName = _("THALIA"), -#line 16684 +#line 16749 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 16685 +#line 16750 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 16686 +#line 16751 F_TRAINER_FEMALE | -#line 16687 +#line 16752 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 16688 +#line 16753 .doubleBattle = FALSE, -#line 16689 +#line 16754 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16691 +#line 16756 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16693 +#line 16758 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16692 +#line 16757 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16695 +#line 16760 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16697 +#line 16762 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16696 +#line 16761 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16699 +#line 16764 .species = SPECIES_SEADRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16701 +#line 16766 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16700 +#line 16765 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16703 +#line 16768 [TRAINER_THALIA_5] = { -#line 16704 +#line 16769 .trainerName = _("THALIA"), -#line 16705 +#line 16770 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 16706 +#line 16771 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 16707 +#line 16772 F_TRAINER_FEMALE | -#line 16708 +#line 16773 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 16709 +#line 16774 .doubleBattle = FALSE, -#line 16710 +#line 16775 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16712 +#line 16777 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16714 +#line 16779 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16713 +#line 16778 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16716 +#line 16781 .species = SPECIES_WAILORD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16718 +#line 16783 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16717 +#line 16782 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16720 +#line 16785 .species = SPECIES_KINGDRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16722 +#line 16787 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16721 +#line 16786 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16724 +#line 16789 [TRAINER_MARIELA] = { -#line 16725 +#line 16790 .trainerName = _("MARIELA"), -#line 16726 +#line 16791 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 16727 +#line 16792 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 16728 +#line 16793 F_TRAINER_FEMALE | -#line 16729 +#line 16794 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16730 +#line 16795 .doubleBattle = FALSE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 16732 +#line 16797 .species = SPECIES_CHIMECHO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16734 +#line 16799 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 16733 +#line 16798 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16736 +#line 16801 [TRAINER_ALVARO] = { -#line 16737 +#line 16802 .trainerName = _("ALVARO"), -#line 16738 +#line 16803 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 16739 +#line 16804 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 16741 +#line 16806 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16742 +#line 16807 .doubleBattle = FALSE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 16744 +#line 16809 .species = SPECIES_BANETTE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16746 +#line 16811 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 16745 +#line 16810 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16748 +#line 16813 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16750 +#line 16815 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 16749 +#line 16814 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16752 +#line 16817 [TRAINER_EVERETT] = { -#line 16753 +#line 16818 .trainerName = _("EVERETT"), -#line 16754 +#line 16819 .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 16755 +#line 16820 .trainerPic = TRAINER_PIC_GENTLEMAN, .encounterMusic_gender = -#line 16757 +#line 16822 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 16758 +#line 16823 .doubleBattle = FALSE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 16760 +#line 16825 .species = SPECIES_WOBBUFFET, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16762 +#line 16827 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 16761 +#line 16826 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16764 +#line 16829 [TRAINER_RED] = { -#line 16765 +#line 16830 .trainerName = _("RED"), -#line 16766 +#line 16831 .trainerClass = TRAINER_CLASS_RIVAL, -#line 16767 +#line 16832 .trainerPic = TRAINER_PIC_RED, .encounterMusic_gender = -#line 16769 +#line 16834 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 16770 +#line 16835 .doubleBattle = FALSE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 16772 +#line 16837 .species = SPECIES_CHARMANDER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16774 +#line 16839 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 16773 +#line 16838 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16776 +#line 16841 [TRAINER_LEAF] = { -#line 16777 +#line 16842 .trainerName = _("LEAF"), -#line 16778 +#line 16843 .trainerClass = TRAINER_CLASS_RIVAL, -#line 16779 +#line 16844 .trainerPic = TRAINER_PIC_LEAF, .encounterMusic_gender = -#line 16780 +#line 16845 F_TRAINER_FEMALE | -#line 16781 +#line 16846 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 16782 +#line 16847 .doubleBattle = FALSE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 16784 +#line 16849 .species = SPECIES_BULBASAUR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16786 +#line 16851 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 16785 +#line 16850 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16788 +#line 16853 [TRAINER_BRENDAN_PLACEHOLDER] = { -#line 16789 +#line 16854 .trainerName = _("BRENDAN"), -#line 16790 +#line 16855 .trainerClass = TRAINER_CLASS_RS_PROTAG, -#line 16791 +#line 16856 .trainerPic = TRAINER_PIC_RS_BRENDAN, .encounterMusic_gender = -#line 16793 +#line 16858 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 16794 +#line 16859 .doubleBattle = FALSE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 16796 +#line 16861 .species = SPECIES_GROUDON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16798 +#line 16863 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 16797 +#line 16862 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16800 +#line 16865 [TRAINER_MAY_PLACEHOLDER] = { -#line 16801 +#line 16866 .trainerName = _("MAY"), -#line 16802 +#line 16867 .trainerClass = TRAINER_CLASS_RS_PROTAG, -#line 16803 +#line 16868 .trainerPic = TRAINER_PIC_RS_MAY, .encounterMusic_gender = -#line 16804 +#line 16869 F_TRAINER_FEMALE | -#line 16805 +#line 16870 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 16806 +#line 16871 .doubleBattle = FALSE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 16808 +#line 16873 .species = SPECIES_KYOGRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16810 +#line 16875 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 16809 +#line 16874 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, diff --git a/src/data/types_info.h b/src/data/types_info.h index f9bd233ca6c4..df74199bdd1d 100644 --- a/src/data/types_info.h +++ b/src/data/types_info.h @@ -60,6 +60,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB_WHITE, .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_NormalTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = TRUE, }, [TYPE_NORMAL] = { @@ -71,6 +73,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB_WHITE, // custom .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_NormalTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_SILK_SCARF, //.berry = ITEM_CHILAN_BERRY, //.gem = ITEM_NORMAL_GEM, @@ -88,6 +92,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(26, 8, 14), .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_FightingTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_BLACK_BELT, //.berry = ITEM_CHOPLE_BERRY, //.gem = ITEM_FIGHTING_GEM, @@ -107,6 +113,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(31, 26, 7), .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_FlyingTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_SHARP_BEAK, //.berry = ITEM_COBA_BERRY, //.gem = ITEM_FLYING_GEM, @@ -126,6 +134,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(26, 10, 25), // custom .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_PoisonTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_POISON_BARB, //.berry = ITEM_KEBIA_BERRY, //.gem = ITEM_POISON_GEM, @@ -145,6 +155,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(25, 23, 18), .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_GroundTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_SOFT_SAND, //.berry = ITEM_SHUCA_BERRY, //.gem = ITEM_GROUND_GEM, @@ -164,6 +176,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(18, 16, 8), // custom .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_RockTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_HARD_STONE, //.berry = ITEM_CHARTI_BERRY, //.gem = ITEM_ROCK_GEM, @@ -183,6 +197,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(18, 24, 6), .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_BugTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_SILVER_POWDER, //.berry = ITEM_TANGA_BERRY, //.gem = ITEM_BUG_GEM, @@ -202,6 +218,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(12, 10, 16), .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_GhostTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_SPELL_TAG, //.berry = ITEM_KASIB_BERRY, //.gem = ITEM_GHOST_GEM, @@ -221,6 +239,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(19, 19, 20), .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_SteelTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_METAL_COAT, //.berry = ITEM_BABIRI_BERRY, //.gem = ITEM_STEEL_GEM, @@ -237,6 +257,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .palette = 15, .teraTypeRGBValue = RGB_WHITE, .damageCategory = DAMAGE_CATEGORY_SPECIAL, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = TRUE, }, [TYPE_FIRE] = { @@ -248,6 +270,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(31, 20, 11), .damageCategory = DAMAGE_CATEGORY_SPECIAL, .paletteTMHM = gItemIconPalette_FireTMHM, + .useSecondTypeIconPalette = TRUE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_CHARCOAL, //.berry = ITEM_OCCA_BERRY, //.gem = ITEM_FIRE_GEM, @@ -267,6 +291,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(10, 18, 27), .damageCategory = DAMAGE_CATEGORY_SPECIAL, .paletteTMHM = gItemIconPalette_WaterTMHM, + .useSecondTypeIconPalette = TRUE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_MYSTIC_WATER, //.berry = ITEM_PASSHO_BERRY, //.gem = ITEM_WATER_GEM, @@ -286,6 +312,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(12, 24, 11), .damageCategory = DAMAGE_CATEGORY_SPECIAL, .paletteTMHM = gItemIconPalette_GrassTMHM, + .useSecondTypeIconPalette = TRUE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_MIRACLE_SEED, //.berry = ITEM_RINDO_BERRY, //.gem = ITEM_GRASS_GEM, @@ -305,6 +333,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(30, 26, 7), .damageCategory = DAMAGE_CATEGORY_SPECIAL, .paletteTMHM = gItemIconPalette_ElectricTMHM, + .useSecondTypeIconPalette = TRUE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_MAGNET, //.berry = ITEM_WACAN_BERRY, //.gem = ITEM_ELECTRIC_GEM, @@ -324,6 +354,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(31, 14, 15), .damageCategory = DAMAGE_CATEGORY_SPECIAL, .paletteTMHM = gItemIconPalette_PsychicTMHM, + .useSecondTypeIconPalette = TRUE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_TWISTED_SPOON, //.berry = ITEM_PAYAPA_BERRY, //.gem = ITEM_PSYCHIC_GEM, @@ -343,6 +375,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(14, 26, 25), .damageCategory = DAMAGE_CATEGORY_SPECIAL, .paletteTMHM = gItemIconPalette_IceTMHM, + .useSecondTypeIconPalette = TRUE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_NEVER_MELT_ICE, //.berry = ITEM_YACHE_BERRY, //.gem = ITEM_ICE_GEM, @@ -362,6 +396,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(10, 18, 27), .damageCategory = DAMAGE_CATEGORY_SPECIAL, .paletteTMHM = gItemIconPalette_DragonTMHM, + .useSecondTypeIconPalette = TRUE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_DRAGON_FANG, //.berry = ITEM_HABAN_BERRY, //.gem = ITEM_DRAGON_GEM, @@ -381,6 +417,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(6, 5, 8), .damageCategory = DAMAGE_CATEGORY_SPECIAL, .paletteTMHM = gItemIconPalette_DarkTMHM, + .useSecondTypeIconPalette = TRUE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_BLACK_GLASSES, //.berry = ITEM_COLBUR_BERRY, //.gem = ITEM_DARK_GEM, @@ -400,6 +438,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(31, 15, 21), .damageCategory = DAMAGE_CATEGORY_SPECIAL, .paletteTMHM = gItemIconPalette_FairyTMHM, + .useSecondTypeIconPalette = TRUE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_FAIRY_FEATHER, //.berry = ITEM_ROSELI_BERRY, //.gem = ITEM_FAIRY_GEM, @@ -418,6 +458,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .maxMove = MOVE_MAX_STRIKE, .teraTypeRGBValue = RGB(10, 18, 27), .paletteTMHM = gItemIconPalette_NormalTMHM, // failsafe + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = TRUE, // .teraShard = ITEM_STELLAR_TERA_SHARD, }, }; diff --git a/src/field_specials.c b/src/field_specials.c index b44c8327aad8..d1b27e2df686 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -44,6 +44,7 @@ #include "strings.h" #include "task.h" #include "text.h" +#include "tilesets.h" #include "tv.h" #include "wallclock.h" #include "window.h" @@ -969,6 +970,20 @@ void FieldShowRegionMap(void) SetMainCallback2(CB2_FieldShowRegionMap); } +static bool32 IsBuildingPCTile(u32 tileId) +{ + return gMapHeader.mapLayout->primaryTileset == &gTileset_Building && (tileId == METATILE_Building_PC_On || tileId == METATILE_Building_PC_Off); +} + +static bool32 IsPlayerHousePCTile(u32 tileId) +{ + return gMapHeader.mapLayout->secondaryTileset == &gTileset_BrendansMaysHouse + && (tileId == METATILE_BrendansMaysHouse_BrendanPC_On + || tileId == METATILE_BrendansMaysHouse_BrendanPC_Off + || tileId == METATILE_BrendansMaysHouse_MayPC_On + || tileId == METATILE_BrendansMaysHouse_MayPC_Off); +} + static bool8 IsPlayerInFrontOfPC(void) { s16 x, y; @@ -977,12 +992,7 @@ static bool8 IsPlayerInFrontOfPC(void) GetXYCoordsOneStepInFrontOfPlayer(&x, &y); tileInFront = MapGridGetMetatileIdAt(x, y); - return (tileInFront == METATILE_BrendansMaysHouse_BrendanPC_On - || tileInFront == METATILE_BrendansMaysHouse_BrendanPC_Off - || tileInFront == METATILE_BrendansMaysHouse_MayPC_On - || tileInFront == METATILE_BrendansMaysHouse_MayPC_Off - || tileInFront == METATILE_Building_PC_On - || tileInFront == METATILE_Building_PC_Off); + return IsBuildingPCTile(tileInFront) || IsPlayerHousePCTile(tileInFront); } // Task data for Task_PCTurnOnEffect and Task_LotteryCornerComputerEffect diff --git a/src/fieldmap.c b/src/fieldmap.c index 30daae49ca03..7c40c755c4fc 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -141,7 +141,7 @@ static void InitBackupMapLayoutConnections(struct MapHeader *mapHeader) for (i = 0; i < count; i++, connection++) { struct MapHeader const *cMap = GetMapHeaderFromConnection(connection); - u32 offset = connection->offset; + s32 offset = connection->offset; switch (connection->direction) { case CONNECTION_SOUTH: diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c index a28b6fee6100..a5b2740458bf 100644 --- a/src/fldeff_sweetscent.c +++ b/src/fldeff_sweetscent.c @@ -1,4 +1,5 @@ #include "global.h" +#include "decompress.h" #include "event_data.h" #include "event_scripts.h" #include "field_effect.h" @@ -52,7 +53,7 @@ void StartSweetScentFieldEffect(void) u32 palettes = ~(1 << (gSprites[GetPlayerAvatarSpriteId()].oam.paletteNum + 16) | (1 << 13) | (1 << 14) | (1 << 15)); PlaySE(SE_M_SWEET_SCENT); - CpuFastCopy(gPlttBufferUnfaded, gPaletteDecompressionBuffer, PLTT_SIZE); + CpuFastCopy(gPlttBufferUnfaded, gDecompressionBuffer, PLTT_SIZE); CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, PLTT_SIZE); BeginNormalPaletteFade(palettes, 4, 0, 8, RGB_RED); taskId = CreateTask(TrySweetScentEncounter, 0); @@ -91,7 +92,7 @@ static void FailSweetScentEncounter(u8 taskId) { if (!gPaletteFade.active) { - CpuFastCopy(gPaletteDecompressionBuffer, gPlttBufferUnfaded, PLTT_SIZE); + CpuFastCopy(gDecompressionBuffer, gPlttBufferUnfaded, PLTT_SIZE); SetWeatherPalStateIdle(); ScriptContext_SetupScript(EventScript_FailSweetScent); DestroyTask(taskId); diff --git a/src/follower_helper.c b/src/follower_helper.c index 24de61a3fd7d..02b39902ebb7 100644 --- a/src/follower_helper.c +++ b/src/follower_helper.c @@ -55,7 +55,7 @@ static const u8* const sFearTexts[] = {sCondMsg29, sCondMsg30, NULL}; static const u8 sCondMsg31[] = _("{STR_VAR_1} is taking shelter in the\ngrass from the rain."); static const u8 sCondMsg32[] = _("{STR_VAR_1} seems very cold."); static const u8 sCondMsg33[] = _("{STR_VAR_1} is staring at the sea."); -static const u8 sCondMsg34[] = _("Your pokemon is staring intently at\nthe sea!"); +static const u8 sCondMsg34[] = _("Your POKéMON is staring intently at\nthe sea!"); static const u8 sCondMsg35[] = _("{STR_VAR_1} is looking at the\nsurging sea."); static const u8* const sSeaTexts[] = {sCondMsg33, sCondMsg34, sCondMsg35, NULL}; static const u8 sCondMsg36[] = _("{STR_VAR_1} is listening to the\nsound of the waterfall."); diff --git a/src/frontier_util.c b/src/frontier_util.c index ca8c76a0fdf7..7cadbf364b11 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -49,6 +49,17 @@ struct FrontierBrainMon u16 moves[MAX_MON_MOVES]; }; +struct FrontierBrain +{ + u16 trainerId; + u8 objEventGfx; + u8 isFemale; + const u8 *lostTexts[2]; + const u8 *wonTexts[2]; + u16 battledBit[2]; + u8 streakAppearances[4]; +}; + // This file's functions. static void GetChallengeStatus(void); static void GetFrontierData(void); @@ -83,16 +94,74 @@ static void ShowPyramidResultsWindow(void); static void ShowLinkContestResultsWindow(void); static void CopyFrontierBrainText(bool8 playerWonText); -// const rom data -static const u8 sFrontierBrainStreakAppearances[NUM_FRONTIER_FACILITIES][4] = +#define FRONTIER_BRAIN_SPRITES(Brain) \ + .trainerId = TRAINER_##Brain, \ + .objEventGfx = OBJ_EVENT_GFX_##Brain + +#define FRONTIER_BRAIN_TEXTS(Brain) \ + .lostTexts = {gText_##Brain##DefeatSilver, gText_##Brain##DefeatGold}, \ + .wonTexts = {gText_##Brain##WonSilver, gText_##Brain##WonGold} + +// battledBit: Flags to change the conversation when the Frontier Brain is encountered for a battle +// First bit is has battled them before and not won yet, second bit is has battled them and won (obtained a Symbol) +const struct FrontierBrain gFrontierBrainInfo[NUM_FRONTIER_FACILITIES] = { - [FRONTIER_FACILITY_TOWER] = {35, 70, 35, 1}, - [FRONTIER_FACILITY_DOME] = { 4, 9, 5, 0}, - [FRONTIER_FACILITY_PALACE] = {21, 42, 21, 1}, - [FRONTIER_FACILITY_ARENA] = {28, 56, 28, 1}, - [FRONTIER_FACILITY_FACTORY] = {21, 42, 21, 1}, - [FRONTIER_FACILITY_PIKE] = {28, 140, 56, 1}, - [FRONTIER_FACILITY_PYRAMID] = {21, 70, 35, 0}, + [FRONTIER_FACILITY_TOWER] = + { + FRONTIER_BRAIN_SPRITES(ANABEL), + .isFemale = TRUE, + FRONTIER_BRAIN_TEXTS(Anabel), + .battledBit = {1 << 0, 1 << 1}, + .streakAppearances = {35, 70, 35, 1}, + }, + [FRONTIER_FACILITY_DOME] = + { + FRONTIER_BRAIN_SPRITES(TUCKER), + .isFemale = FALSE, + FRONTIER_BRAIN_TEXTS(Tucker), + .battledBit = {1 << 2, 1 << 3}, + .streakAppearances = {1, 2, 5, 0}, + }, + [FRONTIER_FACILITY_PALACE] = + { + FRONTIER_BRAIN_SPRITES(SPENSER), + .isFemale = FALSE, + FRONTIER_BRAIN_TEXTS(Spenser), + .battledBit = {1 << 4, 1 << 5}, + .streakAppearances = {21, 42, 21, 1}, + }, + [FRONTIER_FACILITY_ARENA] = + { + FRONTIER_BRAIN_SPRITES(GRETA), + .isFemale = TRUE, + FRONTIER_BRAIN_TEXTS(Greta), + .battledBit = {1 << 6, 1 << 7}, + .streakAppearances = {28, 56, 28, 1}, + }, + [FRONTIER_FACILITY_FACTORY] = + { + FRONTIER_BRAIN_SPRITES(NOLAND), + .isFemale = FALSE, + FRONTIER_BRAIN_TEXTS(Noland), + .battledBit = {1 << 8, 1 << 9}, + .streakAppearances = {21, 42, 21, 1}, + }, + [FRONTIER_FACILITY_PIKE] = + { + FRONTIER_BRAIN_SPRITES(LUCY), + .isFemale = TRUE, + FRONTIER_BRAIN_TEXTS(Lucy), + .battledBit = {1 << 10, 1 << 11}, + .streakAppearances = {28, 140, 56, 1}, + }, + [FRONTIER_FACILITY_PYRAMID] = + { + FRONTIER_BRAIN_SPRITES(BRANDON), + .isFemale = FALSE, + FRONTIER_BRAIN_TEXTS(Brandon), + .battledBit = {1 << 12, 1 << 13}, + .streakAppearances = {21, 70, 35, 0}, + }, }; static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZE] = @@ -537,20 +606,6 @@ static const u8 sBattlePointAwards[NUM_FRONTIER_FACILITIES][FRONTIER_MODE_COUNT] }, }; - -// Flags to change the conversation when the Frontier Brain is encountered for a battle -// First bit is has battled them before and not won yet, second bit is has battled them and won (obtained a Symbol) -static const u16 sBattledBrainBitFlags[NUM_FRONTIER_FACILITIES][2] = -{ - [FRONTIER_FACILITY_TOWER] = {1 << 0, 1 << 1}, - [FRONTIER_FACILITY_DOME] = {1 << 2, 1 << 3}, - [FRONTIER_FACILITY_PALACE] = {1 << 4, 1 << 5}, - [FRONTIER_FACILITY_ARENA] = {1 << 6, 1 << 7}, - [FRONTIER_FACILITY_FACTORY] = {1 << 8, 1 << 9}, - [FRONTIER_FACILITY_PIKE] = {1 << 10, 1 << 11}, - [FRONTIER_FACILITY_PYRAMID] = {1 << 12, 1 << 13}, -}; - static void (* const sFrontierUtilFuncs[])(void) = { [FRONTIER_UTIL_FUNC_GET_STATUS] = GetChallengeStatus, @@ -611,18 +666,6 @@ static const struct WindowTemplate sRankingHallRecordsWindowTemplate = .baseBlock = 1 }; -// Second field - whether the character is female. -static const u8 sFrontierBrainObjEventGfx[NUM_FRONTIER_FACILITIES][2] = -{ - [FRONTIER_FACILITY_TOWER] = {OBJ_EVENT_GFX_ANABEL, TRUE}, - [FRONTIER_FACILITY_DOME] = {OBJ_EVENT_GFX_TUCKER, FALSE}, - [FRONTIER_FACILITY_PALACE] = {OBJ_EVENT_GFX_SPENSER, FALSE}, - [FRONTIER_FACILITY_ARENA] = {OBJ_EVENT_GFX_GRETA, TRUE}, - [FRONTIER_FACILITY_FACTORY] = {OBJ_EVENT_GFX_NOLAND, FALSE}, - [FRONTIER_FACILITY_PIKE] = {OBJ_EVENT_GFX_LUCY, TRUE}, - [FRONTIER_FACILITY_PYRAMID] = {OBJ_EVENT_GFX_BRANDON, FALSE}, -}; - static const u8 *const sRecordsWindowChallengeTexts[][2] = { [RANKING_HALL_TOWER_SINGLES] = {gText_BattleTower2, gText_FacilitySingle}, @@ -657,73 +700,6 @@ static const u8 *const sHallFacilityToRecordsText[] = [RANKING_HALL_TOWER_LINK] = gText_FrontierFacilityWinStreak, }; -static const u16 sFrontierBrainTrainerIds[NUM_FRONTIER_FACILITIES] = -{ - [FRONTIER_FACILITY_TOWER] = TRAINER_ANABEL, - [FRONTIER_FACILITY_DOME] = TRAINER_TUCKER, - [FRONTIER_FACILITY_PALACE] = TRAINER_SPENSER, - [FRONTIER_FACILITY_ARENA] = TRAINER_GRETA, - [FRONTIER_FACILITY_FACTORY] = TRAINER_NOLAND, - [FRONTIER_FACILITY_PIKE] = TRAINER_LUCY, - [FRONTIER_FACILITY_PYRAMID] = TRAINER_BRANDON, -}; - -static const u8 *const sFrontierBrainPlayerLostSilverTexts[NUM_FRONTIER_FACILITIES] = -{ - [FRONTIER_FACILITY_TOWER] = gText_AnabelWonSilver, - [FRONTIER_FACILITY_DOME] = gText_TuckerWonSilver, - [FRONTIER_FACILITY_PALACE] = gText_SpenserWonSilver, - [FRONTIER_FACILITY_ARENA] = gText_GretaWonSilver, - [FRONTIER_FACILITY_FACTORY] = gText_NolandWonSilver, - [FRONTIER_FACILITY_PIKE] = gText_LucyWonSilver, - [FRONTIER_FACILITY_PYRAMID] = gText_BrandonWonSilver, -}; - -static const u8 *const sFrontierBrainPlayerWonSilverTexts[NUM_FRONTIER_FACILITIES] = -{ - [FRONTIER_FACILITY_TOWER] = gText_AnabelDefeatSilver, - [FRONTIER_FACILITY_DOME] = gText_TuckerDefeatSilver, - [FRONTIER_FACILITY_PALACE] = gText_SpenserDefeatSilver, - [FRONTIER_FACILITY_ARENA] = gText_GretaDefeatSilver, - [FRONTIER_FACILITY_FACTORY] = gText_NolandDefeatSilver, - [FRONTIER_FACILITY_PIKE] = gText_LucyDefeatSilver, - [FRONTIER_FACILITY_PYRAMID] = gText_BrandonDefeatSilver, -}; - -static const u8 *const sFrontierBrainPlayerLostGoldTexts[NUM_FRONTIER_FACILITIES] = -{ - [FRONTIER_FACILITY_TOWER] = gText_AnabelWonGold, - [FRONTIER_FACILITY_DOME] = gText_TuckerWonGold, - [FRONTIER_FACILITY_PALACE] = gText_SpenserWonGold, - [FRONTIER_FACILITY_ARENA] = gText_GretaWonGold, - [FRONTIER_FACILITY_FACTORY] = gText_NolandWonGold, - [FRONTIER_FACILITY_PIKE] = gText_LucyWonGold, - [FRONTIER_FACILITY_PYRAMID] = gText_BrandonWonGold, -}; - -static const u8 *const sFrontierBrainPlayerWonGoldTexts[NUM_FRONTIER_FACILITIES] = -{ - [FRONTIER_FACILITY_TOWER] = gText_AnabelDefeatGold, - [FRONTIER_FACILITY_DOME] = gText_TuckerDefeatGold, - [FRONTIER_FACILITY_PALACE] = gText_SpenserDefeatGold, - [FRONTIER_FACILITY_ARENA] = gText_GretaDefeatGold, - [FRONTIER_FACILITY_FACTORY] = gText_NolandDefeatGold, - [FRONTIER_FACILITY_PIKE] = gText_LucyDefeatGold, - [FRONTIER_FACILITY_PYRAMID] = gText_BrandonDefeatGold, -}; - -static const u8 *const *const sFrontierBrainPlayerLostTexts[] = -{ - sFrontierBrainPlayerLostSilverTexts, - sFrontierBrainPlayerLostGoldTexts, -}; - -static const u8 *const *const sFrontierBrainPlayerWonTexts[] = -{ - sFrontierBrainPlayerWonSilverTexts, - sFrontierBrainPlayerWonGoldTexts, -}; - // code void CallFrontierUtilFunc(void) { @@ -785,7 +761,7 @@ static void GetFrontierData(void) gSpecialVar_Result = gSaveBlock2Ptr->frontier.disableRecordBattle; break; case FRONTIER_DATA_HEARD_BRAIN_SPEECH: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.battledBrainFlags & sBattledBrainBitFlags[facility][hasSymbol]; + gSpecialVar_Result = gSaveBlock2Ptr->frontier.battledBrainFlags & gFrontierBrainInfo[facility].battledBit[hasSymbol]; break; } } @@ -820,7 +796,7 @@ static void SetFrontierData(void) gSaveBlock2Ptr->frontier.disableRecordBattle = gSpecialVar_0x8006; break; case FRONTIER_DATA_HEARD_BRAIN_SPEECH: - gSaveBlock2Ptr->frontier.battledBrainFlags |= sBattledBrainBitFlags[facility][hasSymbol]; + gSaveBlock2Ptr->frontier.battledBrainFlags |= gFrontierBrainInfo[facility].battledBit[hasSymbol]; break; } } @@ -1600,7 +1576,7 @@ u8 GetFrontierBrainStatus(void) s32 facility = VarGet(VAR_FRONTIER_FACILITY); s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); u16 winStreakNoModifier = GetCurrentFacilityWinStreak(); - s32 winStreak = winStreakNoModifier + sFrontierBrainStreakAppearances[facility][3]; + s32 winStreak = winStreakNoModifier + gFrontierBrainInfo[facility].streakAppearances[3]; s32 symbolsCount; if (battleMode != FRONTIER_MODE_SINGLES) @@ -1612,20 +1588,20 @@ u8 GetFrontierBrainStatus(void) // Missing a symbol case 0: case 1: - if (winStreak == sFrontierBrainStreakAppearances[facility][symbolsCount]) + if (winStreak == gFrontierBrainInfo[facility].streakAppearances[symbolsCount]) status = symbolsCount + 1; // FRONTIER_BRAIN_SILVER and FRONTIER_BRAIN_GOLD break; // Already received both symbols case 2: default: // Silver streak is reached - if (winStreak == sFrontierBrainStreakAppearances[facility][0]) + if (winStreak == gFrontierBrainInfo[facility].streakAppearances[0]) status = FRONTIER_BRAIN_STREAK; // Gold streak is reached - else if (winStreak == sFrontierBrainStreakAppearances[facility][1]) + else if (winStreak == gFrontierBrainInfo[facility].streakAppearances[1]) status = FRONTIER_BRAIN_STREAK_LONG; // Some increment of the gold streak is reached - else if (winStreak > sFrontierBrainStreakAppearances[facility][1] && (winStreak - sFrontierBrainStreakAppearances[facility][1]) % sFrontierBrainStreakAppearances[facility][2] == 0) + else if (winStreak > gFrontierBrainInfo[facility].streakAppearances[1] && (winStreak - gFrontierBrainInfo[facility].streakAppearances[1]) % gFrontierBrainInfo[facility].streakAppearances[2] == 0) status = FRONTIER_BRAIN_STREAK_LONG; break; } @@ -2396,7 +2372,7 @@ u8 GetFrontierBrainTrainerPicIndex(void) else facility = VarGet(VAR_FRONTIER_FACILITY); - return GetTrainerPicFromId(sFrontierBrainTrainerIds[facility]); + return GetTrainerPicFromId(gFrontierBrainInfo[facility].trainerId); } u8 GetFrontierBrainTrainerClass(void) @@ -2408,7 +2384,7 @@ u8 GetFrontierBrainTrainerClass(void) else facility = VarGet(VAR_FRONTIER_FACILITY); - return GetTrainerClassFromId(sFrontierBrainTrainerIds[facility]); + return GetTrainerClassFromId(gFrontierBrainInfo[facility].trainerId); } void CopyFrontierBrainTrainerName(u8 *dst) @@ -2422,7 +2398,7 @@ void CopyFrontierBrainTrainerName(u8 *dst) else facility = VarGet(VAR_FRONTIER_FACILITY); - trainerName = GetTrainerNameFromId(sFrontierBrainTrainerIds[facility]); + trainerName = GetTrainerNameFromId(gFrontierBrainInfo[facility].trainerId); for (i = 0; i < PLAYER_NAME_LENGTH; i++) dst[i] = trainerName[i]; @@ -2432,13 +2408,13 @@ void CopyFrontierBrainTrainerName(u8 *dst) bool8 IsFrontierBrainFemale(void) { s32 facility = VarGet(VAR_FRONTIER_FACILITY); - return sFrontierBrainObjEventGfx[facility][1]; + return gFrontierBrainInfo[facility].isFemale; } void SetFrontierBrainObjEventGfx_2(void) { s32 facility = VarGet(VAR_FRONTIER_FACILITY); - VarSet(VAR_OBJ_GFX_ID_0, sFrontierBrainObjEventGfx[facility][0]); + VarSet(VAR_OBJ_GFX_ID_0, gFrontierBrainInfo[facility].objEventGfx); } #define FRONTIER_BRAIN_OTID 61226 @@ -2505,7 +2481,7 @@ u16 GetFrontierBrainMonSpecies(u8 monId) void SetFrontierBrainObjEventGfx(u8 facility) { gTrainerBattleOpponent_A = TRAINER_FRONTIER_BRAIN; - VarSet(VAR_OBJ_GFX_ID_0, sFrontierBrainObjEventGfx[facility][0]); + VarSet(VAR_OBJ_GFX_ID_0, gFrontierBrainInfo[facility].objEventGfx); } u16 GetFrontierBrainMonMove(u8 monId, u8 moveSlotId) @@ -2540,12 +2516,12 @@ s32 GetFronterBrainSymbol(void) if (symbol == 2) { u16 winStreak = GetCurrentFacilityWinStreak(); - if (winStreak + sFrontierBrainStreakAppearances[facility][3] == sFrontierBrainStreakAppearances[facility][0]) + if (winStreak + gFrontierBrainInfo[facility].streakAppearances[3] == gFrontierBrainInfo[facility].streakAppearances[0]) symbol = 0; - else if (winStreak + sFrontierBrainStreakAppearances[facility][3] == sFrontierBrainStreakAppearances[facility][1]) + else if (winStreak + gFrontierBrainInfo[facility].streakAppearances[3] == gFrontierBrainInfo[facility].streakAppearances[1]) symbol = 1; - else if (winStreak + sFrontierBrainStreakAppearances[facility][3] > sFrontierBrainStreakAppearances[facility][1] - && (winStreak + sFrontierBrainStreakAppearances[facility][3] - sFrontierBrainStreakAppearances[facility][1]) % sFrontierBrainStreakAppearances[facility][2] == 0) + else if (winStreak + gFrontierBrainInfo[facility].streakAppearances[3] > gFrontierBrainInfo[facility].streakAppearances[1] + && (winStreak + gFrontierBrainInfo[facility].streakAppearances[3] - gFrontierBrainInfo[facility].streakAppearances[1]) % gFrontierBrainInfo[facility].streakAppearances[2] == 0) symbol = 1; } return symbol; @@ -2571,10 +2547,10 @@ static void CopyFrontierBrainText(bool8 playerWonText) switch (playerWonText) { case FALSE: - StringCopy(gStringVar4, sFrontierBrainPlayerLostTexts[symbol][facility]); + StringCopy(gStringVar4, gFrontierBrainInfo[facility].wonTexts[symbol]); break; case TRUE: - StringCopy(gStringVar4, sFrontierBrainPlayerWonTexts[symbol][facility]); + StringCopy(gStringVar4, gFrontierBrainInfo[facility].lostTexts[symbol]); break; } } diff --git a/src/graphics.c b/src/graphics.c index c35cec3467e2..8df7055bd87a 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -81,6 +81,9 @@ const u32 gBattleAnimSpritePal_AvalancheRocks[] = INCBIN_U32("graphics/battle_an const u32 gBattleAnimSpriteGfx_NewPokeball[] = INCBIN_U32("graphics/battle_anims/sprites/baton_pass_ball.4bpp.lz"); const u32 gBattleAnimSpritePal_NewPokeball[] = INCBIN_U32("graphics/battle_anims/sprites/baton_pass_ball.gbapal.lz"); +const u32 gBattleAnimSpriteGfx_Beam[] = INCBIN_U32("graphics/battle_anims/sprites/beam.4bpp.lz"); +const u32 gBattleAnimSpritePal_Beam[] = INCBIN_U32("graphics/battle_anims/sprites/beam.gbapal.lz"); + const u32 gBattleAnimSpriteGfx_BerryEaten[] = INCBIN_U32("graphics/battle_anims/sprites/berry_eaten.4bpp.lz"); const u32 gBattleAnimSpritePal_BerryEaten[] = INCBIN_U32("graphics/battle_anims/sprites/berry_eaten.gbapal.lz"); @@ -93,6 +96,9 @@ const u32 gBattleAnimSpritePal_BigRock[] = INCBIN_U32("graphics/battle_anims/spr const u32 gBattleAnimSpriteGfx_BlacephalonHead[] = INCBIN_U32("graphics/battle_anims/sprites/blacephalon_head.4bpp.lz"); const u32 gBattleAnimSpritePal_BlacephalonHead[] = INCBIN_U32("graphics/battle_anims/sprites/blacephalon_head.gbapal.lz"); +const u32 gBattleAnimSpriteGfx_BloodMoon[] = INCBIN_U32("graphics/battle_anims/sprites/blood_moon.4bpp.lz"); +const u32 gBattleAnimSpritePal_BloodMoon[] = INCBIN_U32("graphics/battle_anims/sprites/blood_moon.gbapal.lz"); + const u32 gBattleAnimSpritePal_BlueFlare[] = INCBIN_U32("graphics/battle_anims/sprites/blue_flare.gbapal.lz"); const u32 gBattleAnimSpriteGfx_Branch[] = INCBIN_U32("graphics/battle_anims/sprites/branch.4bpp.lz"); @@ -233,12 +239,18 @@ const u32 gBattleAnimSpritePal_PoisonColumn[] = INCBIN_U32("graphics/battle_anim const u32 gBattleAnimSpriteGfx_PowerTrick[] = INCBIN_U32("graphics/battle_anims/sprites/power_trick.4bpp.lz"); const u32 gBattleAnimSpritePal_PowerTrick[] = INCBIN_U32("graphics/battle_anims/sprites/power_trick.gbapal.lz"); +const u32 gBattleAnimSpriteGfx_PurpleChain[] = INCBIN_U32("graphics/battle_anims/sprites/purple_chain.4bpp.lz"); +const u32 gBattleAnimSpritePal_PurpleChain[] = INCBIN_U32("graphics/battle_anims/sprites/purple_chain.gbapal.lz"); + const u32 gBattleAnimSpriteGfx_PurpleDrake[] = INCBIN_U32("graphics/battle_anims/sprites/purple_drake.4bpp.lz"); const u32 gBattleAnimSpritePal_PurpleDrake[] = INCBIN_U32("graphics/battle_anims/sprites/purple_drake.gbapal.lz"); const u32 gBattleAnimSpriteGfx_RazorShell[] = INCBIN_U32("graphics/battle_anims/sprites/razor_shell.4bpp.lz"); const u32 gBattleAnimSpritePal_RazorShell[] = INCBIN_U32("graphics/battle_anims/sprites/razor_shell.gbapal.lz"); +const u32 gBattleAnimSpriteGfx_RedExplosion[] = INCBIN_U32("graphics/battle_anims/sprites/red_explosion.4bpp.lz"); +const u32 gBattleAnimSpritePal_RedExplosion[] = INCBIN_U32("graphics/battle_anims/sprites/red_explosion.gbapal.lz"); + const u32 gBattleAnimSpriteGfx_RocksSmall[] = INCBIN_U32("graphics/battle_anims/sprites/rock_small.4bpp.lz"); const u32 gBattleAnimSpriteGfx_NewRocks[] = INCBIN_U32("graphics/battle_anims/sprites/rocks_new.4bpp.lz"); @@ -2048,3 +2060,9 @@ const u16 gFrontierPassCancelButtonHighlighted_Tilemap[] = INCBIN_U16("graphics/ const u16 gBerryCrush_Crusher_Pal[] = INCBIN_U16("graphics/berry_crush/crusher.gbapal"); const u32 gBerryCrush_Crusher_Gfx[] = INCBIN_U32("graphics/berry_crush/crusher.4bpp.lz"); const u32 gBerryCrush_TextWindows_Tilemap[] = INCBIN_U32("graphics/berry_crush/text_windows.bin.lz"); + +const u32 gBattleIcons_Gfx1[] = INCBIN_U32("graphics/types/battle_icons1.4bpp.lz"); +const u32 gBattleIcons_Gfx2[] = INCBIN_U32("graphics/types/battle_icons2.4bpp.lz"); +const u32 gBattleIcons_Pal1[] = INCBIN_U32("graphics/types/battle_icons1.gbapal.lz"); +const u32 gBattleIcons_Pal2[] = INCBIN_U32("graphics/types/battle_icons2.gbapal.lz"); + diff --git a/src/item_use.c b/src/item_use.c index 502612a18407..fd74b7082b03 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -430,46 +430,43 @@ static bool8 IsHiddenItemPresentAtCoords(const struct MapEvents *events, s16 x, static bool8 IsHiddenItemPresentInConnection(const struct MapConnection *connection, int x, int y) { - - u16 localX, localY; - u32 localOffset; - s32 localLength; - - struct MapHeader const *const mapHeader = GetMapHeaderFromConnection(connection); - + s16 connectionX, connectionY; + struct MapHeader const *const connectionHeader = GetMapHeaderFromConnection(connection); + +// To convert our x/y into coordinates that are relative to the connected map, we must: +// - Subtract the virtual offset used for the border buffer (MAP_OFFSET). +// - Subtract the horizontal offset between North/South connections, or the vertical offset for East/West +// - Account for map size. (0,0) is in the NW corner of our map, so when looking North/West we have to add the height/width of the connected map, +// and when looking South/East we have to subtract the height/width of our current map. +#define localX (x - MAP_OFFSET) +#define localY (y - MAP_OFFSET) switch (connection->direction) { - // same weird temp variable behavior seen in IsHiddenItemPresentAtCoords case CONNECTION_NORTH: - localOffset = connection->offset + MAP_OFFSET; - localX = x - localOffset; - localLength = mapHeader->mapLayout->height - MAP_OFFSET; - localY = localLength + y; // additions are reversed for some reason + connectionX = localX - connection->offset; + connectionY = connectionHeader->mapLayout->height + localY; break; case CONNECTION_SOUTH: - localOffset = connection->offset + MAP_OFFSET; - localX = x - localOffset; - localLength = gMapHeader.mapLayout->height + MAP_OFFSET; - localY = y - localLength; + connectionX = localX - connection->offset; + connectionY = localY - gMapHeader.mapLayout->height; break; case CONNECTION_WEST: - localLength = mapHeader->mapLayout->width - MAP_OFFSET; - localX = localLength + x; // additions are reversed for some reason - localOffset = connection->offset + MAP_OFFSET; - localY = y - localOffset; + connectionX = connectionHeader->mapLayout->width + localX; + connectionY = localY - connection->offset; break; case CONNECTION_EAST: - localLength = gMapHeader.mapLayout->width + MAP_OFFSET; - localX = x - localLength; - localOffset = connection->offset + MAP_OFFSET; - localY = y - localOffset; + connectionX = localX - gMapHeader.mapLayout->width; + connectionY = localY - connection->offset; break; default: return FALSE; } - return IsHiddenItemPresentAtCoords(mapHeader->events, localX, localY); + return IsHiddenItemPresentAtCoords(connectionHeader->events, connectionX, connectionY); } +#undef localX +#undef localY + static void CheckForHiddenItemsInMapConnection(u8 taskId) { s16 playerX, playerY; diff --git a/src/landmark.c b/src/landmark.c index 615a9bfe3ea6..d2bb3c4105a7 100644 --- a/src/landmark.c +++ b/src/landmark.c @@ -369,8 +369,13 @@ static const struct LandmarkList sLandmarkLists[] = {MAPSEC_ROUTE_120, 2, Landmarks_Route120_2}, {MAPSEC_ROUTE_121, 2, Landmarks_Route121_2}, {MAPSEC_ROUTE_122, 0, Landmarks_Route122_0}, +#ifdef BUGFIX + {MAPSEC_ROUTE_122, 1, Landmarks_Route122_0}, + {MAPSEC_ROUTE_123, 0, Landmarks_Route123_0}, +#else {MAPSEC_ROUTE_123, 0, Landmarks_Route123_0}, {MAPSEC_ROUTE_122, 1, Landmarks_Route122_0}, +#endif {MAPSEC_ROUTE_124, 7, Landmarks_Route124_7}, {MAPSEC_ROUTE_125, 2, Landmarks_Route125_2}, {MAPSEC_ROUTE_128, 1, Landmarks_Route128_1}, diff --git a/src/main_menu.c b/src/main_menu.c index c1f092b2ca76..504fbfb18642 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -257,6 +257,26 @@ static const u32 sBirchSpeechBgMap[] = INCBIN_U32("graphics/birch_speech/map.bin static const u16 sBirchSpeechBgGradientPal[] = INCBIN_U16("graphics/birch_speech/bg2.gbapal"); static const u16 sBirchSpeechPlatformBlackPal[] = {RGB_BLACK, RGB_BLACK, RGB_BLACK, RGB_BLACK, RGB_BLACK, RGB_BLACK, RGB_BLACK, RGB_BLACK}; +static const u8 gText_SaveFileCorrupted[] = _("The save file is corrupted. The\nprevious save file will be loaded."); +static const u8 gText_SaveFileErased[] = _("The save file has been erased\ndue to corruption or damage."); +static const u8 gJPText_No1MSubCircuit[] = _("1Mサブきばんが ささっていません!"); +static const u8 gText_BatteryRunDry[] = _("The internal battery has run dry.\nThe game can be played.\pHowever, clock-based events will\nno longer occur."); + +static const u8 gText_MainMenuNewGame[] = _("NEW GAME"); +static const u8 gText_MainMenuContinue[] = _("CONTINUE"); +static const u8 gText_MainMenuOption[] = _("OPTION"); +static const u8 gText_MainMenuMysteryGift[] = _("MYSTERY GIFT"); +static const u8 gText_MainMenuMysteryGift2[] = _("MYSTERY GIFT"); +static const u8 gText_MainMenuMysteryEvents[] = _("MYSTERY EVENTS"); +static const u8 gText_WirelessNotConnected[] = _("The Wireless Adapter is not\nconnected."); +static const u8 gText_MysteryGiftCantUse[] = _("MYSTERY GIFT can't be used while\nthe Wireless Adapter is attached."); +static const u8 gText_MysteryEventsCantUse[] = _("MYSTERY EVENTS can't be used while\nthe Wireless Adapter is attached."); + +static const u8 gText_ContinueMenuPlayer[] = _("PLAYER"); +static const u8 gText_ContinueMenuTime[] = _("TIME"); +static const u8 gText_ContinueMenuPokedex[] = _("POKéDEX"); +static const u8 gText_ContinueMenuBadges[] = _("BADGES"); + #define MENU_LEFT 2 #define MENU_TOP_WIN0 1 #define MENU_TOP_WIN1 5 @@ -454,54 +474,54 @@ static const union AffineAnimCmd *const sSpriteAffineAnimTable_PlayerShrink[] = }; static const struct MenuAction sMenuActions_Gender[] = { - {gText_BirchBoy, {NULL}}, - {gText_BirchGirl, {NULL}} + {COMPOUND_STRING("BOY"), {NULL}}, + {COMPOUND_STRING("GIRL"), {NULL}} }; static const u8 *const sMalePresetNames[] = { - gText_DefaultNameStu, - gText_DefaultNameMilton, - gText_DefaultNameTom, - gText_DefaultNameKenny, - gText_DefaultNameReid, - gText_DefaultNameJude, - gText_DefaultNameJaxson, - gText_DefaultNameEaston, - gText_DefaultNameWalker, - gText_DefaultNameTeru, - gText_DefaultNameJohnny, - gText_DefaultNameBrett, - gText_DefaultNameSeth, - gText_DefaultNameTerry, - gText_DefaultNameCasey, - gText_DefaultNameDarren, - gText_DefaultNameLandon, - gText_DefaultNameCollin, - gText_DefaultNameStanley, - gText_DefaultNameQuincy + COMPOUND_STRING("STU"), + COMPOUND_STRING("MILTON"), + COMPOUND_STRING("TOM"), + COMPOUND_STRING("KENNY"), + COMPOUND_STRING("REID"), + COMPOUND_STRING("JUDE"), + COMPOUND_STRING("JAXSON"), + COMPOUND_STRING("EASTON"), + COMPOUND_STRING("WALKER"), + COMPOUND_STRING("TERU"), + COMPOUND_STRING("JOHNNY"), + COMPOUND_STRING("BRETT"), + COMPOUND_STRING("SETH"), + COMPOUND_STRING("TERRY"), + COMPOUND_STRING("CASEY"), + COMPOUND_STRING("DARREN"), + COMPOUND_STRING("LANDON"), + COMPOUND_STRING("COLLIN"), + COMPOUND_STRING("STANLEY"), + COMPOUND_STRING("QUINCY") }; static const u8 *const sFemalePresetNames[] = { - gText_DefaultNameKimmy, - gText_DefaultNameTiara, - gText_DefaultNameBella, - gText_DefaultNameJayla, - gText_DefaultNameAllie, - gText_DefaultNameLianna, - gText_DefaultNameSara, - gText_DefaultNameMonica, - gText_DefaultNameCamila, - gText_DefaultNameAubree, - gText_DefaultNameRuthie, - gText_DefaultNameHazel, - gText_DefaultNameNadine, - gText_DefaultNameTanja, - gText_DefaultNameYasmin, - gText_DefaultNameNicola, - gText_DefaultNameLillie, - gText_DefaultNameTerra, - gText_DefaultNameLucy, - gText_DefaultNameHalie + COMPOUND_STRING("KIMMY"), + COMPOUND_STRING("TIARA"), + COMPOUND_STRING("BELLA"), + COMPOUND_STRING("JAYLA"), + COMPOUND_STRING("ALLIE"), + COMPOUND_STRING("LIANNA"), + COMPOUND_STRING("SARA"), + COMPOUND_STRING("MONICA"), + COMPOUND_STRING("CAMILA"), + COMPOUND_STRING("AUBREE"), + COMPOUND_STRING("RUTHIE"), + COMPOUND_STRING("HAZEL"), + COMPOUND_STRING("NADINE"), + COMPOUND_STRING("TANJA"), + COMPOUND_STRING("YASMIN"), + COMPOUND_STRING("NICOLA"), + COMPOUND_STRING("LILLIE"), + COMPOUND_STRING("TERRA"), + COMPOUND_STRING("LUCY"), + COMPOUND_STRING("HALIE") }; // The number of male vs. female names is assumed to be the same. diff --git a/src/menu_specialized.c b/src/menu_specialized.c index a80a227a4b9e..a709a878dc0c 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -756,6 +756,9 @@ static void MoveRelearnerLoadBattleMoveDescription(u32 chosenMove) u8 buffer[32]; const u8 *str; + if (B_SHOW_CATEGORY_ICON == TRUE) + MoveRelearnerShowHideCategoryIcon(chosenMove); + FillWindowPixelBuffer(RELEARNERWIN_DESC_BATTLE, PIXEL_FILL(1)); str = gText_MoveRelearnerBattleMoves; x = GetStringCenterAlignXOffset(FONT_NORMAL, str, 128); diff --git a/src/move_relearner.c b/src/move_relearner.c index e27b46fdf7ca..817dbd16e0dc 100644 --- a/src/move_relearner.c +++ b/src/move_relearner.c @@ -1,9 +1,11 @@ #include "global.h" #include "main.h" #include "battle.h" +#include "battle_util.h" #include "bg.h" #include "contest_effect.h" #include "data.h" +#include "decompress.h" #include "event_data.h" #include "field_screen_effect.h" #include "gpu_regs.h" @@ -173,6 +175,7 @@ static EWRAM_DATA struct u8 moveListScrollArrowTask; /*0x113*/ u8 moveDisplayArrowTask; /*0x114*/ u16 scrollOffset; /*0x116*/ + u8 categoryIconSpriteId; /*0x117*/ } *sMoveRelearnerStruct = {0}; static EWRAM_DATA struct { @@ -803,6 +806,9 @@ static void HandleInput(bool8 showContest) ScheduleBgCopyTilemapToVram(1); MoveRelearnerShowHideHearts(GetCurrentSelectedMove()); + if (B_SHOW_CATEGORY_ICON == TRUE) + MoveRelearnerShowHideCategoryIcon(GetCurrentSelectedMove()); + break; case LIST_CANCEL: PlaySE(SE_SELECT); @@ -851,6 +857,10 @@ static void CreateUISprites(void) sMoveRelearnerStruct->moveListScrollArrowTask = TASK_NONE; AddScrollArrows(); + sMoveRelearnerStruct->categoryIconSpriteId = 0xFF; + LoadCompressedSpriteSheet(&gSpriteSheet_CategoryIcons); + LoadSpritePalette(&gSpritePal_CategoryIcons); + // These are the appeal hearts. for (i = 0; i < 8; i++) sMoveRelearnerStruct->heartSpriteIds[i] = CreateSprite(&sConstestMoveHeartSprite, (i - (i / 4) * 4) * 8 + 104, (i / 4) * 8 + 36, 0); @@ -957,3 +967,23 @@ void MoveRelearnerShowHideHearts(s32 moveId) } } } + +void MoveRelearnerShowHideCategoryIcon(s32 moveId) +{ + if (sMoveRelearnerMenuSate.showContestInfo || moveId == LIST_CANCEL) + { + if (sMoveRelearnerStruct->categoryIconSpriteId != 0xFF) + DestroySprite(&gSprites[sMoveRelearnerStruct->categoryIconSpriteId]); + + sMoveRelearnerStruct->categoryIconSpriteId = 0xFF; + gSprites[sMoveRelearnerStruct->categoryIconSpriteId].invisible = TRUE; + } + else + { + if (sMoveRelearnerStruct->categoryIconSpriteId == 0xFF) + sMoveRelearnerStruct->categoryIconSpriteId = CreateSprite(&gSpriteTemplate_CategoryIcons, 66, 40, 0); + + gSprites[sMoveRelearnerStruct->categoryIconSpriteId].invisible = FALSE; + StartSpriteAnim(&gSprites[sMoveRelearnerStruct->categoryIconSpriteId], GetBattleMoveCategory(moveId)); + } +} diff --git a/src/palette.c b/src/palette.c index fccff062a848..2526479ca8df 100644 --- a/src/palette.c +++ b/src/palette.c @@ -13,62 +13,20 @@ enum HARDWARE_FADE, }; -// These are structs for some unused palette system. -// The full functionality of this system is unknown. - -#define NUM_PALETTE_STRUCTS 16 - -struct PaletteStructTemplate -{ - u16 id; - u16 *src; - bool16 pst_field_8_0:1; - u16 unused:9; - u16 size:5; - u8 time1; - u8 srcCount:5; - u8 state:3; - u8 time2; -}; - -struct PaletteStruct -{ - const struct PaletteStructTemplate *template; - bool32 active:1; - bool32 flag:1; - u32 baseDestOffset:9; - u32 destOffset:10; - u32 srcIndex:7; - u8 countdown1; - u8 countdown2; -}; - -static void PaletteStruct_Copy(struct PaletteStruct *, u32 *); -static void PaletteStruct_Blend(struct PaletteStruct *, u32 *); -static void PaletteStruct_TryEnd(struct PaletteStruct *); -static void PaletteStruct_Reset(u8); -static u8 PaletteStruct_GetPalNum(u16); -static u8 UpdateNormalPaletteFade(void); -static void BeginFastPaletteFadeInternal(u8); -static u8 UpdateFastPaletteFade(void); -static u8 UpdateHardwarePaletteFade(void); +static u32 UpdateNormalPaletteFade(void); +static void BeginFastPaletteFadeInternal(u32); +static u32 UpdateFastPaletteFade(void); +static u32 UpdateHardwarePaletteFade(void); static void UpdateBlendRegisters(void); -static bool8 IsSoftwarePaletteFadeFinishing(void); +static bool32 IsSoftwarePaletteFadeFinishing(void); static void Task_BlendPalettesGradually(u8 taskId); // palette buffers require alignment with agbcc because // unaligned word reads are issued in BlendPalette otherwise ALIGNED(4) EWRAM_DATA u16 gPlttBufferUnfaded[PLTT_BUFFER_SIZE] = {0}; ALIGNED(4) EWRAM_DATA u16 gPlttBufferFaded[PLTT_BUFFER_SIZE] = {0}; -static EWRAM_DATA struct PaletteStruct sPaletteStructs[NUM_PALETTE_STRUCTS] = {0}; EWRAM_DATA struct PaletteFadeControl gPaletteFade = {0}; static EWRAM_DATA u32 sPlttBufferTransferPending = 0; -EWRAM_DATA u8 ALIGNED(2) gPaletteDecompressionBuffer[PLTT_SIZE] = {0}; - -static const struct PaletteStructTemplate sDummyPaletteStructTemplate = { - .id = 0xFFFF, - .state = 1 -}; static const u8 sRoundedDownGrayscaleMap[] = { 0, 0, 0, 0, 0, @@ -80,20 +38,20 @@ static const u8 sRoundedDownGrayscaleMap[] = { 31, 31 }; -void LoadCompressedPalette(const u32 *src, u16 offset, u16 size) +void LoadCompressedPalette(const u32 *src, u32 offset, u32 size) { - LZDecompressWram(src, gPaletteDecompressionBuffer); - CpuCopy16(gPaletteDecompressionBuffer, &gPlttBufferUnfaded[offset], size); - CpuCopy16(gPaletteDecompressionBuffer, &gPlttBufferFaded[offset], size); + LZDecompressWram(src, gDecompressionBuffer); + CpuCopy16(gDecompressionBuffer, &gPlttBufferUnfaded[offset], size); + CpuCopy16(gDecompressionBuffer, &gPlttBufferFaded[offset], size); } -void LoadPalette(const void *src, u16 offset, u16 size) +void LoadPalette(const void *src, u32 offset, u32 size) { CpuCopy16(src, &gPlttBufferUnfaded[offset], size); CpuCopy16(src, &gPlttBufferFaded[offset], size); } -void FillPalette(u16 value, u16 offset, u16 size) +void FillPalette(u32 value, u32 offset, u32 size) { CpuFill16(value, &gPlttBufferUnfaded[offset], size); CpuFill16(value, &gPlttBufferFaded[offset], size); @@ -112,10 +70,9 @@ void TransferPlttBuffer(void) } } -u8 UpdatePaletteFade(void) +u32 UpdatePaletteFade(void) { - u8 result; - u8 dummy = 0; + u32 result; if (sPlttBufferTransferPending) return PALETTE_FADE_STATUS_LOADING; @@ -127,37 +84,19 @@ u8 UpdatePaletteFade(void) else result = UpdateHardwarePaletteFade(); - sPlttBufferTransferPending = gPaletteFade.multipurpose1 | dummy; + sPlttBufferTransferPending = gPaletteFade.multipurpose1; return result; } void ResetPaletteFade(void) { - u8 i; - - for (i = 0; i < NUM_PALETTE_STRUCTS; i++) - PaletteStruct_Reset(i); - ResetPaletteFadeControl(); } -static void ReadPlttIntoBuffers(void) -{ - u16 i; - u16 *pltt = (u16 *)PLTT; - - for (i = 0; i < PLTT_BUFFER_SIZE; i++) - { - gPlttBufferUnfaded[i] = pltt[i]; - gPlttBufferFaded[i] = pltt[i]; - } -} - -bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targetY, u16 blendColor) +bool32 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targetY, u32 blendColor) { u8 temp; - u16 color = blendColor; if (gPaletteFade.active) { @@ -178,7 +117,7 @@ bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targe gPaletteFade_delay = delay; gPaletteFade.y = startY; gPaletteFade.targetY = targetY; - gPaletteFade.blendColor = color; + gPaletteFade.blendColor = blendColor; gPaletteFade.active = TRUE; gPaletteFade.mode = NORMAL_FADE; @@ -200,165 +139,6 @@ bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targe } } -static bool8 UNUSED BeginPlttFade(u32 selectedPalettes, u8 delay, u8 startY, u8 targetY, u16 blendColor) -{ - ReadPlttIntoBuffers(); - return BeginNormalPaletteFade(selectedPalettes, delay, startY, targetY, blendColor); -} - -static void UNUSED PaletteStruct_Run(u8 a1, u32 *unkFlags) -{ - u8 i; - - for (i = 0; i < NUM_PALETTE_STRUCTS; i++) - { - struct PaletteStruct *palstruct = &sPaletteStructs[i]; - if (palstruct->active) - { - if (palstruct->template->pst_field_8_0 == a1) - { - if (palstruct->srcIndex == palstruct->template->srcCount) - { - PaletteStruct_TryEnd(palstruct); - if (!palstruct->active) - continue; - } - if (palstruct->countdown1 == 0) - PaletteStruct_Copy(palstruct, unkFlags); - else - palstruct->countdown1--; - - PaletteStruct_Blend(palstruct, unkFlags); - } - } - } -} - -static void PaletteStruct_Copy(struct PaletteStruct *palStruct, u32 *unkFlags) -{ - s32 srcIndex; - s32 srcCount; - u8 i = 0; - u16 srcOffset = palStruct->srcIndex * palStruct->template->size; - - if (!palStruct->template->pst_field_8_0) - { - while (i < palStruct->template->size) - { - gPlttBufferUnfaded[palStruct->destOffset] = palStruct->template->src[srcOffset]; - gPlttBufferFaded[palStruct->destOffset] = palStruct->template->src[srcOffset]; - i++; - palStruct->destOffset++; - srcOffset++; - } - } - else - { - while (i < palStruct->template->size) - { - gPlttBufferFaded[palStruct->destOffset] = palStruct->template->src[srcOffset]; - i++; - palStruct->destOffset++; - srcOffset++; - } - } - - palStruct->destOffset = palStruct->baseDestOffset; - palStruct->countdown1 = palStruct->template->time1; - palStruct->srcIndex++; - - srcIndex = palStruct->srcIndex; - srcCount = palStruct->template->srcCount; - - if (srcIndex >= srcCount) - { - if (palStruct->countdown2) - palStruct->countdown2--; - palStruct->srcIndex = 0; - } - - *unkFlags |= 1 << (palStruct->baseDestOffset >> 4); -} - -static void PaletteStruct_Blend(struct PaletteStruct *palStruct, u32 *unkFlags) -{ - if (gPaletteFade.active && ((1 << (palStruct->baseDestOffset >> 4)) & gPaletteFade_selectedPalettes)) - { - if (!palStruct->template->pst_field_8_0) - { - if (gPaletteFade.delayCounter != gPaletteFade_delay) - { - BlendPalette( - palStruct->baseDestOffset, - palStruct->template->size, - gPaletteFade.y, - gPaletteFade.blendColor); - } - } - else - { - if (!gPaletteFade.delayCounter) - { - if (palStruct->countdown1 != palStruct->template->time1) - { - u32 srcOffset = palStruct->srcIndex * palStruct->template->size; - u8 i; - - for (i = 0; i < palStruct->template->size; i++) - gPlttBufferFaded[palStruct->baseDestOffset + i] = palStruct->template->src[srcOffset + i]; - } - } - } - } -} - -static void PaletteStruct_TryEnd(struct PaletteStruct *pal) -{ - if (pal->countdown2 == 0) - { - s32 state = pal->template->state; - - if (state == 0) - { - pal->srcIndex = 0; - pal->countdown1 = pal->template->time1; - pal->countdown2 = pal->template->time2; - pal->destOffset = pal->baseDestOffset; - } - else - { - if (state < 0) - return; - if (state > 2) - return; - PaletteStruct_ResetById(pal->template->id); - } - } - else - { - pal->countdown2--; - } -} - -void PaletteStruct_ResetById(u16 id) -{ - u8 paletteNum = PaletteStruct_GetPalNum(id); - if (paletteNum != NUM_PALETTE_STRUCTS) - PaletteStruct_Reset(paletteNum); -} - -static void PaletteStruct_Reset(u8 paletteNum) -{ - sPaletteStructs[paletteNum].template = &sDummyPaletteStructTemplate; - sPaletteStructs[paletteNum].active = FALSE; - sPaletteStructs[paletteNum].baseDestOffset = 0; - sPaletteStructs[paletteNum].destOffset = 0; - sPaletteStructs[paletteNum].srcIndex = 0; - sPaletteStructs[paletteNum].flag = 0; - sPaletteStructs[paletteNum].countdown1 = 0; - sPaletteStructs[paletteNum].countdown2 = 0; -} - void ResetPaletteFadeControl(void) { gPaletteFade.multipurpose1 = 0; @@ -379,32 +159,7 @@ void ResetPaletteFadeControl(void) gPaletteFade.deltaY = 2; } -static void UNUSED PaletteStruct_SetUnusedFlag(u16 id) -{ - u8 paletteNum = PaletteStruct_GetPalNum(id); - if (paletteNum != NUM_PALETTE_STRUCTS) - sPaletteStructs[paletteNum].flag = TRUE; -} - -static void UNUSED PaletteStruct_ClearUnusedFlag(u16 id) -{ - u8 paletteNum = PaletteStruct_GetPalNum(id); - if (paletteNum != NUM_PALETTE_STRUCTS) - sPaletteStructs[paletteNum].flag = FALSE; -} - -static u8 PaletteStruct_GetPalNum(u16 id) -{ - u8 i; - - for (i = 0; i < NUM_PALETTE_STRUCTS; i++) - if (sPaletteStructs[i].template->id == id) - return i; - - return NUM_PALETTE_STRUCTS; -} - -static u8 UpdateNormalPaletteFade(void) +static u32 UpdateNormalPaletteFade(void) { u16 paletteOffset; u16 selectedPalettes; @@ -498,7 +253,7 @@ void InvertPlttBuffer(u32 selectedPalettes) { if (selectedPalettes & 1) { - u8 i; + u32 i; for (i = 0; i < 16; i++) gPlttBufferFaded[paletteOffset + i] = ~gPlttBufferFaded[paletteOffset + i]; } @@ -515,7 +270,7 @@ void TintPlttBuffer(u32 selectedPalettes, s8 r, s8 g, s8 b) { if (selectedPalettes & 1) { - u8 i; + u32 i; for (i = 0; i < 16; i++) { struct PlttData *data = (struct PlttData *)&gPlttBufferFaded[paletteOffset + i]; @@ -546,13 +301,13 @@ void UnfadePlttBuffer(u32 selectedPalettes) } } -void BeginFastPaletteFade(u8 submode) +void BeginFastPaletteFade(u32 submode) { gPaletteFade.deltaY = 2; BeginFastPaletteFadeInternal(submode); } -static void BeginFastPaletteFadeInternal(u8 submode) +static void BeginFastPaletteFadeInternal(u32 submode) { gPaletteFade.y = 31; gPaletteFade_submode = submode & 0x3F; @@ -568,9 +323,9 @@ static void BeginFastPaletteFadeInternal(u8 submode) UpdatePaletteFade(); } -static u8 UpdateFastPaletteFade(void) +static u32 UpdateFastPaletteFade(void) { - u16 i; + u32 i; u16 paletteOffsetStart; u16 paletteOffsetEnd; s8 r0; @@ -726,7 +481,7 @@ static u8 UpdateFastPaletteFade(void) return gPaletteFade.active ? PALETTE_FADE_STATUS_ACTIVE : PALETTE_FADE_STATUS_DONE; } -void BeginHardwarePaletteFade(u8 blendCnt, u8 delay, u8 y, u8 targetY, u8 shouldResetBlendRegisters) +void BeginHardwarePaletteFade(u32 blendCnt, u32 delay, u32 y, u32 targetY, u32 shouldResetBlendRegisters) { gPaletteFade_blendCnt = blendCnt; gPaletteFade.delayCounter = delay; @@ -744,7 +499,7 @@ void BeginHardwarePaletteFade(u8 blendCnt, u8 delay, u8 y, u8 targetY, u8 should gPaletteFade.yDec = 1; } -static u8 UpdateHardwarePaletteFade(void) +static u32 UpdateHardwarePaletteFade(void) { if (!gPaletteFade.active) return PALETTE_FADE_STATUS_DONE; @@ -805,7 +560,7 @@ static void UpdateBlendRegisters(void) } } -static bool8 IsSoftwarePaletteFadeFinishing(void) +static bool32 IsSoftwarePaletteFadeFinishing(void) { if (gPaletteFade.softwareFadeFinishing) { @@ -828,7 +583,7 @@ static bool8 IsSoftwarePaletteFadeFinishing(void) } } -void BlendPalettes(u32 selectedPalettes, u8 coeff, u16 color) +void BlendPalettes(u32 selectedPalettes, u8 coeff, u32 color) { u16 paletteOffset; @@ -840,7 +595,7 @@ void BlendPalettes(u32 selectedPalettes, u8 coeff, u16 color) } } -void BlendPalettesUnfaded(u32 selectedPalettes, u8 coeff, u16 color) +void BlendPalettesUnfaded(u32 selectedPalettes, u8 coeff, u32 color) { void *src = gPlttBufferUnfaded; void *dest = gPlttBufferFaded; @@ -848,10 +603,10 @@ void BlendPalettesUnfaded(u32 selectedPalettes, u8 coeff, u16 color) BlendPalettes(selectedPalettes, coeff, color); } -void TintPalette_GrayScale(u16 *palette, u16 count) +void TintPalette_GrayScale(u16 *palette, u32 count) { - s32 r, g, b, i; - u32 gray; + s32 r, g, b; + u32 i, gray; for (i = 0; i < count; i++) { @@ -865,10 +620,10 @@ void TintPalette_GrayScale(u16 *palette, u16 count) } } -void TintPalette_GrayScale2(u16 *palette, u16 count) +void TintPalette_GrayScale2(u16 *palette, u32 count) { - s32 r, g, b, i; - u32 gray; + s32 r, g, b; + u32 i, gray; for (i = 0; i < count; i++) { @@ -887,10 +642,10 @@ void TintPalette_GrayScale2(u16 *palette, u16 count) } } -void TintPalette_SepiaTone(u16 *palette, u16 count) +void TintPalette_SepiaTone(u16 *palette, u32 count) { - s32 r, g, b, i; - u32 gray; + s32 r, g, b; + u32 i, gray; for (i = 0; i < count; i++) { @@ -911,10 +666,10 @@ void TintPalette_SepiaTone(u16 *palette, u16 count) } } -void TintPalette_CustomTone(u16 *palette, u16 count, u16 rTone, u16 gTone, u16 bTone) +void TintPalette_CustomTone(u16 *palette, u32 count, u16 rTone, u16 gTone, u16 bTone) { - s32 r, g, b, i; - u32 gray; + s32 r, g, b; + u32 i, gray; for (i = 0; i < count; i++) { diff --git a/src/party_menu.c b/src/party_menu.c index 5214ddc2be63..15433854a5a8 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -1353,7 +1353,7 @@ static void DrawCancelConfirmButtons(void) bool8 IsMultiBattle(void) { - if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gMain.inBattle) + if (gBattleTypeFlags & BATTLE_TYPE_MULTI && IsDoubleBattle() && gMain.inBattle) return TRUE; else return FALSE; diff --git a/src/pokemon.c b/src/pokemon.c index 2b731ef13cfa..306e310372ff 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2,6 +2,7 @@ #include "malloc.h" #include "apprentice.h" #include "battle.h" +#include "battle_ai_switch_items.h" #include "battle_anim.h" #include "battle_controllers.h" #include "battle_message.h" @@ -1108,7 +1109,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, u16 checksum; u8 i; u8 availableIVs[NUM_STATS]; - u8 selectedIvs[LEGENDARY_PERFECT_IV_COUNT]; + u8 selectedIvs[NUM_STATS]; bool32 isShiny; ZeroBoxMonData(boxMon); @@ -1225,21 +1226,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, iv = (value & (MAX_IV_MASK << 10)) >> 10; SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &iv); - if (gSpeciesInfo[species].allPerfectIVs) - { - iv = MAX_PER_STAT_IVS; - SetBoxMonData(boxMon, MON_DATA_HP_IV, &iv); - SetBoxMonData(boxMon, MON_DATA_ATK_IV, &iv); - SetBoxMonData(boxMon, MON_DATA_DEF_IV, &iv); - SetBoxMonData(boxMon, MON_DATA_SPEED_IV, &iv); - SetBoxMonData(boxMon, MON_DATA_SPATK_IV, &iv); - SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &iv); - } - else if (P_LEGENDARY_PERFECT_IVS >= GEN_6 - && (gSpeciesInfo[species].isLegendary - || gSpeciesInfo[species].isMythical - || gSpeciesInfo[species].isUltraBeast - || gSpeciesInfo[species].isTotem)) + if (gSpeciesInfo[species].perfectIVCount != 0) { iv = MAX_PER_STAT_IVS; // Initialize a list of IV indices. @@ -1248,14 +1235,14 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, availableIVs[i] = i; } - // Select the 3 IVs that will be perfected. - for (i = 0; i < LEGENDARY_PERFECT_IV_COUNT; i++) + // Select the IVs that will be perfected. + for (i = 0; i < NUM_STATS && i < gSpeciesInfo[species].perfectIVCount; i++) { u8 index = Random() % (NUM_STATS - i); selectedIvs[i] = availableIVs[index]; RemoveIVIndexFromList(availableIVs, index); } - for (i = 0; i < LEGENDARY_PERFECT_IV_COUNT; i++) + for (i = 0; i < NUM_STATS && i < gSpeciesInfo[species].perfectIVCount; i++) { switch (selectedIvs[i]) { @@ -2113,7 +2100,7 @@ u8 GetDefaultMoveTarget(u8 battlerId) { u8 opposing = BATTLE_OPPOSITE(GetBattlerSide(battlerId)); - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!IsDoubleBattle()) return GetBattlerAtPosition(opposing); if (CountAliveMonsInBattle(BATTLE_ALIVE_EXCEPT_BATTLER, battlerId) > 1) { @@ -3682,9 +3669,9 @@ void PokemonToBattleMon(struct Pokemon *src, struct BattlePokemon *dst) dst->spDefense = GetMonData(src, MON_DATA_SPDEF, NULL); dst->abilityNum = GetMonData(src, MON_DATA_ABILITY_NUM, NULL); dst->otId = GetMonData(src, MON_DATA_OT_ID, NULL); - dst->type1 = gSpeciesInfo[dst->species].types[0]; - dst->type2 = gSpeciesInfo[dst->species].types[1]; - dst->type3 = TYPE_MYSTERY; + dst->types[0] = gSpeciesInfo[dst->species].types[0]; + dst->types[1] = gSpeciesInfo[dst->species].types[1]; + dst->types[2] = TYPE_MYSTERY; dst->isShiny = IsMonShiny(src); dst->ability = GetAbilityBySpecies(dst->species, dst->abilityNum); GetMonData(src, MON_DATA_NICKNAME, nickname); @@ -4410,7 +4397,7 @@ static u32 GetGMaxTargetSpecies(u32 species) return SPECIES_NONE; } -u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, struct Pokemon *tradePartner) +u16 GetEvolutionTargetSpecies(struct Pokemon *mon, enum EvolutionMode mode, u16 evolutionItem, struct Pokemon *tradePartner) { int i, j; u16 targetSpecies = SPECIES_NONE; @@ -6941,3 +6928,174 @@ void UpdateDaysPassedSinceFormChange(u16 days) } } } + +static inline u32 CalculateHiddenPowerType(struct Pokemon *mon) +{ + u32 typehp; + u32 type; + u8 typeBits = ((GetMonData(mon, MON_DATA_HP_IV) & 1) << 0) + | ((GetMonData(mon, MON_DATA_ATK_IV) & 1) << 1) + | ((GetMonData(mon, MON_DATA_DEF_IV) & 1) << 2) + | ((GetMonData(mon, MON_DATA_SPEED_IV) & 1) << 3) + | ((GetMonData(mon, MON_DATA_SPATK_IV) & 1) << 4) + | ((GetMonData(mon, MON_DATA_SPDEF_IV) & 1) << 5); + + type = (15 * typeBits) / 63 + 2; + if (type >= TYPE_MYSTERY) + type++; + type |= 0xC0; + typehp = type & 0x3F; + return typehp; +} + +u32 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler) +{ + u32 type = gMovesInfo[move].type; + u32 species = GetMonData(mon, MON_DATA_SPECIES); + u32 heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0); + u32 heldItemEffect = ItemId_GetHoldEffect(heldItem); + u32 ability = GetMonAbility(mon); + u32 type1 = gSpeciesInfo[species].types[0]; + u32 type2 = gSpeciesInfo[species].types[1]; + u32 effect = gMovesInfo[move].effect; + + if (effect == EFFECT_IVY_CUDGEL + && (species == SPECIES_OGERPON_WELLSPRING_MASK || species == SPECIES_OGERPON_WELLSPRING_MASK_TERA + || species == SPECIES_OGERPON_HEARTHFLAME_MASK || species == SPECIES_OGERPON_HEARTHFLAME_MASK_TERA + || species == SPECIES_OGERPON_CORNERSTONE_MASK || species == SPECIES_OGERPON_CORNERSTONE_MASK_TERA)) + { + type = type2; + } + else if (move == MOVE_STRUGGLE) + { + return TYPE_NORMAL; + } + else if (effect == EFFECT_TERA_BLAST && GetActiveGimmick(battler) == GIMMICK_TERA && gBattleMons[battler].species == species) + { + return GetMonData(mon, MON_DATA_TERA_TYPE); + } + else if (effect == EFFECT_TERA_STARSTORM && species == SPECIES_TERAPAGOS_STELLAR) + { + return TYPE_STELLAR; + } + else if (move == MOVE_HIDDEN_POWER) + { + return CalculateHiddenPowerType(mon); + } + else if (effect == EFFECT_AURA_WHEEL && species == SPECIES_MORPEKO_HANGRY) + { + type = TYPE_DARK; + } + else if (effect == EFFECT_CHANGE_TYPE_ON_ITEM) + { + if (heldItemEffect == gMovesInfo[move].argument) + return ItemId_GetSecondaryId(heldItem); + else + return TYPE_NORMAL; + } + else if (effect == EFFECT_NATURAL_GIFT) + { + if (ItemId_GetPocket(heldItem) == POCKET_BERRIES) + return gNaturalGiftTable[ITEM_TO_BERRY(heldItem)].type; + else + return TYPE_NORMAL; + } + else if (effect == EFFECT_RAGING_BULL + && (species == SPECIES_TAUROS_PALDEAN_COMBAT_BREED + || species == SPECIES_TAUROS_PALDEAN_BLAZE_BREED + || species == SPECIES_TAUROS_PALDEAN_AQUA_BREED)) + { + return type2; + } + else if (effect == EFFECT_REVELATION_DANCE) + { + if (gBattleMons[battler].species != species && type1 != TYPE_MYSTERY) + type = type1; + else if (gBattleMons[battler].species != species && type2 != TYPE_MYSTERY) + type = type2; + else if (GetBattlerTeraType(battler) != TYPE_STELLAR && (GetActiveGimmick(battler) == GIMMICK_TERA || IsGimmickSelected(battler, GIMMICK_TERA))) + type = GetMonData(mon, MON_DATA_TERA_TYPE); + else if (gBattleMons[battler].types[0] != TYPE_MYSTERY) + type = gBattleMons[battler].types[0]; + else if (gBattleMons[battler].types[1] != TYPE_MYSTERY) + type = gBattleMons[battler].types[1]; + else if (gBattleMons[battler].types[2] != TYPE_MYSTERY) + type = gBattleMons[battler].types[2]; + } + else if (effect == EFFECT_TERRAIN_PULSE + && ((IsMonGrounded(heldItemEffect, ability, type1, type2) && gBattleMons[battler].species != species) + || (IsBattlerTerrainAffected(battler, STATUS_FIELD_TERRAIN_ANY) && gBattleMons[battler].species == species))) + { + if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) + return TYPE_ELECTRIC; + else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN) + return TYPE_GRASS; + else if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN) + return TYPE_FAIRY; + else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN) + return TYPE_PSYCHIC; + else //failsafe + type = TYPE_NORMAL; + } + + if (effect == EFFECT_WEATHER_BALL) + { + if (gMain.inBattle && WEATHER_HAS_EFFECT) + { + if (gBattleWeather & B_WEATHER_RAIN && heldItemEffect != HOLD_EFFECT_UTILITY_UMBRELLA) + return TYPE_WATER; + else if (gBattleWeather & B_WEATHER_SANDSTORM) + return TYPE_ROCK; + else if (gBattleWeather & B_WEATHER_SUN && heldItemEffect != HOLD_EFFECT_UTILITY_UMBRELLA) + return TYPE_FIRE; + else if (gBattleWeather & (B_WEATHER_SNOW | B_WEATHER_HAIL)) + return TYPE_ICE; + else + return TYPE_NORMAL; + } + else + { + switch (gWeatherPtr->currWeather) + { + case WEATHER_SUNNY: + if (heldItem != ITEM_UTILITY_UMBRELLA) + return TYPE_FIRE; + break; + case WEATHER_RAIN: + if (heldItem != ITEM_UTILITY_UMBRELLA) + return TYPE_WATER; + break; + case WEATHER_SNOW: + return TYPE_ICE; + break; + case WEATHER_SANDSTORM: + return TYPE_ROCK; + break; + } + return TYPE_NORMAL; + } + } + + if (ability == ABILITY_NORMALIZE && gMovesInfo[move].type != TYPE_NORMAL && GetActiveGimmick(battler) != GIMMICK_Z_MOVE) + type = TYPE_NORMAL; + + if ((gFieldStatuses & STATUS_FIELD_ION_DELUGE && type == TYPE_NORMAL) || gStatuses4[battler] & STATUS4_ELECTRIFIED) + type = TYPE_ELECTRIC; + + if (gMovesInfo[move].type == TYPE_NORMAL && gMovesInfo[move].category != DAMAGE_CATEGORY_STATUS) + { + switch (ability) + { + case ABILITY_PIXILATE: return TYPE_FAIRY; + case ABILITY_REFRIGERATE: return TYPE_ICE; + case ABILITY_AERILATE: return TYPE_FLYING; + case ABILITY_GALVANIZE: return TYPE_ELECTRIC; + default: break; + } + } + + if (ability == ABILITY_LIQUID_VOICE && gMovesInfo[move].soundMove == TRUE) + return TYPE_WATER; + + return type; +} diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index fe65df011485..6c9c53fd7f79 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -1998,7 +1998,10 @@ static void VBlankCB_PokeStorage(void) ProcessSpriteCopyRequests(); UnkUtil_Run(); TransferPlttBuffer(); - SetGpuReg(REG_OFFSET_BG2HOFS, sStorage->bg2_X); + if (sStorage != NULL) + { + SetGpuReg(REG_OFFSET_BG2HOFS, sStorage->bg2_X); + } } static void CB2_PokeStorage(void) @@ -4206,11 +4209,14 @@ static void StopFlashingCloseBoxButton(void) static void UpdateCloseBoxButtonFlash(void) { - if (sStorage->closeBoxFlashing && ++sStorage->closeBoxFlashTimer > 30) + if (sStorage != NULL) { - sStorage->closeBoxFlashTimer = 0; - sStorage->closeBoxFlashState = (sStorage->closeBoxFlashState == FALSE); - UpdateCloseBoxButtonTilemap(sStorage->closeBoxFlashState); + if (sStorage->closeBoxFlashing && ++sStorage->closeBoxFlashTimer > 30) + { + sStorage->closeBoxFlashTimer = 0; + sStorage->closeBoxFlashState = (sStorage->closeBoxFlashState == FALSE); + UpdateCloseBoxButtonTilemap(sStorage->closeBoxFlashState); + } } } diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index e81ef0b0669f..a1ebc2b18818 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -3957,16 +3957,29 @@ static void SetMonTypeIcons(void) static void SetMoveTypeIcons(void) { - u8 i; + u32 i; + u32 type; struct PokeSummary *summary = &sMonSummaryScreen->summary; + struct Pokemon *mon = &sMonSummaryScreen->currentMon; + for (i = 0; i < MAX_MON_MOVES; i++) { if (summary->moves[i] != MOVE_NONE) { - SetTypeSpritePosAndPal(gMovesInfo[summary->moves[i]].type, 85, 32 + (i * 16), i + SPRITE_ARR_ID_TYPE); + if (P_SHOW_DYNAMIC_TYPES) + { + type = CheckDynamicMoveType(mon, summary->moves[i], 0); + SetTypeSpritePosAndPal(type, 85, 32 + (i * 16), i + SPRITE_ARR_ID_TYPE); + } + else + { + SetTypeSpritePosAndPal(gMovesInfo[summary->moves[i]].type, 85, 32 + (i * 16), i + SPRITE_ARR_ID_TYPE); + } } else + { SetSpriteInvisibility(i + SPRITE_ARR_ID_TYPE, TRUE); + } } } @@ -3985,6 +3998,12 @@ static void SetContestMoveTypeIcons(void) static void SetNewMoveTypeIcon(void) { + u32 type = gMovesInfo[sMonSummaryScreen->newMove].type; + struct Pokemon *mon = &sMonSummaryScreen->currentMon; + + if (P_SHOW_DYNAMIC_TYPES) + type = CheckDynamicMoveType(mon, sMonSummaryScreen->newMove, 0); + if (sMonSummaryScreen->newMove == MOVE_NONE) { SetSpriteInvisibility(SPRITE_ARR_ID_TYPE + 4, TRUE); @@ -3992,9 +4011,13 @@ static void SetNewMoveTypeIcon(void) else { if (sMonSummaryScreen->currPageIndex == PSS_PAGE_BATTLE_MOVES) - SetTypeSpritePosAndPal(gMovesInfo[sMonSummaryScreen->newMove].type, 85, 96, SPRITE_ARR_ID_TYPE + 4); + { + SetTypeSpritePosAndPal(type, 85, 96, SPRITE_ARR_ID_TYPE + 4); + } else + { SetTypeSpritePosAndPal(NUMBER_OF_MON_TYPES + gMovesInfo[sMonSummaryScreen->newMove].contestCategory, 85, 96, SPRITE_ARR_ID_TYPE + 4); + } } } diff --git a/src/scrcmd.c b/src/scrcmd.c index b642f41ede49..319e66756669 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -8,6 +8,7 @@ #include "contest_util.h" #include "contest_painting.h" #include "data.h" +#include "decompress.h" #include "decoration.h" #include "decoration_inventory.h" #include "event_data.h" @@ -656,12 +657,12 @@ bool8 ScrCmd_fadescreenswapbuffers(struct ScriptContext *ctx) case FADE_TO_BLACK: case FADE_TO_WHITE: default: - CpuCopy32(gPlttBufferUnfaded, gPaletteDecompressionBuffer, PLTT_SIZE); + CpuCopy32(gPlttBufferUnfaded, gDecompressionBuffer, PLTT_SIZE); FadeScreen(mode, 0); break; case FADE_FROM_BLACK: case FADE_FROM_WHITE: - CpuCopy32(gPaletteDecompressionBuffer, gPlttBufferUnfaded, PLTT_SIZE); + CpuCopy32(gDecompressionBuffer, gPlttBufferUnfaded, PLTT_SIZE); FadeScreen(mode, 0); break; } @@ -1693,7 +1694,7 @@ bool8 ScrCmd_vmessage(struct ScriptContext *ctx) bool8 ScrCmd_bufferspeciesname(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); - u16 species = VarGet(ScriptReadHalfword(ctx)) & ((1 << 10) - 1); // ignore possible shiny / form bits + u16 species = VarGet(ScriptReadHalfword(ctx)) & OBJ_EVENT_GFX_SPECIES_MASK; // ignore possible shiny / form bits StringCopy(sScriptStringVars[stringVarIndex], GetSpeciesName(species)); return FALSE; diff --git a/src/strings.c b/src/strings.c index 28ed992d43c8..a5533731ede4 100644 --- a/src/strings.c +++ b/src/strings.c @@ -21,21 +21,6 @@ const u8 gText_ExpandedPlaceholder_May[] = _("MAY"); const u8 gText_EggNickname[] = _("EGG"); const u8 gText_Pokemon[] = _("POKéMON"); const u8 gText_ProfBirchMatchCallName[] = _("PROF. BIRCH"); -const u8 gText_MainMenuNewGame[] = _("NEW GAME"); -const u8 gText_MainMenuContinue[] = _("CONTINUE"); -const u8 gText_MainMenuOption[] = _("OPTION"); -const u8 gText_MainMenuMysteryGift[] = _("MYSTERY GIFT"); -const u8 gText_MainMenuMysteryGift2[] = _("MYSTERY GIFT"); -const u8 gText_MainMenuMysteryEvents[] = _("MYSTERY EVENTS"); -const u8 gText_WirelessNotConnected[] = _("The Wireless Adapter is not\nconnected."); -const u8 gText_MysteryGiftCantUse[] = _("MYSTERY GIFT can't be used while\nthe Wireless Adapter is attached."); -const u8 gText_MysteryEventsCantUse[] = _("MYSTERY EVENTS can't be used while\nthe Wireless Adapter is attached."); -const u8 gText_UpdatingSaveExternalData[] = _("Updating save file using external\ndata. Please wait."); // Unused -const u8 gText_SaveFileUpdated[] = _("The save file has been updated."); // Unused -const u8 gText_SaveFileCorrupted[] = _("The save file is corrupted. The\nprevious save file will be loaded."); -const u8 gText_SaveFileErased[] = _("The save file has been erased\ndue to corruption or damage."); -const u8 gJPText_No1MSubCircuit[] = _("1Mサブきばんが ささっていません!"); -const u8 gText_BatteryRunDry[] = _("The internal battery has run dry.\nThe game can be played.\pHowever, clock-based events will\nno longer occur."); const u8 gText_Player[] = _("PLAYER"); // Unused const u8 gText_Pokedex[] = _("POKéDEX"); // Unused const u8 gText_Time[] = _("TIME"); @@ -55,48 +40,6 @@ ALIGNED(4) const u8 gText_NextBack[] = _("{A_BUTTON}NEXT {B_BUTTON}BACK"); // Un ALIGNED(4) const u8 gText_PickNextCancel[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}NEXT {B_BUTTON}CANCEL"); ALIGNED(4) const u8 gText_PickCancel[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}{B_BUTTON}CANCEL"); ALIGNED(4) const u8 gText_AButtonExit[] = _("{A_BUTTON}EXIT"); -const u8 gText_BirchBoy[] = _("BOY"); -const u8 gText_BirchGirl[] = _("GIRL"); -const u8 gText_DefaultNameStu[] = _("STU"); -const u8 gText_DefaultNameMilton[] = _("MILTON"); -const u8 gText_DefaultNameTom[] = _("TOM"); -const u8 gText_DefaultNameKenny[] = _("KENNY"); -const u8 gText_DefaultNameReid[] = _("REID"); -const u8 gText_DefaultNameJude[] = _("JUDE"); -const u8 gText_DefaultNameJaxson[] = _("JAXSON"); -const u8 gText_DefaultNameEaston[] = _("EASTON"); -const u8 gText_DefaultNameWalker[] = _("WALKER"); -const u8 gText_DefaultNameTeru[] = _("TERU"); -const u8 gText_DefaultNameJohnny[] = _("JOHNNY"); -const u8 gText_DefaultNameBrett[] = _("BRETT"); -const u8 gText_DefaultNameSeth[] = _("SETH"); -const u8 gText_DefaultNameTerry[] = _("TERRY"); -const u8 gText_DefaultNameCasey[] = _("CASEY"); -const u8 gText_DefaultNameDarren[] = _("DARREN"); -const u8 gText_DefaultNameLandon[] = _("LANDON"); -const u8 gText_DefaultNameCollin[] = _("COLLIN"); -const u8 gText_DefaultNameStanley[] = _("STANLEY"); -const u8 gText_DefaultNameQuincy[] = _("QUINCY"); -const u8 gText_DefaultNameKimmy[] = _("KIMMY"); -const u8 gText_DefaultNameTiara[] = _("TIARA"); -const u8 gText_DefaultNameBella[] = _("BELLA"); -const u8 gText_DefaultNameJayla[] = _("JAYLA"); -const u8 gText_DefaultNameAllie[] = _("ALLIE"); -const u8 gText_DefaultNameLianna[] = _("LIANNA"); -const u8 gText_DefaultNameSara[] = _("SARA"); -const u8 gText_DefaultNameMonica[] = _("MONICA"); -const u8 gText_DefaultNameCamila[] = _("CAMILA"); -const u8 gText_DefaultNameAubree[] = _("AUBREE"); -const u8 gText_DefaultNameRuthie[] = _("RUTHIE"); -const u8 gText_DefaultNameHazel[] = _("HAZEL"); -const u8 gText_DefaultNameNadine[] = _("NADINE"); -const u8 gText_DefaultNameTanja[] = _("TANJA"); -const u8 gText_DefaultNameYasmin[] = _("YASMIN"); -const u8 gText_DefaultNameNicola[] = _("NICOLA"); -const u8 gText_DefaultNameLillie[] = _("LILLIE"); -const u8 gText_DefaultNameTerra[] = _("TERRA"); -const u8 gText_DefaultNameLucy[] = _("LUCY"); -const u8 gText_DefaultNameHalie[] = _("HALIE"); const u8 gText_ThisIsAPokemon[] = _("This is what we call a “POKéMON.”{PAUSE 96}\p"); const u8 gText_5MarksPokemon[] = _("????? POKéMON"); const u8 gText_UnkHeight[] = _("{CLEAR_TO 0x0C}??'??”"); @@ -1378,10 +1321,6 @@ const u8 gText_BattleArenaDesc[] = _("Win battles with teamed-up POKéMON!\nYour const u8 gText_BattleFactoryDesc[] = _("Aim for victory using rental POKéMON!\nYour knowledge will be tested."); const u8 gText_BattlePikeDesc[] = _("Select one of three paths to battle!\nYour luck will be tested."); const u8 gText_BattlePyramidDesc[] = _("Aim for the top with exploration!\nYour bravery will be tested."); -const u8 gText_ContinueMenuPlayer[] = _("PLAYER"); -const u8 gText_ContinueMenuTime[] = _("TIME"); -const u8 gText_ContinueMenuPokedex[] = _("POKéDEX"); -const u8 gText_ContinueMenuBadges[] = _("BADGES"); const u8 gText_Powder[] = _("POWDER"); const u8 gText_BerryPickingRecords[] = _("DODRIO BERRY-PICKING RECORDS"); const u8 gText_BerriesPicked[] = _("BERRIES picked:"); diff --git a/src/tv.c b/src/tv.c index e0f910eaaf89..c0e207ce8a15 100644 --- a/src/tv.c +++ b/src/tv.c @@ -1262,7 +1262,7 @@ void PutBattleUpdateOnTheAir(u8 opponentLinkPlayerId, u16 move, u16 speciesPlaye if (gBattleTypeFlags & BATTLE_TYPE_MULTI) show->battleUpdate.battleType = 2; - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + else if (IsDoubleBattle()) show->battleUpdate.battleType = 1; else show->battleUpdate.battleType = 0; diff --git a/src/type_icons.c b/src/type_icons.c new file mode 100644 index 000000000000..2877d2207120 --- /dev/null +++ b/src/type_icons.c @@ -0,0 +1,540 @@ +#include "global.h" +#include "battle.h" +#include "battle_anim.h" +#include "battle_controllers.h" +#include "battle_gimmick.h" +#include "decompress.h" +#include "graphics.h" +#include "pokedex.h" +#include "sprite.h" +#include "type_icons.h" + +static void LoadTypeSpritesAndPalettes(void); +static void LoadTypeIconsPerBattler(u32, u32); + +static bool32 UseDoubleBattleCoords(u32); + +static u32 GetMonPublicType(u32, u32); +static bool32 ShouldHideUncaughtType(u32); +static u32 GetMonDefensiveTeraType(struct Pokemon *, struct Pokemon*, u32, u32, u32, u32); +static u32 IsIllusionActiveAndTypeUnchanged(struct Pokemon*, u32, u32); + +static void CreateSpriteFromType(u32, bool32, u32[], u32, u32); +static bool32 ShouldSkipSecondType(u32[], u32); +static void SetTypeIconXY(s32*, s32*, u32, bool32, u32); + +static void CreateSpriteAndSetTypeSpriteAttributes(u32, u32 x, u32 y, u32, u32, bool32); +static bool32 ShouldFlipTypeIcon(bool32, u32, u32); + +static void SpriteCB_TypeIcon(struct Sprite*); +static void DestroyTypeIcon(struct Sprite*); +static void FreeAllTypeIconResources(void); +static bool32 ShouldHideTypeIcon(u32); +static s32 GetTypeIconHideMovement(bool32, u32); +static s32 GetTypeIconSlideMovement(bool32, u32, s32); +static s32 GetTypeIconBounceMovement(s32, u32); + +const struct Coords16 sTypeIconPositions[][2] = +{ + [B_POSITION_PLAYER_LEFT] = + { + [FALSE] = {221, 86}, + [TRUE] = {144, 71}, + }, + [B_POSITION_OPPONENT_LEFT] = + { + [FALSE] = {20, 26}, + [TRUE] = {97, 14}, + }, + [B_POSITION_PLAYER_RIGHT] = + { + [TRUE] = {156, 96}, + }, + [B_POSITION_OPPONENT_RIGHT] = + { + [TRUE] = {85, 39}, + }, +}; + +const union AnimCmd sSpriteAnim_TypeIcon_Normal[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_NORMAL), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Fighting[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_FIGHTING), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Flying[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_FLYING), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Poison[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_POISON), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Ground[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_GROUND), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Rock[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_ROCK), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Bug[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_BUG), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Ghost[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_GHOST), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Steel[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_STEEL), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Mystery[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_MYSTERY), 0), + ANIMCMD_END +}; + +const union AnimCmd sSpriteAnim_TypeIcon_Fire[] = +{ + ANIMCMD_FRAME(TYPE_ICON_2_FRAME(TYPE_FIRE), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Water[] = +{ + ANIMCMD_FRAME(TYPE_ICON_2_FRAME(TYPE_WATER), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Grass[] = +{ + ANIMCMD_FRAME(TYPE_ICON_2_FRAME(TYPE_GRASS), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Electric[] = +{ + ANIMCMD_FRAME(TYPE_ICON_2_FRAME(TYPE_ELECTRIC), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Psychic[] = +{ + ANIMCMD_FRAME(TYPE_ICON_2_FRAME(TYPE_PSYCHIC), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Ice[] = +{ + ANIMCMD_FRAME(TYPE_ICON_2_FRAME(TYPE_ICE), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Dragon[] = +{ + ANIMCMD_FRAME(TYPE_ICON_2_FRAME(TYPE_DRAGON), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Dark[] = +{ + ANIMCMD_FRAME(TYPE_ICON_2_FRAME(TYPE_DARK), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Fairy[] = +{ + ANIMCMD_FRAME(TYPE_ICON_2_FRAME(TYPE_FAIRY), 0), + ANIMCMD_END +}; + +const union AnimCmd *const sSpriteAnimTable_TypeIcons[] = +{ + [TYPE_NONE] = sSpriteAnim_TypeIcon_Mystery, + [TYPE_NORMAL] = sSpriteAnim_TypeIcon_Normal, + [TYPE_FIGHTING] = sSpriteAnim_TypeIcon_Fighting, + [TYPE_FLYING] = sSpriteAnim_TypeIcon_Flying, + [TYPE_POISON] = sSpriteAnim_TypeIcon_Poison, + [TYPE_GROUND] = sSpriteAnim_TypeIcon_Ground, + [TYPE_ROCK] = sSpriteAnim_TypeIcon_Rock, + [TYPE_BUG] = sSpriteAnim_TypeIcon_Bug, + [TYPE_GHOST] = sSpriteAnim_TypeIcon_Ghost, + [TYPE_STEEL] = sSpriteAnim_TypeIcon_Steel, + [TYPE_MYSTERY] = sSpriteAnim_TypeIcon_Mystery, + [TYPE_FIRE] = sSpriteAnim_TypeIcon_Fire, + [TYPE_WATER] = sSpriteAnim_TypeIcon_Water, + [TYPE_GRASS] = sSpriteAnim_TypeIcon_Grass, + [TYPE_ELECTRIC] = sSpriteAnim_TypeIcon_Electric, + [TYPE_PSYCHIC] = sSpriteAnim_TypeIcon_Psychic, + [TYPE_ICE] = sSpriteAnim_TypeIcon_Ice, + [TYPE_DRAGON] = sSpriteAnim_TypeIcon_Dragon, + [TYPE_DARK] = sSpriteAnim_TypeIcon_Dark, + [TYPE_FAIRY] = sSpriteAnim_TypeIcon_Fairy, + [TYPE_STELLAR] = sSpriteAnim_TypeIcon_Mystery, +}; + +const struct CompressedSpritePalette sTypeIconPal1 = +{ + .data = gBattleIcons_Pal1, + .tag = TYPE_ICON_TAG +}; + +const struct CompressedSpritePalette sTypeIconPal2 = +{ + .data = gBattleIcons_Pal2, + .tag = TYPE_ICON_TAG_2 +}; + +const struct OamData sOamData_TypeIcons = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(8x16), + .size = SPRITE_SIZE(8x16), + .priority = 1, +}; + +const struct CompressedSpriteSheet sSpriteSheet_TypeIcons2 = +{ + .data = gBattleIcons_Gfx2, + .size = (8*16) * 9, + .tag = TYPE_ICON_TAG_2, +}; + +const struct CompressedSpriteSheet sSpriteSheet_TypeIcons1 = +{ + .data = gBattleIcons_Gfx1, + .size = (8*16) * 10, + .tag = TYPE_ICON_TAG, +}; + +const struct SpriteTemplate sSpriteTemplate_TypeIcons1 = +{ + .tileTag = TYPE_ICON_TAG, + .paletteTag = TYPE_ICON_TAG, + .oam = &sOamData_TypeIcons, + .anims = sSpriteAnimTable_TypeIcons, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_TypeIcon +}; + +const struct SpriteTemplate sSpriteTemplate_TypeIcons2 = +{ + .tileTag = TYPE_ICON_TAG_2, + .paletteTag = TYPE_ICON_TAG_2, + .oam = &sOamData_TypeIcons, + .anims = sSpriteAnimTable_TypeIcons, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_TypeIcon +}; + +void LoadTypeIcons(u32 battler) +{ + u32 position; + + if (B_SHOW_TYPES == SHOW_TYPES_NEVER) + return; + + LoadTypeSpritesAndPalettes(); + + for (position = 0; position < gBattlersCount; ++position) + LoadTypeIconsPerBattler(battler, position); +} + +static void LoadTypeSpritesAndPalettes(void) +{ + if (IndexOfSpritePaletteTag(TYPE_ICON_TAG) != UCHAR_MAX) + return; + + LoadCompressedSpriteSheet(&sSpriteSheet_TypeIcons1); + LoadCompressedSpriteSheet(&sSpriteSheet_TypeIcons2); + LoadCompressedSpritePalette(&sTypeIconPal1); + LoadCompressedSpritePalette(&sTypeIconPal2); +} + +static void LoadTypeIconsPerBattler(u32 battler, u32 position) +{ + u32 typeNum, types[2]; + u32 battlerId = GetBattlerAtPosition(position); + bool32 useDoubleBattleCoords = UseDoubleBattleCoords(battlerId); + + if (!IsBattlerAlive(battlerId)) + return; + + for (typeNum = 0; typeNum < 2; ++typeNum) + types[typeNum] = GetMonPublicType(battlerId, typeNum); + + for (typeNum = 0; typeNum < 2; ++typeNum) + CreateSpriteFromType(position, useDoubleBattleCoords, types, typeNum, battler); +} + +static bool32 UseDoubleBattleCoords(u32 position) +{ + if (!IsDoubleBattle()) + return FALSE; + + if ((position == B_POSITION_PLAYER_LEFT) && (gBattleMons[B_POSITION_PLAYER_RIGHT].species == SPECIES_NONE)) + return FALSE; + + if ((position == B_POSITION_OPPONENT_LEFT) && (gBattleMons[B_POSITION_OPPONENT_RIGHT].species == SPECIES_NONE)) + return FALSE; + + return TRUE; +} + +static u32 GetMonPublicType(u32 battlerId, u32 typeNum) +{ + struct Pokemon* mon = GetBattlerData(battlerId); + u32 monSpecies = GetMonData(mon,MON_DATA_SPECIES,NULL); + struct Pokemon* monIllusion; + u32 illusionSpecies; + + if (ShouldHideUncaughtType(monSpecies)) + return TYPE_MYSTERY; + + monIllusion = GetIllusionMonPtr(battlerId); + illusionSpecies = GetMonData(monIllusion,MON_DATA_SPECIES,NULL); + + if (GetActiveGimmick(battlerId) == GIMMICK_TERA) + return GetMonDefensiveTeraType(mon,monIllusion,battlerId,typeNum,illusionSpecies,monSpecies); + + if (IsIllusionActiveAndTypeUnchanged(monIllusion,monSpecies, battlerId)) + return gSpeciesInfo[illusionSpecies].types[typeNum]; + + return gBattleMons[battlerId].types[typeNum]; +} + +static bool32 ShouldHideUncaughtType(u32 species) +{ + if (B_SHOW_TYPES != SHOW_TYPES_CAUGHT) + return FALSE; + + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species),FLAG_GET_CAUGHT)) + return FALSE; + + return TRUE; +} + +static u32 GetMonDefensiveTeraType(struct Pokemon * mon, struct Pokemon* monIllusion, u32 battlerId, u32 typeNum, u32 illusionSpecies, u32 monSpecies) +{ + u32 teraType = GetBattlerTeraType(battlerId); + u32 targetSpecies; + + if (teraType != TYPE_STELLAR) + return teraType; + + targetSpecies = (monIllusion != NULL) ? illusionSpecies : monSpecies; + + return gSpeciesInfo[targetSpecies].types[typeNum]; +} + +static u32 IsIllusionActiveAndTypeUnchanged(struct Pokemon* monIllusion, u32 monSpecies, u32 battlerId) +{ + u32 typeNum; + + if (monIllusion == NULL) + return FALSE; + + for (typeNum = 0; typeNum < 2; typeNum++) + if (gSpeciesInfo[monSpecies].types[typeNum] != gBattleMons[battlerId].types[typeNum]) + return FALSE; + + return TRUE; +} + +static void CreateSpriteFromType(u32 position, bool32 useDoubleBattleCoords, u32 types[], u32 typeNum, u32 battler) +{ + s32 x = 0, y = 0; + + if (ShouldSkipSecondType(types, typeNum)) + return; + + SetTypeIconXY(&x, &y, position, useDoubleBattleCoords, typeNum); + + CreateSpriteAndSetTypeSpriteAttributes(types[typeNum], x, y, position, battler, useDoubleBattleCoords); +} + +static bool32 ShouldSkipSecondType(u32 types[], u32 typeNum) +{ + if (!typeNum) + return FALSE; + + if (types[0] != types[1]) + return FALSE; + + return TRUE; +} + +static void SetTypeIconXY(s32* x, s32* y, u32 position, bool32 useDoubleBattleCoords, u32 typeNum) +{ + *x = sTypeIconPositions[position][useDoubleBattleCoords].x; + *y = sTypeIconPositions[position][useDoubleBattleCoords].y + (11 * typeNum); +} + +static void CreateSpriteAndSetTypeSpriteAttributes(u32 type, u32 x, u32 y, u32 position, u32 battler, bool32 useDoubleBattleCoords) +{ + struct Sprite* sprite; + const struct SpriteTemplate* spriteTemplate = gTypesInfo[type].useSecondTypeIconPalette ? &sSpriteTemplate_TypeIcons2 : &sSpriteTemplate_TypeIcons1; + u32 spriteId = CreateSpriteAtEnd(spriteTemplate, x, y, UCHAR_MAX); + + if (spriteId == MAX_SPRITES) + return; + + sprite = &gSprites[spriteId]; + sprite->tMonPosition = position; + sprite->tBattlerId = battler; + sprite->tVerticalPosition = y; + + sprite->hFlip = ShouldFlipTypeIcon(useDoubleBattleCoords, position, type); + + StartSpriteAnim(sprite, type); +} + +static bool32 ShouldFlipTypeIcon(bool32 useDoubleBattleCoords, u32 position, u32 typeId) +{ + bool32 side = (useDoubleBattleCoords) ? B_SIDE_OPPONENT : B_SIDE_PLAYER; + + if (GetBattlerSide(GetBattlerAtPosition(position)) != side) + return FALSE; + + return !gTypesInfo[typeId].isSpecialCaseType; +} + +static void SpriteCB_TypeIcon(struct Sprite* sprite) +{ + u32 position = sprite->tMonPosition; + u32 battlerId = sprite->tBattlerId; + bool32 useDoubleBattleCoords = UseDoubleBattleCoords(GetBattlerAtPosition(position)); + + if (sprite->tHideIconTimer == NUM_FRAMES_HIDE_TYPE_ICON) + { + DestroyTypeIcon(sprite); + return; + } + + if (ShouldHideTypeIcon(battlerId)) + { + sprite->x += GetTypeIconHideMovement(useDoubleBattleCoords, position); + ++sprite->tHideIconTimer; + return; + } + + sprite->x += GetTypeIconSlideMovement(useDoubleBattleCoords,position, sprite->x); + sprite->y = GetTypeIconBounceMovement(sprite->tVerticalPosition,position); +} + +static const u32 typeIconTags[] = +{ + TYPE_ICON_TAG, + TYPE_ICON_TAG_2 +}; + +static void DestroyTypeIcon(struct Sprite* sprite) +{ + u32 spriteId, tag; + + DestroySpriteAndFreeResources(sprite); + + for (spriteId = 0; spriteId < MAX_SPRITES; ++spriteId) + { + if (!gSprites[spriteId].inUse) + continue; + + for (tag = 0; tag < 2; tag++) + { + if (gSprites[spriteId].template->paletteTag == typeIconTags[tag]) + return; + + if (gSprites[spriteId].template->tileTag == typeIconTags[tag]) + return; + } + } + + FreeAllTypeIconResources(); +} + +static void FreeAllTypeIconResources(void) +{ + u32 tag; + + for (tag = 0; tag < 2; tag++) + { + FreeSpriteTilesByTag(typeIconTags[tag]); + FreeSpritePaletteByTag(typeIconTags[tag]); + } +} + +static bool32 ShouldHideTypeIcon(u32 battlerId) +{ + return gBattlerControllerFuncs[battlerId] != PlayerHandleChooseMove + && gBattlerControllerFuncs[battlerId] != HandleInputChooseMove + && gBattlerControllerFuncs[battlerId] != HandleChooseMoveAfterDma3 + && gBattlerControllerFuncs[battlerId] != HandleInputChooseMove + && gBattlerControllerFuncs[battlerId] != HandleInputChooseTarget + && gBattlerControllerFuncs[battlerId] != HandleMoveSwitching + && gBattlerControllerFuncs[battlerId] != HandleInputChooseMove; +} + +static s32 GetTypeIconHideMovement(bool32 useDoubleBattleCoords, u32 position) +{ + if (useDoubleBattleCoords) + { + if (position == B_POSITION_PLAYER_LEFT || position == B_POSITION_PLAYER_RIGHT) + return 1; + else + return -1; + } + + if (position == B_POSITION_PLAYER_LEFT) + return -1; + else + return 1; +} + +static s32 GetTypeIconSlideMovement(bool32 useDoubleBattleCoords, u32 position, s32 xPos) +{ + if (useDoubleBattleCoords) + { + switch (position) + { + case B_POSITION_PLAYER_LEFT: + case B_POSITION_PLAYER_RIGHT: + if (xPos > sTypeIconPositions[position][useDoubleBattleCoords].x - 10) + return -1; + break; + default: + case B_POSITION_OPPONENT_LEFT: + case B_POSITION_OPPONENT_RIGHT: + if (xPos < sTypeIconPositions[position][useDoubleBattleCoords].x + 10) + return 1; + break; + } + return 0; + } + + if (position == B_POSITION_PLAYER_LEFT) + { + if (xPos < sTypeIconPositions[position][useDoubleBattleCoords].x + 10) + return 1; + } + else + { + if (xPos > sTypeIconPositions[position][useDoubleBattleCoords].x - 10) + return -1; + } + return 0; +} + +static s32 GetTypeIconBounceMovement(s32 originalY, u32 position) +{ + struct Sprite* healthbox = &gSprites[gHealthboxSpriteIds[GetBattlerAtPosition(position)]]; + return originalY + healthbox->y2; +} + diff --git a/sym_bss.txt b/sym_bss.txt deleted file mode 100644 index 3a23e747890e..000000000000 --- a/sym_bss.txt +++ /dev/null @@ -1,63 +0,0 @@ - .include "src/main.o" - .include "gflib/malloc.o" - .include "gflib/dma3_manager.o" - .include "gflib/gpu_regs.o" - .include "gflib/bg.o" - .include "gflib/text.o" - .include "gflib/sprite.o" - .include "src/link.o" - .include "src/AgbRfu_LinkManager.o" - .include "src/link_rfu_3.o" - .include "src/link_rfu_2.o" - .include "src/union_room.o" - .include "src/wireless_communication_status_screen.o" - .include "src/union_room_battle.o" - .include "src/dodrio_berry_picking.o" - .include "src/rtc.o" - .include "src/main_menu.o" - .include "src/digit_obj_util.o" - .include "src/egg_hatch.o" - .include "src/berry_blender.o" - .include "src/play_time.o" - .include "src/overworld.o" - .include "src/field_camera.o" - .include "src/script.o" - .include "src/scrcmd.o" - .include "src/tileset_anims.o" - .include "src/palette.o" - .include "src/sound.o" - .include "src/field_weather.o" - .include "src/field_effect.o" - .include "src/pokemon_storage_system.o" - .include "src/fldeff_cut.o" - .include "src/script_menu.o" - .include "src/record_mixing.o" - .include "src/tv.o" - .include "src/mauville_old_man.o" - .include "src/menu_helpers.o" - .include "src/region_map.o" - .include "src/slot_machine.o" - .include "src/contest_painting.o" - .include "src/starter_choose.o" - .include "src/pokedex_area_screen.o" - .include "src/battle_transition.o" - .include "src/pokemon_animation.o" - .include "src/recorded_battle.o" - .include "src/battle_factory_screen.o" - .include "src/battle_factory.o" - .include "src/battle_pike.o" - .include "src/battle_tent.o" - .include "src/multiboot.o" - .include "src/mirage_tower.o" - .include "src/berry_fix_program.o" - .include "src/pokenav_conditions_gfx.o" - .include "src/pokenav_ribbons_summary.o" - .include "src/ereader_helpers.o" - .include "src/faraway_island.o" - .include "src/m4a_1.o" - .include "data/sound_data.o" - .include "src/agb_flash.o" - .include "src/siirtc.o" - .include "*libgcc.a:dp-bit.o" - .include "*libgcc.a:fp-bit.o" - .include "*libc.a:syscalls.o" diff --git a/sym_common.txt b/sym_common.txt deleted file mode 100644 index 170aee2f42a4..000000000000 --- a/sym_common.txt +++ /dev/null @@ -1,83 +0,0 @@ - .space 0x8 - .include "main.o" - @ ../gflib/bg.o - .align 2 -gWindowTileAutoAllocEnabled: - .space 4 - @ ../gflib/window.o - .align 4 -gTransparentTileNumber: - .space 1 - .align 4 -gWindowBgTilemapBuffers: - .space 16 - @ ../gflib/text.o - .align 4 -gFonts: - .space 4 - .align 2 -gDisableTextPrinters: - .space 1 - .align 4 -gCurGlyph: - .space 132 - .align 2 -gTextFlags: - .space 4 - @ ../gflib/sprite.o - .align 2 -gOamMatrixAllocBitmap: - .space 4 - .align 2 -gReservedSpritePaletteCount: - .space 1 - .align 4 - .include "link.o" - .include "AgbRfu_LinkManager.o" - .include "link_rfu_2.o" - .include "rtc.o" - .include "battle_main.o" - .include "battle_controllers.o" - .include "random.o" - .include "load_save.o" - .include "berry_blender.o" - .include "overworld.o" - .include "fieldmap.o" - .include "field_camera.o" - .include "field_control_avatar.o" - .include "start_menu.o" - .include "sound.o" - .include "task.o" - .include "trainer_see.o" - .include "pokedex.o" - .include "contest.o" - .include "tv.o" - .include "mauville_old_man.o" - .include "image_processing_effects.o" - - .space 0x4 - - .include "contest_painting.o" - .include "field_specials.o" - .include "evolution_scene.o" - .include "pokedex_cry_screen.o" - .include "save.o" - .include "battle_tower.o" - .include "intro.o" - .include "battle_anim_throw.o" - .include "battle_factory_screen.o" - .include "apprentice.o" - - .space 0x8 - - .include "list_menu.o" - .include "party_menu.o" - - .space 0x44 - - .include "ereader_screen.o" - .include "m4a.o" - .include "agb_flash.o" - .include "librfu_stwi.o" - .include "librfu_rfu.o" - .include "librfu_sio32id.o" diff --git a/sym_ewram.txt b/sym_ewram.txt deleted file mode 100644 index 3123b3388aa1..000000000000 --- a/sym_ewram.txt +++ /dev/null @@ -1,154 +0,0 @@ - .include "gflib/malloc.o" - .include "src/decompress.o" - .include "src/main.o" - .include "gflib/window.o" - .include "gflib/text.o" - .include "gflib/sprite.o" - .include "gflib/string_util.o" - .include "src/link.o" - .include "src/AgbRfu_LinkManager.o" - .include "src/link_rfu_3.o" - .include "src/link_rfu_2.o" - .include "src/union_room.o" - .include "src/mystery_gift_menu.o" - .include "src/union_room_player_avatar.o" - .include "src/wireless_communication_status_screen.o" - .include "src/union_room_battle.o" - .include "src/mystery_gift.o" - .include "src/mystery_gift_view.o" - .include "src/mystery_gift_server.o" - .include "src/mystery_gift_client.o" - .include "src/union_room_chat.o" - .include "src/berry_crush.o" - .include "src/berry_powder.o" - .include "src/dodrio_berry_picking.o" - .include "src/pokemon_jump.o" - .include "src/main_menu.o" - .include "src/battle_controllers.o" - .include "src/digit_obj_util.o" - .include "src/battle_main.o" - .include "src/pokemon.o" - .include "src/random.o" - .include "src/daycare.o" - .include "src/load_save.o" - .include "src/trade.o" - .include "src/berry_blender.o" - .include "src/new_game.o" - .include "src/overworld.o" - .include "src/fieldmap.o" - .include "src/field_camera.o" - .include "src/field_player_avatar.o" - .include "src/event_object_movement.o" - .include "src/field_message_box.o" - .include "src/scrcmd.o" - .include "src/field_control_avatar.o" - .include "src/event_data.o" - .include "src/start_menu.o" - .include "src/tileset_anims.o" - .include "src/palette.o" - .include "src/sound.o" - .include "src/battle_anim.o" - .include "src/battle_anim_mons.o" - - .space 0xC - .include "src/field_weather.o" - .include "src/field_weather_effect.o" - .include "src/battle_setup.o" - .include "src/trainer_see.o" - .include "src/wild_encounter.o" - .include "src/field_effect.o" - .include "src/scanline_effect.o" - .include "src/option_menu.o" - .include "src/pokedex.o" - .include "src/trainer_card.o" - .include "src/frontier_pass.o" - .include "src/pokemon_storage_system.o" - .include "src/script_movement.o" - .include "src/fldeff_cut.o" - .include "src/map_name_popup.o" - .include "src/item.o" - .include "src/contest.o" - .include "src/shop.o" - .include "src/fldeff_escalator.o" - .include "src/script_menu.o" - .include "src/naming_screen.o" - .include "src/money.o" - .include "src/record_mixing.o" - .include "src/secret_base.o" - .include "src/tv.o" - .include "src/contest_util.o" - .include "src/rotating_gate.o" - .include "src/safari_zone.o" - .include "src/item_use.o" - .include "src/battle_anim_effects_1.o" - .include "src/battle_anim_dragon.o" - .include "src/battle_anim_utility_funcs.o" - .include "src/battle_intro.o" - .include "src/easy_chat.o" - .include "src/mon_markings.o" - .include "src/mauville_old_man.o" - .include "src/mail.o" - .include "src/menu_helpers.o" - .include "src/region_map.o" - .include "src/decoration.o" - .include "src/slot_machine.o" - .include "src/battle_ai_main.o" - .include "src/fldeff_misc.o" - .include "src/pokeblock.o" - .include "src/field_specials.o" - .include "src/battle_records.o" - .include "src/pokedex_area_screen.o" - .include "src/evolution_scene.o" - .include "src/roulette.o" - .include "src/pokedex_cry_screen.o" - .include "src/coins.o" - .include "src/battle_transition.o" - .include "src/battle_message.o" - .include "src/cable_car.o" - .include "src/confetti_util.o" - .include "src/save.o" - .include "src/mystery_event_script.o" - .include "src/move_relearner.o" - .include "src/decoration_inventory.o" - .include "src/roamer.o" - .include "src/battle_tower.o" - .include "src/use_pokeblock.o" - .include "src/player_pc.o" - .include "src/intro.o" - .include "src/field_region_map.o" - .include "src/hall_of_fame.o" - .include "src/credits.o" - .include "src/lottery_corner.o" - .include "src/diploma.o" - .include "src/berry_tag_screen.o" - .include "src/mystery_event_menu.o" - .include "src/save_failed_screen.o" - .include "src/braille_puzzles.o" - .include "src/pokeblock_feed.o" - .include "src/intro_credits_graphics.o" - .include "src/recorded_battle.o" - .include "src/trainer_pokemon_sprites.o" - .include "src/lilycove_lady.o" - .include "src/battle_dome.o" - .include "src/match_call.o" - .include "src/menu.o" - .include "src/battle_factory_screen.o" - .include "src/rotating_tile_puzzle.o" - .include "src/item_menu.o" - .include "src/list_menu.o" - .include "src/dynamic_placeholder_text_util.o" - .include "src/item_icon.o" - .include "src/party_menu.o" - .include "src/mirage_tower.o" - .include "src/pokemon_summary_screen.o" - .include "src/pokedex_area_region_map.o" - .include "src/battle_pyramid_bag.o" - .include "src/pokenav.o" - .include "src/pokenav_list.o" - .include "src/menu_specialized.o" - .include "src/faraway_island.o" - .include "src/trainer_hill.o" - .include "src/rayquaza_scene.o" - .include "src/debug.o" - .include "src/battle_controller_player.o" - .include "src/pokedex_plus_hgss.o" diff --git a/test/battle/ability/adaptability.c b/test/battle/ability/adaptability.c new file mode 100644 index 000000000000..fecdc6b7e26f --- /dev/null +++ b/test/battle/ability/adaptability.c @@ -0,0 +1,46 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Adaptability increases same-type attack bonus from x1.5 to x2"); + +SINGLE_BATTLE_TEST("(TERA) Terastallizing into a different type with Adaptability gives 2.0x STAB", s16 damage) +{ + bool32 tera; + PARAMETRIZE { tera = GIMMICK_NONE; } + PARAMETRIZE { tera = GIMMICK_TERA; } + GIVEN { + PLAYER(SPECIES_CRAWDAUNT) { Ability(ABILITY_ADAPTABILITY); TeraType(TYPE_NORMAL); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_HEADBUTT, gimmick: tera); } + } SCENE { + MESSAGE("Crawdaunt used Headbutt!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_HEADBUTT, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + // The jump from no STAB to 2.0x STAB is a 2.0x boost. + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("(TERA) Terastallizing into the same type with Adaptability gives 2.25x STAB", s16 damage) +{ + bool32 tera; + PARAMETRIZE { tera = GIMMICK_NONE; } + PARAMETRIZE { tera = GIMMICK_TERA; } + GIVEN { + PLAYER(SPECIES_CRAWDAUNT) { Ability(ABILITY_ADAPTABILITY); TeraType(TYPE_WATER); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_WATER_PULSE, gimmick: tera); } + } SCENE { + MESSAGE("Crawdaunt used Water Pulse!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PULSE, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + // The jump from 2x STAB to 2.25x STAB is a 1.125x boost. + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.125), results[1].damage); + } +} + +TO_DO_BATTLE_TEST("Adaptability does not affect Stellar-type moves"); diff --git a/test/battle/ability/aerilate.c b/test/battle/ability/aerilate.c new file mode 100644 index 000000000000..8a5f889a662a --- /dev/null +++ b/test/battle/ability/aerilate.c @@ -0,0 +1,33 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL); + ASSUME(gMovesInfo[MOVE_TACKLE].power > 0); +} + +SINGLE_BATTLE_TEST("Aerilate turns a Normal-type move into Flying-type move") +{ + GIVEN { + PLAYER(SPECIES_MEGANIUM); + OPPONENT(SPECIES_SALAMENCE) { Item(ITEM_SALAMENCITE); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE, gimmick: GIMMICK_MEGA); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + MESSAGE("It's super effective!"); + } +} + +TO_DO_BATTLE_TEST("Aerilate can not turn certain moves into Flying type moves"); +TO_DO_BATTLE_TEST("Aerilate boosts power of affected moves by 20% (Gen7+)"); +TO_DO_BATTLE_TEST("Aerilate boosts power of affected moves by 30% (Gen6)"); + +// Gen 6-7 +TO_DO_BATTLE_TEST("Aerilate overrides Electrify (Gen6-7)"); +TO_DO_BATTLE_TEST("Aerilate overrides Ion Deluge (Gen6-7)"); +// Gen 8+ +//TO_DO_BATTLE_TEST("Aerilate doesn't override Electrify (Gen8+)"); // No mon with Aerilate exists in Gen8+, but probably behaves similar to Pixilate, which does. +//TO_DO_BATTLE_TEST("Aerilate doesn't override Ion Deluge (Gen8+)"); // Ion Deluge doesn't exist in Gen 8+, but we probably could assume it behaves similar to under Electrify. TODO: Test by hacking SV. diff --git a/test/battle/ability/aftermath.c b/test/battle/ability/aftermath.c new file mode 100644 index 000000000000..65c0be7dfd2f --- /dev/null +++ b/test/battle/ability/aftermath.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Aftermath damages the attacker by 1/4th of its max HP if they faint the target has this ability by a contact move"); diff --git a/test/battle/ability/air_lock.c b/test/battle/ability/air_lock.c new file mode 100644 index 000000000000..0201e86a20fb --- /dev/null +++ b/test/battle/ability/air_lock.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +// Tests for Air Lock are handled in test/battle/ability/cloud_nine.c diff --git a/test/battle/ability/analytic.c b/test/battle/ability/analytic.c new file mode 100644 index 000000000000..44c42ae2d59e --- /dev/null +++ b/test/battle/ability/analytic.c @@ -0,0 +1,11 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Analytic increases the power of moves by 30% if it's the last one that uses its move"); +TO_DO_BATTLE_TEST("Analytic takes into account modifications to speeed an priority (Gen 5-8)"); //Eg. Paralysis, Power Weight, Stall +TO_DO_BATTLE_TEST("Analytic does not take into account modifications to speeed an priority (Gen 8)"); //Eg. Paralysis, Power Weight, Stall +TO_DO_BATTLE_TEST("Analytic takes into account the turn order of what fainted Pokémon would've moved"); + +// Triple Battles needed to test +//TO_DO_BATTLE_TEST("If the Pokémon with Analytic is targeting a Pokémon in a flank position that chooses to switch with its ally in the middle, its move's power will always be normal when it attacks the Pokémon that is shifted into the flank position"); +//TO_DO_BATTLE_TEST("If the Pokémon with Analytic targets a Pokémon in the middle whose ally on a flank chooses to shift into the middle position, its move's power still depends on whether the Pokémon that was in the middle (and is now on a flank) has acted when the Pokémon with Analytic uses its move"); diff --git a/test/battle/ability/anger_point.c b/test/battle/ability/anger_point.c index 0b13b9df4bcf..7cb283426a0f 100644 --- a/test/battle/ability/anger_point.c +++ b/test/battle/ability/anger_point.c @@ -47,7 +47,9 @@ SINGLE_BATTLE_TEST("Anger Point does not trigger when already at maximum Attack } } -SINGLE_BATTLE_TEST("Anger Point does not trigger when a substitute takes the hit") +TO_DO_BATTLE_TEST("Anger Point triggers when a substitute takes the hit (Gen4)"); + +SINGLE_BATTLE_TEST("Anger Point does not trigger when a substitute takes the hit (Gen5+)") { ASSUME(gMovesInfo[MOVE_FROST_BREATH].alwaysCriticalHit); ASSUME(gMovesInfo[MOVE_SUBSTITUTE].effect == EFFECT_SUBSTITUTE); diff --git a/test/battle/ability/anger_shell.c b/test/battle/ability/anger_shell.c index f0d11d757649..c5b490216b2f 100644 --- a/test/battle/ability/anger_shell.c +++ b/test/battle/ability/anger_shell.c @@ -1,7 +1,7 @@ #include "global.h" #include "test/battle.h" -SINGLE_BATTLE_TEST("Anger Shell activates only if the target had more than 50% of its hp") +SINGLE_BATTLE_TEST("Anger Shell activates only if the target had more than 50% of its HP") { bool32 activates = FALSE; u16 maxHp = 500, hp = 0; diff --git a/test/battle/ability/anticipation.c b/test/battle/ability/anticipation.c new file mode 100644 index 000000000000..a15ff153d9a9 --- /dev/null +++ b/test/battle/ability/anticipation.c @@ -0,0 +1,24 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Anticipation causes notifies if an opponent has a super-effective move"); +TO_DO_BATTLE_TEST("Anticipation causes notifies if an opponent has a One-hit KO move"); +TO_DO_BATTLE_TEST("Anticipation causes notifies if an opponent has a Self-Destruct or Explosion (Gen4)"); +TO_DO_BATTLE_TEST("Anticipation treats Self-Destruct and Explosion like all other Normal types (Gen5+)"); + +TO_DO_BATTLE_TEST("Anticipation considers Scrappy and Normalize into their effectiveness (Gen4)"); +TO_DO_BATTLE_TEST("Anticipation doesn't consider Scrappy and Normalize into their effectiveness (Gen5+)"); +TO_DO_BATTLE_TEST("Anticipation considers Gravity into their effectiveness (Gen4)"); +TO_DO_BATTLE_TEST("Anticipation doesn't consider Gravity into their effectiveness (Gen5+)"); +TO_DO_BATTLE_TEST("Anticipation doesn't trigger from Counter, Metal Burst or Mirror Coat (Gen4)"); +TO_DO_BATTLE_TEST("Anticipation counts Counter, Metal Burst or Mirror Coat as attacking moves of their types (Gen5+)"); +TO_DO_BATTLE_TEST("Anticipation considers Synchronoise as an ordinary Psychic-type move"); +TO_DO_BATTLE_TEST("Anticipation considers Freeze-Dry as an ordinary Ice-type move"); +TO_DO_BATTLE_TEST("Anticipation considers Flying Press as an ordinary Fighting-type move"); +TO_DO_BATTLE_TEST("Anticipation considers Aura Wheel as an ordinary Electric-type move"); +TO_DO_BATTLE_TEST("Anticipation considers Inverse Battle types"); //Check with Normal-type moves +TO_DO_BATTLE_TEST("Anticipation treats dynamic move types as their base type (Normal)"); // Judgment, Weather Ball, Natural Gift, Techno Blast, Revelation Dance, Multi Attack +TO_DO_BATTLE_TEST("Anticipation treats Hidden Power as Normal Type (Gen4-5)"); +TO_DO_BATTLE_TEST("Anticipation treats Hidden Power as its dynamic type (Gen6+)"); +TO_DO_BATTLE_TEST("Anticipation does not consider Strong Winds on type matchups"); +TO_DO_BATTLE_TEST("Anticipation does not consider ate-abilities"); diff --git a/test/battle/ability/arena_trap.c b/test/battle/ability/arena_trap.c new file mode 100644 index 000000000000..ef0d5b7d8cb6 --- /dev/null +++ b/test/battle/ability/arena_trap.c @@ -0,0 +1,11 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Arena Trap prevents grounded adjacent opponents from switching out"); +TO_DO_BATTLE_TEST("Arena Trap doesn't prevent switch outs if the Pokémon is switched in the same turn the opponent decided to switch out"); +TO_DO_BATTLE_TEST("Arena Trap doesn't prevent switch outs via moves that switch out"); // Baton Pass, U-Turn, Volt Switch, Flip Turn, Parting Shot +TO_DO_BATTLE_TEST("Arena Trap doesn't prevent switch outs via Shed Shell, but not via Teleport"); +TO_DO_BATTLE_TEST("Arena Trap doesn't prevent switch outs via Run Away"); +TO_DO_BATTLE_TEST("Arena Trap doesn't prevent switch outs via Smoke Ball"); +TO_DO_BATTLE_TEST("Arena Trap prevents switch outs from Ghost-type Pokémon (Gen3-5)"); +TO_DO_BATTLE_TEST("Arena Trap doesn't prevent switch outs from Ghost-type Pokémon (Gen6+)"); diff --git a/test/battle/ability/aroma_veil.c b/test/battle/ability/aroma_veil.c new file mode 100644 index 000000000000..dc53fa149225 --- /dev/null +++ b/test/battle/ability/aroma_veil.c @@ -0,0 +1,15 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Taunt"); +TO_DO_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Torment"); +TO_DO_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Encore"); +TO_DO_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Disable"); +TO_DO_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Cursed Body"); +TO_DO_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Heal Block"); +TO_DO_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Infatuation"); +TO_DO_BATTLE_TEST("Aroma Veil does not protect the Pokémon's side from Imprison"); + +// Marked in Bulbapedia as need of research +//TO_DO_BATTLE_TEST("Aroma Veil prevents G-Max Meltdown's effect"); +//TO_DO_BATTLE_TEST("Aroma Veil prevents Psychic Noise's effect"); diff --git a/test/battle/ability/as_one.c b/test/battle/ability/as_one.c new file mode 100644 index 000000000000..0d5367bf378e --- /dev/null +++ b/test/battle/ability/as_one.c @@ -0,0 +1,7 @@ +#include "global.h" +#include "test/battle.h" + +// Tests for the individual ability effects are handled in the following times: +// - Unnerve: test/battle/ability/unnerve.c +// - Chilling Neigh: test/battle/ability/chilling_neigh.c +// - Grim Neigh: test/battle/ability/grim_neigh.c diff --git a/test/battle/ability/aura_break.c b/test/battle/ability/aura_break.c new file mode 100644 index 000000000000..93b21421e419 --- /dev/null +++ b/test/battle/ability/aura_break.c @@ -0,0 +1,6 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Aura Break inverts Fairy Aura's effect"); +TO_DO_BATTLE_TEST("Aura Break inverts Dark Aura's effect"); +TO_DO_BATTLE_TEST("Aura Break ignores Mold Breaker abilities"); diff --git a/test/battle/ability/chilling_neigh.c b/test/battle/ability/chilling_neigh.c new file mode 100644 index 000000000000..03be77000b76 --- /dev/null +++ b/test/battle/ability/chilling_neigh.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +// Tests for Chilling Neigh are handled in test/battle/ability/moxie.c diff --git a/test/battle/ability/chlorophyll.c b/test/battle/ability/chlorophyll.c new file mode 100644 index 000000000000..493a197638be --- /dev/null +++ b/test/battle/ability/chlorophyll.c @@ -0,0 +1,6 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Chlorophyll doubles speed if it's sunny"); +TO_DO_BATTLE_TEST("Chlorophyll doesn't double speed if Cloud Nine/Air Lock is on the field"); +TO_DO_BATTLE_TEST("Chlorophyll doesn't double speed if they have an Utility Umbrella"); diff --git a/test/battle/ability/cloud_nine.c b/test/battle/ability/cloud_nine.c index dfe5611fc4be..887769a5ec7b 100644 --- a/test/battle/ability/cloud_nine.c +++ b/test/battle/ability/cloud_nine.c @@ -1,16 +1,41 @@ #include "global.h" #include "test/battle.h" -SINGLE_BATTLE_TEST("Cloud Nine prevents weather effects") +SINGLE_BATTLE_TEST("Cloud Nine/Air Lock prevent basic weather effects, but without them disappearing - Sandstorm") { + u32 species = 0, ability = 0; + PARAMETRIZE { species = SPECIES_PSYDUCK; ability = ABILITY_CLOUD_NINE; } + PARAMETRIZE { species = SPECIES_RAYQUAZA; ability = ABILITY_AIR_LOCK; } GIVEN { ASSUME(gMovesInfo[MOVE_SANDSTORM].effect == EFFECT_SANDSTORM); - PLAYER(SPECIES_PSYDUCK) { Ability(ABILITY_CLOUD_NINE); } + PLAYER(species) { Ability(ability); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_SANDSTORM); } TURN {} } SCENE { - NONE_OF { HP_BAR(player); } + ABILITY_POPUP(player, ability); + MESSAGE("The effects of weather disappeared."); + MESSAGE("Foe Wobbuffet used Sandstorm!"); + MESSAGE("The sandstorm rages."); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SANDSTORM_CONTINUES); + NONE_OF { + HP_BAR(player); + HP_BAR(opponent); + MESSAGE("Foe Wobbuffet is buffeted by the sandstorm!"); + } + MESSAGE("The sandstorm rages."); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SANDSTORM_CONTINUES); } } + +TO_DO_BATTLE_TEST("Cloud Nine/Air Lock prevent basic weather effects, but without them disappearing - Sun"); +TO_DO_BATTLE_TEST("Cloud Nine/Air Lock prevent basic weather effects, but without them disappearing - Rain"); +TO_DO_BATTLE_TEST("Cloud Nine/Air Lock prevent basic weather effects, but without them disappearing - Hail"); +TO_DO_BATTLE_TEST("Cloud Nine/Air Lock prevent basic weather effects, but without them disappearing - Snow"); +TO_DO_BATTLE_TEST("Cloud Nine/Air Lock prevent basic weather effects, but without them disappearing - Fog"); +TO_DO_BATTLE_TEST("Cloud Nine/Air Lock prevent basic weather effects, but without them disappearing - Primal Sun"); +TO_DO_BATTLE_TEST("Cloud Nine/Air Lock prevent basic weather effects, but without them disappearing - Primal Rain"); +TO_DO_BATTLE_TEST("Cloud Nine/Air Lock prevent basic weather effects, but without them disappearing - Strong Winds"); + +// Moves and abilities that are affected by weather should have new tests that check for Clould Nine/Air Lock, like Mold-Breaker Abilities diff --git a/test/battle/ability/damp.c b/test/battle/ability/damp.c index 9a3b795f2ae1..b567293aa09b 100644 --- a/test/battle/ability/damp.c +++ b/test/battle/ability/damp.c @@ -57,7 +57,7 @@ SINGLE_BATTLE_TEST("Damp prevents explosion-like moves from self") } } -SINGLE_BATTLE_TEST("Damp prevents damage from aftermath") +SINGLE_BATTLE_TEST("Damp prevents damage from Aftermath") { GIVEN { ASSUME(gMovesInfo[MOVE_TACKLE].makesContact); diff --git a/test/battle/ability/dancer.c b/test/battle/ability/dancer.c index f54f7ab76ae7..660a719c6928 100644 --- a/test/battle/ability/dancer.c +++ b/test/battle/ability/dancer.c @@ -126,3 +126,22 @@ DOUBLE_BATTLE_TEST("Dancer still triggers if another dancer flinches") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); } } + +SINGLE_BATTLE_TEST("Dancer-called attacks have their type updated") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_REVELATION_DANCE].danceMove == TRUE); + ASSUME(gMovesInfo[MOVE_REVELATION_DANCE].effect == EFFECT_REVELATION_DANCE); + PLAYER(SPECIES_TANGROWTH); + OPPONENT(SPECIES_ORICORIO_BAILE); + } WHEN { + TURN { MOVE(player, MOVE_REVELATION_DANCE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, player); + MESSAGE("It's not very effective…"); + ABILITY_POPUP(opponent, ABILITY_DANCER); + ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, opponent); + NOT MESSAGE("It's not very effective…"); + MESSAGE("It's super effective!"); + } +} diff --git a/test/battle/ability/defiant.c b/test/battle/ability/defiant.c index c756a63b160b..0e5b44cb6b0a 100644 --- a/test/battle/ability/defiant.c +++ b/test/battle/ability/defiant.c @@ -139,6 +139,65 @@ SINGLE_BATTLE_TEST("Defiant activates after Sticky Web lowers Speed") } } +SINGLE_BATTLE_TEST("Defiant doesn't activate after Sticky Web lowers Speed if Court Changed") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_MANKEY) { Ability(ABILITY_DEFIANT); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_STICKY_WEB); MOVE(opponent, MOVE_COURT_CHANGE); } + TURN { SWITCH(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_COURT_CHANGE, opponent); + // Switch-in - Sticky Web activates + SEND_IN_MESSAGE("Mankey"); + MESSAGE("Mankey was caught in a Sticky Web!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Mankey's Speed fell!"); + // Defiant doesn't activate + NONE_OF { + ABILITY_POPUP(player, ABILITY_DEFIANT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Mankey's Attack sharply rose!"); + } + } +} + +SINGLE_BATTLE_TEST("Defiant correctly activates after Sticky Web lowers Speed if Court Changed") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_MANKEY) { Ability(ABILITY_DEFIANT); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_STICKY_WEB); MOVE(opponent, MOVE_COURT_CHANGE); } + TURN { SWITCH(player, 1); } + TURN { MOVE(opponent, MOVE_GROWL);} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_COURT_CHANGE, opponent); + // Switch-in - Sticky Web activates + SEND_IN_MESSAGE("Mankey"); + MESSAGE("Mankey was caught in a Sticky Web!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Mankey's Speed fell!"); + // Defiant doesn't activate + NONE_OF { + ABILITY_POPUP(player, ABILITY_DEFIANT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Mankey's Attack sharply rose!"); + } + // Defiant triggers correctly after Sticky Web + ANIMATION(ANIM_TYPE_MOVE, MOVE_GROWL, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Mankey's Attack fell!"); + ABILITY_POPUP(player, ABILITY_DEFIANT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Mankey's Attack sharply rose!"); + } +} DOUBLE_BATTLE_TEST("Defiant is activated by Cotton Down for non-ally pokemon") { diff --git a/test/battle/ability/drought.c b/test/battle/ability/drought.c new file mode 100644 index 000000000000..bbe4dbe853a1 --- /dev/null +++ b/test/battle/ability/drought.c @@ -0,0 +1,5 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Drought sets up sun for 5 turns (Gen6+)"); +TO_DO_BATTLE_TEST("Drought sets up permanent sun (Gen3-5)"); diff --git a/test/battle/ability/dry_skin.c b/test/battle/ability/dry_skin.c index 368e4b80470b..5709a58a9448 100644 --- a/test/battle/ability/dry_skin.c +++ b/test/battle/ability/dry_skin.c @@ -15,6 +15,8 @@ SINGLE_BATTLE_TEST("Dry Skin causes 1/8th Max HP damage in Sun") } } +TO_DO_BATTLE_TEST("Dry Skin doesn't get damaged in Sun if Cloud Nine/Air Lock is on the field"); + SINGLE_BATTLE_TEST("Dry Skin heals 1/8th Max HP in Rain") { GIVEN { @@ -29,6 +31,8 @@ SINGLE_BATTLE_TEST("Dry Skin heals 1/8th Max HP in Rain") } } +TO_DO_BATTLE_TEST("Dry Skin doesn't heal in Rain if Cloud Nine/Air Lock is on the field"); + SINGLE_BATTLE_TEST("Dry Skin increases damage taken from Fire-type moves by 25%", s16 damage) { u32 ability; diff --git a/test/battle/ability/flower_gift.c b/test/battle/ability/flower_gift.c index 69a76b8e816c..68712641e09d 100644 --- a/test/battle/ability/flower_gift.c +++ b/test/battle/ability/flower_gift.c @@ -17,6 +17,8 @@ SINGLE_BATTLE_TEST("Flower Gift transforms Cherrim in harsh sunlight") } } +TO_DO_BATTLE_TEST("Flower Gift doesn't transform Cherrim if Cloud Nine/Air Lock is on the field"); + SINGLE_BATTLE_TEST("Flower Gift transforms Cherrim back to normal when weather changes") { GIVEN { @@ -61,6 +63,8 @@ SINGLE_BATTLE_TEST("Flower Gift transforms Cherrim back to normal when its abili } } +TO_DO_BATTLE_TEST("Forecast transforms Castform back to normal under Cloud Nine/Air Lock"); + DOUBLE_BATTLE_TEST("Flower Gift increases the attack of Cherrim and its allies by 1.5x", s16 damageL, s16 damageR) { bool32 sunny; diff --git a/test/battle/ability/forecast.c b/test/battle/ability/forecast.c index bcb800451025..ee41b19669de 100644 --- a/test/battle/ability/forecast.c +++ b/test/battle/ability/forecast.c @@ -264,12 +264,15 @@ SINGLE_BATTLE_TEST("Forecast transforms Castform back to normal when Sandstorm i } } -SINGLE_BATTLE_TEST("Forecast transforms Castform back to normal under Air Lock") +SINGLE_BATTLE_TEST("Forecast transforms Castform back to normal under Cloud Nine/Air Lock") { + u32 species = 0, ability = 0; + PARAMETRIZE { species = SPECIES_PSYDUCK; ability = ABILITY_CLOUD_NINE; } + PARAMETRIZE { species = SPECIES_RAYQUAZA; ability = ABILITY_AIR_LOCK; } GIVEN { PLAYER(SPECIES_CASTFORM_NORMAL) { Ability(ABILITY_FORECAST); } OPPONENT(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_RAYQUAZA); + OPPONENT(species) { Ability(ability); } } WHEN { TURN { MOVE(player, MOVE_RAIN_DANCE); } TURN { SWITCH(opponent, 1); } @@ -279,7 +282,7 @@ SINGLE_BATTLE_TEST("Forecast transforms Castform back to normal under Air Lock") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); MESSAGE("Castform transformed!"); // back to normal - ABILITY_POPUP(opponent, ABILITY_AIR_LOCK); + ABILITY_POPUP(opponent, ability); ABILITY_POPUP(player, ABILITY_FORECAST); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); MESSAGE("Castform transformed!"); diff --git a/test/battle/ability/ate_abilities.c b/test/battle/ability/galvanize.c similarity index 50% rename from test/battle/ability/ate_abilities.c rename to test/battle/ability/galvanize.c index 203452cc0152..55dfd7287a33 100644 --- a/test/battle/ability/ate_abilities.c +++ b/test/battle/ability/galvanize.c @@ -7,6 +7,19 @@ ASSUMPTIONS ASSUME(gMovesInfo[MOVE_TACKLE].power > 0); } +SINGLE_BATTLE_TEST("Galvanize turns a normal type move into Electric") +{ + GIVEN { + PLAYER(SPECIES_KRABBY); + OPPONENT(SPECIES_GEODUDE_ALOLAN) { Ability(ABILITY_GALVANIZE); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + MESSAGE("It's super effective!"); + } +} + SINGLE_BATTLE_TEST("Galvanize can not turn certain moves into Electric type moves") { u32 move; @@ -29,56 +42,7 @@ SINGLE_BATTLE_TEST("Galvanize can not turn certain moves into Electric type move } } -SINGLE_BATTLE_TEST("Galvanize turns a normal type move into Electric") -{ - GIVEN { - PLAYER(SPECIES_KRABBY); - OPPONENT(SPECIES_GEODUDE_ALOLAN) { Ability(ABILITY_GALVANIZE); } - } WHEN { - TURN { MOVE(opponent, MOVE_TACKLE); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); - MESSAGE("It's super effective!"); - } -} - -SINGLE_BATTLE_TEST("Pixilate turns a normal type move into Fairy") -{ - GIVEN { - PLAYER(SPECIES_DRAGONITE); - OPPONENT(SPECIES_ALTARIA) { Item(ITEM_ALTARIANITE); } - } WHEN { - TURN { MOVE(opponent, MOVE_TACKLE, gimmick: GIMMICK_MEGA); } - } SCENE { - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); - ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); - MESSAGE("It's super effective!"); - } -} - -SINGLE_BATTLE_TEST("Refrigerate turns a normal type move into Ice") -{ - GIVEN { - PLAYER(SPECIES_MEGANIUM); - OPPONENT(SPECIES_AMAURA) { Ability(ABILITY_REFRIGERATE); } - } WHEN { - TURN { MOVE(opponent, MOVE_TACKLE); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); - MESSAGE("It's super effective!"); - } -} - -SINGLE_BATTLE_TEST("Aerilate turns a normal type move into Flying") -{ - GIVEN { - PLAYER(SPECIES_MEGANIUM); - OPPONENT(SPECIES_SALAMENCE) { Item(ITEM_SALAMENCITE); } - } WHEN { - TURN { MOVE(opponent, MOVE_TACKLE, gimmick: GIMMICK_MEGA); } - } SCENE { - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); - ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); - MESSAGE("It's super effective!"); - } -} +TO_DO_BATTLE_TEST("Galvanize boosts power of affected moves by 20% (Gen7+)"); +TO_DO_BATTLE_TEST("Galvanize boosts power of affected moves by 30% (Gen6)"); +TO_DO_BATTLE_TEST("(DYNAMAX) Galvanize turns Max Strike into Max Lightning when not used by Gigantamax Pikachu/Toxtricity"); +//TO_DO_BATTLE_TEST("(DYNAMAX) Galvanize doesn't turn Max Strike into Max Lightning when used by Gigantamax Pikachu/Toxtricity, instead becoming G-Max Volt Crash/Stun Shock"); // Marked in Bulbapedia as "needs research", so this assumes that it behaves like Pixilate. diff --git a/test/battle/ability/grim_neigh.c b/test/battle/ability/grim_neigh.c new file mode 100644 index 000000000000..b4d82487d83e --- /dev/null +++ b/test/battle/ability/grim_neigh.c @@ -0,0 +1,109 @@ +#include "global.h" +#include "test/battle.h" + +DOUBLE_BATTLE_TEST("Grim Neigh raises Sp. Attack by one stage after directly causing a Pokemon to faint") +{ + u32 species = 0, ability = 0, abilityPopUp = 0; + PARAMETRIZE { species = SPECIES_SPECTRIER; ability = ABILITY_GRIM_NEIGH; abilityPopUp = ABILITY_GRIM_NEIGH; } + PARAMETRIZE { species = SPECIES_CALYREX_SHADOW_RIDER; ability = ABILITY_AS_ONE_SHADOW_RIDER; abilityPopUp = ABILITY_GRIM_NEIGH; } + GIVEN { + ASSUME(gMovesInfo[MOVE_DISCHARGE].target == MOVE_TARGET_FOES_AND_ALLY); + PLAYER(species) { Ability(ability); } + PLAYER(SPECIES_SNORUNT) { HP(1); } + OPPONENT(SPECIES_GLALIE) { HP(1); } + OPPONENT(SPECIES_ABRA) { HP(1); } + OPPONENT(SPECIES_ABRA); + } WHEN { + TURN { MOVE(playerLeft, MOVE_DISCHARGE); SEND_OUT(opponentLeft, 2); } + } SCENE { + int i; + + ANIMATION(ANIM_TYPE_MOVE, MOVE_DISCHARGE, playerLeft); + for (i = 0; i < 3; i++) { + ONE_OF { + MESSAGE("Snorunt fainted!"); + MESSAGE("Foe Glalie fainted!"); + MESSAGE("Foe Abra fainted!"); + } + ABILITY_POPUP(playerLeft, abilityPopUp); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + if (species == SPECIES_SPECTRIER) + MESSAGE("Spectrier's Grim Neigh raised its Sp. Atk!"); + else + MESSAGE("Calyrex's Grim Neigh raised its Sp. Atk!"); + } + } THEN { + EXPECT_EQ(playerLeft->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 3); + } +} + +DOUBLE_BATTLE_TEST("Grim Neigh does not trigger if Pokemon faint to indirect damage or damage from other Pokemon") +{ + u32 species = 0, ability = 0, abilityPopUp = 0; + PARAMETRIZE { species = SPECIES_SPECTRIER; ability = ABILITY_GRIM_NEIGH; abilityPopUp = ABILITY_GRIM_NEIGH; } + PARAMETRIZE { species = SPECIES_CALYREX_SHADOW_RIDER; ability = ABILITY_AS_ONE_SHADOW_RIDER; abilityPopUp = ABILITY_GRIM_NEIGH; } + GIVEN { + PLAYER(species) { Ability(ability); } + PLAYER(SPECIES_SNORUNT) { HP(1); Status1(STATUS1_POISON); } + OPPONENT(SPECIES_GLALIE) { HP(1); Status1(STATUS1_BURN); } + OPPONENT(SPECIES_ABRA) { HP(1); } + OPPONENT(SPECIES_ABRA); + } WHEN { + TURN { MOVE(playerRight, MOVE_QUICK_ATTACK, target: opponentRight); SEND_OUT(opponentLeft, 2); } + } SCENE { + int i; + + ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, playerRight); + for (i = 0; i < 3; i++) { + ONE_OF { + MESSAGE("Snorunt fainted!"); + MESSAGE("Foe Glalie fainted!"); + MESSAGE("Foe Abra fainted!"); + } + NONE_OF { + ABILITY_POPUP(playerLeft, abilityPopUp); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Salamence's Moxie raised its Sp. Atk!"); + MESSAGE("Spectrier's Grim Neigh raised its Sp. Atk!"); + MESSAGE("Calyrex's Grim Neigh raised its Sp. Atk!"); + } + } + } THEN { + EXPECT_EQ(playerLeft->statStages[STAT_SPATK], DEFAULT_STAT_STAGE); + } +} + +DOUBLE_BATTLE_TEST("Grim Neigh does not increase damage done by the same move that causes another Pokemon to faint") +{ + s16 damage[2]; + u32 species = 0, ability = 0, abilityPopUp = 0; + PARAMETRIZE { species = SPECIES_SPECTRIER; ability = ABILITY_GRIM_NEIGH; abilityPopUp = ABILITY_GRIM_NEIGH; } + PARAMETRIZE { species = SPECIES_CALYREX_SHADOW_RIDER; ability = ABILITY_AS_ONE_SHADOW_RIDER; abilityPopUp = ABILITY_GRIM_NEIGH; } + + KNOWN_FAILING; // Requires simultaneous damage implementation + GIVEN { + ASSUME(gMovesInfo[MOVE_DISCHARGE].target == MOVE_TARGET_FOES_AND_ALLY); + PLAYER(species) { Ability(ability); } + PLAYER(SPECIES_ABRA) { HP(1); } + OPPONENT(SPECIES_GLALIE); + OPPONENT(SPECIES_GLALIE); + OPPONENT(SPECIES_ABRA); + } WHEN { + TURN { MOVE(playerLeft, MOVE_DISCHARGE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DISCHARGE, playerLeft); + HP_BAR(opponentLeft, captureDamage: &damage[0]); + HP_BAR(playerRight); + MESSAGE("Abra fainted!"); + ABILITY_POPUP(playerLeft, abilityPopUp); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + if (species == SPECIES_SPECTRIER) + MESSAGE("Spectrier's Grim Neigh raised its Sp. Atk!"); + else + MESSAGE("Calyrex's Grim Neigh raised its Sp. Atk!"); + HP_BAR(opponentRight, captureDamage: &damage[1]); + } THEN { + EXPECT_EQ(playerLeft->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 1); + EXPECT_EQ(damage[0], damage[1]); + } +} diff --git a/test/battle/ability/harvest.c b/test/battle/ability/harvest.c index 9fb969b03621..b4783c4542fa 100644 --- a/test/battle/ability/harvest.c +++ b/test/battle/ability/harvest.c @@ -3,6 +3,7 @@ TO_DO_BATTLE_TEST("Harvest has a 50% chance to restore a Berry at the end of the turn"); TO_DO_BATTLE_TEST("Harvest always restores a Berry in Sunlight"); +TO_DO_BATTLE_TEST("Harvest doesn't always restore a Berry if Cloud Nine/Air Lock is on the field"); TO_DO_BATTLE_TEST("Harvest restores a Berry even after being switched out and back in"); TO_DO_BATTLE_TEST("Harvest restores a Berry consumed by Fling"); TO_DO_BATTLE_TEST("Harvest restores a Berry consumed by Natural Gift"); diff --git a/test/battle/ability/hydration.c b/test/battle/ability/hydration.c index 2dca490c02e5..7d16ad04ae8c 100644 --- a/test/battle/ability/hydration.c +++ b/test/battle/ability/hydration.c @@ -14,3 +14,5 @@ SINGLE_BATTLE_TEST("Hydration cures non-volatile Status conditions if it is rain STATUS_ICON(player, none: TRUE); } } + +TO_DO_BATTLE_TEST("Hydration doesn't cure status conditions if Cloud Nine/Air Lock is on the field"); diff --git a/test/battle/ability/ice_body.c b/test/battle/ability/ice_body.c index 1aa7c80a4d98..304059a00e69 100644 --- a/test/battle/ability/ice_body.c +++ b/test/battle/ability/ice_body.c @@ -26,3 +26,5 @@ SINGLE_BATTLE_TEST("Ice Body recovers 1/16th of Max HP in hail.") MESSAGE("Glalie's Ice Body healed it a little bit!"); } } + +TO_DO_BATTLE_TEST("Sand Rush doesn't recover HP if Cloud Nine/Air Lock is on the field"); diff --git a/test/battle/ability/ice_face.c b/test/battle/ability/ice_face.c new file mode 100644 index 000000000000..53917b5623a2 --- /dev/null +++ b/test/battle/ability/ice_face.c @@ -0,0 +1,9 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Ice Face blocks physical moves, changing Eiscue into its Noice Face form"); // Include Special move in test +TO_DO_BATTLE_TEST("Ice Face is restored if hail or snow begins while Noice Face Eiscue is out"); +TO_DO_BATTLE_TEST("Ice Face is restored if Noice Face Eiscue is sent in while hail or snow is active"); +TO_DO_BATTLE_TEST("Ice Face is not restored if Eiscue changes into Noice Face form while there's already hail"); +TO_DO_BATTLE_TEST("Ice Face form change persists after switching out"); +TO_DO_BATTLE_TEST("Ice Face doesn't transform Eiscue if Cloud Nine/Air Lock is on the field"); diff --git a/test/battle/ability/leaf_guard.c b/test/battle/ability/leaf_guard.c index 6c559ea48a4e..2c55236defb8 100644 --- a/test/battle/ability/leaf_guard.c +++ b/test/battle/ability/leaf_guard.c @@ -27,6 +27,8 @@ SINGLE_BATTLE_TEST("Leaf Guard prevents non-volatile status conditions in sun") } } +TO_DO_BATTLE_TEST("Leaf Guard doesn't prevent non-volatile status conditions if Cloud Nine/Air Lock is on the field"); + SINGLE_BATTLE_TEST("Leaf Guard prevents status conditions from Flame Orb and Toxic Orb") { u32 item; @@ -49,6 +51,8 @@ SINGLE_BATTLE_TEST("Leaf Guard prevents status conditions from Flame Orb and Tox } } +TO_DO_BATTLE_TEST("Leaf Guard doesn't prevent status conditions from Flame Orb and Toxic Orb if Cloud Nine/Air Lock is on the field"); + SINGLE_BATTLE_TEST("Leaf Guard prevents Rest during sun") { GIVEN { @@ -66,3 +70,5 @@ SINGLE_BATTLE_TEST("Leaf Guard prevents Rest during sun") } } } + +TO_DO_BATTLE_TEST("Leaf Guard doesn't prevent Rest if Cloud Nine/Air Lock is on the field"); diff --git a/test/battle/ability/moxie.c b/test/battle/ability/moxie.c index b60a11507acd..79b1fc989fa6 100644 --- a/test/battle/ability/moxie.c +++ b/test/battle/ability/moxie.c @@ -1,12 +1,15 @@ #include "global.h" #include "test/battle.h" -DOUBLE_BATTLE_TEST("Moxie raises Attack by one stage after directly causing a Pokemon to faint") +DOUBLE_BATTLE_TEST("Moxie/Chilling Neigh raises Attack by one stage after directly causing a Pokemon to faint") { - ASSUME(gMovesInfo[MOVE_EARTHQUAKE].target == MOVE_TARGET_FOES_AND_ALLY); - + u32 species = 0, ability = 0, abilityPopUp = 0; + PARAMETRIZE { species = SPECIES_SALAMENCE; ability = ABILITY_MOXIE; abilityPopUp = ABILITY_MOXIE; } + PARAMETRIZE { species = SPECIES_GLASTRIER; ability = ABILITY_CHILLING_NEIGH; abilityPopUp = ABILITY_CHILLING_NEIGH; } + PARAMETRIZE { species = SPECIES_CALYREX_ICE_RIDER; ability = ABILITY_AS_ONE_ICE_RIDER; abilityPopUp = ABILITY_CHILLING_NEIGH; } GIVEN { - PLAYER(SPECIES_SALAMENCE) { Ability(ABILITY_MOXIE); } + ASSUME(gMovesInfo[MOVE_EARTHQUAKE].target == MOVE_TARGET_FOES_AND_ALLY); + PLAYER(species) { Ability(ability); } PLAYER(SPECIES_SNORUNT) { HP(1); } OPPONENT(SPECIES_GLALIE) { HP(1); } OPPONENT(SPECIES_ABRA) { HP(1); } @@ -23,19 +26,28 @@ DOUBLE_BATTLE_TEST("Moxie raises Attack by one stage after directly causing a Po MESSAGE("Foe Glalie fainted!"); MESSAGE("Foe Abra fainted!"); } - ABILITY_POPUP(playerLeft, ABILITY_MOXIE); + ABILITY_POPUP(playerLeft, abilityPopUp); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); - MESSAGE("Salamence's Moxie raised its Attack!"); + if (species == SPECIES_SALAMENCE) + MESSAGE("Salamence's Moxie raised its Attack!"); + else if (species == SPECIES_GLASTRIER) + MESSAGE("Glastrier's Chilling Neigh raised its Attack!"); + else + MESSAGE("Calyrex's Chilling Neigh raised its Attack!"); } } THEN { EXPECT_EQ(playerLeft->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 3); } } -DOUBLE_BATTLE_TEST("Moxie does not trigger if Pokemon faint to indirect damage or damage from other Pokemon") +DOUBLE_BATTLE_TEST("Moxie/Chilling Neigh does not trigger if Pokemon faint to indirect damage or damage from other Pokemon") { + u32 species = 0, ability = 0, abilityPopUp = 0; + PARAMETRIZE { species = SPECIES_SALAMENCE; ability = ABILITY_MOXIE; abilityPopUp = ABILITY_MOXIE; } + PARAMETRIZE { species = SPECIES_GLASTRIER; ability = ABILITY_CHILLING_NEIGH; abilityPopUp = ABILITY_CHILLING_NEIGH; } + PARAMETRIZE { species = SPECIES_CALYREX_ICE_RIDER; ability = ABILITY_AS_ONE_ICE_RIDER; abilityPopUp = ABILITY_CHILLING_NEIGH; } GIVEN { - PLAYER(SPECIES_SALAMENCE) { Ability(ABILITY_MOXIE); } + PLAYER(species) { Ability(ability); } PLAYER(SPECIES_SNORUNT) { HP(1); Status1(STATUS1_POISON); } OPPONENT(SPECIES_GLALIE) { HP(1); Status1(STATUS1_BURN); } OPPONENT(SPECIES_ABRA) { HP(1); } @@ -53,9 +65,11 @@ DOUBLE_BATTLE_TEST("Moxie does not trigger if Pokemon faint to indirect damage o MESSAGE("Foe Abra fainted!"); } NONE_OF { - ABILITY_POPUP(playerLeft, ABILITY_MOXIE); + ABILITY_POPUP(playerLeft, abilityPopUp); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Salamence's Moxie raised its Attack!"); + MESSAGE("Glastrier's Chilling Neigh raised its Attack!"); + MESSAGE("Calyrex's Chilling Neigh raised its Attack!"); } } } THEN { @@ -63,12 +77,15 @@ DOUBLE_BATTLE_TEST("Moxie does not trigger if Pokemon faint to indirect damage o } } -SINGLE_BATTLE_TEST("Moxie does not trigger when already at maximum Attack stage") +SINGLE_BATTLE_TEST("Moxie/Chilling Neigh does not trigger when already at maximum Attack stage") { - ASSUME(gMovesInfo[MOVE_BELLY_DRUM].effect == EFFECT_BELLY_DRUM); - + u32 species = 0, ability = 0, abilityPopUp = 0; + PARAMETRIZE { species = SPECIES_SALAMENCE; ability = ABILITY_MOXIE; abilityPopUp = ABILITY_MOXIE; } + PARAMETRIZE { species = SPECIES_GLASTRIER; ability = ABILITY_CHILLING_NEIGH; abilityPopUp = ABILITY_CHILLING_NEIGH; } + PARAMETRIZE { species = SPECIES_CALYREX_ICE_RIDER; ability = ABILITY_AS_ONE_ICE_RIDER; abilityPopUp = ABILITY_CHILLING_NEIGH; } GIVEN { - PLAYER(SPECIES_SALAMENCE) { Ability(ABILITY_MOXIE); } + ASSUME(gMovesInfo[MOVE_BELLY_DRUM].effect == EFFECT_BELLY_DRUM); + PLAYER(species) { Ability(ability); } OPPONENT(SPECIES_SNORUNT) { HP(1); } OPPONENT(SPECIES_SNORUNT); } WHEN { @@ -77,28 +94,38 @@ SINGLE_BATTLE_TEST("Moxie does not trigger when already at maximum Attack stage" } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_BELLY_DRUM, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Salamence cut its own HP and maximized ATTACK!"); + if (species == SPECIES_SALAMENCE) + MESSAGE("Salamence cut its own HP and maximized ATTACK!"); + else if (species == SPECIES_GLASTRIER) + MESSAGE("Glastrier cut its own HP and maximized ATTACK!"); + else + MESSAGE("Calyrex cut its own HP and maximized ATTACK!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); MESSAGE("Foe Snorunt fainted!"); - NONE_OF { - ABILITY_POPUP(player, ABILITY_MOXIE); + NONE_OF { + ABILITY_POPUP(player, abilityPopUp); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Salamence's Moxie raised its Attack!"); + MESSAGE("Glastrier's Chilling Neigh raised its Attack!"); + MESSAGE("Calyrex's Chilling Neigh raised its Attack!"); } } THEN { EXPECT_EQ(player->statStages[STAT_ATK], MAX_STAT_STAGE); } } -DOUBLE_BATTLE_TEST("Moxie does not increase damage done by the same move that causes another Pokemon to faint") +DOUBLE_BATTLE_TEST("Moxie/Chilling Neigh does not increase damage done by the same move that causes another Pokemon to faint") { s16 damage[2]; - - ASSUME(gMovesInfo[MOVE_EARTHQUAKE].target == MOVE_TARGET_FOES_AND_ALLY); + u32 species = 0, ability = 0, abilityPopUp = 0; + PARAMETRIZE { species = SPECIES_SALAMENCE; ability = ABILITY_MOXIE; abilityPopUp = ABILITY_MOXIE; } + PARAMETRIZE { species = SPECIES_GLASTRIER; ability = ABILITY_CHILLING_NEIGH; abilityPopUp = ABILITY_CHILLING_NEIGH; } + PARAMETRIZE { species = SPECIES_CALYREX_ICE_RIDER; ability = ABILITY_AS_ONE_ICE_RIDER; abilityPopUp = ABILITY_CHILLING_NEIGH; } KNOWN_FAILING; // Requires simultaneous damage implementation GIVEN { - PLAYER(SPECIES_SALAMENCE) { Ability(ABILITY_MOXIE); } + ASSUME(gMovesInfo[MOVE_EARTHQUAKE].target == MOVE_TARGET_FOES_AND_ALLY); + PLAYER(species) { Ability(ability); } PLAYER(SPECIES_ABRA) { HP(1); } OPPONENT(SPECIES_GLALIE); OPPONENT(SPECIES_GLALIE); @@ -110,9 +137,14 @@ DOUBLE_BATTLE_TEST("Moxie does not increase damage done by the same move that ca HP_BAR(opponentLeft, captureDamage: &damage[0]); HP_BAR(playerRight); MESSAGE("Abra fainted!"); - ABILITY_POPUP(playerLeft, ABILITY_MOXIE); + ABILITY_POPUP(playerLeft, abilityPopUp); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); - MESSAGE("Salamence's Moxie raised its Attack!"); + if (species == SPECIES_SALAMENCE) + MESSAGE("Salamence's Moxie raised its Attack!"); + else if (species == SPECIES_GLASTRIER) + MESSAGE("Glastrier's Chilling Neigh raised its Attack!"); + else + MESSAGE("Calyrex's Chilling Neigh raised its Attack!"); HP_BAR(opponentRight, captureDamage: &damage[1]); } THEN { EXPECT_EQ(playerLeft->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); diff --git a/test/battle/ability/normalize.c b/test/battle/ability/normalize.c new file mode 100644 index 000000000000..d3e8df6bee9d --- /dev/null +++ b/test/battle/ability/normalize.c @@ -0,0 +1,16 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Normalize tuns a move into a Normal-type move"); +TO_DO_BATTLE_TEST("Normalize boosts power of both affected and originally Normal-type moves by 20% (Gen7+)"); +TO_DO_BATTLE_TEST("Normalize affects status moves"); // Eg. Thunder Wave can affect Ground types +TO_DO_BATTLE_TEST("Normalize makes Flying Press do Normal/Flying damage"); +TO_DO_BATTLE_TEST("Normalize still makes Freeze-Dry do super effective damage to Water-type Pokémon"); +TO_DO_BATTLE_TEST("Normalize-affected moves become Electric-type under Electrify's effect"); +TO_DO_BATTLE_TEST("Normalize-affected moves become Electric-type under Ion Deluge's effect"); +TO_DO_BATTLE_TEST("Normalize doesn't affect Hidden Power's type"); +TO_DO_BATTLE_TEST("Normalize doesn't affect Weather Ball's type"); +TO_DO_BATTLE_TEST("Normalize doesn't affect Natural Gift's type"); +TO_DO_BATTLE_TEST("Normalize doesn't affect Judgment/Techno Blast/Multi-Attack's type"); +TO_DO_BATTLE_TEST("Normalize doesn't affect Terrain Pulse's type"); +TO_DO_BATTLE_TEST("Normalize doesn't affect damaging Z-Move types"); diff --git a/test/battle/ability/orichalcum_pulse.c b/test/battle/ability/orichalcum_pulse.c new file mode 100644 index 000000000000..295e0db23c73 --- /dev/null +++ b/test/battle/ability/orichalcum_pulse.c @@ -0,0 +1,5 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Orichalcum Pulse sets up sun for 5 turns"); +TO_DO_BATTLE_TEST("Orichalcum Pulse boosts the Pokémon's Attack by 33% in sun, even if it's holding an Utility Umbrella"); diff --git a/test/battle/ability/pixilate.c b/test/battle/ability/pixilate.c new file mode 100644 index 000000000000..97c9c37a0c7c --- /dev/null +++ b/test/battle/ability/pixilate.c @@ -0,0 +1,35 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL); + ASSUME(gMovesInfo[MOVE_TACKLE].power > 0); +} + +SINGLE_BATTLE_TEST("Pixilate turns a Normal-type move into a Fairy-type move") +{ + GIVEN { + PLAYER(SPECIES_DRAGONITE); + OPPONENT(SPECIES_ALTARIA) { Item(ITEM_ALTARIANITE); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE, gimmick: GIMMICK_MEGA); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + MESSAGE("It's super effective!"); + } +} + +TO_DO_BATTLE_TEST("Pixilate can not turn certain moves into Fairy type moves"); +TO_DO_BATTLE_TEST("Pixilate boosts power of affected moves by 20% (Gen7+)"); +TO_DO_BATTLE_TEST("Pixilate boosts power of affected moves by 30% (Gen6)"); +TO_DO_BATTLE_TEST("(DYNAMAX) Pixilate turns Max Strike into Max Starfall when not used by Gigantamax Alcremie"); +TO_DO_BATTLE_TEST("(DYNAMAX) Pixilate doesn't turn Max Strike into Max Starfall when used by Gigantamax Alcremie, instead becoming G-Max Finale"); + +// Gen 6-7 +TO_DO_BATTLE_TEST("Pixilate overrides Electrify (Gen6-7)"); +TO_DO_BATTLE_TEST("Pixilate overrides Ion Deluge (Gen6-7)"); +// Gen 8+ +TO_DO_BATTLE_TEST("Pixilate doesn't override Electrify (Gen8+)"); +//TO_DO_BATTLE_TEST("Pixilate doesn't override Ion Deluge (Gen8+)"); // Ion Deluge doesn't exist in Gen 8+, but we probably could assume it behaves similar to under Electrify. TODO: Test by hacking SV. diff --git a/test/battle/ability/protosynthesis.c b/test/battle/ability/protosynthesis.c index 3cb35164ec7b..58f10b366f73 100644 --- a/test/battle/ability/protosynthesis.c +++ b/test/battle/ability/protosynthesis.c @@ -99,3 +99,7 @@ SINGLE_BATTLE_TEST("Protosynthesis activates on switch-in") MESSAGE("Roaring Moon's Attack was heightened!"); } } + +TO_DO_BATTLE_TEST("Protosynthesis activates in sun before Booster Energy"); +TO_DO_BATTLE_TEST("Protosynthesis activates even if the Pokémon is holding an Utility Umbrella"); +TO_DO_BATTLE_TEST("Protosynthesis doesn't activate if Cloud Nine/Air Lock is on the field"); diff --git a/test/battle/ability/purifying_salt.c b/test/battle/ability/purifying_salt.c index e1882624973c..4c25321e5f69 100644 --- a/test/battle/ability/purifying_salt.c +++ b/test/battle/ability/purifying_salt.c @@ -19,6 +19,24 @@ SINGLE_BATTLE_TEST("Purifying Salt halves damage from Ghost-type moves", s16 dam } } +SINGLE_BATTLE_TEST("Purifying Salt halves damage from dynamic Ghost-type moves", s16 damage) +{ + u16 ability; + PARAMETRIZE { ability = ABILITY_STURDY; } + PARAMETRIZE { ability = ABILITY_PURIFYING_SALT; } + GIVEN { + ASSUME(gMovesInfo[MOVE_TERA_BLAST].effect == EFFECT_TERA_BLAST); + PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_GHOST); } + OPPONENT(SPECIES_GARGANACL) { Ability(ability); } + } WHEN { + TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, UQ_4_12(0.5), results[1].damage); + } +} + SINGLE_BATTLE_TEST("Purifying Salt makes Rest fail") { GIVEN { diff --git a/test/battle/ability/rain_dish.c b/test/battle/ability/rain_dish.c index dd647f0eb95b..ed71a67f9277 100644 --- a/test/battle/ability/rain_dish.c +++ b/test/battle/ability/rain_dish.c @@ -14,3 +14,5 @@ SINGLE_BATTLE_TEST("Rain Dish recovers 1/16th of Max HP in Rain") HP_BAR(player, damage: -(100 / 16)); } } + +TO_DO_BATTLE_TEST("Rain Dish doesn't recover HP if Cloud Nine/Air Lock is on the field"); diff --git a/test/battle/ability/refrigerate.c b/test/battle/ability/refrigerate.c new file mode 100644 index 000000000000..dbbaa30eb8dd --- /dev/null +++ b/test/battle/ability/refrigerate.c @@ -0,0 +1,34 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL); + ASSUME(gMovesInfo[MOVE_TACKLE].power > 0); +} + +SINGLE_BATTLE_TEST("Refrigerate turns a Normal-type move into a Ice-type move") +{ + GIVEN { + PLAYER(SPECIES_MEGANIUM); + OPPONENT(SPECIES_AMAURA) { Ability(ABILITY_REFRIGERATE); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + MESSAGE("It's super effective!"); + } +} + +TO_DO_BATTLE_TEST("Refrigerate can not turn certain moves into Ice type moves"); +TO_DO_BATTLE_TEST("Refrigerate boosts power of affected moves by 20% (Gen7+)"); +TO_DO_BATTLE_TEST("Refrigerate boosts power of affected moves by 30% (Gen6)"); +TO_DO_BATTLE_TEST("(DYNAMAX) Refrigerate turns Max Strike into Max Hailstorm when not used by Gigantamax Lapras"); +//TO_DO_BATTLE_TEST("(DYNAMAX) Refrigerate doesn't turn Max Strike into Max Hailstorm when used by Gigantamax Lapras, instead becoming G-Max Resonance"); // Marked in Bulbapedia as "needs research", so this assumes that it behaves like Pixilate. + +// Gen 6-7 +TO_DO_BATTLE_TEST("Refrigerate overrides Electrify (Gen6-7)"); +TO_DO_BATTLE_TEST("Refrigerate overrides Ion Deluge (Gen6-7)"); +// Gen 8+ +//TO_DO_BATTLE_TEST("Refrigerate doesn't override Electrify (Gen8+)"); // Bulbapedia doesn't list this effect, so it assumes it behaves like Pixilate. +//TO_DO_BATTLE_TEST("Refrigerate doesn't override Ion Deluge (Gen8+)"); // Ion Deluge doesn't exist in Gen 8+, but we probably could assume it behaves similar to under Electrify. TODO: Test by hacking SV. diff --git a/test/battle/ability/sand_force.c b/test/battle/ability/sand_force.c new file mode 100644 index 000000000000..e17722a88532 --- /dev/null +++ b/test/battle/ability/sand_force.c @@ -0,0 +1,6 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Sand Force prevents damage from sandstorm"); +TO_DO_BATTLE_TEST("Sand Force increases the power of Rock-, Ground- and Steel-type moves by 30% in sandstorm"); +TO_DO_BATTLE_TEST("Sand Force increases move power if Cloud Nine/Air Lock is on the field"); diff --git a/test/battle/ability/sand_rush.c b/test/battle/ability/sand_rush.c new file mode 100644 index 000000000000..fa7695c129ca --- /dev/null +++ b/test/battle/ability/sand_rush.c @@ -0,0 +1,6 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Sand Rush prevents damage from sandstorm"); +TO_DO_BATTLE_TEST("Sand Rush doubles speed from sandstorm"); +TO_DO_BATTLE_TEST("Sand Rush doesn't double speed if Cloud Nine/Air Lock is on the field"); diff --git a/test/battle/ability/sand_veil.c b/test/battle/ability/sand_veil.c index 9e4a634de25f..f42c2672734b 100644 --- a/test/battle/ability/sand_veil.c +++ b/test/battle/ability/sand_veil.c @@ -28,3 +28,6 @@ SINGLE_BATTLE_TEST("Sand Veil increases evasion during sandstorm") HP_BAR(player); } } + +TO_DO_BATTLE_TEST("Sand Veil doesn't prevent Sandstorm damage if Cloud Nine/Air Lock is on the field"); +TO_DO_BATTLE_TEST("Sand Veil doesn't increase evasion if Cloud Nine/Air Lock is on the field"); diff --git a/test/battle/ability/slush_rush.c b/test/battle/ability/slush_rush.c new file mode 100644 index 000000000000..8ae62454bb49 --- /dev/null +++ b/test/battle/ability/slush_rush.c @@ -0,0 +1,6 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Slush Rush doubles speed from hail"); +TO_DO_BATTLE_TEST("Slush Rush doubles speed from snow"); +TO_DO_BATTLE_TEST("Slush Rush doesn't double speed if Cloud Nine/Air Lock is on the field"); diff --git a/test/battle/ability/snow_cloak.c b/test/battle/ability/snow_cloak.c index f1bfbcb9b056..a4d1acadb7c5 100644 --- a/test/battle/ability/snow_cloak.c +++ b/test/battle/ability/snow_cloak.c @@ -27,3 +27,6 @@ SINGLE_BATTLE_TEST("Snow Cloak increases evasion during hail") HP_BAR(player); } } + +TO_DO_BATTLE_TEST("Snow Cloak doesn't prevent hail damage if Cloud Nine/Air Lock is on the field"); +TO_DO_BATTLE_TEST("Snow Cloak doesn't increase evasion if Cloud Nine/Air Lock is on the field"); diff --git a/test/battle/ability/solar_power.c b/test/battle/ability/solar_power.c new file mode 100644 index 000000000000..f14ea11ee10a --- /dev/null +++ b/test/battle/ability/solar_power.c @@ -0,0 +1,7 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Solar Power increases a Sp. Attack by x1.5 in Sun"); +TO_DO_BATTLE_TEST("Solar Power doesn't increases a Sp. Attack if Cloud Nine/Air Lock is on the field"); +TO_DO_BATTLE_TEST("Solar Power causes the Pokémon to lose 1/8 max HP in Sun"); +TO_DO_BATTLE_TEST("Solar Power doesn't cause the Pokémon to lose 1/8 max HP if Cloud Nine/Air Lock is on the field"); diff --git a/test/battle/ability/swift_swim.c b/test/battle/ability/swift_swim.c new file mode 100644 index 000000000000..4282ac2741a1 --- /dev/null +++ b/test/battle/ability/swift_swim.c @@ -0,0 +1,6 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Swift Swim doubles speed if it's raining"); +TO_DO_BATTLE_TEST("Swift Swim doesn't double speed if Cloud Nine/Air Lock is on the field"); +TO_DO_BATTLE_TEST("Swift Swim doesn't double speed if they have an Utility Umbrella"); diff --git a/test/battle/ability/unnerve.c b/test/battle/ability/unnerve.c new file mode 100644 index 000000000000..9ad4ee7e5fdd --- /dev/null +++ b/test/battle/ability/unnerve.c @@ -0,0 +1,6 @@ +#include "global.h" +#include "test/battle.h" + +// Remember to add a PARAMETRIZE for As One in the following tests: +TO_DO_BATTLE_TEST("Unnerve prevents opposing Pokémon from eating their own berries"); +TO_DO_BATTLE_TEST("Unnerve doesn't prevent opposing Pokémon from using Natural Gift"); diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index fcc8e322ca80..b3927509f026 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -121,7 +121,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Avoid infinite loop if damage { GIVEN { ASSUME(gItemsInfo[ITEM_LEFTOVERS].holdEffect == HOLD_EFFECT_LEFTOVERS); - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SMART_MON_CHOICES); PLAYER(SPECIES_MEOWTH_GALARIAN) { Level(100); Moves(MOVE_GROWL, MOVE_FAKE_OUT, MOVE_HONE_CLAWS); } // Scenario courtesy of Duke, who triggered the bug in the first place OPPONENT(SPECIES_MEOWTH_GALARIAN) { Level(5); Moves(MOVE_GROWL, MOVE_FAKE_OUT, MOVE_HONE_CLAWS); } @@ -357,3 +357,21 @@ AI_SINGLE_BATTLE_TEST("AI won't use trapping behaviour if player only has 1 mon TURN{ MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_SELF_DESTRUCT); EXPECT_SEND_OUT(opponent, 2); } } } + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if mon would be OKHO'd and they have a good switchin 50% of the time") +{ + PASSES_RANDOMLY(50, 100, RNG_AI_HASBADODDS); + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_RHYDON].types[0] == TYPE_GROUND); + ASSUME(gSpeciesInfo[SPECIES_PELIPPER].types[0] == TYPE_WATER); + ASSUME(gSpeciesInfo[SPECIES_PELIPPER].types[1] == TYPE_FLYING); + ASSUME(gMovesInfo[MOVE_THUNDERBOLT].type == TYPE_ELECTRIC); + ASSUME(gMovesInfo[MOVE_EARTHQUAKE].type == TYPE_GROUND); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES); + PLAYER(SPECIES_ELECTRODE) { Moves(MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_THUNDER_SHOCK); } + OPPONENT(SPECIES_PELIPPER) { Moves(MOVE_EARTHQUAKE); }; + OPPONENT(SPECIES_RHYDON) { Moves(MOVE_EARTHQUAKE); Ability(ABILITY_ROCK_HEAD); } + } WHEN { + TURN { MOVE(player, MOVE_THUNDERBOLT) ; EXPECT_SWITCH(opponent, 1); } + } +} diff --git a/test/battle/gimmick/dynamax.c b/test/battle/gimmick/dynamax.c index 56fd2e25eaa8..dca175c63711 100644 --- a/test/battle/gimmick/dynamax.c +++ b/test/battle/gimmick/dynamax.c @@ -362,21 +362,6 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon lose their substitutes") } } -DOUBLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can have their base moves copied by Copycat") -{ - GIVEN { - PLAYER(SPECIES_WOBBUFFET); - PLAYER(SPECIES_WYNAUT); - OPPONENT(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WYNAUT); - } WHEN { - TURN { MOVE(playerLeft, MOVE_TRICK_ROOM, gimmick: GIMMICK_DYNAMAX, target: opponentLeft); MOVE(playerRight, MOVE_COPYCAT, target: opponentLeft); } - } SCENE { - MESSAGE("Wobbuffet used Max Guard!"); - MESSAGE("Wynaut used Trick Room!"); - } -} - SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon take double damage from Dynamax Cannon", s16 damage) { u32 dynamax; diff --git a/test/battle/gimmick/terastal.c b/test/battle/gimmick/terastal.c index f14c398b6406..7a70ba0de014 100644 --- a/test/battle/gimmick/terastal.c +++ b/test/battle/gimmick/terastal.c @@ -86,46 +86,6 @@ SINGLE_BATTLE_TEST("(TERA) Terastallizing into the same type gives that type 2x } } -SINGLE_BATTLE_TEST("(TERA) Terastallizing into a different type with Adaptability gives 2.0x STAB", s16 damage) -{ - bool32 tera; - PARAMETRIZE { tera = GIMMICK_NONE; } - PARAMETRIZE { tera = GIMMICK_TERA; } - GIVEN { - PLAYER(SPECIES_CRAWDAUNT) { Ability(ABILITY_ADAPTABILITY); TeraType(TYPE_NORMAL); } - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_HEADBUTT, gimmick: tera); } - } SCENE { - MESSAGE("Crawdaunt used Headbutt!"); - ANIMATION(ANIM_TYPE_MOVE, MOVE_HEADBUTT, player); - HP_BAR(opponent, captureDamage: &results[i].damage); - } FINALLY { - // The jump from no STAB to 2.0x STAB is a 2.0x boost. - EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); - } -} - -SINGLE_BATTLE_TEST("(TERA) Terastallizing into the same type with Adaptability gives 2.25x STAB", s16 damage) -{ - bool32 tera; - PARAMETRIZE { tera = GIMMICK_NONE; } - PARAMETRIZE { tera = GIMMICK_TERA; } - GIVEN { - PLAYER(SPECIES_CRAWDAUNT) { Ability(ABILITY_ADAPTABILITY); TeraType(TYPE_WATER); } - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_WATER_PULSE, gimmick: tera); } - } SCENE { - MESSAGE("Crawdaunt used Water Pulse!"); - ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PULSE, player); - HP_BAR(opponent, captureDamage: &results[i].damage); - } FINALLY { - // The jump from 2x STAB to 2.25x STAB is a 1.125x boost. - EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.125), results[1].damage); - } -} - SINGLE_BATTLE_TEST("(TERA) Terastallizing boosts moves of the same type to 60 BP", s16 damage) { bool32 tera; diff --git a/test/battle/gimmick/zmove.c b/test/battle/gimmick/zmove.c index bde241bfd72a..1eb2c7ae7481 100644 --- a/test/battle/gimmick/zmove.c +++ b/test/battle/gimmick/zmove.c @@ -599,3 +599,22 @@ SINGLE_BATTLE_TEST("(Z-MOVE) Searing Sunraze Smash ignores the target's abilitie MESSAGE("A critical hit!"); } } + +SINGLE_BATTLE_TEST("(Z-MOVE) Z-Revelation Dance always transforms into Breakneck Blitz") +{ + u16 species; + PARAMETRIZE { species = SPECIES_ORICORIO_BAILE; } + PARAMETRIZE { species = SPECIES_ORICORIO_PAU; } + PARAMETRIZE { species = SPECIES_ORICORIO_POM_POM; } + PARAMETRIZE { species = SPECIES_ORICORIO_SENSU; } + GIVEN { + ASSUME(gMovesInfo[MOVE_REVELATION_DANCE].type == TYPE_NORMAL); + PLAYER(species) { Item(ITEM_NORMALIUM_Z); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_REVELATION_DANCE, gimmick: GIMMICK_Z_MOVE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, player); + } +} diff --git a/test/battle/ability/booster_energy.c b/test/battle/hold_effect/booster_energy.c similarity index 100% rename from test/battle/ability/booster_energy.c rename to test/battle/hold_effect/booster_energy.c diff --git a/test/battle/hold_effect/utility_umbrella.c b/test/battle/hold_effect/utility_umbrella.c index e02a4fdef355..f04a77378990 100644 --- a/test/battle/hold_effect/utility_umbrella.c +++ b/test/battle/hold_effect/utility_umbrella.c @@ -52,3 +52,5 @@ SINGLE_BATTLE_TEST("Utility Umbrella blocks Rain damage modifiers", s16 damage) EXPECT_MUL_EQ(results[2].damage, Q_4_12(1.5), results[3].damage); } } + +// Moves and abilities affected by Utility Umbrella have their tests in the respective files diff --git a/test/battle/move.c b/test/battle/move.c index 228a09a7c665..081a91712d48 100644 --- a/test/battle/move.c +++ b/test/battle/move.c @@ -80,57 +80,57 @@ SINGLE_BATTLE_TEST("Turn order is determined randomly if priority and Speed tie } } -DOUBLE_BATTLE_TEST("Turn order is determined randomly if priority and Speed tie [doubles]") +DOUBLE_BATTLE_TEST("Turn order is determined randomly if priority and Speed tie [doubles]", u32 permutations) { - struct BattlePokemon *order[4] = { NULL, NULL, NULL, NULL }; - u32 a, b, c, d; - - // TODO: Test all of these in a single PASSES_RANDOMLY pass rather - // than 24 PARAMETRIZEd passes. - PARAMETRIZE { a = 0; b = 1; c = 2; d = 3; } - PARAMETRIZE { a = 0; b = 1; c = 3; d = 2; } - PARAMETRIZE { a = 0; b = 2; c = 1; d = 3; } - PARAMETRIZE { a = 0; b = 2; c = 3; d = 1; } - PARAMETRIZE { a = 0; b = 3; c = 1; d = 2; } - PARAMETRIZE { a = 0; b = 3; c = 2; d = 1; } - PARAMETRIZE { a = 1; b = 0; c = 2; d = 3; } - PARAMETRIZE { a = 1; b = 0; c = 3; d = 2; } - PARAMETRIZE { a = 1; b = 2; c = 0; d = 3; } - PARAMETRIZE { a = 1; b = 2; c = 3; d = 0; } - PARAMETRIZE { a = 1; b = 3; c = 0; d = 2; } - PARAMETRIZE { a = 1; b = 3; c = 2; d = 0; } - PARAMETRIZE { a = 2; b = 0; c = 1; d = 3; } - PARAMETRIZE { a = 2; b = 0; c = 3; d = 1; } - PARAMETRIZE { a = 2; b = 1; c = 0; d = 3; } - PARAMETRIZE { a = 2; b = 1; c = 3; d = 0; } - PARAMETRIZE { a = 2; b = 3; c = 0; d = 1; } - PARAMETRIZE { a = 2; b = 3; c = 1; d = 0; } - PARAMETRIZE { a = 3; b = 0; c = 1; d = 2; } - PARAMETRIZE { a = 3; b = 0; c = 2; d = 1; } - PARAMETRIZE { a = 3; b = 1; c = 0; d = 2; } - PARAMETRIZE { a = 3; b = 1; c = 2; d = 0; } - PARAMETRIZE { a = 3; b = 2; c = 0; d = 1; } - PARAMETRIZE { a = 3; b = 2; c = 1; d = 0; } - - order[a] = playerLeft; - order[b] = playerRight; - order[c] = opponentLeft; - order[d] = opponentRight; - - PASSES_RANDOMLY(1, 24, RNG_SPEED_TIE); + PARAMETRIZE {} // Hack to make permutations legal. + PASSES_RANDOMLY(24, 24, RNG_SPEED_TIE); + ASSUME(gMovesInfo[MOVE_ENDEAVOR].effect == EFFECT_ENDEAVOR); + ASSUME(gMovesInfo[MOVE_LIFE_DEW].effect == EFFECT_JUNGLE_HEALING); + ASSUME(gMovesInfo[MOVE_CRUSH_GRIP].effect == EFFECT_VARY_POWER_BASED_ON_HP); + ASSUME(gMovesInfo[MOVE_SUPER_FANG].effect == EFFECT_SUPER_FANG); GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Speed(1); } + PLAYER(SPECIES_WOBBUFFET) { MaxHP(480); HP(360); Defense(100); Speed(1); } PLAYER(SPECIES_WYNAUT) { Speed(1); } - OPPONENT(SPECIES_WOBBUFFET) { Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { Attack(100); Speed(1); } OPPONENT(SPECIES_WYNAUT) { Speed(1); } } WHEN { - TURN { MOVE(playerLeft, MOVE_SPLASH); MOVE(playerRight, MOVE_SPLASH); MOVE(opponentLeft, MOVE_SPLASH); MOVE(opponentRight, MOVE_SPLASH); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, order[0]); - ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, order[1]); - ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, order[2]); - ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, order[3]); + TURN { MOVE(playerLeft, MOVE_ENDEAVOR, target: opponentLeft); MOVE(playerRight, MOVE_LIFE_DEW); MOVE(opponentLeft, MOVE_CRUSH_GRIP, target: playerLeft, WITH_RNG(RNG_DAMAGE_MODIFIER, 0)); MOVE(opponentRight, MOVE_SUPER_FANG, target: playerLeft); } + } THEN { + // This tests for unique combinatins of HP values depending on which order the moves are executed in + // The unique outcomes arise from the specific attacks and HP, Def, and Atk values chosen + // The switch is then set up in such a way that the only way for this test to pass exactly one is for each HP combination to occur exactly once +#define HP_PAIR(a, b) ((a) * 1000 + (b)) + switch (HP_PAIR(playerLeft->hp, opponentLeft->hp)) + { + case HP_PAIR(188, 360): results[i].permutations += 1 << 0; break; + case HP_PAIR(189, 360): results[i].permutations += 1 << 1; break; + case HP_PAIR(261, 360): results[i].permutations += 1 << 2; break; + case HP_PAIR(235, 360): results[i].permutations += 1 << 3; break; + case HP_PAIR(262, 360): results[i].permutations += 1 << 4; break; + case HP_PAIR(202, 360): results[i].permutations += 1 << 5; break; + case HP_PAIR(189, 378): results[i].permutations += 1 << 6; break; + case HP_PAIR(189, 189): results[i].permutations += 1 << 7; break; + case HP_PAIR(189, 480): results[i].permutations += 1 << 8; break; + case HP_PAIR(188, 480): results[i].permutations += 1 << 9; break; + case HP_PAIR(188, 240): results[i].permutations += 1 << 10; break; + case HP_PAIR(188, 188): results[i].permutations += 1 << 11; break; + case HP_PAIR(262, 262): results[i].permutations += 1 << 12; break; + case HP_PAIR(262, 142): results[i].permutations += 1 << 13; break; + case HP_PAIR(202, 403): results[i].permutations += 1 << 14; break; + case HP_PAIR(202, 202): results[i].permutations += 1 << 15; break; + case HP_PAIR(262, 283): results[i].permutations += 1 << 16; break; + case HP_PAIR(202, 283): results[i].permutations += 1 << 17; break; + case HP_PAIR(235, 180): results[i].permutations += 1 << 18; break; + case HP_PAIR(261, 180): results[i].permutations += 1 << 19; break; + case HP_PAIR(235, 235): results[i].permutations += 1 << 20; break; + case HP_PAIR(235, 300): results[i].permutations += 1 << 21; break; + case HP_PAIR(261, 141): results[i].permutations += 1 << 22; break; + case HP_PAIR(261, 261): results[i].permutations += 1 << 23; break; + } +#undef HP_PAIR + } FINALLY { + EXPECT_EQ(results[i].permutations, (1 << 24) - 1); } } diff --git a/test/battle/move_effect/calm_mind.c b/test/battle/move_effect/calm_mind.c new file mode 100644 index 000000000000..66c16361f45e --- /dev/null +++ b/test/battle/move_effect/calm_mind.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Calm Mind increases the user's Sp. Attack and Sp. Defense by 1 stage each"); diff --git a/test/battle/move_effect/camouflage.c b/test/battle/move_effect/camouflage.c new file mode 100644 index 000000000000..a8728e3117af --- /dev/null +++ b/test/battle/move_effect/camouflage.c @@ -0,0 +1,8 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Camouflage changes the type of the user based on battle environment"); +TO_DO_BATTLE_TEST("Camouflage changes the type of the user to Grass if Grassy Terrain is active"); +TO_DO_BATTLE_TEST("Camouflage changes the type of the user to Electric if Electric Terrain is active"); +TO_DO_BATTLE_TEST("Camouflage changes the type of the user to Psychic if Psychic Terrain is active"); +TO_DO_BATTLE_TEST("Camouflage changes the type of the user to Fairy if Misty Terrain is active"); diff --git a/test/battle/move_effect/captivate.c b/test/battle/move_effect/captivate.c new file mode 100644 index 000000000000..0da58983c724 --- /dev/null +++ b/test/battle/move_effect/captivate.c @@ -0,0 +1,7 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Captivate decreases the target's Sp. Attack if they're opposite gender from the user"); +TO_DO_BATTLE_TEST("Captivate fails if the target and user share gender"); +TO_DO_BATTLE_TEST("Captivate fails if the target is genderless"); +TO_DO_BATTLE_TEST("Captivate fails if the user is genderless"); diff --git a/test/battle/move_effect/change_type_on_item.c b/test/battle/move_effect/change_type_on_item.c index 0bd181cf61e8..6365215a426c 100644 --- a/test/battle/move_effect/change_type_on_item.c +++ b/test/battle/move_effect/change_type_on_item.c @@ -7,8 +7,7 @@ ASSUMPTIONS ASSUME(gMovesInfo[MOVE_TECHNO_BLAST].argument == HOLD_EFFECT_DRIVE); } - -SINGLE_BATTLE_TEST("Techno Blast changes the move type depending on the mask the user holds") +SINGLE_BATTLE_TEST("Techno Blast changes type depending on the drive the user holds") { u16 species; u16 item; @@ -29,3 +28,6 @@ SINGLE_BATTLE_TEST("Techno Blast changes the move type depending on the mask the MESSAGE("It's super effective!"); } } + +TO_DO_BATTLE_TEST("Judgement changes type depending on the plate the user holds"); +TO_DO_BATTLE_TEST("Multi Attack changes type depending on the memory the user holds"); diff --git a/test/battle/move_effect/charge.c b/test/battle/move_effect/charge.c new file mode 100644 index 000000000000..e0a782b15f60 --- /dev/null +++ b/test/battle/move_effect/charge.c @@ -0,0 +1,9 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Charge doubles the damage of the next Electric move of the user"); +TO_DO_BATTLE_TEST("Charge's effect is removed regardless if the next move is Electric or not (Gen 3-8)"); +TO_DO_BATTLE_TEST("Charge's effect is kept until the user uses an Electric move (Gen 9+)"); +TO_DO_BATTLE_TEST("Charge's effect is removed if the user fails using an Electric move (Gen 9+)"); +TO_DO_BATTLE_TEST("Charge's effect does not stack with Electromorphosis"); +TO_DO_BATTLE_TEST("Charge's effect does not stack with Wind Power"); diff --git a/test/battle/move_effect/chilly_reception.c b/test/battle/move_effect/chilly_reception.c index f2c50b8444b4..a52c83eb5d52 100644 --- a/test/battle/move_effect/chilly_reception.c +++ b/test/battle/move_effect/chilly_reception.c @@ -88,3 +88,4 @@ SINGLE_BATTLE_TEST("Chilly Reception changes the weather, even if the user canno } } +TO_DO_BATTLE_TEST("Chilly Reception doesn't announce its move if it's called by a different move"); diff --git a/test/battle/move_effect/clangorous_soul.c b/test/battle/move_effect/clangorous_soul.c new file mode 100644 index 000000000000..17e57d7dd595 --- /dev/null +++ b/test/battle/move_effect/clangorous_soul.c @@ -0,0 +1,11 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Clangorous Soul raises the user's Attack by 1 stage"); +TO_DO_BATTLE_TEST("Clangorous Soul raises the user's Defense by 1 stage"); +TO_DO_BATTLE_TEST("Clangorous Soul raises the user's Sp. Attack by 1 stage"); +TO_DO_BATTLE_TEST("Clangorous Soul raises the user's Sp. Defense by 1 stage"); +TO_DO_BATTLE_TEST("Clangorous Soul raises the user's Speed by 1 stage"); +TO_DO_BATTLE_TEST("Clangorous Soul cuts the user's HP by 1/3"); +TO_DO_BATTLE_TEST("Clangorous Soul fails if Attack, Defense, Sp. Attack, Sp. Defense and Speed are all maxed out"); +TO_DO_BATTLE_TEST("Clangorous Soul fails if the user's HP is less or equal than 1/3"); diff --git a/test/battle/move_effect/coaching.c b/test/battle/move_effect/coaching.c new file mode 100644 index 000000000000..2f50aceab58a --- /dev/null +++ b/test/battle/move_effect/coaching.c @@ -0,0 +1,8 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Coaching raises Attack and Defense of ally by 1 stage each"); +TO_DO_BATTLE_TEST("Coaching doesn't raise stats of the user"); +TO_DO_BATTLE_TEST("Coaching bypasses protection of allies"); +TO_DO_BATTLE_TEST("Coaching fails in single battles"); +TO_DO_BATTLE_TEST("Coaching fails if there's no ally"); diff --git a/test/battle/move_effect/coil.c b/test/battle/move_effect/coil.c new file mode 100644 index 000000000000..ce9e8629a86d --- /dev/null +++ b/test/battle/move_effect/coil.c @@ -0,0 +1,6 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Coil raises the user's Attack by 1 stage"); +TO_DO_BATTLE_TEST("Coil raises the user's Defense by 1 stage"); +TO_DO_BATTLE_TEST("Coil raises the user's Accuracy by 1 stage"); diff --git a/test/battle/move_effect/conversion.c b/test/battle/move_effect/conversion.c new file mode 100644 index 000000000000..ac863cf2b257 --- /dev/null +++ b/test/battle/move_effect/conversion.c @@ -0,0 +1,10 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Conversion changes the user's types to the target's current types (Gen 1)"); +TO_DO_BATTLE_TEST("Conversion changes the user's types randomly to one of the user's move (Gen 2-5)"); +TO_DO_BATTLE_TEST("Conversion ignores moves that share types with the user (Gen 2-5)"); +TO_DO_BATTLE_TEST("Conversion fails if all the user's moves share types with the user (Gen 2-5)"); +TO_DO_BATTLE_TEST("Conversion changes the user's types to the one in the user's first slot (Gen 6+)"); +TO_DO_BATTLE_TEST("Conversion can read the user's first move slot even if that move cannot be selected (Gen 6+)"); //Eg. Disable +TO_DO_BATTLE_TEST("Conversion can change the user's types to Conversion's type"); diff --git a/test/battle/move_effect/conversion_2.c b/test/battle/move_effect/conversion_2.c new file mode 100644 index 000000000000..2e81212ef1be --- /dev/null +++ b/test/battle/move_effect/conversion_2.c @@ -0,0 +1,14 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Conversion 2 randomly changes the type of the user to a type that resists the last move that hit the user (Gen 3-4)"); +TO_DO_BATTLE_TEST("Conversion 2 randomly changes the type of the user to a type that resists the last move used by the target (Gen 5+)"); +TO_DO_BATTLE_TEST("Conversion 2's type change considers the type of moves called by other moves"); +TO_DO_BATTLE_TEST("Conversion 2's type change considers dynamic type moves"); // Eg. Weather Ball +TO_DO_BATTLE_TEST("Conversion 2's type change considers move types changed by Normalize and Electrify"); +TO_DO_BATTLE_TEST("Conversion 2's type change considers move types changed by Normalize"); +TO_DO_BATTLE_TEST("Conversion 2's type change considers Struggle to be Normal type (Gen 3-4)"); +TO_DO_BATTLE_TEST("Conversion 2 fails if the move used is of typeless damage (Gen 5+)"); +TO_DO_BATTLE_TEST("Conversion 2's type change considers status moves (Gen 5+)"); +TO_DO_BATTLE_TEST("Conversion 2's type change considers Inverse Battles"); +TO_DO_BATTLE_TEST("Conversion 2 fails if the move used is Stellar Type"); diff --git a/test/battle/move_effect/copycat.c b/test/battle/move_effect/copycat.c new file mode 100644 index 000000000000..cdc164cd0fee --- /dev/null +++ b/test/battle/move_effect/copycat.c @@ -0,0 +1,37 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Copycat causes the user to use the last move used in battle"); +TO_DO_BATTLE_TEST("Copycat can call the user's last move used if it was the last move used in battle"); +TO_DO_BATTLE_TEST("Copycat fails if no move has been made"); +TO_DO_BATTLE_TEST("Copycat chooses a target at random if the copied move wasn't the user's"); +TO_DO_BATTLE_TEST("Copycat can copy moves regardless if they failed or not"); //Has "X used move!" +TO_DO_BATTLE_TEST("Copycat fails if the last move used is a Z-Move"); + +// Gen 4 +TO_DO_BATTLE_TEST("Copycat can only copy charging moves after it has been executed (Gen 4)"); +TO_DO_BATTLE_TEST("Copycat can only copy recharging moves after it has been executed (Gen 4)"); +TO_DO_BATTLE_TEST("Copycat cannot copy Bide's final turn (Gen 4)"); +TO_DO_BATTLE_TEST("Copycat copies other calling moves instead of the move they called (Gen 4)"); +TO_DO_BATTLE_TEST("Copycat copies moves called by other calling moves instead of the calling move if they are executed in a second turn (Gen 5+)"); //Eg. Dig + +// Gen 5+ +TO_DO_BATTLE_TEST("Copycat can copy charging moves in both the charging and the executing turn (Gen 5+)"); +TO_DO_BATTLE_TEST("Copycat ignores the recharging turn of recharging moves (Gen 5+)"); +TO_DO_BATTLE_TEST("Copycat can copy Bide on all turns"); +TO_DO_BATTLE_TEST("Copycat copies moves called by other calling moves instead of the calling move (Gen 5+)"); + +DOUBLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can have their base moves copied by Copycat") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerLeft, MOVE_TRICK_ROOM, gimmick: GIMMICK_DYNAMAX, target: opponentLeft); MOVE(playerRight, MOVE_COPYCAT, target: opponentLeft); } + } SCENE { + MESSAGE("Wobbuffet used Max Guard!"); + MESSAGE("Wynaut used Trick Room!"); + } +} diff --git a/test/battle/move_effect/corrosive_gas.c b/test/battle/move_effect/corrosive_gas.c index 714702703a09..f6a9c738e431 100644 --- a/test/battle/move_effect/corrosive_gas.c +++ b/test/battle/move_effect/corrosive_gas.c @@ -117,3 +117,6 @@ DOUBLE_BATTLE_TEST("Corrosive Gas destroys foes and ally's items if they have on EXPECT_EQ(opponentRight->item, ITEM_NONE); } } + +TO_DO_BATTLE_TEST("Corrosive Gas doesn't destroy the item of a Pokemon behind a Substitute"); +TO_DO_BATTLE_TEST("Corrosive Gas doesn't destroy items if they change the Pokémon's form"); // Giratina, Genesect, Silvally, Zacian, Zamazenta. Bulbapedia hasn't confirmed Arceus or Ogerpon, but it's a safe assumption that they will also fail. diff --git a/test/battle/move_effect/cosmic_power.c b/test/battle/move_effect/cosmic_power.c new file mode 100644 index 000000000000..8680e9f28eb7 --- /dev/null +++ b/test/battle/move_effect/cosmic_power.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Cosmic Power increases the user's Defense and Sp. Defense by 1 stage each"); diff --git a/test/battle/move_effect/counter.c b/test/battle/move_effect/counter.c new file mode 100644 index 000000000000..f4d3a78114b4 --- /dev/null +++ b/test/battle/move_effect/counter.c @@ -0,0 +1,22 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Counter will do twice as much damage received from the opponent"); +TO_DO_BATTLE_TEST("Counter cannot affect ally Pokémon"); +TO_DO_BATTLE_TEST("Counter hits the last opponent that hit the user"); //Doubles + +// Gen 1 +TO_DO_BATTLE_TEST("Counter can only counter Normal and Fighting-type moves (Gen 1)"); +TO_DO_BATTLE_TEST("Counter can hit ghost-type Pokémon (Gen 1)"); +TO_DO_BATTLE_TEST("Counter can return damage dealt to a substitute (Gen 1)"); + +// Gen 2-3 +TO_DO_BATTLE_TEST("Counter can counter Hidden Power regardless of type (Gen 2-3)"); + +// Gen 2+ +TO_DO_BATTLE_TEST("Counter can only counter physical moves (Gen 2+)"); +TO_DO_BATTLE_TEST("Counter cannot hit ghost-type Pokémon (Gen 2+)"); +TO_DO_BATTLE_TEST("Counter cannot return damage dealt to a substitute (Gen 2+)"); + +// Triple Battles required to test +//TO_DO_BATTLE_TEST("Counter can hit non-adjacent opponents if they were the last Pokémon to hit the user"); diff --git a/test/battle/move_effect/court_change.c b/test/battle/move_effect/court_change.c index a5e3e05619d6..b9be19db7f75 100644 --- a/test/battle/move_effect/court_change.c +++ b/test/battle/move_effect/court_change.c @@ -78,7 +78,7 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the player") } } -DOUBLE_BATTLE_TEST("Court Change used by the player swaps Mist, Safeguard, Lucky Chant, Reflect, Light Screen, Tailwind") +DOUBLE_BATTLE_TEST("Court Change used by the player swaps Mist, Safeguard, Aurora Veil, Reflect, Light Screen, Tailwind") { GIVEN { PLAYER(SPECIES_WYNAUT); @@ -88,8 +88,8 @@ DOUBLE_BATTLE_TEST("Court Change used by the player swaps Mist, Safeguard, Lucky OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(opponentLeft, MOVE_MIST); MOVE(opponentRight, MOVE_SAFEGUARD); } - TURN { MOVE(opponentLeft, MOVE_LUCKY_CHANT); MOVE(opponentRight, MOVE_REFLECT); } + TURN { MOVE(playerLeft, MOVE_SNOWSCAPE); MOVE(opponentLeft, MOVE_MIST); MOVE(opponentRight, MOVE_SAFEGUARD); } + TURN { MOVE(opponentLeft, MOVE_AURORA_VEIL); MOVE(opponentRight, MOVE_REFLECT); } TURN { MOVE(opponentLeft, MOVE_LIGHT_SCREEN); MOVE(opponentRight, MOVE_TAILWIND); } TURN { MOVE(playerLeft, MOVE_COURT_CHANGE); } TURN { } @@ -97,9 +97,10 @@ DOUBLE_BATTLE_TEST("Court Change used by the player swaps Mist, Safeguard, Lucky TURN { } TURN { } } SCENE { + MESSAGE("Wynaut used Snowscape!"); MESSAGE("Foe Wobbuffet used Mist!"); MESSAGE("Foe Wobbuffet used Safeguard!"); - MESSAGE("Foe Wobbuffet used Lucky Chant!"); + MESSAGE("Foe Wobbuffet used Aurora Veil!"); MESSAGE("Foe Wobbuffet used Reflect!"); MESSAGE("Foe Wobbuffet used Light Screen!"); MESSAGE("Foe Wobbuffet used Tailwind!"); @@ -109,13 +110,13 @@ DOUBLE_BATTLE_TEST("Court Change used by the player swaps Mist, Safeguard, Lucky MESSAGE("Ally's Mist wore off!"); MESSAGE("Ally's party is no longer protected by Safeguard!"); MESSAGE("Ally's Reflect wore off!"); - MESSAGE("Your team's Lucky Chant wore off!"); + MESSAGE("Ally's Aurora Veil wore off!"); MESSAGE("Your team's tailwind petered out!"); MESSAGE("Ally's Light Screen wore off!"); } } -DOUBLE_BATTLE_TEST("Court Change used by the opponent swaps Mist, Safeguard, Lucky Chant, Reflect, Light Screen, Tailwind") +DOUBLE_BATTLE_TEST("Court Change used by the opponent swaps Mist, Safeguard, Aurora Veil, Reflect, Light Screen, Tailwind") { GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -125,8 +126,8 @@ DOUBLE_BATTLE_TEST("Court Change used by the opponent swaps Mist, Safeguard, Luc OPPONENT(SPECIES_WYNAUT); OPPONENT(SPECIES_WYNAUT); } WHEN { - TURN { MOVE(playerLeft, MOVE_MIST); MOVE(playerRight, MOVE_SAFEGUARD); } - TURN { MOVE(playerLeft, MOVE_LUCKY_CHANT); MOVE(playerRight, MOVE_REFLECT); } + TURN { MOVE(opponentLeft, MOVE_SNOWSCAPE); MOVE(playerLeft, MOVE_MIST); MOVE(playerRight, MOVE_SAFEGUARD); } + TURN { MOVE(playerLeft, MOVE_AURORA_VEIL); MOVE(playerRight, MOVE_REFLECT); } TURN { MOVE(playerLeft, MOVE_LIGHT_SCREEN); MOVE(playerRight, MOVE_TAILWIND); } TURN { MOVE(opponentLeft, MOVE_COURT_CHANGE); } TURN { } @@ -136,7 +137,7 @@ DOUBLE_BATTLE_TEST("Court Change used by the opponent swaps Mist, Safeguard, Luc } SCENE { MESSAGE("Wobbuffet used Mist!"); MESSAGE("Wobbuffet used Safeguard!"); - MESSAGE("Wobbuffet used Lucky Chant!"); + MESSAGE("Wobbuffet used Aurora Veil!"); MESSAGE("Wobbuffet used Reflect!"); MESSAGE("Wobbuffet used Light Screen!"); MESSAGE("Wobbuffet used Tailwind!"); @@ -146,8 +147,10 @@ DOUBLE_BATTLE_TEST("Court Change used by the opponent swaps Mist, Safeguard, Luc MESSAGE("Foe's Mist wore off!"); MESSAGE("Foe's party is no longer protected by Safeguard!"); MESSAGE("Foe's Reflect wore off!"); - MESSAGE("The opposing team's Lucky Chant wore off!"); + MESSAGE("Foe's Aurora Veil wore off!"); MESSAGE("The opposing team's tailwind petered out!"); MESSAGE("Foe's Light Screen wore off!"); } } + +TO_DO_BATTLE_TEST("Court Change used by the player swaps G-Max Steelsurge, G-Max Vine Lash, G-Max Wildfire, G-Max Cannonade"); diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c index 60fbedcc5488..80d500d2ee20 100644 --- a/test/battle/move_effect/defog.c +++ b/test/battle/move_effect/defog.c @@ -29,7 +29,7 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("The opposing Wobbuffet's evasiveness fell!"); + MESSAGE("Foe Wobbuffet's evasiveness fell!"); } } @@ -41,12 +41,12 @@ SINGLE_BATTLE_TEST("Defog does not lower evasiveness if target behind Substitute } WHEN { TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_DEFOG); } } SCENE { - MESSAGE("The opposing Wobbuffet used Substitute!"); + MESSAGE("Foe Wobbuffet used Substitute!"); MESSAGE("But it failed!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("The opposing Wobbuffet's evasiveness fell!"); + MESSAGE("Foe Wobbuffet's evasiveness fell!"); } } } @@ -72,9 +72,9 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Reflect and Light ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); if (move == MOVE_DEFOG) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("The opposing Wobbuffet's evasiveness fell!"); - MESSAGE("The opposing's Reflect wore off!"); - MESSAGE("The opposing's Light Screen wore off!"); + MESSAGE("Foe Wobbuffet's evasiveness fell!"); + MESSAGE("Foe's Reflect wore off!"); + MESSAGE("Foe's Light Screen wore off!"); } MESSAGE("Wobbuffet used Tackle!"); HP_BAR(opponentLeft, captureDamage: &results[i].damagePhysical); @@ -105,10 +105,10 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard ANIMATION(ANIM_TYPE_MOVE, MOVE_MIST, opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_SAFEGUARD, opponentRight); if (move == MOVE_DEFOG) { - MESSAGE("The opposing Wobbuffet is protected by MIST!"); + MESSAGE("Foe Wobbuffet is protected by MIST!"); ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); - MESSAGE("The opposing's Mist wore off!"); - MESSAGE("The opposing's Safeguard wore off!"); + MESSAGE("Foe's Mist wore off!"); + MESSAGE("Foe's Safeguard wore off!"); } MESSAGE("Wobbuffet used Screech!"); if (move == MOVE_DEFOG) { @@ -116,7 +116,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); } else { - MESSAGE("The opposing Wobbuffet is protected by MIST!"); + MESSAGE("Foe Wobbuffet is protected by MIST!"); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); } MESSAGE("Wobbuffet used Toxic!"); @@ -125,13 +125,13 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard STATUS_ICON(opponentRight, badPoison: TRUE); } else { - MESSAGE("The opposing Wobbuffet's party is protected by Safeguard!"); + MESSAGE("Foe Wobbuffet's party is protected by Safeguard!"); NOT STATUS_ICON(opponentRight, badPoison: TRUE); } } } -DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and Sticky Web from player's side") +DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and Sticky Web from player's side (Gen 6+)") { u16 move; @@ -153,14 +153,16 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and S ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); if (move == MOVE_DEFOG) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("The opposing Wobbuffet's evasiveness fell!"); - MESSAGE("The pointed stones disappeared from around your team!"); - MESSAGE("The sticky web has disappeared from the ground around your team!"); + MESSAGE("Foe Wobbuffet's evasiveness fell!"); + if (B_DEFOG_EFFECT_CLEARING >= GEN_6) { + MESSAGE("The pointed stones disappeared from around your team!"); + MESSAGE("The sticky web has disappeared from the ground around your team!"); + } } // Switch happens SWITCH_OUT_MESSAGE("Wobbuffet"); SEND_IN_MESSAGE("Wobbuffet"); - if (move != MOVE_DEFOG) { + if (move != MOVE_DEFOG || B_DEFOG_EFFECT_CLEARING <= GEN_5) { HP_BAR(playerLeft); MESSAGE("Pointed stones dug into Wobbuffet!"); MESSAGE("Wobbuffet was caught in a Sticky Web!"); @@ -197,13 +199,14 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Spikes from player ANIMATION(ANIM_TYPE_MOVE, move, player); if (move == MOVE_DEFOG) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("The opposing Wobbuffet's evasiveness fell!"); - MESSAGE("The spikes disappeared from the ground around your team!"); + MESSAGE("Foe Wobbuffet's evasiveness fell!"); + if (B_DEFOG_EFFECT_CLEARING >= GEN_6) + MESSAGE("The spikes disappeared from the ground around your team!"); } // Switch happens SWITCH_OUT_MESSAGE("Wobbuffet"); SEND_IN_MESSAGE("Wobbuffet"); - if (move != MOVE_DEFOG) { + if (move != MOVE_DEFOG || B_DEFOG_EFFECT_CLEARING <= GEN_5) { HP_BAR(player); MESSAGE("Wobbuffet is hurt by spikes!"); } @@ -216,7 +219,7 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Spikes from player } } -SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes terrain") +SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes terrain (Gen 8+)") { u16 move; @@ -225,7 +228,6 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes terrain") PARAMETRIZE { move = MOVE_MISTY_TERRAIN; } PARAMETRIZE { move = MOVE_GRASSY_TERRAIN; } GIVEN { - ASSUME(B_DEFOG_CLEARS_TERRAIN >= GEN_8); PLAYER(SPECIES_WOBBUFFET) { Speed(50); } OPPONENT(SPECIES_WOBBUFFET) { Speed(5); } } WHEN { @@ -235,19 +237,29 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes terrain") ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Wobbuffet's evasiveness fell!"); - if (move == MOVE_PSYCHIC_TERRAIN) { - MESSAGE("The weirdness disappeared from the battlefield."); - } - else if (move == MOVE_ELECTRIC_TERRAIN) { - MESSAGE("The electricity disappeared from the battlefield."); - } - else if (move == MOVE_MISTY_TERRAIN) { - MESSAGE("The mist disappeared from the battlefield."); - } - else if (move == MOVE_GRASSY_TERRAIN) { - MESSAGE("The grass disappeared from the battlefield."); + if (B_DEFOG_EFFECT_CLEARING >= GEN_8) { + if (move == MOVE_PSYCHIC_TERRAIN) { + MESSAGE("The weirdness disappeared from the battlefield."); + } + else if (move == MOVE_ELECTRIC_TERRAIN) { + MESSAGE("The electricity disappeared from the battlefield."); + } + else if (move == MOVE_MISTY_TERRAIN) { + MESSAGE("The mist disappeared from the battlefield."); + } + else if (move == MOVE_GRASSY_TERRAIN) { + MESSAGE("The grass disappeared from the battlefield."); + } + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RESTORE_BG, player); + } else { + NONE_OF { + MESSAGE("The weirdness disappeared from the battlefield."); + MESSAGE("The electricity disappeared from the battlefield."); + MESSAGE("The mist disappeared from the battlefield."); + MESSAGE("The grass disappeared from the battlefield."); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RESTORE_BG, player); + } } - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RESTORE_BG, player); } } @@ -270,18 +282,19 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Toxic Spikes from if (move == MOVE_DEFOG) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Wobbuffet's evasiveness fell!"); - MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); + if (B_DEFOG_EFFECT_CLEARING >= GEN_6) + MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); } // Switch happens MESSAGE("2 sent out Wobbuffet!"); - if (move != MOVE_DEFOG) { - MESSAGE("The opposing Wobbuffet was poisoned!"); + if (move != MOVE_DEFOG || B_DEFOG_EFFECT_CLEARING <= GEN_5) { + MESSAGE("Foe Wobbuffet was poisoned!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); STATUS_ICON(opponent, poison: TRUE); } else { NONE_OF { - MESSAGE("The opposing Wobbuffet was poisoned!"); + MESSAGE("Foe Wobbuffet was poisoned!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); STATUS_ICON(opponent, poison: TRUE); } @@ -315,9 +328,9 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Aurora Veil from p MESSAGE("Glalie's evasiveness fell!"); MESSAGE("Ally's Aurora Veil wore off!"); } - MESSAGE("The opposing Glalie used Tackle!"); + MESSAGE("Foe Glalie used Tackle!"); HP_BAR(playerLeft, captureDamage: &results[i].damagePhysical); - MESSAGE("The opposing Glalie used Gust!"); + MESSAGE("Foe Glalie used Gust!"); HP_BAR(playerRight, captureDamage: &results[i].damageSpecial); } FINALLY { EXPECT_MUL_EQ(results[1].damagePhysical, Q_4_12(1.5), results[0].damagePhysical); @@ -346,7 +359,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes everything it can" TURN { MOVE(playerLeft, MOVE_REFLECT); MOVE(playerRight, MOVE_LIGHT_SCREEN); MOVE(opponentLeft, MOVE_REFLECT); MOVE(opponentRight, MOVE_SAFEGUARD); } TURN { MOVE(playerLeft, MOVE_MIST); MOVE(playerRight, MOVE_SAFEGUARD); MOVE(opponentLeft, MOVE_MIST); MOVE(opponentRight, MOVE_DEFOG, target: playerLeft); } } SCENE { - MESSAGE("The opposing Glalie used Defog!"); + MESSAGE("Foe Glalie used Defog!"); MESSAGE("Glalie is protected by MIST!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, opponentRight); // Player side @@ -356,15 +369,17 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes everything it can" MESSAGE("Ally's Aurora Veil wore off!"); MESSAGE("Ally's Safeguard wore off!"); - MESSAGE("The spikes disappeared from the ground around your team!"); - MESSAGE("The pointed stones disappeared from around your team!"); - MESSAGE("The poison spikes disappeared from the ground around your team!"); - MESSAGE("The sticky web has disappeared from the ground around your team!"); + if (B_DEFOG_EFFECT_CLEARING >= GEN_6) { + MESSAGE("The spikes disappeared from the ground around your team!"); + MESSAGE("The pointed stones disappeared from around your team!"); + MESSAGE("The poison spikes disappeared from the ground around your team!"); + MESSAGE("The sticky web has disappeared from the ground around your team!"); - // Opponent side - MESSAGE("The spikes disappeared from the ground around the opposing team!"); - MESSAGE("The pointed stones disappeared from around the opposing team!"); - MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); - MESSAGE("The sticky web has disappeared from the ground around the opposing team!"); + // Opponent side + MESSAGE("The spikes disappeared from the ground around the opposing team!"); + MESSAGE("The pointed stones disappeared from around the opposing team!"); + MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); + MESSAGE("The sticky web has disappeared from the ground around the opposing team!"); + } } } diff --git a/test/battle/move_effect/reflect_type.c b/test/battle/move_effect/reflect_type.c index e83766779cc4..fc0fa2812a56 100644 --- a/test/battle/move_effect/reflect_type.c +++ b/test/battle/move_effect/reflect_type.c @@ -123,9 +123,9 @@ SINGLE_BATTLE_TEST("Reflect Type copies a target's dual types") ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, player); MESSAGE("Arcanine's type changed to match the Foe Poliwrath's!"); } THEN { - EXPECT_EQ(player->type1, TYPE_WATER); - EXPECT_EQ(player->type2, TYPE_FIGHTING); - EXPECT_EQ(player->type3, TYPE_MYSTERY); + EXPECT_EQ(player->types[0], TYPE_WATER); + EXPECT_EQ(player->types[1], TYPE_FIGHTING); + EXPECT_EQ(player->types[2], TYPE_MYSTERY); } } @@ -145,13 +145,13 @@ SINGLE_BATTLE_TEST("Reflect Type copies a target's pure type") ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, player); MESSAGE("Arcanine's type changed to match the Foe Sudowoodo's!"); } THEN { - EXPECT_EQ(player->type1, TYPE_ROCK); - EXPECT_EQ(player->type2, TYPE_ROCK); - EXPECT_EQ(player->type3, TYPE_MYSTERY); + EXPECT_EQ(player->types[0], TYPE_ROCK); + EXPECT_EQ(player->types[1], TYPE_ROCK); + EXPECT_EQ(player->types[2], TYPE_MYSTERY); } } -SINGLE_BATTLE_TEST("Reflect Type defaults to Normal type for the user's type1 and type2 if the target only has a 3rd type") +SINGLE_BATTLE_TEST("Reflect Type defaults to Normal type for the user's types[0] and types[1] if the target only has a 3rd type") { ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] == TYPE_PSYCHIC); ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[1] == TYPE_PSYCHIC); @@ -179,8 +179,8 @@ SINGLE_BATTLE_TEST("Reflect Type defaults to Normal type for the user's type1 an ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, player); MESSAGE("Wobbuffet's type changed to match the Foe Arcanine's!"); } THEN { - EXPECT_EQ(player->type1, TYPE_NORMAL); - EXPECT_EQ(player->type2, TYPE_NORMAL); - EXPECT_EQ(player->type3, TYPE_GRASS); + EXPECT_EQ(player->types[0], TYPE_NORMAL); + EXPECT_EQ(player->types[1], TYPE_NORMAL); + EXPECT_EQ(player->types[2], TYPE_GRASS); } } diff --git a/test/battle/move_effect/revelation_dance.c b/test/battle/move_effect/revelation_dance.c new file mode 100644 index 000000000000..489dee1c879b --- /dev/null +++ b/test/battle/move_effect/revelation_dance.c @@ -0,0 +1,149 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_REVELATION_DANCE].effect == EFFECT_REVELATION_DANCE); + ASSUME(gMovesInfo[MOVE_REVELATION_DANCE].danceMove == TRUE); + ASSUME(MoveHasAdditionalEffectSelfArg(MOVE_BURN_UP, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_FIRE)); + ASSUME(gMovesInfo[MOVE_FORESTS_CURSE].effect == EFFECT_THIRD_TYPE); + ASSUME(gMovesInfo[MOVE_FORESTS_CURSE].argument == TYPE_GRASS); + ASSUME(gMovesInfo[MOVE_ROOST].effect == EFFECT_ROOST); +} + +SINGLE_BATTLE_TEST("Revelation Dance changes its type depending on the user's 1st Type") +{ + u16 speciesPlayer; + u16 speciesOpponent; + + PARAMETRIZE { speciesPlayer = SPECIES_ORICORIO_POM_POM; speciesOpponent = SPECIES_DUGTRIO; } + PARAMETRIZE { speciesPlayer = SPECIES_ORICORIO_BAILE; speciesOpponent = SPECIES_BLASTOISE; } + PARAMETRIZE { speciesPlayer = SPECIES_ORICORIO_PAU; speciesOpponent = SPECIES_LIEPARD; } + PARAMETRIZE { speciesPlayer = SPECIES_ORICORIO_SENSU; speciesOpponent = SPECIES_PERSIAN; } + + GIVEN { + PLAYER(speciesPlayer); + OPPONENT(speciesOpponent); + } WHEN { + TURN { MOVE(player, MOVE_REVELATION_DANCE); } + } SCENE { + if (speciesPlayer == SPECIES_ORICORIO_BAILE) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, player); + HP_BAR(opponent); + MESSAGE("It's not very effective…"); + } + else { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, player); + HP_BAR(opponent); + MESSAGE("It's not very effective…"); + } + } + } +} + +SINGLE_BATTLE_TEST("Revelation Dance changes its type depending on the user's 2nd Type if it has no 1st type") +{ + GIVEN { + PLAYER(SPECIES_ORICORIO_BAILE); + OPPONENT(SPECIES_EMPOLEON); + } WHEN { + TURN { MOVE(player, MOVE_BURN_UP); } + TURN { MOVE(player, MOVE_REVELATION_DANCE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player); + HP_BAR(opponent); + NONE_OF { + MESSAGE("It's not very effective…"); + MESSAGE("It's super effective!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, player); + HP_BAR(opponent); + MESSAGE("It's not very effective…"); + } +} + +SINGLE_BATTLE_TEST("Revelation Dance changes its type depending on the user's 3rd Type if it has no 1st or 2nd type") +{ + GIVEN { + PLAYER(SPECIES_GROWLITHE); + OPPONENT(SPECIES_TREVENANT); + } WHEN { + TURN { MOVE(player, MOVE_BURN_UP); MOVE(opponent, MOVE_FORESTS_CURSE); } + TURN { MOVE(player, MOVE_REVELATION_DANCE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player); + HP_BAR(opponent); + MESSAGE("It's super effective!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FORESTS_CURSE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, player); + HP_BAR(opponent); + MESSAGE("It's not very effective…"); + } +} + +SINGLE_BATTLE_TEST("Revelation Dance becomes Typeless if its user is Typeless") +{ + u16 speciesOpponent; + + PARAMETRIZE { speciesOpponent = SPECIES_BLISSEY; } + PARAMETRIZE { speciesOpponent = SPECIES_BLASTOISE; } + PARAMETRIZE { speciesOpponent = SPECIES_CHARIZARD; } + PARAMETRIZE { speciesOpponent = SPECIES_VENUSAUR; } + PARAMETRIZE { speciesOpponent = SPECIES_GOLEM; } + PARAMETRIZE { speciesOpponent = SPECIES_AEGISLASH; } + + GIVEN { + PLAYER(SPECIES_GROWLITHE); + OPPONENT(speciesOpponent); + } WHEN { + TURN { MOVE(player, MOVE_BURN_UP); } + TURN { MOVE(player, MOVE_REVELATION_DANCE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, player); + HP_BAR(opponent); + NONE_OF { + MESSAGE("It's not very effective…"); + MESSAGE("It's super effective!"); + } + } +} + +SINGLE_BATTLE_TEST("Revelation Dance becomes Normal type if used by a Typeless Pokemon due to Roost") +{ + u16 speciesOpponent; + + PARAMETRIZE { speciesOpponent = SPECIES_SABLEYE; } + PARAMETRIZE { speciesOpponent = SPECIES_AGGRON; } + + ASSUME(B_ROOST_PURE_FLYING >= GEN_5); + + GIVEN { + PLAYER(SPECIES_ORICORIO_BAILE) { Ability(ABILITY_DANCER); } + OPPONENT(speciesOpponent); + } WHEN { + TURN { MOVE(player, MOVE_BURN_UP); MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_ROOST); MOVE(opponent, MOVE_REVELATION_DANCE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, opponent); + HP_BAR(player); + ABILITY_POPUP(player, ABILITY_DANCER); + if (speciesOpponent == SPECIES_AGGRON) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, player); + HP_BAR(opponent); + MESSAGE("It's not very effective…"); + } + else { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, player); + HP_BAR(opponent); + MESSAGE("It's not very effective…"); + } + } + } +} diff --git a/test/battle/move_effect/stomping_tantrum.c b/test/battle/move_effect/stomping_tantrum.c new file mode 100644 index 000000000000..1a5870fdd0db --- /dev/null +++ b/test/battle/move_effect/stomping_tantrum.c @@ -0,0 +1,134 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_STOMPING_TANTRUM].effect == EFFECT_STOMPING_TANTRUM); +} + +SINGLE_BATTLE_TEST("Stomping Tatrum will deal double damage if user flinched on the previous turn") +{ + s16 damage[3]; + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_STOMPING_TANTRUM); SWITCH(opponent, 1); } + TURN { MOVE(opponent, MOVE_FAKE_OUT); MOVE(player, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_STOMPING_TANTRUM); } + TURN { MOVE(player, MOVE_STOMPING_TANTRUM); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); + HP_BAR(opponent, captureDamage: &damage[0]); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, opponent); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); + HP_BAR(opponent, captureDamage: &damage[1]); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); + HP_BAR(opponent, captureDamage: &damage[2]); + } THEN { + EXPECT_MUL_EQ(damage[0], Q_4_12(2.0), damage[1]); + EXPECT_EQ(damage[0], damage[2]); + } +} + +SINGLE_BATTLE_TEST("Stomping Tatrum will deal double damage if user failed to attack due to paralysis") +{ + s16 damage[3]; + PASSES_RANDOMLY(25, 100, RNG_PARALYSIS); + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(100); Item(ITEM_POTION); }; + OPPONENT(SPECIES_WOBBUFFET) { Speed(10); Item(ITEM_LUM_BERRY); }; + } WHEN { + TURN { MOVE(player, MOVE_STOMPING_TANTRUM); MOVE(opponent, MOVE_THUNDER_WAVE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_TRICK); } + TURN { MOVE(player, MOVE_STOMPING_TANTRUM); } + TURN { MOVE(player, MOVE_STOMPING_TANTRUM); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); + HP_BAR(opponent, captureDamage: &damage[0]); + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDER_WAVE, opponent); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRICK, opponent); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); + HP_BAR(opponent, captureDamage: &damage[1]); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); + HP_BAR(opponent, captureDamage: &damage[2]); + } THEN { + EXPECT_MUL_EQ(damage[0], Q_4_12(2.0), damage[1]); + EXPECT_EQ(damage[0], damage[2]); + } +} + +SINGLE_BATTLE_TEST("Stomping Tatrum will not deal double damage if target protects") +{ + s16 damage[2]; + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_STOMPING_TANTRUM); } + TURN { MOVE(opponent, MOVE_PROTECT); MOVE(player, MOVE_STOMPING_TANTRUM); } + TURN { MOVE(player, MOVE_STOMPING_TANTRUM); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); + HP_BAR(opponent, captureDamage: &damage[0]); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_PROTECT, opponent); + MESSAGE("Foe Wobbuffet protected itself!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); + HP_BAR(opponent, captureDamage: &damage[1]); + } THEN { + EXPECT_EQ(damage[0], damage[1]); + } +} + +SINGLE_BATTLE_TEST("Stomping Tatrum will not deal double damage if it failed on the previous turn cause of Protect") +{ + s16 damage[2]; + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_BRIGHTPOWDER); }; + } WHEN { + TURN { MOVE(player, MOVE_STOMPING_TANTRUM); } + TURN { MOVE(player, MOVE_STOMPING_TANTRUM, hit: FALSE); } + TURN { MOVE(player, MOVE_STOMPING_TANTRUM); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); + HP_BAR(opponent, captureDamage: &damage[0]); + MESSAGE("Wobbuffet's attack missed!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); + HP_BAR(opponent, captureDamage: &damage[1]); + } THEN { + EXPECT_EQ(damage[0], damage[1]); + } +} + +SINGLE_BATTLE_TEST("Stomping Tatrum will deal double damage if user was immune to previous move") +{ + s16 damage[2]; + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_PIDGEY); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_STOMPING_TANTRUM); SWITCH(opponent, 1); } + TURN { MOVE(player, MOVE_STOMPING_TANTRUM); SWITCH(opponent, 0); } + TURN { MOVE(player, MOVE_STOMPING_TANTRUM); SWITCH(opponent, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); + HP_BAR(opponent, captureDamage: &damage[0]); + MESSAGE("It doesn't affect Foe Pidgey…"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); + HP_BAR(opponent, captureDamage: &damage[1]); + } THEN { + EXPECT_MUL_EQ(damage[0], Q_4_12(2.0), damage[1]); + } +} diff --git a/test/battle/move_effect/weather_ball.c b/test/battle/move_effect/weather_ball.c index 1656b60d87b0..432e5f79f737 100644 --- a/test/battle/move_effect/weather_ball.c +++ b/test/battle/move_effect/weather_ball.c @@ -78,3 +78,5 @@ SINGLE_BATTLE_TEST("Weather Ball doubles its power and turns to an Ice-type move EXPECT_MUL_EQ(results[0].damage, Q_4_12(4.0), results[1].damage); // double base power + type effectiveness. } } + +TO_DO_BATTLE_TEST("Weather Ball doesn't double its power or change type if Cloud Nine/Air Lock is on the field"); diff --git a/test/battle/terrain/electric.c b/test/battle/terrain/electric.c index 2227afdcd9e8..c39bfbbb71da 100644 --- a/test/battle/terrain/electric.c +++ b/test/battle/terrain/electric.c @@ -34,7 +34,7 @@ SINGLE_BATTLE_TEST("Electric Terrain activates Electric Seed and Mimicry") ABILITY_POPUP(opponent); MESSAGE("Foe Stunfisk's type changed to Electric!"); } THEN { - EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].type1, TYPE_ELECTRIC); + EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].types[0], TYPE_ELECTRIC); } } diff --git a/test/battle/terrain/grassy.c b/test/battle/terrain/grassy.c index 1218fd5cd9a0..a41c48aa2721 100644 --- a/test/battle/terrain/grassy.c +++ b/test/battle/terrain/grassy.c @@ -30,7 +30,7 @@ SINGLE_BATTLE_TEST("Grassy Terrain activates Grassy Seed and Mimicry") ABILITY_POPUP(opponent); MESSAGE("The opposing Stunfisk's type changed to Grass!"); } THEN { - EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].type1, TYPE_GRASS); + EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].types[0], TYPE_GRASS); } } diff --git a/test/battle/terrain/misty.c b/test/battle/terrain/misty.c index cd89b2d9abfd..fbf04fcba968 100644 --- a/test/battle/terrain/misty.c +++ b/test/battle/terrain/misty.c @@ -34,7 +34,7 @@ SINGLE_BATTLE_TEST("Misty Terrain activates Misty Seed and Mimicry") ABILITY_POPUP(opponent); MESSAGE("Foe Stunfisk's type changed to Fairy!"); } THEN { - EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].type1, TYPE_FAIRY); + EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].types[0], TYPE_FAIRY); } } diff --git a/test/battle/terrain/psychic.c b/test/battle/terrain/psychic.c index 0c13122fa65e..44a89598d22c 100644 --- a/test/battle/terrain/psychic.c +++ b/test/battle/terrain/psychic.c @@ -33,7 +33,7 @@ SINGLE_BATTLE_TEST("Psychic Terrain activates Psychic Seed and Mimicry") ABILITY_POPUP(opponent); MESSAGE("Foe Stunfisk's type changed to Psychic!"); } THEN { - EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].type1, TYPE_PSYCHIC); + EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].types[0], TYPE_PSYCHIC); } } diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 11432bd12ba3..92789710f7f0 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -1327,7 +1327,7 @@ void TestRunner_Battle_AfterLastTurn(void) } STATE->runThen = TRUE; - STATE->runFinally = STATE->runParameter + 1 == STATE->parameters; + STATE->runFinally = STATE->runParameter + 1 == STATE->parameters && STATE->runTrial + 1 >= STATE->trials; InvokeTestFunction(test); STATE->runThen = FALSE; STATE->runFinally = FALSE; @@ -1369,6 +1369,7 @@ static inline rng_value_t MakeRngValue(const u16 seed) return ISO_RANDOMIZE1(seed); #endif } + static void CB2_BattleTest_NextTrial(void) { ClearFlagAfterTest(); @@ -1452,7 +1453,7 @@ void Randomly(u32 sourceLine, u32 passes, u32 trials, struct RandomlyContext ctx { const struct BattleTest *test = GetBattleTest(); INVALID_IF(STATE->trials != 0, "PASSES_RANDOMLY can only be used once per test"); - INVALID_IF(test->resultsSize > 0, "PASSES_RANDOMLY is incompatible with results"); + INVALID_IF(test->resultsSize > 0 && STATE->parametersCount > 1, "PASSES_RANDOMLY is incompatible with results"); INVALID_IF(passes > trials, "%d passes specified, but only %d trials", passes, trials); STATE->rngTag = ctx.tag; STATE->rngTrialOffset = 0; diff --git a/tools/trainerproc/main.c b/tools/trainerproc/main.c index bd18995a2e12..b410e810b084 100644 --- a/tools/trainerproc/main.c +++ b/tools/trainerproc/main.c @@ -425,12 +425,6 @@ static bool match_eol(struct Parser *p) return true; } -__attribute__((warn_unused_result)) -static bool match_empty_line(struct Parser *p) -{ - return match_eol(p); -} - __attribute__((warn_unused_result)) static bool match_int(struct Parser *p, int *i) { @@ -457,6 +451,23 @@ static bool match_int(struct Parser *p, int *i) return true; } +__attribute__((warn_unused_result)) +static bool match_empty_line(struct Parser *p) +{ + struct Parser p_ = *p; + if (match_exact(&p_, "# ")) { + int line; + if (match_int(&p_, &line)) { + struct Token t; + match_until_eol(&p_, &t); + p_.location.line = line - 1; + *p = p_; + } + } + + return match_eol(p); +} + __attribute__((warn_unused_result)) static bool match_identifier(struct Parser *p, struct Token *t) { From 3dddc394a50ac8a129663680979483f0879bb20c Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Thu, 15 Aug 2024 09:14:05 -0500 Subject: [PATCH 31/68] Update battle_message.c --- src/battle_message.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_message.c b/src/battle_message.c index 4fa1388b801e..e2f164a55e85 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -258,7 +258,7 @@ static const u8 sText_PkmnSealedOpponentMove[] = _("{B_ATK_NAME_WITH_PREFIX} sea static const u8 sText_PkmnWantsGrudge[] = _("{B_ATK_NAME_WITH_PREFIX} wants its target\nto bear a grudge!"); static const u8 sText_PkmnLostPPGrudge[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} lost all its PP\ndue to the grudge!"); static const u8 sText_PkmnShroudedItself[] = _("{B_ATK_NAME_WITH_PREFIX} shrouded\nitself with Magic Coat!"); -static const u8 sText_PkmnMoveBounced[] = _("{B_ATK_NAME_WITH_PREFIX}\nbounced the {B_CURRENT_MOVE} back!"); +static const u8 sText_PkmnMoveBounced[] = _("{B_DEF_NAME_WITH_PREFIX}\nbounced the {B_CURRENT_MOVE} back!"); static const u8 sText_PkmnWaitsForTarget[] = _("{B_ATK_NAME_WITH_PREFIX} waits for a target\nto make a move!"); static const u8 sText_PkmnSnatchedMove[] = _("{B_DEF_NAME_WITH_PREFIX} snatched\n{B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s move!"); static const u8 sText_ElectricityWeakened[] = _("Electricity's power was weakened!"); From 37908918bb1d03153bca804b16e3e5bf2c12e210 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Thu, 15 Aug 2024 09:14:57 -0500 Subject: [PATCH 32/68] Update battle_message.c --- src/battle_message.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_message.c b/src/battle_message.c index e2f164a55e85..edc35bbd3ad8 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -566,7 +566,7 @@ static const u8 sText_PkmnSwitchedAtkAndDef[] = _("{B_ATK_NAME_WITH_PREFIX} swit static const u8 sText_PkmnsAbilitySuppressed[] = _("{B_DEF_NAME_WITH_PREFIX}'s Ability\nwas suppressed!"); static const u8 sText_ShieldedFromCriticalHits[] = _("Lucky Chant shielded {B_ATK_TEAM2} team from critical hits!"); static const u8 sText_SwitchedAtkAndSpAtk[] = _("{B_ATK_NAME_WITH_PREFIX} switched all changes\nto its Attack and Sp. Atk\pwith its target!"); -static const u8 sText_SwitchedDefAndSpDef[] = _("{B_ATK_NAME_WITH_PREFIX} switched all changes\nto its Defense andSp. Def\pwith its target!"); +static const u8 sText_SwitchedDefAndSpDef[] = _("{B_ATK_NAME_WITH_PREFIX} switched all changes\nto its Defense and Sp. Def\pwith its target!"); static const u8 sText_PkmnAcquiredAbility[] = _("{B_DEF_NAME_WITH_PREFIX} acquired\n{B_DEF_ABILITY}!"); static const u8 sText_PoisonSpikesScattered[] = _("Poison spikes were scattered on the ground\nall around {B_DEF_TEAM2} team!"); static const u8 sText_PkmnSwitchedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} switched stat changes\nwith its target!"); From 2f401b34bf8ff2138a868c54e704747a87dd307f Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Mon, 9 Sep 2024 12:27:11 -0500 Subject: [PATCH 33/68] Metronome text --- include/constants/battle_string_ids.h | 3 ++- src/battle_message.c | 2 ++ src/battle_script_commands.c | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index ce3932948b55..ca493814b77f 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -719,8 +719,9 @@ #define STRINGID_MISTSWIRLSAROUND 717 #define STRINGID_ELECTRICCURRENTISRUNNING 718 #define STRINGID_SEEMSWEIRD 719 +#define STRINGID_WAGGLINGAFINGER 720 -#define BATTLESTRINGS_COUNT 720 +#define BATTLESTRINGS_COUNT 721 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, diff --git a/src/battle_message.c b/src/battle_message.c index c7c3af53590d..68be0e5a5306 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -860,6 +860,7 @@ static const u8 sText_PkmnTerastallizedInto[] = _("{B_ATK_NAME_WITH_PREFIX} tera static const u8 sText_SupersweetAromaWafts[] = _("A supersweet aroma is wafting from\nthe syrup covering {B_ATK_NAME_WITH_PREFIX2}!"); static const u8 sText_TidyingUpComplete[] = _("Tidying up complete!"); static const u8 sText_FickleBeamDoubled[] = _("{B_ATK_NAME_WITH_PREFIX} is going all\nout for this attack!"); +static const u8 sText_WagglingAFinger[] = _("Waggling a finger let it use\n{B_CURRENT_MOVE}!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { @@ -1571,6 +1572,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_MISTSWIRLSAROUND - BATTLESTRINGS_TABLE_START] = sText_MistSwirlsAround, [STRINGID_ELECTRICCURRENTISRUNNING - BATTLESTRINGS_TABLE_START] = sText_ElectricCurrentIsRunning, [STRINGID_SEEMSWEIRD - BATTLESTRINGS_TABLE_START] = sText_SeemsWeird, + [STRINGID_WAGGLINGAFINGER - BATTLESTRINGS_TABLE_START] = sText_WagglingAFinger, }; const u16 gTrainerUsedItemStringIds[] = diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 8f917d5cbbfd..bc625e3f964e 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -12614,8 +12614,8 @@ static void Cmd_metronome(void) #endif gCurrentMove = RandomUniformExcept(RNG_METRONOME, 1, moveCount - 1, InvalidMetronomeMove); - gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; SetAtkCancellerForCalledMove(); + PrepareStringBattle(STRINGID_WAGGLINGAFINGER, gBattlerAttacker); gBattlescriptCurrInstr = GET_MOVE_BATTLESCRIPT(gCurrentMove); gBattlerTarget = GetMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE); } From bc88d188b7ec47ffa0763879895ae42dbba67367 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 9 Sep 2024 15:08:11 -0300 Subject: [PATCH 34/68] Starting to fix test text --- docs/how_to_testing_system.md | 4 +- test/battle/ability/aftermath.c | 2 +- test/battle/ability/clear_body.c | 60 ++++++------- test/battle/ability/cloud_nine.c | 2 +- test/battle/ability/comatose.c | 2 +- test/battle/ability/dancer.c | 2 +- test/battle/ability/disguise.c | 6 +- test/battle/ability/frisk.c | 2 +- test/battle/ability/gale_wings.c | 8 +- test/battle/ability/intimidate.c | 2 +- test/battle/ability/mirror_armor.c | 14 ++-- test/battle/ability/rattled.c | 6 +- test/battle/ability/tera_shell.c | 4 +- test/battle/ability/teraform_zero.c | 6 +- test/battle/ai/ai.c | 12 +-- test/battle/gimmick/dynamax.c | 98 +++++++++++----------- test/battle/gimmick/terastal.c | 26 +++--- test/battle/item_effect/increase_stat.c | 16 ++-- test/battle/move_effect/baton_pass.c | 2 +- test/battle/move_effect/corrosive_gas.c | 2 +- test/battle/move_effect/court_change.c | 24 +++--- test/battle/move_effect/defog.c | 8 +- test/battle/move_effect/embargo.c | 24 +++--- test/battle/move_effect/fling.c | 4 +- test/battle/move_effect/ion_deluge.c | 2 +- test/battle/move_effect/knock_off.c | 4 +- test/battle/move_effect/plasma_fists.c | 10 +-- test/battle/move_effect/revival_blessing.c | 8 +- test/battle/move_effect/smelling_salts.c | 2 +- test/battle/move_effect/spicy_extract.c | 2 +- test/battle/move_effect/tera_blast.c | 2 +- test/battle/move_effect/thousand_arrows.c | 4 +- test/battle/move_effect/wake_up_slap.c | 2 +- test/battle/terrain/electric.c | 10 +-- test/battle/terrain/grassy.c | 2 +- test/battle/terrain/misty.c | 10 +-- test/battle/terrain/psychic.c | 10 +-- test/battle/terrain/starting_terrain.c | 6 +- 38 files changed, 205 insertions(+), 205 deletions(-) diff --git a/docs/how_to_testing_system.md b/docs/how_to_testing_system.md index 56719458ab25..eb4174fc114c 100644 --- a/docs/how_to_testing_system.md +++ b/docs/how_to_testing_system.md @@ -452,7 +452,7 @@ Causes the test to fail if the `SCENE` command succeeds before the following com ``` // Our Wobbuffet does not Celebrate before the foe's. NOT MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ``` **NOTE**: If this condition fails, the viewable ROM freezes at the NOT command. **WARNING: `NOT` is an alias of `NONE_OF`, so it behaves surprisingly when applied to multiple commands wrapped in braces.** @@ -484,7 +484,7 @@ Causes the test to fail if one of the `SCENE` commands succeeds before the comma MESSAGE("Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet is paralyzed! It can't move!"); } - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ``` ### `PLAYER_PARTY` diff --git a/test/battle/ability/aftermath.c b/test/battle/ability/aftermath.c index 5cfd5ef0342d..119c3bbec4cd 100644 --- a/test/battle/ability/aftermath.c +++ b/test/battle/ability/aftermath.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Aftermath damages the attacker by 1/4th of its max HP if fai } WHEN { TURN {MOVE(opponent, MOVE_TACKLE);} } SCENE { - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); MESSAGE("Voltorb fainted!"); ABILITY_POPUP(player, ABILITY_AFTERMATH); diff --git a/test/battle/ability/clear_body.c b/test/battle/ability/clear_body.c index dc82be67b434..2dece95480df 100644 --- a/test/battle/ability/clear_body.c +++ b/test/battle/ability/clear_body.c @@ -220,18 +220,18 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent S if (heldItem == ITEM_IRON_BALL) { MESSAGE("Wobbuffet used Celebrate!"); if (ability == ABILITY_FULL_METAL_BODY) - MESSAGE("Foe Solgaleo used Celebrate!"); + MESSAGE("The opposing Solgaleo used Celebrate!"); else if (ability == ABILITY_WHITE_SMOKE) - MESSAGE("Foe Torkoal used Celebrate!"); + MESSAGE("The opposing Torkoal used Celebrate!"); else - MESSAGE("Foe Metang used Celebrate!"); + MESSAGE("The opposing Metang used Celebrate!"); } else { if (ability == ABILITY_FULL_METAL_BODY) - MESSAGE("Foe Solgaleo used Celebrate!"); + MESSAGE("The opposing Solgaleo used Celebrate!"); else if (ability == ABILITY_WHITE_SMOKE) - MESSAGE("Foe Torkoal used Celebrate!"); + MESSAGE("The opposing Torkoal used Celebrate!"); else - MESSAGE("Foe Metang used Celebrate!"); + MESSAGE("The opposing Metang used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); } } @@ -253,21 +253,21 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent S TURN { MOVE(player, MOVE_THUNDER_WAVE); } } SCENE { if (ability == ABILITY_FULL_METAL_BODY) - MESSAGE("Foe Solgaleo used Celebrate!"); + MESSAGE("The opposing Solgaleo used Celebrate!"); else if (ability == ABILITY_WHITE_SMOKE) - MESSAGE("Foe Torkoal used Celebrate!"); + MESSAGE("The opposing Torkoal used Celebrate!"); else - MESSAGE("Foe Metang used Celebrate!"); + MESSAGE("The opposing Metang used Celebrate!"); MESSAGE("Wobbuffet used Thunder Wave!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDER_WAVE, player); NOT ABILITY_POPUP(opponent, ability); MESSAGE("Wobbuffet used Thunder Wave!"); ONE_OF { - MESSAGE("Foe Metang used Celebrate!"); + MESSAGE("The opposing Metang used Celebrate!"); MESSAGE("Foe Metang is paralyzed! It can't move!"); - MESSAGE("Foe Solgaleo used Celebrate!"); + MESSAGE("The opposing Solgaleo used Celebrate!"); MESSAGE("Foe Solgaleo is paralyzed! It can't move!"); - MESSAGE("Foe Torkoal used Celebrate!"); + MESSAGE("The opposing Torkoal used Celebrate!"); MESSAGE("Foe Torkoal is paralyzed! It can't move!"); } } @@ -319,11 +319,11 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent r ANIMATION(ANIM_TYPE_MOVE, MOVE_SCARY_FACE, player); ABILITY_POPUP(opponent, ability); if (ability == ABILITY_FULL_METAL_BODY) - MESSAGE("Foe Solgaleo used Celebrate!"); + MESSAGE("The opposing Solgaleo used Celebrate!"); else if (ability == ABILITY_WHITE_SMOKE) - MESSAGE("Foe Torkoal used Celebrate!"); + MESSAGE("The opposing Torkoal used Celebrate!"); else - MESSAGE("Foe Metang used Celebrate!"); + MESSAGE("The opposing Metang used Celebrate!"); } } @@ -351,16 +351,16 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent T NOT ABILITY_POPUP(opponent, ability); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOPSY_TURVY, player); if (ability == ABILITY_FULL_METAL_BODY) { - MESSAGE("Foe Solgaleo used Celebrate!"); - MESSAGE("Foe Solgaleo used Celebrate!"); + MESSAGE("The opposing Solgaleo used Celebrate!"); + MESSAGE("The opposing Solgaleo used Celebrate!"); } else if (ability == ABILITY_WHITE_SMOKE) { - MESSAGE("Foe Torkoal used Celebrate!"); - MESSAGE("Foe Torkoal used Celebrate!"); + MESSAGE("The opposing Torkoal used Celebrate!"); + MESSAGE("The opposing Torkoal used Celebrate!"); } else { - MESSAGE("Foe Metang used Celebrate!"); - MESSAGE("Foe Metang used Celebrate!"); + MESSAGE("The opposing Metang used Celebrate!"); + MESSAGE("The opposing Metang used Celebrate!"); } MESSAGE("Wobbuffet used Scary Face!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SCARY_FACE, player); @@ -387,28 +387,28 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent S TURN{ } } SCENE { if (ability == ABILITY_FULL_METAL_BODY) - MESSAGE("Foe Solgaleo used Agility!"); + MESSAGE("The opposing Solgaleo used Agility!"); else if (ability == ABILITY_WHITE_SMOKE) - MESSAGE("Foe Torkoal used Agility!"); + MESSAGE("The opposing Torkoal used Agility!"); else - MESSAGE("Foe Metang used Agility!"); + MESSAGE("The opposing Metang used Agility!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_AGILITY, opponent); MESSAGE("Wobbuffet used Celebrate!"); if (ability == ABILITY_FULL_METAL_BODY) - MESSAGE("Foe Solgaleo used Celebrate!"); + MESSAGE("The opposing Solgaleo used Celebrate!"); else if (ability == ABILITY_WHITE_SMOKE) - MESSAGE("Foe Torkoal used Celebrate!"); + MESSAGE("The opposing Torkoal used Celebrate!"); else - MESSAGE("Foe Metang used Celebrate!"); + MESSAGE("The opposing Metang used Celebrate!"); MESSAGE("Wobbuffet used Spectral Thief!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPECTRAL_THIEF, player); NOT ABILITY_POPUP(opponent, ability); MESSAGE("Wobbuffet used Celebrate!"); if (ability == ABILITY_FULL_METAL_BODY) - MESSAGE("Foe Solgaleo used Celebrate!"); + MESSAGE("The opposing Solgaleo used Celebrate!"); else if (ability == ABILITY_WHITE_SMOKE) - MESSAGE("Foe Torkoal used Celebrate!"); + MESSAGE("The opposing Torkoal used Celebrate!"); else - MESSAGE("Foe Metang used Celebrate!"); + MESSAGE("The opposing Metang used Celebrate!"); } } diff --git a/test/battle/ability/cloud_nine.c b/test/battle/ability/cloud_nine.c index 887769a5ec7b..da21f86d3296 100644 --- a/test/battle/ability/cloud_nine.c +++ b/test/battle/ability/cloud_nine.c @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Cloud Nine/Air Lock prevent basic weather effects, but witho } SCENE { ABILITY_POPUP(player, ability); MESSAGE("The effects of weather disappeared."); - MESSAGE("Foe Wobbuffet used Sandstorm!"); + MESSAGE("The opposing Wobbuffet used Sandstorm!"); MESSAGE("The sandstorm rages."); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SANDSTORM_CONTINUES); NONE_OF { diff --git a/test/battle/ability/comatose.c b/test/battle/ability/comatose.c index cc65e9afac7e..0e6d3382b071 100644 --- a/test/battle/ability/comatose.c +++ b/test/battle/ability/comatose.c @@ -45,7 +45,7 @@ SINGLE_BATTLE_TEST("Comatose may be suppressed if pokemon transformed into a pok } SCENE { MESSAGE("Komala is drowsing!"); MESSAGE("Komala used Gastro Acid!"); - MESSAGE("Foe Ditto used Transform!"); + MESSAGE("The opposing Ditto used Transform!"); MESSAGE("Foe Ditto transformed into Komala!"); ANIMATION(ANIM_TYPE_MOVE, move, player); diff --git a/test/battle/ability/dancer.c b/test/battle/ability/dancer.c index 660a719c6928..dcb7a9eac8d2 100644 --- a/test/battle/ability/dancer.c +++ b/test/battle/ability/dancer.c @@ -121,7 +121,7 @@ DOUBLE_BATTLE_TEST("Dancer still triggers if another dancer flinches") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); } ABILITY_POPUP(opponentLeft, ABILITY_DANCER); - MESSAGE("Foe Oricorio used Dragon Dance!"); + MESSAGE("The opposing Oricorio used Dragon Dance!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, opponentLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); } diff --git a/test/battle/ability/disguise.c b/test/battle/ability/disguise.c index 5ab20353252f..f9f1955f72fc 100644 --- a/test/battle/ability/disguise.c +++ b/test/battle/ability/disguise.c @@ -146,11 +146,11 @@ SINGLE_BATTLE_TEST("Disguised Mimikyu's types revert back to Ghost/Fairy when Di TURN { MOVE(opponent, MOVE_TACKLE); } TURN { MOVE(opponent, MOVE_SHADOW_CLAW); } } SCENE { - MESSAGE("Foe Wobbuffet used Soak!"); + MESSAGE("The opposing Wobbuffet used Soak!"); MESSAGE("Mimikyu transformed into the Water type!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); ABILITY_POPUP(player, ABILITY_DISGUISE); - MESSAGE("Foe Wobbuffet used Shadow Claw!"); + MESSAGE("The opposing Wobbuffet used Shadow Claw!"); MESSAGE("It's super effective!"); } } diff --git a/test/battle/ability/frisk.c b/test/battle/ability/frisk.c index 385ab7e1f909..ea22117111e2 100644 --- a/test/battle/ability/frisk.c +++ b/test/battle/ability/frisk.c @@ -51,7 +51,7 @@ DOUBLE_BATTLE_TEST("Frisk triggers for player in a Double Battle after switching } WHEN { TURN { MOVE(opponentLeft, MOVE_POUND, target: target); SEND_OUT(target, 2); } } SCENE { - MESSAGE("Foe Wynaut used Pound!"); + MESSAGE("The opposing Wynaut used Pound!"); MESSAGE("Wobbuffet fainted!"); ABILITY_POPUP(target, ABILITY_FRISK); MESSAGE("Furret frisked Foe Wynaut and found its Potion!"); diff --git a/test/battle/ability/gale_wings.c b/test/battle/ability/gale_wings.c index 74e23397ab1d..eff458964927 100644 --- a/test/battle/ability/gale_wings.c +++ b/test/battle/ability/gale_wings.c @@ -74,16 +74,16 @@ SINGLE_BATTLE_TEST("Gale Wings doesn't increase priority of Flying-type Natural } SCENE { MESSAGE("Wobbuffet used Celebrate!"); if (move == MOVE_NATURAL_GIFT) { - MESSAGE("Foe Talonflame used Natural Gift!"); + MESSAGE("The opposing Talonflame used Natural Gift!"); } else if (move == MOVE_JUDGMENT) { - MESSAGE("Foe Talonflame used Judgment!"); + MESSAGE("The opposing Talonflame used Judgment!"); } else if (move == MOVE_HIDDEN_POWER) { - MESSAGE("Foe Talonflame used Hidden Power!"); + MESSAGE("The opposing Talonflame used Hidden Power!"); } else { - MESSAGE("Foe Talonflame used Tera Blast!"); + MESSAGE("The opposing Talonflame used Tera Blast!"); } } } diff --git a/test/battle/ability/intimidate.c b/test/battle/ability/intimidate.c index d2d7bc4af706..e6efbd9ddfb7 100644 --- a/test/battle/ability/intimidate.c +++ b/test/battle/ability/intimidate.c @@ -126,7 +126,7 @@ SINGLE_BATTLE_TEST("Intimidate and Eject Button force the opponent to Attack") MESSAGE("Foe Hitmontop's Intimidate cuts Wobbuffet's attack!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); - MESSAGE("Foe Hitmontop used Tackle!"); + MESSAGE("The opposing Hitmontop used Tackle!"); } } } diff --git a/test/battle/ability/mirror_armor.c b/test/battle/ability/mirror_armor.c index 327b493a35d4..6f63ad0daaab 100644 --- a/test/battle/ability/mirror_armor.c +++ b/test/battle/ability/mirror_armor.c @@ -55,7 +55,7 @@ SINGLE_BATTLE_TEST("Mirror Armor triggers even if the attacking Pokemon also has } WHEN { TURN { MOVE(opponent, MOVE_LEER); } } SCENE { - MESSAGE("Foe Corviknight used Leer!"); + MESSAGE("The opposing Corviknight used Leer!"); ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); @@ -74,7 +74,7 @@ SINGLE_BATTLE_TEST("Mirror Armor doesn't lower the stats of an attacking Pokemon } WHEN { TURN { MOVE(opponent, MOVE_LEER); } } SCENE { - MESSAGE("Foe Wynaut used Leer!"); + MESSAGE("The opposing Wynaut used Leer!"); ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); MESSAGE("Foe Wynaut's Clear Body prevents stat loss!"); @@ -113,9 +113,9 @@ SINGLE_BATTLE_TEST("Mirror Armor doesn't lower the stats of an attacking Pokemon TURN { MOVE(opponent, MOVE_SUBSTITUTE); } TURN { MOVE(opponent, MOVE_LEER); } } SCENE { - MESSAGE("Foe Wynaut used Substitute!"); + MESSAGE("The opposing Wynaut used Substitute!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, opponent); - MESSAGE("Foe Wynaut used Leer!"); + MESSAGE("The opposing Wynaut used Leer!"); ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); } THEN { @@ -132,7 +132,7 @@ SINGLE_BATTLE_TEST("Mirror Armor raises the stat of an attacking Pokemon with Co } WHEN { TURN { MOVE(opponent, MOVE_LEER); } } SCENE { - MESSAGE("Foe Shuckle used Leer!"); + MESSAGE("The opposing Shuckle used Leer!"); ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); MESSAGE("Foe Shuckle's Defense rose!"); @@ -156,7 +156,7 @@ SINGLE_BATTLE_TEST("Mirror Armor doesn't lower the stat of the attacking Pokemon MESSAGE("Corviknight used Screech!"); MESSAGE("Corviknight used Screech!"); MESSAGE("Corviknight used Screech!"); - MESSAGE("Foe Wynaut used Leer!"); + MESSAGE("The opposing Wynaut used Leer!"); ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); MESSAGE("Foe Wynaut's Defense won't go lower!"); @@ -186,7 +186,7 @@ DOUBLE_BATTLE_TEST("Mirror Armor lowers Speed of the partner Pokemon after Court TURN { } } SCENE { MESSAGE("Wobbuffet used Sticky Web!"); - MESSAGE("Foe Wynaut used Court Change!"); + MESSAGE("The opposing Wynaut used Court Change!"); MESSAGE("Foe Wynaut swapped the battle effects affecting each side!"); SEND_IN_MESSAGE("Corviknight"); MESSAGE("Corviknight was caught in a Sticky Web!"); diff --git a/test/battle/ability/rattled.c b/test/battle/ability/rattled.c index fed99b775d1e..3c05a9fc2b5b 100644 --- a/test/battle/ability/rattled.c +++ b/test/battle/ability/rattled.c @@ -34,10 +34,10 @@ SINGLE_BATTLE_TEST("Rattled boosts speed by 1 when hit by Bug, Dark or Ghost typ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); MESSAGE("Foe Sudowoodo's Speed rose!"); } - MESSAGE("Foe Sudowoodo used Celebrate!"); + MESSAGE("The opposing Sudowoodo used Celebrate!"); // Sudowoodo is now faster if (move != MOVE_TACKLE){ - MESSAGE("Foe Sudowoodo used Celebrate!"); + MESSAGE("The opposing Sudowoodo used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, move, player); HP_BAR(opponent); ABILITY_POPUP(opponent, ABILITY_RATTLED); @@ -47,7 +47,7 @@ SINGLE_BATTLE_TEST("Rattled boosts speed by 1 when hit by Bug, Dark or Ghost typ else { ANIMATION(ANIM_TYPE_MOVE, move, player); HP_BAR(opponent); - MESSAGE("Foe Sudowoodo used Celebrate!"); + MESSAGE("The opposing Sudowoodo used Celebrate!"); } } } diff --git a/test/battle/ability/tera_shell.c b/test/battle/ability/tera_shell.c index 138a56f9b4eb..08a9ad1cd86b 100644 --- a/test/battle/ability/tera_shell.c +++ b/test/battle/ability/tera_shell.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Tera Shell makes all moves against Terapagos not very effect TURN { MOVE(opponent, MOVE_TACKLE); } } SCENE { if (hp == 100) { - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); ABILITY_POPUP(player, ABILITY_TERA_SHELL); MESSAGE("Terapagos made its shell gleam! It's distorting type matchups!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Tera Shell makes all hits of multi-hit moves against Terapag } WHEN { TURN { MOVE(opponent, MOVE_DOUBLE_HIT); } } SCENE { - MESSAGE("Foe Wobbuffet used Double Hit!"); + MESSAGE("The opposing Wobbuffet used Double Hit!"); ABILITY_POPUP(player, ABILITY_TERA_SHELL); MESSAGE("Terapagos made its shell gleam! It's distorting type matchups!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_HIT, opponent); diff --git a/test/battle/ability/teraform_zero.c b/test/battle/ability/teraform_zero.c index 6540515322fb..819d0eef3d16 100644 --- a/test/battle/ability/teraform_zero.c +++ b/test/battle/ability/teraform_zero.c @@ -46,7 +46,7 @@ SINGLE_BATTLE_TEST("Teraform Zero can be replaced") } WHEN { TURN { MOVE(opponent, MOVE_WORRY_SEED); MOVE(player, MOVE_REST, gimmick: GIMMICK_TERA); } } SCENE { - MESSAGE("Foe Whimsicott used Worry Seed!"); + MESSAGE("The opposing Whimsicott used Worry Seed!"); MESSAGE("Terapagos acquired Insomnia!"); MESSAGE("Terapagos used Rest!"); ABILITY_POPUP(player, ABILITY_INSOMNIA); @@ -63,7 +63,7 @@ SINGLE_BATTLE_TEST("Teraform Zero cannot be swapped") } WHEN { TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_SKILL_SWAP); } } SCENE { - MESSAGE("Foe Wobbuffet used Skill Swap!"); + MESSAGE("The opposing Wobbuffet used Skill Swap!"); MESSAGE("But it failed!"); } } @@ -77,7 +77,7 @@ SINGLE_BATTLE_TEST("Teraform Zero cannot be copied") } WHEN { TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_ROLE_PLAY); } } SCENE { - MESSAGE("Foe Wobbuffet used Role Play!"); + MESSAGE("The opposing Wobbuffet used Role Play!"); MESSAGE("But it failed!"); } } diff --git a/test/battle/ai/ai.c b/test/battle/ai/ai.c index a19481c7ed3a..7f1a46f06a71 100644 --- a/test/battle/ai/ai.c +++ b/test/battle/ai/ai.c @@ -419,7 +419,7 @@ AI_DOUBLE_BATTLE_TEST("AI will not use Helping Hand if partner does not have any SCORE_LT_VAL(opponentLeft, MOVE_HELPING_HAND, AI_SCORE_DEFAULT, target:opponentLeft); } } SCENE { - NOT MESSAGE("Foe Wobbuffet used Helping Hand!"); + NOT MESSAGE("The opposing Wobbuffet used Helping Hand!"); } } @@ -448,7 +448,7 @@ AI_DOUBLE_BATTLE_TEST("AI will not use a status move if partner already chose He SCORE_LT_VAL(opponentRight, statusMove, AI_SCORE_DEFAULT, target:opponentLeft); } } SCENE { - MESSAGE("Foe Wobbuffet used Helping Hand!"); + MESSAGE("The opposing Wobbuffet used Helping Hand!"); } } @@ -567,8 +567,8 @@ AI_SINGLE_BATTLE_TEST("AI will only choose Surf 1/3 times if the opposing mon ha TURN { EXPECT_MOVE(opponent, MOVE_SURF); } TURN { EXPECT_MOVE(opponent, MOVE_SURF); } } SCENE { - MESSAGE("Foe Lanturn used Surf!"); - MESSAGE("Foe Lanturn used Surf!"); + MESSAGE("The opposing Lanturn used Surf!"); + MESSAGE("The opposing Lanturn used Surf!"); } } @@ -584,8 +584,8 @@ AI_SINGLE_BATTLE_TEST("AI will choose Thunderbolt then Surf 2/3 times if the opp TURN { EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); } TURN { EXPECT_MOVE(opponent, MOVE_SURF); } } SCENE { - MESSAGE("Foe Lanturn used Thunderbolt!"); - MESSAGE("Foe Lanturn used Surf!"); + MESSAGE("The opposing Lanturn used Thunderbolt!"); + MESSAGE("The opposing Lanturn used Surf!"); } } diff --git a/test/battle/gimmick/dynamax.c b/test/battle/gimmick/dynamax.c index f9865f7b6c52..14117ac503aa 100644 --- a/test/battle/gimmick/dynamax.c +++ b/test/battle/gimmick/dynamax.c @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamax increases HP and max HP by 1.5x", u16 hp) ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_DYNAMAX_GROWTH, player); MESSAGE("Wobbuffet used Max Strike!"); } - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } THEN { results[i].hp = player->hp; } FINALLY { @@ -44,7 +44,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamax expires after three turns", u16 hp) MESSAGE("Wobbuffet used Max Strike!"); else MESSAGE("Wobbuffet used Tackle!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); } if (dynamax) // Expect to have visual reversion at the end. ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); @@ -64,7 +64,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot be flinched") } WHEN { TURN { MOVE(opponent, MOVE_FAKE_OUT); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); } } SCENE { - MESSAGE("Foe Wobbuffet used Fake Out!"); + MESSAGE("The opposing Wobbuffet used Fake Out!"); NONE_OF { MESSAGE("Wobbuffet flinched!"); } MESSAGE("Wobbuffet used Max Strike!"); } @@ -80,7 +80,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot be hit by weight-based mo TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_HEAVY_SLAM); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Heavy Slam!"); + MESSAGE("The opposing Wobbuffet used Heavy Slam!"); MESSAGE("The move was blocked by the power of Dynamax!"); NONE_OF { HP_BAR(player); } } @@ -96,7 +96,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot be hit by OHKO moves") TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_FISSURE); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Machamp used Fissure!"); + MESSAGE("The opposing Machamp used Fissure!"); MESSAGE("Wobbuffet is unaffected!"); NONE_OF { HP_BAR(player); } } @@ -111,7 +111,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by Destiny Bond } WHEN { TURN { MOVE(opponent, MOVE_DESTINY_BOND); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); } } SCENE { - MESSAGE("Foe Wobbuffet used Destiny Bond!"); + MESSAGE("The opposing Wobbuffet used Destiny Bond!"); MESSAGE("Wobbuffet used Max Strike!"); MESSAGE("Foe Wobbuffet fainted!"); NONE_OF { HP_BAR(player); } @@ -126,7 +126,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are affected by Grudge") } WHEN { TURN { MOVE(opponent, MOVE_GRUDGE); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); } } SCENE { - MESSAGE("Foe Wobbuffet used Grudge!"); + MESSAGE("The opposing Wobbuffet used Grudge!"); MESSAGE("Wobbuffet used Max Strike!"); MESSAGE("Wobbuffet's Tackle lost all its PP due to the GRUDGE!"); MESSAGE("Foe Wobbuffet fainted!"); @@ -146,11 +146,11 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by phazing move TURN { MOVE(opponent, MOVE_WHIRLWIND); MOVE(player, MOVE_TACKLE); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Dragon Tail!"); + MESSAGE("The opposing Wobbuffet used Dragon Tail!"); HP_BAR(player); MESSAGE("The move was blocked by the power of Dynamax!"); MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Whirlwind!"); + MESSAGE("The opposing Wobbuffet used Whirlwind!"); MESSAGE("The move was blocked by the power of Dynamax!"); } } @@ -166,7 +166,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by phazing move TURN { MOVE(opponent, MOVE_DRAGON_TAIL); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); SEND_OUT(player, 1); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Dragon Tail!"); + MESSAGE("The opposing Wobbuffet used Dragon Tail!"); HP_BAR(player); MESSAGE("Wobbuffet fainted!"); NOT MESSAGE("The move was blocked by the power of Dynamax!"); @@ -203,7 +203,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can be switched out by Eject But TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_TACKLE); SEND_OUT(player, 1); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); MESSAGE("Wobbuffet is switched out with the Eject Button!"); } THEN { @@ -220,7 +220,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot have their ability swappe TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_SKILL_SWAP); } } SCENE { MESSAGE("Miltank used Max Strike!"); - MESSAGE("Foe Runerigus used Skill Swap!"); + MESSAGE("The opposing Runerigus used Skill Swap!"); MESSAGE("But it failed!"); } THEN { EXPECT_EQ(player->ability, ABILITY_SCRAPPY); @@ -236,7 +236,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can have their ability changed o TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_SIMPLE_BEAM); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Simple Beam!"); + MESSAGE("The opposing Wobbuffet used Simple Beam!"); MESSAGE("Wobbuffet acquired Simple!"); } THEN { EXPECT_EQ(player->ability, ABILITY_SIMPLE); @@ -253,7 +253,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are immune to Encore") TURN { MOVE(player, MOVE_EMBER); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Encore!"); + MESSAGE("The opposing Wobbuffet used Encore!"); MESSAGE("But it failed!"); MESSAGE("Wobbuffet used Max Flare!"); } @@ -273,7 +273,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can be encored immediately after MESSAGE("Wobbuffet used Max Knuckle!"); MESSAGE("Wobbuffet used Max Knuckle!"); MESSAGE("Wobbuffet used Max Knuckle!"); - MESSAGE("Foe Wobbuffet used Encore!"); + MESSAGE("The opposing Wobbuffet used Encore!"); MESSAGE("Wobbuffet used Arm Thrust!"); } } @@ -288,7 +288,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon's Max Moves cannot be disabled") TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_DISABLE); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Disable!"); + MESSAGE("The opposing Wobbuffet used Disable!"); MESSAGE("But it failed!"); } } @@ -306,9 +306,9 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can have base moves disabled on TURN {} TURN { MOVE(player, MOVE_TACKLE, allowed: FALSE); MOVE(player, MOVE_CELEBRATE); } } SCENE { - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Tackle!"); - MESSAGE("Foe Wobbuffet used Disable!"); + MESSAGE("The opposing Wobbuffet used Disable!"); MESSAGE("Wobbuffet's Tackle was disabled!"); MESSAGE("Wobbuffet used Max Strike!"); } @@ -323,7 +323,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are immune to Torment") TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_TORMENT); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Torment!"); + MESSAGE("The opposing Wobbuffet used Torment!"); MESSAGE("But it failed!"); } } @@ -338,7 +338,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not immune to Knock Off") TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_KNOCK_OFF); } } SCENE { MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Knock Off!"); + MESSAGE("The opposing Wobbuffet used Knock Off!"); MESSAGE("Foe Wobbuffet knocked off Wobbuffet's Potion!"); } THEN { EXPECT_EQ(player->item, ITEM_NONE); @@ -357,7 +357,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon lose their substitutes") MESSAGE("Wobbuffet used Substitute!"); MESSAGE("Wobbuffet made a SUBSTITUTE!"); MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); HP_BAR(player); } } @@ -427,9 +427,9 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Feint bypasses Max Guard but doesn't break it") } } SCENE { MESSAGE("Wobbuffet used Max Guard!"); - MESSAGE("Foe Wobbuffet used Feint!"); + MESSAGE("The opposing Wobbuffet used Feint!"); HP_BAR(playerLeft); - MESSAGE("Foe Wynaut used Tackle!"); + MESSAGE("The opposing Wynaut used Tackle!"); NONE_OF { HP_BAR(playerLeft); } } } @@ -537,7 +537,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Endeavor uses a Pokemon's non-Dynamax HP", s16 dam } WHEN { TURN { MOVE(opponent, MOVE_ENDEAVOR); MOVE(player, MOVE_TACKLE, gimmick: dynamax); } } SCENE { - MESSAGE("Foe Wobbuffet used Endeavor!"); + MESSAGE("The opposing Wobbuffet used Endeavor!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { EXPECT_EQ(results[0].damage, results[1].damage); @@ -556,7 +556,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Super Fang uses a Pokemon's non-Dynamax HP", s16 d } WHEN { TURN { MOVE(opponent, MOVE_SUPER_FANG); MOVE(player, MOVE_TACKLE, gimmick: dynamax); } } SCENE { - MESSAGE("Foe Wobbuffet used Super Fang!"); + MESSAGE("The opposing Wobbuffet used Super Fang!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { EXPECT_EQ(results[0].damage, results[1].damage); @@ -575,7 +575,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Pain Split uses a Pokemon's non-Dynamax HP", s16 d } WHEN { TURN { MOVE(opponent, MOVE_PAIN_SPLIT); MOVE(player, MOVE_TACKLE, gimmick: dynamax); } } SCENE { - MESSAGE("Foe Wobbuffet used Pain Split!"); + MESSAGE("The opposing Wobbuffet used Pain Split!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { EXPECT_EQ(results[0].damage, results[1].damage); @@ -614,7 +614,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Heal Pulse heals based on a Pokemon's non-Dynamax } WHEN { TURN { MOVE(opponent, MOVE_HEAL_PULSE); MOVE(player, MOVE_TACKLE, gimmick: dynamax); } } SCENE { - MESSAGE("Foe Wobbuffet used Heal Pulse!"); + MESSAGE("The opposing Wobbuffet used Heal Pulse!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { EXPECT_EQ(results[0].damage, results[1].damage); @@ -634,7 +634,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Strike lowers single opponent's speed") TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_TACKLE); } } SCENE { // turn 1 - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); MESSAGE("Wobbuffet used Max Strike!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); MESSAGE("Foe Wobbuffet's Speed fell!"); @@ -664,8 +664,8 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Max Strike lowers both opponents' speed") MOVE(opponentRight, MOVE_TACKLE, target: playerLeft); } } SCENE { // turn 1 - MESSAGE("Foe Wobbuffet used Tackle!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); MESSAGE("Wobbuffet used Max Strike!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); MESSAGE("Foe Wobbuffet's Speed fell!"); @@ -677,8 +677,8 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Max Strike lowers both opponents' speed") MESSAGE("Foe Wobbuffet's Speed fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); MESSAGE("Foe Wobbuffet's Speed fell!"); - MESSAGE("Foe Wobbuffet used Tackle!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); } } @@ -709,8 +709,8 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Max Knuckle raises both allies' attack") MESSAGE("Wynaut's Attack rose!"); MESSAGE("Wynaut used Tackle!"); HP_BAR(opponentRight, captureDamage: &damage[1]); - MESSAGE("Foe Wobbuffet used Celebrate!"); - MESSAGE("Foe Wynaut used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wynaut used Celebrate!"); // turn 2 MESSAGE("Wobbuffet used Max Knuckle!"); HP_BAR(opponentLeft, captureDamage: &damage[2]); @@ -737,7 +737,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Flare sets up sunlight") } SCENE { MESSAGE("Wobbuffet used Max Flare!"); MESSAGE("The sunlight got bright!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SUN_CONTINUES); } } @@ -753,7 +753,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Geyser sets up heavy rain") } SCENE { MESSAGE("Wobbuffet used Max Geyser!"); MESSAGE("It started to rain!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RAIN_CONTINUES); } } @@ -769,7 +769,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Hailstorm sets up hail") } SCENE { MESSAGE("Wobbuffet used Max Hailstorm!"); MESSAGE("It started to hail!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HAIL_CONTINUES); } } @@ -785,7 +785,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Rockfall sets up a sandstorm") } SCENE { MESSAGE("Wobbuffet used Max Rockfall!"); MESSAGE("A sandstorm brewed!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SANDSTORM_CONTINUES); } } @@ -821,7 +821,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Mindstorm sets up Psychic Terrain") TURN { MOVE(opponent, MOVE_EXTREME_SPEED); MOVE(player, MOVE_PSYCHIC, gimmick: GIMMICK_DYNAMAX); } TURN { MOVE(opponent, MOVE_EXTREME_SPEED); MOVE(player, MOVE_PSYCHIC); } } SCENE { - MESSAGE("Foe Wobbuffet used Extreme Speed!"); + MESSAGE("The opposing Wobbuffet used Extreme Speed!"); MESSAGE("Wobbuffet used Max Mindstorm!"); MESSAGE("Foe Wobbuffet cannot use Extreme Speed!"); MESSAGE("Wobbuffet used Max Mindstorm!"); @@ -838,7 +838,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Lightning sets up Electric Terrain") TURN { MOVE(player, MOVE_THUNDERBOLT, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_SPORE); } } SCENE { MESSAGE("Wobbuffet used Max Lightning!"); - MESSAGE("Foe Wobbuffet used Spore!"); + MESSAGE("The opposing Wobbuffet used Spore!"); MESSAGE("Wobbuffet surrounds itself with electrified terrain!"); } } @@ -853,7 +853,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Starfall sets up Misty Terrain") TURN { MOVE(player, MOVE_MOONBLAST, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_TOXIC); } } SCENE { MESSAGE("Wobbuffet used Max Starfall!"); - MESSAGE("Foe Wobbuffet used Toxic!"); + MESSAGE("The opposing Wobbuffet used Toxic!"); MESSAGE("Wobbuffet surrounds itself with a protective mist!"); } } @@ -898,7 +898,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Steelsurge sets up sharp steel") MESSAGE("2 sent out Hatterene!"); MESSAGE("Sharp steel bit into Foe Hatterene!"); // turn 4 - MESSAGE("Foe Hatterene used Defog!"); + MESSAGE("The opposing Hatterene used Defog!"); MESSAGE("The sharp steel disappeared from the ground around the opposing team!"); } THEN { EXPECT_MUL_EQ(opponent->maxHP, Q_4_12(0.75), opponent->hp); @@ -1171,11 +1171,11 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Meltdown torments both opponents for 3 turns MESSAGE("Melmetal used G-Max Meltdown!"); MESSAGE("Foe Wobbuffet was subjected to torment!"); MESSAGE("Foe Wynaut was subjected to torment!"); - MESSAGE("Foe Wobbuffet used Splash!"); - MESSAGE("Foe Wynaut used Splash!"); + MESSAGE("The opposing Wobbuffet used Splash!"); + MESSAGE("The opposing Wynaut used Splash!"); // turn 2 - MESSAGE("Foe Wobbuffet used Celebrate!"); - MESSAGE("Foe Wynaut used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wynaut used Celebrate!"); // end of turn 3 MESSAGE("Foe Wobbuffet is tormented no more!"); MESSAGE("Foe Wynaut is tormented no more!"); @@ -1395,7 +1395,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Depletion takes away 2 PP from the target's } WHEN { TURN { MOVE(playerLeft, MOVE_DRAGON_CLAW, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); } } SCENE { - MESSAGE("Foe Sableye used Celebrate!"); + MESSAGE("The opposing Sableye used Celebrate!"); MESSAGE("Duraludon used G-Max Depletion!"); MESSAGE("Reduced Foe Sableye's Celebrate by 2!"); } @@ -1422,7 +1422,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max One Blow bypasses Max Guard for full damage" MOVE(opponentLeft, MOVE_PSYCHIC, target: playerLeft, gimmick: GIMMICK_DYNAMAX); } } SCENE { if (protect) - MESSAGE("Foe Wobbuffet used Max Guard!"); + MESSAGE("The opposing Wobbuffet used Max Guard!"); MESSAGE("Urshifu used G-Max One Blow!"); HP_BAR(opponentLeft, captureDamage: &results[i].damage); } FINALLY { @@ -1488,7 +1488,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Attacks prints a message when hitting into Max TURN { MOVE(player, MOVE_GROWL, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); } } SCENE { MESSAGE("Wobbuffet used Max Guard!"); - MESSAGE("Foe Wobbuffet used Max Strike!"); + MESSAGE("The opposing Wobbuffet used Max Strike!"); } } diff --git a/test/battle/gimmick/terastal.c b/test/battle/gimmick/terastal.c index 1b50bc4bcc3c..435d5273ec22 100644 --- a/test/battle/gimmick/terastal.c +++ b/test/battle/gimmick/terastal.c @@ -199,7 +199,7 @@ SINGLE_BATTLE_TEST("(TERA) Terastallization changes type effectiveness", s16 dam } WHEN { TURN { MOVE(player, MOVE_CELEBRATE, gimmick: tera); MOVE(opponent, MOVE_WATER_GUN); } } SCENE { - MESSAGE("Foe Wobbuffet used Water Gun!"); + MESSAGE("The opposing Wobbuffet used Water Gun!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_GUN, opponent); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { @@ -215,7 +215,7 @@ SINGLE_BATTLE_TEST("(TERA) Terastallization changes type effectiveness") } WHEN { TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_EARTHQUAKE); } } SCENE { - MESSAGE("Foe Wobbuffet used Earthquake!"); + MESSAGE("The opposing Wobbuffet used Earthquake!"); MESSAGE("It doesn't affect Wobbuffet…"); NOT { HP_BAR(player); } } @@ -234,11 +234,11 @@ SINGLE_BATTLE_TEST("(TERA) Terastallization persists across switches") TURN { MOVE(opponent, MOVE_EARTHQUAKE); } } SCENE { // turn 1 - MESSAGE("Foe Wobbuffet used Earthquake!"); + MESSAGE("The opposing Wobbuffet used Earthquake!"); MESSAGE("It doesn't affect Wobbuffet…"); NOT { HP_BAR(player); } // turn 4 - MESSAGE("Foe Wobbuffet used Earthquake!"); + MESSAGE("The opposing Wobbuffet used Earthquake!"); MESSAGE("It doesn't affect Wobbuffet…"); NOT { HP_BAR(player); } } @@ -271,7 +271,7 @@ SINGLE_BATTLE_TEST("(TERA) Roost does not remove the user's Flying type while Te } SCENE { MESSAGE("Zapdos used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); - MESSAGE("Foe Wobbuffet used Ice Beam!"); + MESSAGE("The opposing Wobbuffet used Ice Beam!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ICE_BEAM, opponent); MESSAGE("It's super effective!"); } @@ -346,7 +346,7 @@ SINGLE_BATTLE_TEST("(TERA) Reflect Type copies a Terastallized Pokemon's Tera Ty TURN { MOVE(player, MOVE_TACKLE); } } SCENE { // turn 2 - MESSAGE("Foe Wobbuffet used Reflect Type!"); + MESSAGE("The opposing Wobbuffet used Reflect Type!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, opponent); // turn 3 MESSAGE("Wobbuffet used Tackle!"); @@ -365,10 +365,10 @@ SINGLE_BATTLE_TEST("(TERA) Synchronoise uses a Terastallized Pokemon's Tera Type TURN { MOVE(opponent, MOVE_SYNCHRONOISE, gimmick: GIMMICK_TERA); } } SCENE { // turn 1 - MESSAGE("Foe Wobbuffet used Synchronoise!"); + MESSAGE("The opposing Wobbuffet used Synchronoise!"); MESSAGE("It had no effect on Wobbuffet!"); // turn 2 - MESSAGE("Foe Wobbuffet used Synchronoise!"); + MESSAGE("The opposing Wobbuffet used Synchronoise!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SYNCHRONOISE, opponent); } } @@ -466,7 +466,7 @@ SINGLE_BATTLE_TEST("(TERA) Stellar type does not change the user's defensive pro } WHEN { TURN { MOVE(player, MOVE_CELEBRATE, gimmick: tera); MOVE(opponent, MOVE_PSYCHIC); } } SCENE { - MESSAGE("Foe Wobbuffet used Psychic!"); + MESSAGE("The opposing Wobbuffet used Psychic!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHIC, opponent); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { @@ -485,7 +485,7 @@ SINGLE_BATTLE_TEST("(TERA) Reflect Type copies a Stellar-type Pokemon's base typ TURN { MOVE(player, MOVE_TACKLE); } } SCENE { // turn 2 - MESSAGE("Foe Wobbuffet used Reflect Type!"); + MESSAGE("The opposing Wobbuffet used Reflect Type!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, opponent); // turn 3 MESSAGE("Banette used Tackle!"); @@ -522,7 +522,7 @@ SINGLE_BATTLE_TEST("(TERA) Conversion2 fails if last hit by a Stellar-type move" MESSAGE("Wobbuffet used Tera Blast!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player); // turn 2 - MESSAGE("Foe Wobbuffet used Conversion 2!"); + MESSAGE("The opposing Wobbuffet used Conversion 2!"); MESSAGE("But it failed!"); } } @@ -537,7 +537,7 @@ SINGLE_BATTLE_TEST("(TERA) Roost does not remove Flying-type ground immunity whe } SCENE { MESSAGE("Zapdos used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); - MESSAGE("Foe Wobbuffet used Ice Beam!"); + MESSAGE("The opposing Wobbuffet used Ice Beam!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ICE_BEAM, opponent); MESSAGE("It's super effective!"); } @@ -650,7 +650,7 @@ SINGLE_BATTLE_TEST("(TERA) Protean cannot change the type of a Terastallized Pok MOVE(opponent, MOVE_EMBER); } } SCENE { MESSAGE("Greninja used Bubble!"); - MESSAGE("Foe Wobbuffet used Ember!"); + MESSAGE("The opposing Wobbuffet used Ember!"); MESSAGE("It's super effective!"); } } diff --git a/test/battle/item_effect/increase_stat.c b/test/battle/item_effect/increase_stat.c index 4eba548961f5..97abe06afc8f 100644 --- a/test/battle/item_effect/increase_stat.c +++ b/test/battle/item_effect/increase_stat.c @@ -39,7 +39,7 @@ SINGLE_BATTLE_TEST("X Defense sharply raises battler's Defense stat", s16 damage if (useItem) TURN { USE_ITEM(player, ITEM_X_DEFENSE); } TURN { MOVE(opponent, MOVE_TACKLE); } } SCENE { - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { if (B_X_ITEMS_BUFF >= GEN_7) @@ -87,7 +87,7 @@ SINGLE_BATTLE_TEST("X Sp. Def sharply raises battler's Sp. Defense stat", s16 da if (useItem) TURN { USE_ITEM(player, ITEM_X_SP_DEF); } TURN { MOVE(opponent, MOVE_DISARMING_VOICE); } } SCENE { - MESSAGE("Foe Wobbuffet used Disarming Voice!"); + MESSAGE("The opposing Wobbuffet used Disarming Voice!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { if (B_X_ITEMS_BUFF >= GEN_7) @@ -121,11 +121,11 @@ SINGLE_BATTLE_TEST("X Speed sharply raises battler's Speed stat", s16 damage) if (useItem) { MESSAGE("Wobbuffet used Tackle!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); } else { - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); MESSAGE("Wobbuffet used Tackle!"); } } @@ -185,7 +185,7 @@ SINGLE_BATTLE_TEST("Max Mushrooms raises battler's Defense stat", s16 damage) if (useItem) TURN { USE_ITEM(player, ITEM_MAX_MUSHROOMS); } TURN { MOVE(opponent, MOVE_TACKLE); } } SCENE { - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.66), results[1].damage); @@ -225,7 +225,7 @@ SINGLE_BATTLE_TEST("Max Mushrooms battler's Sp. Defense stat", s16 damage) if (useItem) TURN { USE_ITEM(player, ITEM_MAX_MUSHROOMS); } TURN { MOVE(opponent, MOVE_DISARMING_VOICE); } } SCENE { - MESSAGE("Foe Wobbuffet used Disarming Voice!"); + MESSAGE("The opposing Wobbuffet used Disarming Voice!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.66), results[1].damage); @@ -248,11 +248,11 @@ SINGLE_BATTLE_TEST("Max Mushrooms raises battler's Speed stat", s16 damage) if (useItem) { MESSAGE("Wobbuffet used Tackle!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); } else { - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); MESSAGE("Wobbuffet used Tackle!"); } } diff --git a/test/battle/move_effect/baton_pass.c b/test/battle/move_effect/baton_pass.c index 02d8a8839ead..b6a27179f323 100644 --- a/test/battle/move_effect/baton_pass.c +++ b/test/battle/move_effect/baton_pass.c @@ -19,7 +19,7 @@ SINGLE_BATTLE_TEST("Baton Pass used after Memento works correctly") } SCENE { MESSAGE("Wobbuffet used Memento!"); MESSAGE("Wobbuffet fainted!"); - MESSAGE("Foe Wynaut used Baton Pass!"); + MESSAGE("The opposing Wynaut used Baton Pass!"); MESSAGE("2 sent out Caterpie!"); MESSAGE("Go! Wobbuffet!"); } diff --git a/test/battle/move_effect/corrosive_gas.c b/test/battle/move_effect/corrosive_gas.c index f6a9c738e431..a8c74fda1402 100644 --- a/test/battle/move_effect/corrosive_gas.c +++ b/test/battle/move_effect/corrosive_gas.c @@ -62,7 +62,7 @@ SINGLE_BATTLE_TEST("Items lost to Corrosive Gas cannot be restored by Recycle") MESSAGE("Wobbuffet used Corrosive Gas!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CORROSIVE_GAS, player); MESSAGE("Wobbuffet corroded Foe Wobbuffet's Oran Berry!"); - MESSAGE("Foe Wobbuffet used Recycle!"); + MESSAGE("The opposing Wobbuffet used Recycle!"); MESSAGE("But it failed!"); } THEN { EXPECT_EQ(opponent->item, ITEM_NONE); diff --git a/test/battle/move_effect/court_change.c b/test/battle/move_effect/court_change.c index b9be19db7f75..31bd2685e427 100644 --- a/test/battle/move_effect/court_change.c +++ b/test/battle/move_effect/court_change.c @@ -21,10 +21,10 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the opponent") TURN { MOVE(playerLeft, MOVE_COURT_CHANGE); } TURN { SWITCH(playerLeft, 2); SWITCH(opponentLeft, 2); } } SCENE { - MESSAGE("Foe Wobbuffet used Sticky Web!"); - MESSAGE("Foe Wobbuffet used Stealth Rock!"); - MESSAGE("Foe Wobbuffet used Spikes!"); - MESSAGE("Foe Wobbuffet used Toxic Spikes!"); + MESSAGE("The opposing Wobbuffet used Sticky Web!"); + MESSAGE("The opposing Wobbuffet used Stealth Rock!"); + MESSAGE("The opposing Wobbuffet used Spikes!"); + MESSAGE("The opposing Wobbuffet used Toxic Spikes!"); MESSAGE("Wynaut used Court Change!"); MESSAGE("Wynaut swapped the battle effects affecting each side!"); SEND_IN_MESSAGE("Wynaut"); @@ -61,7 +61,7 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the player") MESSAGE("Wobbuffet used Stealth Rock!"); MESSAGE("Wobbuffet used Spikes!"); MESSAGE("Wobbuffet used Toxic Spikes!"); - MESSAGE("Foe Wynaut used Court Change!"); + MESSAGE("The opposing Wynaut used Court Change!"); MESSAGE("Foe Wynaut swapped the battle effects affecting each side!"); SEND_IN_MESSAGE("Wobbuffet"); MESSAGE("Wobbuffet is hurt by spikes!"); @@ -98,12 +98,12 @@ DOUBLE_BATTLE_TEST("Court Change used by the player swaps Mist, Safeguard, Auror TURN { } } SCENE { MESSAGE("Wynaut used Snowscape!"); - MESSAGE("Foe Wobbuffet used Mist!"); - MESSAGE("Foe Wobbuffet used Safeguard!"); - MESSAGE("Foe Wobbuffet used Aurora Veil!"); - MESSAGE("Foe Wobbuffet used Reflect!"); - MESSAGE("Foe Wobbuffet used Light Screen!"); - MESSAGE("Foe Wobbuffet used Tailwind!"); + MESSAGE("The opposing Wobbuffet used Mist!"); + MESSAGE("The opposing Wobbuffet used Safeguard!"); + MESSAGE("The opposing Wobbuffet used Aurora Veil!"); + MESSAGE("The opposing Wobbuffet used Reflect!"); + MESSAGE("The opposing Wobbuffet used Light Screen!"); + MESSAGE("The opposing Wobbuffet used Tailwind!"); MESSAGE("Wynaut used Court Change!"); MESSAGE("Wynaut swapped the battle effects affecting each side!"); // The effects now end for the player side. @@ -141,7 +141,7 @@ DOUBLE_BATTLE_TEST("Court Change used by the opponent swaps Mist, Safeguard, Aur MESSAGE("Wobbuffet used Reflect!"); MESSAGE("Wobbuffet used Light Screen!"); MESSAGE("Wobbuffet used Tailwind!"); - MESSAGE("Foe Wynaut used Court Change!"); + MESSAGE("The opposing Wynaut used Court Change!"); MESSAGE("Foe Wynaut swapped the battle effects affecting each side!"); // The effects now end for the player side. MESSAGE("Foe's Mist wore off!"); diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c index 80d500d2ee20..bbcc5c25708c 100644 --- a/test/battle/move_effect/defog.c +++ b/test/battle/move_effect/defog.c @@ -41,7 +41,7 @@ SINGLE_BATTLE_TEST("Defog does not lower evasiveness if target behind Substitute } WHEN { TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_DEFOG); } } SCENE { - MESSAGE("Foe Wobbuffet used Substitute!"); + MESSAGE("The opposing Wobbuffet used Substitute!"); MESSAGE("But it failed!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, player); @@ -328,9 +328,9 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Aurora Veil from p MESSAGE("Glalie's evasiveness fell!"); MESSAGE("Ally's Aurora Veil wore off!"); } - MESSAGE("Foe Glalie used Tackle!"); + MESSAGE("The opposing Glalie used Tackle!"); HP_BAR(playerLeft, captureDamage: &results[i].damagePhysical); - MESSAGE("Foe Glalie used Gust!"); + MESSAGE("The opposing Glalie used Gust!"); HP_BAR(playerRight, captureDamage: &results[i].damageSpecial); } FINALLY { EXPECT_MUL_EQ(results[1].damagePhysical, Q_4_12(1.5), results[0].damagePhysical); @@ -359,7 +359,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes everything it can" TURN { MOVE(playerLeft, MOVE_REFLECT); MOVE(playerRight, MOVE_LIGHT_SCREEN); MOVE(opponentLeft, MOVE_REFLECT); MOVE(opponentRight, MOVE_SAFEGUARD); } TURN { MOVE(playerLeft, MOVE_MIST); MOVE(playerRight, MOVE_SAFEGUARD); MOVE(opponentLeft, MOVE_MIST); MOVE(opponentRight, MOVE_DEFOG, target: playerLeft); } } SCENE { - MESSAGE("Foe Glalie used Defog!"); + MESSAGE("The opposing Glalie used Defog!"); MESSAGE("Glalie is protected by MIST!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, opponentRight); // Player side diff --git a/test/battle/move_effect/embargo.c b/test/battle/move_effect/embargo.c index 11e4069d80f2..3456922d685b 100644 --- a/test/battle/move_effect/embargo.c +++ b/test/battle/move_effect/embargo.c @@ -109,7 +109,7 @@ SINGLE_BATTLE_TEST("Embargo negates a held item's Speed reduction") MESSAGE("Wobbuffet used Embargo!"); MESSAGE("Foe Wobbuffet can't use items anymore!"); // Turn 2 - MESSAGE("Foe Wobbuffet used Scratch!"); + MESSAGE("The opposing Wobbuffet used Scratch!"); MESSAGE("Wobbuffet used Scratch!"); } } @@ -172,7 +172,7 @@ SINGLE_BATTLE_TEST("Embargo makes Fling and Natural Gift fail") TURN { MOVE(player, moveId); } } SCENE { // Turn 1 - MESSAGE("Foe Wobbuffet used Embargo!"); + MESSAGE("The opposing Wobbuffet used Embargo!"); MESSAGE("Wobbuffet can't use items anymore!"); // Turn 2 if (moveId == MOVE_FLING) @@ -215,7 +215,7 @@ SINGLE_BATTLE_TEST("Baton Pass passes Embargo's effect") TURN { MOVE(player, MOVE_FLING); } } SCENE { // Turn 1 - MESSAGE("Foe Wobbuffet used Embargo!"); + MESSAGE("The opposing Wobbuffet used Embargo!"); MESSAGE("Wobbuffet can't use items anymore!"); // Turn 2 MESSAGE("Wobbuffet used Baton Pass!"); @@ -239,7 +239,7 @@ SINGLE_BATTLE_TEST("Embargo doesn't block the effects of berries obtained throug TURN { MOVE(player, MOVE_PLUCK); } } SCENE { // Turn 1 - MESSAGE("Foe Wobbuffet used Embargo!"); + MESSAGE("The opposing Wobbuffet used Embargo!"); MESSAGE("Wobbuffet can't use items anymore!"); // Turn 2 MESSAGE("Wobbuffet used Pluck!"); @@ -261,7 +261,7 @@ SINGLE_BATTLE_TEST("Embargo disables the effect of the Plate items on the move J } WHEN { TURN { MOVE(opponent, MOVE_EMBARGO); MOVE(player, MOVE_JUDGMENT); } } SCENE { - MESSAGE("Foe Dragonite used Embargo!"); + MESSAGE("The opposing Dragonite used Embargo!"); MESSAGE("Arceus can't use items anymore!"); MESSAGE("Arceus used Judgment!"); HP_BAR(opponent, captureDamage: &results[i].damage); @@ -282,7 +282,7 @@ SINGLE_BATTLE_TEST("Embargo disables the effect of the Drive items on the move T } WHEN { TURN { MOVE(opponent, MOVE_EMBARGO); MOVE(player, MOVE_TECHNO_BLAST); } } SCENE { - MESSAGE("Foe Gyarados used Embargo!"); + MESSAGE("The opposing Gyarados used Embargo!"); MESSAGE("Genesect can't use items anymore!"); MESSAGE("Genesect used Techno Blast!"); HP_BAR(opponent, captureDamage: &results[i].damage); @@ -303,7 +303,7 @@ SINGLE_BATTLE_TEST("Embargo disables the effect of the Memory items on the move } WHEN { TURN { MOVE(opponent, MOVE_EMBARGO); MOVE(player, MOVE_MULTI_ATTACK); } } SCENE { - MESSAGE("Foe Venusaur used Embargo!"); + MESSAGE("The opposing Venusaur used Embargo!"); MESSAGE("Silvally can't use items anymore!"); MESSAGE("Silvally used Multi-Attack!"); HP_BAR(opponent, captureDamage: &results[i].damage); @@ -324,11 +324,11 @@ SINGLE_BATTLE_TEST("Embargo can be reflected by Magic Coat") // Turn 1 MESSAGE("Wobbuffet used Magic Coat!"); MESSAGE("Wobbuffet shrouded itself in Magic Coat!"); - MESSAGE("Foe Wobbuffet used Embargo!"); + MESSAGE("The opposing Wobbuffet used Embargo!"); MESSAGE("Foe Wobbuffet's Embargo was bounced back by MAGIC COAT!"); MESSAGE("Foe Wobbuffet can't use items anymore!"); // Turn 2 - MESSAGE("Foe Wobbuffet used Fling!"); + MESSAGE("The opposing Wobbuffet used Fling!"); MESSAGE("But it failed!"); } } @@ -348,7 +348,7 @@ SINGLE_BATTLE_TEST("Embargo doesn't prevent Mega Evolution") MESSAGE("Wobbuffet used Embargo!"); MESSAGE("Foe Wobbuffet can't use items anymore!"); // Turn 2 - MESSAGE("Foe Wobbuffet used Baton Pass!"); + MESSAGE("The opposing Wobbuffet used Baton Pass!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_BATON_PASS, opponent); MESSAGE("2 sent out Charizard!"); // Turn 3 @@ -373,14 +373,14 @@ SINGLE_BATTLE_TEST("Embargo doesn't prevent Primal Reversion") MESSAGE("Wobbuffet used Embargo!"); MESSAGE("Foe Wobbuffet can't use items anymore!"); // Turn 2 - MESSAGE("Foe Wobbuffet used Baton Pass!"); + MESSAGE("The opposing Wobbuffet used Baton Pass!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_BATON_PASS, opponent); MESSAGE("2 sent out Groudon!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, opponent); MESSAGE("Foe Groudon's Primal Reversion! It reverted to its primal form!"); ABILITY_POPUP(opponent); // Turn 3 - MESSAGE("Foe Groudon used Fling!"); + MESSAGE("The opposing Groudon used Fling!"); MESSAGE("But it failed!"); } } diff --git a/test/battle/move_effect/fling.c b/test/battle/move_effect/fling.c index b4b25484b330..f34f2c6a4f79 100644 --- a/test/battle/move_effect/fling.c +++ b/test/battle/move_effect/fling.c @@ -114,7 +114,7 @@ SINGLE_BATTLE_TEST("Fling - Item is lost even when there is no target") TURN { MOVE(opponent, MOVE_SELF_DESTRUCT); MOVE(player, MOVE_FLING); SEND_OUT(opponent, 1); } TURN { MOVE(player, MOVE_FLING); } } SCENE { - MESSAGE("Foe Wobbuffet used Self-Destruct!"); + MESSAGE("The opposing Wobbuffet used Self-Destruct!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SELF_DESTRUCT, opponent); HP_BAR(player); MESSAGE("Foe Wobbuffet fainted!"); @@ -138,7 +138,7 @@ SINGLE_BATTLE_TEST("Fling - Item is lost when target protects itself") TURN { MOVE(opponent, MOVE_PROTECT); MOVE(player, MOVE_FLING);} TURN { MOVE(player, MOVE_FLING); } } SCENE { - MESSAGE("Foe Wobbuffet used Protect!"); + MESSAGE("The opposing Wobbuffet used Protect!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PROTECT, opponent); MESSAGE("Wobbuffet used Fling!"); MESSAGE("Foe Wobbuffet protected itself!"); diff --git a/test/battle/move_effect/ion_deluge.c b/test/battle/move_effect/ion_deluge.c index 93e147e07d0d..6f76b07f8c96 100644 --- a/test/battle/move_effect/ion_deluge.c +++ b/test/battle/move_effect/ion_deluge.c @@ -57,7 +57,7 @@ SINGLE_BATTLE_TEST("Ion Deluge makes Normal type moves Electric type") } WHEN { TURN { MOVE(opponent, MOVE_ION_DELUGE); MOVE(player, MOVE_TACKLE); } } SCENE { - MESSAGE("Foe Golbat used Ion Deluge!"); + MESSAGE("The opposing Golbat used Ion Deluge!"); MESSAGE("A deluge of ions showers the battlefield!"); MESSAGE("Wobbuffet used Tackle!"); MESSAGE("It's super effective!"); // Because Tackle is now electric type. diff --git a/test/battle/move_effect/knock_off.c b/test/battle/move_effect/knock_off.c index c7d494a13d7f..7dfe8f19d00c 100644 --- a/test/battle/move_effect/knock_off.c +++ b/test/battle/move_effect/knock_off.c @@ -113,7 +113,7 @@ SINGLE_BATTLE_TEST("Recycle cannot recover an item removed by Knock Off") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF); MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Leftovers!"); - MESSAGE("Foe Wobbuffet used Recycle!"); + MESSAGE("The opposing Wobbuffet used Recycle!"); MESSAGE("But it failed!"); } THEN { EXPECT(opponent->item == ITEM_NONE); @@ -165,7 +165,7 @@ SINGLE_BATTLE_TEST("Knock Off triggers Unburden") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF); MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Leftovers!"); // turn 2 - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); } THEN { EXPECT(opponent->item == ITEM_NONE); diff --git a/test/battle/move_effect/plasma_fists.c b/test/battle/move_effect/plasma_fists.c index bdd3ed4f419c..93c88690266b 100644 --- a/test/battle/move_effect/plasma_fists.c +++ b/test/battle/move_effect/plasma_fists.c @@ -19,7 +19,7 @@ SINGLE_BATTLE_TEST("Ion Duldge turns normal moves into electric for the remainde MESSAGE("Krabby used Ion Deluge!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ION_DELUGE, player); MESSAGE("A deluge of ions showers the battlefield!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); MESSAGE("It's super effective!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); @@ -39,7 +39,7 @@ SINGLE_BATTLE_TEST("Plasma Fists turns normal moves into electric for the remain MESSAGE("Krabby used Plasma Fists!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PLASMA_FISTS, player); MESSAGE("A deluge of ions showers the battlefield!"); - MESSAGE("Foe Wobbuffet used Tackle!"); + MESSAGE("The opposing Wobbuffet used Tackle!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); MESSAGE("It's super effective!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); @@ -58,7 +58,7 @@ SINGLE_BATTLE_TEST("Plasma Fists type-changing effect does not override Pixilate MESSAGE("Krabby used Plasma Fists!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PLASMA_FISTS, player); MESSAGE("A deluge of ions showers the battlefield!"); - MESSAGE("Foe Sylveon used Tackle!"); + MESSAGE("The opposing Sylveon used Tackle!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); NOT MESSAGE("It's super effective!"); } @@ -75,7 +75,7 @@ SINGLE_BATTLE_TEST("Plasma Fists type-changing effect is applied after Normalize MESSAGE("Krabby used Plasma Fists!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PLASMA_FISTS, player); MESSAGE("A deluge of ions showers the battlefield!"); - MESSAGE("Foe Skitty used Ember!"); + MESSAGE("The opposing Skitty used Ember!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, opponent); MESSAGE("It's super effective!"); } @@ -92,7 +92,7 @@ SINGLE_BATTLE_TEST("Plasma Fists turns normal type dynamax-moves into electric t MESSAGE("Krabby used Plasma Fists!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PLASMA_FISTS, player); MESSAGE("A deluge of ions showers the battlefield!"); - MESSAGE("Foe Wobbuffet used Max Lightning!"); + MESSAGE("The opposing Wobbuffet used Max Lightning!"); MESSAGE("It's super effective!"); } } diff --git a/test/battle/move_effect/revival_blessing.c b/test/battle/move_effect/revival_blessing.c index d44e9110d50c..eaa1b6c74a34 100644 --- a/test/battle/move_effect/revival_blessing.c +++ b/test/battle/move_effect/revival_blessing.c @@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("Revival Blessing revives a fainted party member for an oppon } WHEN { TURN { MOVE(opponent, MOVE_REVIVAL_BLESSING); SEND_OUT(opponent, 1); } } SCENE { - MESSAGE("Foe Raichu used Revival Blessing!"); + MESSAGE("The opposing Raichu used Revival Blessing!"); MESSAGE("Pichu was revived and is ready to fight again!"); } } @@ -76,10 +76,10 @@ TO_DO_BATTLE_TEST("Revival Blessing cannot revive a partner's party member"); // TURN { MOVE(user, MOVE_REVIVAL_BLESSING); } // } SCENE { // if (user == opponentLeft) { -// MESSAGE("Foe Wobbuffet used Revival Blessing!"); +// MESSAGE("The opposing Wobbuffet used Revival Blessing!"); // MESSAGE("But it failed!"); // } else { -// MESSAGE("Foe Wynaut used Revival Blessing!"); +// MESSAGE("The opposing Wynaut used Revival Blessing!"); // MESSAGE("Wynaut was revived and is ready to fight again!"); // } // } @@ -102,7 +102,7 @@ TO_DO_BATTLE_TEST("Revived battlers still lose their turn"); // } SCENE { // MESSAGE("Wobbuffet used Tackle!"); // MESSAGE("Foe Wynaut fainted!"); -// MESSAGE("Foe Wobbuffet used Revival Blessing!"); +// MESSAGE("The opposing Wobbuffet used Revival Blessing!"); // MESSAGE("Wynaut was revived and is ready to fight again!"); // NOT { MESSAGE("Wynaut used Celebrate!"); } // } diff --git a/test/battle/move_effect/smelling_salts.c b/test/battle/move_effect/smelling_salts.c index 311024a153ae..083db6d0dda4 100644 --- a/test/battle/move_effect/smelling_salts.c +++ b/test/battle/move_effect/smelling_salts.c @@ -57,7 +57,7 @@ SINGLE_BATTLE_TEST("Smelling Salts get incread power vs. paralyzed targets") else { NOT MESSAGE("Foe Lotad fainted!"); - MESSAGE("Foe Lotad used Celebrate!"); + MESSAGE("The opposing Lotad used Celebrate!"); } } } diff --git a/test/battle/move_effect/spicy_extract.c b/test/battle/move_effect/spicy_extract.c index 8a66003ec785..248f37f7bed6 100644 --- a/test/battle/move_effect/spicy_extract.c +++ b/test/battle/move_effect/spicy_extract.c @@ -110,7 +110,7 @@ SINGLE_BATTLE_TEST("Spicy Extract will fail if target is in a semi-invulnerabili } WHEN { TURN { MOVE(opponent, MOVE_DIVE); MOVE(player, MOVE_SPICY_EXTRACT); } } SCENE { - MESSAGE("Foe Wobbuffet used Dive!"); + MESSAGE("The opposing Wobbuffet used Dive!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_DIVE, opponent); MESSAGE("Wobbuffet used Spicy Extract!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SPICY_EXTRACT, player); diff --git a/test/battle/move_effect/tera_blast.c b/test/battle/move_effect/tera_blast.c index 4fcb52be3a85..6e141ad9edca 100644 --- a/test/battle/move_effect/tera_blast.c +++ b/test/battle/move_effect/tera_blast.c @@ -180,7 +180,7 @@ SINGLE_BATTLE_TEST("Flying-type Tera Blast does not have its priority boosted by } WHEN { TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_QUICK_ATTACK); } } SCENE { - MESSAGE("Foe Wobbuffet used Quick Attack!"); + MESSAGE("The opposing Wobbuffet used Quick Attack!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, opponent); MESSAGE("Talonflame used Tera Blast!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player); diff --git a/test/battle/move_effect/thousand_arrows.c b/test/battle/move_effect/thousand_arrows.c index 8deea06fbe8d..961c0ec24e4d 100644 --- a/test/battle/move_effect/thousand_arrows.c +++ b/test/battle/move_effect/thousand_arrows.c @@ -34,10 +34,10 @@ SINGLE_BATTLE_TEST("Thousand Arrows does neutral damage to non-grounded Flying t ANIMATION(ANIM_TYPE_MOVE, MOVE_THOUSAND_ARROWS, player); if (pokemon == SPECIES_SKARMORY) { MESSAGE("Foe Skarmory fell straight down!"); - MESSAGE("Foe Skarmory used Celebrate!"); + MESSAGE("The opposing Skarmory used Celebrate!"); } else { MESSAGE("Foe Scyther fell straight down!"); - MESSAGE("Foe Scyther used Celebrate!"); + MESSAGE("The opposing Scyther used Celebrate!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); MESSAGE("Congratulations, 1!"); diff --git a/test/battle/move_effect/wake_up_slap.c b/test/battle/move_effect/wake_up_slap.c index 2c9dd7ed2441..25e7b87425a4 100644 --- a/test/battle/move_effect/wake_up_slap.c +++ b/test/battle/move_effect/wake_up_slap.c @@ -51,7 +51,7 @@ SINGLE_BATTLE_TEST("Wake-Up Slap get incread power vs. sleeping targets") MESSAGE("Foe Lotad fainted!"); } else { NOT MESSAGE("Foe Lotad fainted!"); - MESSAGE("Foe Lotad used Celebrate!"); + MESSAGE("The opposing Lotad used Celebrate!"); } } } diff --git a/test/battle/terrain/electric.c b/test/battle/terrain/electric.c index c39bfbbb71da..f7fa2e697969 100644 --- a/test/battle/terrain/electric.c +++ b/test/battle/terrain/electric.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Electric Terrain protects grounded battlers from falling asl TURN { MOVE(player, MOVE_SPORE); } } SCENE { MESSAGE("Wobbuffet used Electric Terrain!"); - MESSAGE("Foe Claydol used Spore!"); + MESSAGE("The opposing Claydol used Spore!"); MESSAGE("Wobbuffet surrounds itself with electrified terrain!"); MESSAGE("Wobbuffet used Spore!"); MESSAGE("Foe Claydol fell asleep!"); @@ -73,18 +73,18 @@ SINGLE_BATTLE_TEST("Electric Terrain lasts for 5 turns") TURN {} TURN {} } SCENE { - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ELECTRIC_TERRAIN, player); MESSAGE("An electric current runs across the battlefield!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("The electricity disappeared from the battlefield."); } diff --git a/test/battle/terrain/grassy.c b/test/battle/terrain/grassy.c index a41c48aa2721..be153d337056 100644 --- a/test/battle/terrain/grassy.c +++ b/test/battle/terrain/grassy.c @@ -98,7 +98,7 @@ SINGLE_BATTLE_TEST("Grassy Terrain heals the pokemon on the field for the durati TURN {} TURN {} } SCENE { - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASSY_TERRAIN, player); MESSAGE("Grass grew to cover the battlefield!"); MESSAGE("Foe Wobbuffet is healed by the grassy terrain!"); diff --git a/test/battle/terrain/misty.c b/test/battle/terrain/misty.c index fbf04fcba968..f6dc39a39a1c 100644 --- a/test/battle/terrain/misty.c +++ b/test/battle/terrain/misty.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Misty Terrain protects grounded battlers from non-volatile s TURN { MOVE(player, MOVE_TOXIC); } } SCENE { MESSAGE("Wobbuffet used Misty Terrain!"); - MESSAGE("Foe Claydol used Toxic!"); + MESSAGE("The opposing Claydol used Toxic!"); MESSAGE("Wobbuffet surrounds itself with a protective mist!"); NOT { STATUS_ICON(opponent, badPoison: TRUE); } MESSAGE("Wobbuffet used Toxic!"); @@ -90,18 +90,18 @@ SINGLE_BATTLE_TEST("Misty Terrain lasts for 5 turns") TURN {} TURN {} } SCENE { - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_MISTY_TERRAIN, player); MESSAGE("Mist swirled about the battlefield!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("The mist disappeared from the battlefield."); } diff --git a/test/battle/terrain/psychic.c b/test/battle/terrain/psychic.c index 44a89598d22c..1f0a2adca7ce 100644 --- a/test/battle/terrain/psychic.c +++ b/test/battle/terrain/psychic.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Psychic Terrain protects grounded battlers from priority mov MESSAGE("Claydol used Psychic Terrain!"); MESSAGE("Claydol cannot use Quick Attack!"); NOT { HP_BAR(opponent); } - MESSAGE("Foe Wobbuffet used Quick Attack!"); + MESSAGE("The opposing Wobbuffet used Quick Attack!"); HP_BAR(player); } } @@ -145,18 +145,18 @@ SINGLE_BATTLE_TEST("Psychic Terrain lasts for 5 turns") TURN {} TURN {} } SCENE { - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHIC_TERRAIN, player); MESSAGE("The battlefield got weird!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("The weirdness disappeared from the battlefield."); } diff --git a/test/battle/terrain/starting_terrain.c b/test/battle/terrain/starting_terrain.c index 37caa20bc7f9..4356f5e2b17d 100644 --- a/test/battle/terrain/starting_terrain.c +++ b/test/battle/terrain/starting_terrain.c @@ -95,13 +95,13 @@ SINGLE_BATTLE_TEST("Terrain started after the one which started the battle lasts // 5 turns MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Foe Wobbuffet used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("The grass disappeared from the battlefield."); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RESTORE_BG); From 7652a5d50be3dec79e2575b0f83ba03764a8fe97 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Mon, 9 Sep 2024 13:29:28 -0500 Subject: [PATCH 35/68] Update battle_message.c --- src/battle_message.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index 68be0e5a5306..2b9b5b1e279d 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -142,7 +142,7 @@ static const u8 sText_PkmnRaisedSpDef[] = _("Light Screen made {B_ATK_TEAM2} tea static const u8 sText_PkmnRaisedSpDefALittle[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE}\nraised SP. DEF a little!"); //expansion doesn't use anymore static const u8 sText_PkmnRaisedDef[] = _("Reflect made {B_ATK_TEAM2} team\nstronger against physical moves!"); static const u8 sText_PkmnRaisedDefALittle[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE}\nraised DEFENSE a little!"); //expansion doesn't use anymore -static const u8 sText_PkmnCoveredByVeil[] = _("{B_ATK_TEAM1} team cloaked itself \nin a mystical veil!"); +static const u8 sText_PkmnCoveredByVeil[] = _("{B_ATK_TEAM1} team cloaked itself\nin a mystical veil!"); static const u8 sText_PkmnUsedSafeguard[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is protected\nby Safeguard!"); static const u8 sText_PkmnSafeguardExpired[] = _("{B_ATK_TEAM1} team is no longer protected\nby Safeguard!"); static const u8 sText_PkmnWentToSleep[] = _("{B_ATK_NAME_WITH_PREFIX} went\nto sleep!"); //not in gen 5+ @@ -549,7 +549,7 @@ static const u8 sText_Trainer2LoseText[]; // New battle strings. static const u8 sText_EnduredViaSturdy[] = _("{B_DEF_NAME_WITH_PREFIX} endured\nthe hit using {B_DEF_ABILITY}!"); static const u8 sText_PowerHerbActivation[] = _("{B_ATK_NAME_WITH_PREFIX} became fully charged\ndue to its {B_LAST_ITEM}!"); -static const u8 sText_HurtByItem[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby its {B_LAST_ITEM}!"); +static const u8 sText_HurtByItem[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby the {B_LAST_ITEM}!"); static const u8 sText_BadlyPoisonedByItem[] = _("{B_EFF_NAME_WITH_PREFIX} was badly\npoisoned by the {B_LAST_ITEM}!"); static const u8 sText_BurnedByItem[] = _("{B_EFF_NAME_WITH_PREFIX} was burned\nby the {B_LAST_ITEM}!"); static const u8 sText_TargetAbilityActivates[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} activates!"); @@ -631,8 +631,8 @@ static const u8 sText_SlowStartEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is static const u8 sText_SlowStartEnd[] = _("{B_ATK_NAME_WITH_PREFIX} finally got\nits act together!"); static const u8 sText_SolarPowerHpDrop[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\ntakes its toll!"); //don't think this message is displayed anymore static const u8 sText_AftermathDmg[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt!"); -static const u8 sText_AnticipationActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} shuddered\nin anticipation!"); //don't think this message is displayed anymore -static const u8 sText_ForewarnActivates[] = _("{B_SCR_ACTIVE_ABILITY} alerted {B_SCR_ACTIVE_NAME_WITH_PREFIX2}\nto {B_DEF_NAME_WITH_PREFIX2}'s {B_BUFF1}!"); //don't think this message is displayed anymore +static const u8 sText_AnticipationActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} shuddered!"); +static const u8 sText_ForewarnActivates[] = _("{B_SCR_ACTIVE_ABILITY} alerted {B_SCR_ACTIVE_NAME_WITH_PREFIX2}\nto {B_DEF_NAME_WITH_PREFIX2}'s {B_BUFF1}!"); static const u8 sText_IceBodyHpGain[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nhealed it a little bit!"); //don't think this message is displayed anymore static const u8 sText_SnowWarningHail[] = _("It started to hail!"); static const u8 sText_SnowWarningSnow[] = _("It started to snow!"); From 05046f8b4da84b82ba300efc87dc5c4b55764ef2 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 9 Sep 2024 15:35:37 -0300 Subject: [PATCH 36/68] 342 left --- docs/how_to_testing_system.md | 10 +- test/battle/ability/beads_of_ruin.c | 2 +- test/battle/ability/clear_body.c | 38 +++--- test/battle/ability/cloud_nine.c | 2 +- test/battle/ability/color_change.c | 26 ++-- test/battle/ability/comatose.c | 2 +- test/battle/ability/cute_charm.c | 2 +- test/battle/ability/effect_spore.c | 4 +- test/battle/ability/embody_aspect.c | 10 +- test/battle/ability/flame_body.c | 2 +- test/battle/ability/frisk.c | 6 +- test/battle/ability/grim_neigh.c | 8 +- test/battle/ability/gulp_missile.c | 2 +- test/battle/ability/intimidate.c | 14 +-- test/battle/ability/lightning_rod.c | 8 +- test/battle/ability/mirror_armor.c | 24 ++-- test/battle/ability/moxie.c | 10 +- test/battle/ability/own_tempo.c | 18 +-- test/battle/ability/parental_bond.c | 14 +-- test/battle/ability/poison_puppeteer.c | 6 +- test/battle/ability/poison_touch.c | 12 +- test/battle/ability/rattled.c | 8 +- test/battle/ability/sap_sipper.c | 2 +- test/battle/ability/shed_skin.c | 2 +- test/battle/ability/shield_dust.c | 20 ++-- test/battle/ability/stalwart.c | 2 +- test/battle/ability/static.c | 2 +- test/battle/ability/sticky_hold.c | 2 +- test/battle/ability/storm_drain.c | 8 +- test/battle/ability/supreme_overlord.c | 2 +- test/battle/ability/sword_of_ruin.c | 2 +- test/battle/ability/tablets_of_ruin.c | 2 +- test/battle/ability/toxic_chain.c | 12 +- test/battle/ability/vessel_of_ruin.c | 2 +- test/battle/ability/wind_rider.c | 12 +- test/battle/ability/zero_to_hero.c | 2 +- test/battle/ai/ai_flag_sequence_switching.c | 2 +- test/battle/ai/ai_switching.c | 2 +- test/battle/form_change/mega_evolution.c | 2 +- test/battle/gimmick/dynamax.c | 112 +++++++++--------- test/battle/hold_effect/covert_cloak.c | 20 ++-- test/battle/hold_effect/metronome.c | 2 +- test/battle/hold_effect/mirror_herb.c | 2 +- test/battle/hold_effect/restore_stats.c | 10 +- test/battle/hold_effect/safety_goggles.c | 6 +- test/battle/item_effect/increase_stat.c | 2 +- test/battle/move_effect/attack_down_2.c | 2 +- test/battle/move_effect/corrosive_gas.c | 2 +- test/battle/move_effect/court_change.c | 16 +-- test/battle/move_effect/defog.c | 20 ++-- test/battle/move_effect/dragon_darts.c | 20 ++-- test/battle/move_effect/embargo.c | 24 ++-- test/battle/move_effect/explosion.c | 4 +- test/battle/move_effect/fling.c | 44 +++---- test/battle/move_effect/future_sight.c | 18 +-- test/battle/move_effect/hit_escape.c | 2 +- test/battle/move_effect/knock_off.c | 4 +- test/battle/move_effect/max_hp_50_recoil.c | 4 +- test/battle/move_effect/metronome.c | 2 +- test/battle/move_effect/mind_blown.c | 8 +- test/battle/move_effect/mirror_move.c | 4 +- test/battle/move_effect/multi_hit.c | 24 ++-- test/battle/move_effect/pledge.c | 8 +- test/battle/move_effect/population_bomb.c | 2 +- test/battle/move_effect/protect.c | 18 +-- test/battle/move_effect/pursuit.c | 2 +- test/battle/move_effect/revival_blessing.c | 2 +- test/battle/move_effect/salt_cure.c | 2 +- test/battle/move_effect/smack_down.c | 2 +- test/battle/move_effect/smelling_salts.c | 10 +- test/battle/move_effect/sparkling_aria.c | 4 +- test/battle/move_effect/spicy_extract.c | 26 ++-- test/battle/move_effect/sticky_web.c | 26 ++-- test/battle/move_effect/stomping_tantrum.c | 2 +- test/battle/move_effect/thousand_arrows.c | 6 +- test/battle/move_effect/wake_up_slap.c | 10 +- .../move_effect_secondary/psychic_noise.c | 12 +- test/battle/move_effect_secondary/spikes.c | 4 +- test/battle/move_flags/strike_count.c | 2 +- test/battle/status2/confusion.c | 4 +- test/battle/terrain/electric.c | 4 +- test/battle/terrain/grassy.c | 10 +- test/battle/terrain/misty.c | 2 +- test/battle/terrain/psychic.c | 2 +- 84 files changed, 409 insertions(+), 409 deletions(-) diff --git a/docs/how_to_testing_system.md b/docs/how_to_testing_system.md index eb4174fc114c..64e46c76a10c 100644 --- a/docs/how_to_testing_system.md +++ b/docs/how_to_testing_system.md @@ -44,7 +44,7 @@ SINGLE_BATTLE_TEST("Stun Spore inflicts paralysis") TURN { MOVE(player, MOVE_STUN_SPORE); } // 3. } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); - MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); // 4 + MESSAGE("The opposing Wobbuffet is paralyzed! It may be unable to move!"); // 4 STATUS_ICON(opponent, paralysis: TRUE); // 4. } } @@ -226,7 +226,7 @@ SINGLE_BATTLE_TEST("Paralysis has a 25% chance of skipping the turn") } WHEN { TURN { MOVE(player, MOVE_CELEBRATE); } } SCENE { - MESSAGE("Wobbuffet is paralyzed! It can't move!"); + MESSAGE("Wobbuffet couldn't move because it's paralyzed!"); } } ``` @@ -428,7 +428,7 @@ Spaces in pattern match newlines (\n, \l, and \p) in the message. Often used to check that a battler took its turn but it failed, e.g.: ``` MESSAGE("Wobbuffet used Dream Eater!"); - MESSAGE("Foe Wobbuffet wasn't affected!"); + MESSAGE("The opposing Wobbuffet wasn't affected!"); ``` ### `STATUS_ICON` @@ -467,7 +467,7 @@ Causes the test to fail unless one of the `SCENE` commands succeeds. ``` ONE_OF { MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Wobbuffet is paralyzed! It can't move!"); + MESSAGE("Wobbuffet couldn't move because it's paralyzed!"); } ``` @@ -482,7 +482,7 @@ Causes the test to fail if one of the `SCENE` commands succeeds before the comma // Our Wobbuffet does not move before the foe's. NONE_OF { MESSAGE("Wobbuffet used Celebrate!"); - MESSAGE("Wobbuffet is paralyzed! It can't move!"); + MESSAGE("Wobbuffet couldn't move because it's paralyzed!"); } MESSAGE("The opposing Wobbuffet used Celebrate!"); ``` diff --git a/test/battle/ability/beads_of_ruin.c b/test/battle/ability/beads_of_ruin.c index bb05031fe3ea..bbc71f6c2b34 100644 --- a/test/battle/ability/beads_of_ruin.c +++ b/test/battle/ability/beads_of_ruin.c @@ -70,6 +70,6 @@ SINGLE_BATTLE_TEST("Beads of Ruin's message displays correctly after all battler SEND_IN_MESSAGE("Wobbuffet"); MESSAGE("2 sent out Chi-Yu!"); ABILITY_POPUP(opponent, ABILITY_BEADS_OF_RUIN); - MESSAGE("Foe Chi-Yu's Beads of Ruin weakened the Sp. Def of all surrounding Pokémon!"); + MESSAGE("The opposing Chi-Yu's Beads of Ruin weakened the Sp. Def of all surrounding Pokémon!"); } } diff --git a/test/battle/ability/clear_body.c b/test/battle/ability/clear_body.c index 2dece95480df..1e955431a1b6 100644 --- a/test/battle/ability/clear_body.c +++ b/test/battle/ability/clear_body.c @@ -26,11 +26,11 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke prevent intimid } ABILITY_POPUP(opponent, ability); if (ability == ABILITY_FULL_METAL_BODY) - MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); + MESSAGE("The opposing Solgaleo's Full Metal Body prevents stat loss!"); else if (ability == ABILITY_WHITE_SMOKE) - MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); + MESSAGE("The opposing Torkoal's White Smoke prevents stat loss!"); else - MESSAGE("Foe Metang's Clear Body prevents stat loss!"); + MESSAGE("The opposing Metang's Clear Body prevents stat loss!"); HP_BAR(player, captureDamage: &turnTwoHit); } THEN { EXPECT_EQ(turnOneHit, turnTwoHit); @@ -76,11 +76,11 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke prevent stat st } ABILITY_POPUP(opponent, ability); if (ability == ABILITY_FULL_METAL_BODY) - MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); + MESSAGE("The opposing Solgaleo's Full Metal Body prevents stat loss!"); else if (ability == ABILITY_WHITE_SMOKE) - MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); + MESSAGE("The opposing Torkoal's White Smoke prevents stat loss!"); else - MESSAGE("Foe Metang's Clear Body prevents stat loss!"); + MESSAGE("The opposing Metang's Clear Body prevents stat loss!"); } } @@ -104,11 +104,11 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke prevent Sticky } ABILITY_POPUP(opponent, ability); if (ability == ABILITY_FULL_METAL_BODY) - MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); + MESSAGE("The opposing Solgaleo's Full Metal Body prevents stat loss!"); else if (ability == ABILITY_WHITE_SMOKE) - MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); + MESSAGE("The opposing Torkoal's White Smoke prevents stat loss!"); else - MESSAGE("Foe Metang's Clear Body prevents stat loss!"); + MESSAGE("The opposing Metang's Clear Body prevents stat loss!"); } } @@ -128,9 +128,9 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent s ANIMATION(ANIM_TYPE_MOVE, MOVE_SUPERPOWER, opponent); NONE_OF { ABILITY_POPUP(opponent, ability); - MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); - MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); - MESSAGE("Foe Metang's Clear Body prevents stat loss!"); + MESSAGE("The opposing Solgaleo's Full Metal Body prevents stat loss!"); + MESSAGE("The opposing Torkoal's White Smoke prevents stat loss!"); + MESSAGE("The opposing Metang's Clear Body prevents stat loss!"); } } } @@ -181,15 +181,15 @@ SINGLE_BATTLE_TEST("Mold Breaker, Teravolt, and Turboblaze ignore Clear Body and if (ability == ABILITY_FULL_METAL_BODY){ // Full Metal Body can't be ignored by breaker abilities NOT ANIMATION(ANIM_TYPE_MOVE, move, player); ABILITY_POPUP(opponent, ability); - MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); + MESSAGE("The opposing Solgaleo's Full Metal Body prevents stat loss!"); } else{ ANIMATION(ANIM_TYPE_MOVE, move, player); NONE_OF { ABILITY_POPUP(opponent, ability); - MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); - MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); - MESSAGE("Foe Metang's Clear Body prevents stat loss!"); + MESSAGE("The opposing Solgaleo's Full Metal Body prevents stat loss!"); + MESSAGE("The opposing Torkoal's White Smoke prevents stat loss!"); + MESSAGE("The opposing Metang's Clear Body prevents stat loss!"); } } } @@ -264,11 +264,11 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent S MESSAGE("Wobbuffet used Thunder Wave!"); ONE_OF { MESSAGE("The opposing Metang used Celebrate!"); - MESSAGE("Foe Metang is paralyzed! It can't move!"); + MESSAGE("The opposing Metang couldn't move because it's paralyzed!"); MESSAGE("The opposing Solgaleo used Celebrate!"); - MESSAGE("Foe Solgaleo is paralyzed! It can't move!"); + MESSAGE("The opposing Solgaleo couldn't move because it's paralyzed!"); MESSAGE("The opposing Torkoal used Celebrate!"); - MESSAGE("Foe Torkoal is paralyzed! It can't move!"); + MESSAGE("The opposing Torkoal couldn't move because it's paralyzed!"); } } } diff --git a/test/battle/ability/cloud_nine.c b/test/battle/ability/cloud_nine.c index da21f86d3296..b8d1d472d0c0 100644 --- a/test/battle/ability/cloud_nine.c +++ b/test/battle/ability/cloud_nine.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Cloud Nine/Air Lock prevent basic weather effects, but witho NONE_OF { HP_BAR(player); HP_BAR(opponent); - MESSAGE("Foe Wobbuffet is buffeted by the sandstorm!"); + MESSAGE("The opposing Wobbuffet is buffeted by the sandstorm!"); } MESSAGE("The sandstorm rages."); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SANDSTORM_CONTINUES); diff --git a/test/battle/ability/color_change.c b/test/battle/ability/color_change.c index 86c009e8ac37..d3a6489f0000 100644 --- a/test/battle/ability/color_change.c +++ b/test/battle/ability/color_change.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Color Change changes the type of a Pokemon being hit by a mo } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE); - MESSAGE("Foe Wobbuffet's Color Change made it the Normal type!"); + MESSAGE("The opposing Wobbuffet's Color Change made it the Normal type!"); } } @@ -26,7 +26,7 @@ SINGLE_BATTLE_TEST("Color Change does not change the type when hit by a move tha ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHO_CUT, player); NONE_OF { ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE); - MESSAGE("Foe Wobbuffet's Color Change made it the Normal type!"); + MESSAGE("The opposing Wobbuffet's Color Change made it the Normal type!"); } } } @@ -42,7 +42,7 @@ SINGLE_BATTLE_TEST("Color Change does not change the type of a dual-type Pokemon ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHO_CUT, player); NONE_OF { ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE); - MESSAGE("Foe Xatu's Color Change made it the Psychic type!"); + MESSAGE("The opposing Xatu's Color Change made it the Psychic type!"); } } } @@ -58,7 +58,7 @@ SINGLE_BATTLE_TEST("Color Change does not change the type of a dual-type Pokemon ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHO_CUT, player); NONE_OF { ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE); - MESSAGE("Foe Slowbro's Color Change made it the Psychic type!"); + MESSAGE("The opposing Slowbro's Color Change made it the Psychic type!"); } } } @@ -73,7 +73,7 @@ SINGLE_BATTLE_TEST("Color Change changes the user to Electric type if hit by a m } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHO_CUT, player); ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE); - MESSAGE("Foe Wobbuffet's Color Change made it the Electric type!"); + MESSAGE("The opposing Wobbuffet's Color Change made it the Electric type!"); } } @@ -88,9 +88,9 @@ SINGLE_BATTLE_TEST("Color Change changes the type when a Pokemon is hit by Futur TURN { } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player); - MESSAGE("Foe Snorlax took the Future Sight attack!"); + MESSAGE("The opposing Snorlax took the Future Sight attack!"); ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE); - MESSAGE("Foe Snorlax's Color Change made it the Psychic type!"); + MESSAGE("The opposing Snorlax's Color Change made it the Psychic type!"); } } @@ -105,9 +105,9 @@ SINGLE_BATTLE_TEST("Color Change changes the type when a Pokemon is hit by Doom TURN { } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DOOM_DESIRE, player); - MESSAGE("Foe Wobbuffet took the Doom Desire attack!"); + MESSAGE("The opposing Wobbuffet took the Doom Desire attack!"); ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE); - MESSAGE("Foe Wobbuffet's Color Change made it the Steel type!"); + MESSAGE("The opposing Wobbuffet's Color Change made it the Steel type!"); } } @@ -123,10 +123,10 @@ SINGLE_BATTLE_TEST("Color Change changes the type to Electric when a Pokemon is TURN { MOVE(opponent, MOVE_ELECTRIFY); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player); - MESSAGE("Foe Blastoise took the Future Sight attack!"); + MESSAGE("The opposing Blastoise took the Future Sight attack!"); MESSAGE("It's super effective!"); ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE); - MESSAGE("Foe Blastoise's Color Change made it the Electr type!"); + MESSAGE("The opposing Blastoise's Color Change made it the Electr type!"); } } @@ -141,8 +141,8 @@ SINGLE_BATTLE_TEST("Color Change changes the type to Normal when a Pokemon is hi TURN { } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player); - MESSAGE("Foe Blastoise took the Future Sight attack!"); + MESSAGE("The opposing Blastoise took the Future Sight attack!"); ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE); - MESSAGE("Foe Blastoise's Color Change made it the Normal type!"); + MESSAGE("The opposing Blastoise's Color Change made it the Normal type!"); } } diff --git a/test/battle/ability/comatose.c b/test/battle/ability/comatose.c index 0e6d3382b071..b23a6ca85f4c 100644 --- a/test/battle/ability/comatose.c +++ b/test/battle/ability/comatose.c @@ -46,7 +46,7 @@ SINGLE_BATTLE_TEST("Comatose may be suppressed if pokemon transformed into a pok MESSAGE("Komala is drowsing!"); MESSAGE("Komala used Gastro Acid!"); MESSAGE("The opposing Ditto used Transform!"); - MESSAGE("Foe Ditto transformed into Komala!"); + MESSAGE("The opposing Ditto transformed into Komala!"); ANIMATION(ANIM_TYPE_MOVE, move, player); if (move == MOVE_POISONPOWDER) { STATUS_ICON(opponent, poison: TRUE); } diff --git a/test/battle/ability/cute_charm.c b/test/battle/ability/cute_charm.c index 10b3a8bea68d..6134a395c27f 100644 --- a/test/battle/ability/cute_charm.c +++ b/test/battle/ability/cute_charm.c @@ -60,7 +60,7 @@ SINGLE_BATTLE_TEST("Cute Charm triggers 30% of the time") } SCENE { ABILITY_POPUP(opponent, ABILITY_CUTE_CHARM); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_INFATUATION, player); - MESSAGE("Foe Clefairy's Cute Charm infatuated Wobbuffet!"); + MESSAGE("The opposing Clefairy's Cute Charm infatuated Wobbuffet!"); MESSAGE("Wobbuffet is in love with Foe Clefairy!"); } } diff --git a/test/battle/ability/effect_spore.c b/test/battle/ability/effect_spore.c index 107cd086757f..52b0d3361200 100644 --- a/test/battle/ability/effect_spore.c +++ b/test/battle/ability/effect_spore.c @@ -65,7 +65,7 @@ SINGLE_BATTLE_TEST("Effect Spore causes paralysis 10% of the time") } SCENE { ABILITY_POPUP(opponent, ABILITY_EFFECT_SPORE); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, player); - MESSAGE("Foe Breloom's Effect Spore paralyzed Wobbuffet! It may be unable to move!"); + MESSAGE("The opposing Breloom's Effect Spore paralyzed Wobbuffet! It may be unable to move!"); STATUS_ICON(player, paralysis: TRUE); } } @@ -84,7 +84,7 @@ SINGLE_BATTLE_TEST("Effect Spore causes sleep 11% of the time") } SCENE { ABILITY_POPUP(opponent, ABILITY_EFFECT_SPORE); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, player); - MESSAGE("Foe Breloom's Effect Spore made Wobbuffet sleep!"); + MESSAGE("The opposing Breloom's Effect Spore made Wobbuffet sleep!"); STATUS_ICON(player, sleep: TRUE); } } diff --git a/test/battle/ability/embody_aspect.c b/test/battle/ability/embody_aspect.c index a2427875f6a0..1278fdb0079c 100644 --- a/test/battle/ability/embody_aspect.c +++ b/test/battle/ability/embody_aspect.c @@ -20,13 +20,13 @@ SINGLE_BATTLE_TEST("Embody Aspect raises a stat depending on the users form by o ABILITY_POPUP(opponent, ability); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); if (ability == ABILITY_EMBODY_ASPECT_TEAL_MASK) - MESSAGE("Foe Ogerpon's Embody Aspect raised its Speed!"); + MESSAGE("The opposing Ogerpon's Embody Aspect raised its Speed!"); else if (ability == ABILITY_EMBODY_ASPECT_HEARTHFLAME_MASK) - MESSAGE("Foe Ogerpon's Embody Aspect raised its Attack!"); + MESSAGE("The opposing Ogerpon's Embody Aspect raised its Attack!"); else if (ability == ABILITY_EMBODY_ASPECT_WELLSPRING_MASK) - MESSAGE("Foe Ogerpon's Embody Aspect raised its Sp. Def!"); + MESSAGE("The opposing Ogerpon's Embody Aspect raised its Sp. Def!"); else if (ability == ABILITY_EMBODY_ASPECT_CORNERSTONE_MASK) - MESSAGE("Foe Ogerpon's Embody Aspect raised its Defense!"); + MESSAGE("The opposing Ogerpon's Embody Aspect raised its Defense!"); } THEN { if (ability == ABILITY_EMBODY_ASPECT_TEAL_MASK) EXPECT_EQ(opponent->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 1); @@ -54,6 +54,6 @@ SINGLE_BATTLE_TEST("Embody Aspect activates when it's no longer effected by Neut MESSAGE("The effects of Neutralizing Gas wore off!"); ABILITY_POPUP(opponent, ABILITY_EMBODY_ASPECT_TEAL_MASK); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Ogerpon's Embody Aspect raised its Speed!"); + MESSAGE("The opposing Ogerpon's Embody Aspect raised its Speed!"); } } diff --git a/test/battle/ability/flame_body.c b/test/battle/ability/flame_body.c index 032e57909a49..b8fa850b65ab 100644 --- a/test/battle/ability/flame_body.c +++ b/test/battle/ability/flame_body.c @@ -43,7 +43,7 @@ SINGLE_BATTLE_TEST("Flame Body triggers 30% of the time") } SCENE { ABILITY_POPUP(opponent, ABILITY_FLAME_BODY); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, player); - MESSAGE("Foe Magmar's Flame Body burned Wobbuffet!"); + MESSAGE("The opposing Magmar's Flame Body burned Wobbuffet!"); STATUS_ICON(player, burn: TRUE); } } diff --git a/test/battle/ability/frisk.c b/test/battle/ability/frisk.c index ea22117111e2..1f70df29dd41 100644 --- a/test/battle/ability/frisk.c +++ b/test/battle/ability/frisk.c @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Frisk triggers in a Single Battle") ABILITY_POPUP(player, ABILITY_FRISK); MESSAGE("Furret frisked Foe Sentret and found its Potion!"); ABILITY_POPUP(opponent, ABILITY_FRISK); - MESSAGE("Foe Sentret frisked Furret and found its Potion!"); + MESSAGE("The opposing Sentret frisked Furret and found its Potion!"); } } @@ -75,8 +75,8 @@ DOUBLE_BATTLE_TEST("Frisk triggers for opponent in a Double Battle after switchi TURN { MOVE(playerLeft, MOVE_POUND, target: target); SEND_OUT(target, 2); } } SCENE { MESSAGE("Wynaut used Pound!"); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); ABILITY_POPUP(target, ABILITY_FRISK); - MESSAGE("Foe Furret frisked Wynaut and found its Potion!"); + MESSAGE("The opposing Furret frisked Wynaut and found its Potion!"); } } diff --git a/test/battle/ability/grim_neigh.c b/test/battle/ability/grim_neigh.c index b4d82487d83e..6f01d91e338d 100644 --- a/test/battle/ability/grim_neigh.c +++ b/test/battle/ability/grim_neigh.c @@ -22,8 +22,8 @@ DOUBLE_BATTLE_TEST("Grim Neigh raises Sp. Attack by one stage after directly cau for (i = 0; i < 3; i++) { ONE_OF { MESSAGE("Snorunt fainted!"); - MESSAGE("Foe Glalie fainted!"); - MESSAGE("Foe Abra fainted!"); + MESSAGE("The opposing Glalie fainted!"); + MESSAGE("The opposing Abra fainted!"); } ABILITY_POPUP(playerLeft, abilityPopUp); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); @@ -57,8 +57,8 @@ DOUBLE_BATTLE_TEST("Grim Neigh does not trigger if Pokemon faint to indirect dam for (i = 0; i < 3; i++) { ONE_OF { MESSAGE("Snorunt fainted!"); - MESSAGE("Foe Glalie fainted!"); - MESSAGE("Foe Abra fainted!"); + MESSAGE("The opposing Glalie fainted!"); + MESSAGE("The opposing Abra fainted!"); } NONE_OF { ABILITY_POPUP(playerLeft, abilityPopUp); diff --git a/test/battle/ability/gulp_missile.c b/test/battle/ability/gulp_missile.c index 7ccf1063b569..f5e1fd9d9d7d 100644 --- a/test/battle/ability/gulp_missile.c +++ b/test/battle/ability/gulp_missile.c @@ -89,7 +89,7 @@ SINGLE_BATTLE_TEST("(Gulp Missile) Transformed Cramorant deal 1/4 of damage oppo ABILITY_POPUP(player, ABILITY_GULP_MISSILE); HP_BAR(opponent, captureDamage: &gulpMissileDamage); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Defense fell!"); + MESSAGE("The opposing Wobbuffet's Defense fell!"); } THEN { EXPECT_EQ(gulpMissileDamage, opponent->maxHP / 4); } diff --git a/test/battle/ability/intimidate.c b/test/battle/ability/intimidate.c index e6efbd9ddfb7..adc1ae4794f9 100644 --- a/test/battle/ability/intimidate.c +++ b/test/battle/ability/intimidate.c @@ -23,7 +23,7 @@ SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after switch ou { ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Foe Arbok's Intimidate cuts Wobbuffet's attack!"); + MESSAGE("The opposing Arbok's Intimidate cuts Wobbuffet's attack!"); } HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { @@ -49,7 +49,7 @@ SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after KO", s16 { ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Foe Arbok's Intimidate cuts Wobbuffet's attack!"); + MESSAGE("The opposing Arbok's Intimidate cuts Wobbuffet's attack!"); } HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { @@ -98,9 +98,9 @@ DOUBLE_BATTLE_TEST("Intimidate doesn't activate on an empty field in a double ba ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); - MESSAGE("Foe Arbok's Intimidate cuts Ekans's attack!"); + MESSAGE("The opposing Arbok's Intimidate cuts Ekans's attack!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); - MESSAGE("Foe Arbok's Intimidate cuts Abra's attack!"); + MESSAGE("The opposing Arbok's Intimidate cuts Abra's attack!"); } } @@ -120,10 +120,10 @@ SINGLE_BATTLE_TEST("Intimidate and Eject Button force the opponent to Attack") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + MESSAGE("The opposing Wobbuffet is switched out with the Eject Button!"); MESSAGE("2 sent out Hitmontop!"); ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); - MESSAGE("Foe Hitmontop's Intimidate cuts Wobbuffet's attack!"); + MESSAGE("The opposing Hitmontop's Intimidate cuts Wobbuffet's attack!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); MESSAGE("The opposing Hitmontop used Tackle!"); @@ -209,7 +209,7 @@ SINGLE_BATTLE_TEST("Intimidate can not further lower opponents Atk stat if it is ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Foe Arbok's Intimidate cuts Wobbuffet's attack!"); + MESSAGE("The opposing Arbok's Intimidate cuts Wobbuffet's attack!"); } MESSAGE("Wobbuffet's Attack won't go lower!"); } THEN { diff --git a/test/battle/ability/lightning_rod.c b/test/battle/ability/lightning_rod.c index 33dd27a6fbf5..c719ee145d41 100644 --- a/test/battle/ability/lightning_rod.c +++ b/test/battle/ability/lightning_rod.c @@ -17,12 +17,12 @@ SINGLE_BATTLE_TEST("Lightning Rod absorbs Electric-type moves and increases the }; ABILITY_POPUP(opponent, ABILITY_LIGHTNING_ROD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Raichu's Sp. Atk rose!"); + MESSAGE("The opposing Raichu's Sp. Atk rose!"); } else { NONE_OF { ABILITY_POPUP(opponent, ABILITY_LIGHTNING_ROD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Raichu's Sp. Atk rose!"); + MESSAGE("The opposing Raichu's Sp. Atk rose!"); }; ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); HP_BAR(opponent); @@ -54,10 +54,10 @@ DOUBLE_BATTLE_TEST("Lightning Rod forces single-target Electric-type moves to ta }; ABILITY_POPUP(opponentLeft, ABILITY_LIGHTNING_ROD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Raichu's Sp. Atk rose!"); + MESSAGE("The opposing Raichu's Sp. Atk rose!"); ABILITY_POPUP(opponentLeft, ABILITY_LIGHTNING_ROD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Raichu's Sp. Atk rose!"); + MESSAGE("The opposing Raichu's Sp. Atk rose!"); } else { NONE_OF { HP_BAR(opponentRight); diff --git a/test/battle/ability/mirror_armor.c b/test/battle/ability/mirror_armor.c index 6f63ad0daaab..73bc999843ef 100644 --- a/test/battle/ability/mirror_armor.c +++ b/test/battle/ability/mirror_armor.c @@ -23,22 +23,22 @@ SINGLE_BATTLE_TEST("Mirror Armor lowers a stat of the attacking pokemon") switch (statId) { case STAT_DEF: - MESSAGE("Foe Wynaut's Defense fell!"); + MESSAGE("The opposing Wynaut's Defense fell!"); break; case STAT_ATK: - MESSAGE("Foe Wynaut's Attack fell!"); + MESSAGE("The opposing Wynaut's Attack fell!"); break; case STAT_EVASION: - MESSAGE("Foe Wynaut's evasiveness harshly fell!"); + MESSAGE("The opposing Wynaut's evasiveness harshly fell!"); break; case STAT_ACC: - MESSAGE("Foe Wynaut's accuracy fell!"); + MESSAGE("The opposing Wynaut's accuracy fell!"); break; case STAT_SPATK: - MESSAGE("Foe Wynaut's Sp. Atk fell!"); + MESSAGE("The opposing Wynaut's Sp. Atk fell!"); break; case STAT_SPDEF: - MESSAGE("Foe Wynaut's Sp. Def harshly fell!"); + MESSAGE("The opposing Wynaut's Sp. Def harshly fell!"); break; } } THEN { @@ -59,7 +59,7 @@ SINGLE_BATTLE_TEST("Mirror Armor triggers even if the attacking Pokemon also has ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Corviknight's Defense fell!"); + MESSAGE("The opposing Corviknight's Defense fell!"); } THEN { EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 1); @@ -77,7 +77,7 @@ SINGLE_BATTLE_TEST("Mirror Armor doesn't lower the stats of an attacking Pokemon MESSAGE("The opposing Wynaut used Leer!"); ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); - MESSAGE("Foe Wynaut's Clear Body prevents stat loss!"); + MESSAGE("The opposing Wynaut's Clear Body prevents stat loss!"); } THEN { EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE); @@ -95,7 +95,7 @@ SINGLE_BATTLE_TEST("Mirror Armor lowers the Attack of Pokemon with Intimidate") ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Gyarados's Attack fell!"); + MESSAGE("The opposing Gyarados's Attack fell!"); } THEN { EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE); EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE - 1); @@ -135,7 +135,7 @@ SINGLE_BATTLE_TEST("Mirror Armor raises the stat of an attacking Pokemon with Co MESSAGE("The opposing Shuckle used Leer!"); ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Shuckle's Defense rose!"); + MESSAGE("The opposing Shuckle's Defense rose!"); } THEN { EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 1); @@ -159,7 +159,7 @@ SINGLE_BATTLE_TEST("Mirror Armor doesn't lower the stat of the attacking Pokemon MESSAGE("The opposing Wynaut used Leer!"); ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wynaut's Defense won't go lower!"); + MESSAGE("The opposing Wynaut's Defense won't go lower!"); } THEN { EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); EXPECT_EQ(opponent->statStages[STAT_DEF], MIN_STAT_STAGE); @@ -187,7 +187,7 @@ DOUBLE_BATTLE_TEST("Mirror Armor lowers Speed of the partner Pokemon after Court } SCENE { MESSAGE("Wobbuffet used Sticky Web!"); MESSAGE("The opposing Wynaut used Court Change!"); - MESSAGE("Foe Wynaut swapped the battle effects affecting each side!"); + MESSAGE("The opposing Wynaut swapped the battle effects affecting each side!"); SEND_IN_MESSAGE("Corviknight"); MESSAGE("Corviknight was caught in a Sticky Web!"); ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR); diff --git a/test/battle/ability/moxie.c b/test/battle/ability/moxie.c index 79b1fc989fa6..b418763e8f58 100644 --- a/test/battle/ability/moxie.c +++ b/test/battle/ability/moxie.c @@ -23,8 +23,8 @@ DOUBLE_BATTLE_TEST("Moxie/Chilling Neigh raises Attack by one stage after direct for (i = 0; i < 3; i++) { ONE_OF { MESSAGE("Snorunt fainted!"); - MESSAGE("Foe Glalie fainted!"); - MESSAGE("Foe Abra fainted!"); + MESSAGE("The opposing Glalie fainted!"); + MESSAGE("The opposing Abra fainted!"); } ABILITY_POPUP(playerLeft, abilityPopUp); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); @@ -61,8 +61,8 @@ DOUBLE_BATTLE_TEST("Moxie/Chilling Neigh does not trigger if Pokemon faint to in for (i = 0; i < 3; i++) { ONE_OF { MESSAGE("Snorunt fainted!"); - MESSAGE("Foe Glalie fainted!"); - MESSAGE("Foe Abra fainted!"); + MESSAGE("The opposing Glalie fainted!"); + MESSAGE("The opposing Abra fainted!"); } NONE_OF { ABILITY_POPUP(playerLeft, abilityPopUp); @@ -101,7 +101,7 @@ SINGLE_BATTLE_TEST("Moxie/Chilling Neigh does not trigger when already at maximu else MESSAGE("Calyrex cut its own HP and maximized ATTACK!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); - MESSAGE("Foe Snorunt fainted!"); + MESSAGE("The opposing Snorunt fainted!"); NONE_OF { ABILITY_POPUP(player, abilityPopUp); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); diff --git a/test/battle/ability/own_tempo.c b/test/battle/ability/own_tempo.c index a37bc0024a83..4b3c42053b77 100644 --- a/test/battle/ability/own_tempo.c +++ b/test/battle/ability/own_tempo.c @@ -13,11 +13,11 @@ SINGLE_BATTLE_TEST("Own Tempo prevents Intimidate but no other stat down changes } SCENE { ABILITY_POPUP(player, ABILITY_INTIMIDATE); ABILITY_POPUP(opponent, ABILITY_OWN_TEMPO); - MESSAGE("Foe Slowpoke's Own Tempo prevents stat loss!"); + MESSAGE("The opposing Slowpoke's Own Tempo prevents stat loss!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCARY_FACE, player); NONE_OF { ABILITY_POPUP(opponent, ABILITY_OWN_TEMPO); - MESSAGE("Foe Slowpoke's Own Tempo prevents stat loss!"); + MESSAGE("The opposing Slowpoke's Own Tempo prevents stat loss!"); } } } @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Own Tempo prevents confusion from moves by the opponent") TURN { MOVE(player, MOVE_CONFUSE_RAY); } } SCENE { ABILITY_POPUP(opponent, ABILITY_OWN_TEMPO); - MESSAGE("Foe Slowpoke's Own Tempo prevents confusion!"); + MESSAGE("The opposing Slowpoke's Own Tempo prevents confusion!"); } } @@ -52,7 +52,7 @@ SINGLE_BATTLE_TEST("Own Tempo prevents confusion from moves by the user") ANIMATION(ANIM_TYPE_MOVE, MOVE_PETAL_DANCE, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_PETAL_DANCE, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_PETAL_DANCE, opponent); - NONE_OF { MESSAGE("Foe Slowpoke became confused due to fatigue!"); } + NONE_OF { MESSAGE("The opposing Slowpoke became confused due to fatigue!"); } } } @@ -68,7 +68,7 @@ SINGLE_BATTLE_TEST("Own Tempo is ignored by Mold Breaker") } SCENE { NONE_OF { ABILITY_POPUP(opponent, ABILITY_OWN_TEMPO); - MESSAGE("Foe Slowpoke's Own Tempo prevents confusion!"); + MESSAGE("The opposing Slowpoke's Own Tempo prevents confusion!"); } } } @@ -84,12 +84,12 @@ SINGLE_BATTLE_TEST("Own Tempo cures confusion obtained from an opponent with Mol TURN { MOVE(player, MOVE_CONFUSE_RAY); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player); - MESSAGE("Foe Slowpoke became confused!"); + MESSAGE("The opposing Slowpoke became confused!"); NONE_OF { ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponent); } ABILITY_POPUP(opponent, ABILITY_OWN_TEMPO); - MESSAGE("Foe Slowpoke's Own Tempo cured its confusion problem!"); + MESSAGE("The opposing Slowpoke's Own Tempo cured its confusion problem!"); } } @@ -107,10 +107,10 @@ SINGLE_BATTLE_TEST("Own Tempo cures confusion if it's obtained via Skill Swap") } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SKILL_SWAP, player); ABILITY_POPUP(opponent, ABILITY_OWN_TEMPO); - MESSAGE("Foe Wobbuffet's Own Tempo cured its confusion problem!"); + MESSAGE("The opposing Wobbuffet's Own Tempo cured its confusion problem!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } } diff --git a/test/battle/ability/parental_bond.c b/test/battle/ability/parental_bond.c index 3ee942e78972..3fd1ddc76caa 100644 --- a/test/battle/ability/parental_bond.c +++ b/test/battle/ability/parental_bond.c @@ -149,7 +149,7 @@ SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they stil MESSAGE("Kangaskhan has Mega Evolved into Mega Kangaskhan!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_COMET_PUNCH, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_COMET_PUNCH, player); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); } THEN { @@ -176,7 +176,7 @@ SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they stil ANIMATION(ANIM_TYPE_MOVE, MOVE_COMET_PUNCH, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_COMET_PUNCH, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_COMET_PUNCH, player); - MESSAGE("Hit 3 time(s)!"); + MESSAGE("The Pokémon was hit 3 time(s)!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); } THEN { @@ -204,7 +204,7 @@ SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they stil ANIMATION(ANIM_TYPE_MOVE, MOVE_COMET_PUNCH, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_COMET_PUNCH, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_COMET_PUNCH, player); - MESSAGE("Hit 4 time(s)!"); + MESSAGE("The Pokémon was hit 4 time(s)!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); } THEN { @@ -231,7 +231,7 @@ SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they stil ANIMATION(ANIM_TYPE_MOVE, MOVE_COMET_PUNCH, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_COMET_PUNCH, player); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_COMET_PUNCH, player); - MESSAGE("Hit 5 time(s)!"); + MESSAGE("The Pokémon was hit 5 time(s)!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); } THEN { @@ -255,9 +255,9 @@ SINGLE_BATTLE_TEST("Parental Bond Smack Down effect triggers after 2nd hit") MESSAGE("Kangaskhan has Mega Evolved into Mega Kangaskhan!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SMACK_DOWN, player); HP_BAR(opponent); - NOT MESSAGE("Foe Skarmory fell straight down!"); + NOT MESSAGE("The opposing Skarmory fell straight down!"); HP_BAR(opponent); - MESSAGE("Foe Skarmory fell straight down!"); + MESSAGE("The opposing Skarmory fell straight down!"); } THEN { EXPECT_EQ(player->species, SPECIES_KANGASKHAN_MEGA); } @@ -277,7 +277,7 @@ SINGLE_BATTLE_TEST("Parental Bond Snore strikes twice while asleep") ANIMATION(ANIM_TYPE_MOVE, MOVE_SNORE, player); HP_BAR(opponent, captureDamage: &damage[0]); HP_BAR(opponent, captureDamage: &damage[1]); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } THEN { if (B_PARENTAL_BOND_DMG == GEN_6) EXPECT_MUL_EQ(damage[0], Q_4_12(0.5), damage[1]); diff --git a/test/battle/ability/poison_puppeteer.c b/test/battle/ability/poison_puppeteer.c index af5d5389fa65..b8124b975bef 100644 --- a/test/battle/ability/poison_puppeteer.c +++ b/test/battle/ability/poison_puppeteer.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Poison Puppeteer confuses target if it was poisoned by a dam STATUS_ICON(opponent, poison: TRUE); ABILITY_POPUP(player, ABILITY_POISON_PUPPETEER); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponent); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); } } @@ -46,7 +46,7 @@ SINGLE_BATTLE_TEST("Poison Puppeteer confuses target if it was (badly) poisoned STATUS_ICON(opponent, badPoison: TRUE); ABILITY_POPUP(player, ABILITY_POISON_PUPPETEER); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponent); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); } } @@ -67,7 +67,7 @@ SINGLE_BATTLE_TEST("Poison Puppeteer does not trigger if poison is Toxic Spikes NONE_OF { ABILITY_POPUP(player, ABILITY_POISON_PUPPETEER); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponent); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); } } } diff --git a/test/battle/ability/poison_touch.c b/test/battle/ability/poison_touch.c index b69fa2044430..267bc3be225b 100644 --- a/test/battle/ability/poison_touch.c +++ b/test/battle/ability/poison_touch.c @@ -15,7 +15,7 @@ SINGLE_BATTLE_TEST("Poison Touch has a 30% chance to poison when attacking with ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); ABILITY_POPUP(player, ABILITY_POISON_TOUCH); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - MESSAGE("Foe Wobbuffet was poisoned by Grimer's Poison Touch!"); + MESSAGE("The opposing Wobbuffet was poisoned by Grimer's Poison Touch!"); STATUS_ICON(opponent, poison: TRUE); } } @@ -38,13 +38,13 @@ SINGLE_BATTLE_TEST("Poison Touch only applies when using contact moves") if (gMovesInfo[move].makesContact) { ABILITY_POPUP(player, ABILITY_POISON_TOUCH); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - MESSAGE("Foe Wobbuffet was poisoned by Grimer's Poison Touch!"); + MESSAGE("The opposing Wobbuffet was poisoned by Grimer's Poison Touch!"); STATUS_ICON(opponent, poison: TRUE); } else { NONE_OF { ABILITY_POPUP(player, ABILITY_POISON_TOUCH); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - MESSAGE("Foe Wobbuffet was poisoned by Grimer's Poison Touch!"); + MESSAGE("The opposing Wobbuffet was poisoned by Grimer's Poison Touch!"); STATUS_ICON(opponent, poison: TRUE); } } @@ -65,13 +65,13 @@ SINGLE_BATTLE_TEST("Poison Touch applies between multi-hit move hits") ANIMATION(ANIM_TYPE_MOVE, MOVE_ARM_THRUST, player); ABILITY_POPUP(player, ABILITY_POISON_TOUCH); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - MESSAGE("Foe Wobbuffet was poisoned by Grimer's Poison Touch!"); + MESSAGE("The opposing Wobbuffet was poisoned by Grimer's Poison Touch!"); STATUS_ICON(opponent, poison: TRUE); - MESSAGE("Foe Wobbuffet's Pecha Berry cured poison!"); + MESSAGE("The opposing Wobbuffet's Pecha Berry cured poison!"); STATUS_ICON(opponent, poison: FALSE); ABILITY_POPUP(player, ABILITY_POISON_TOUCH); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - MESSAGE("Foe Wobbuffet was poisoned by Grimer's Poison Touch!"); + MESSAGE("The opposing Wobbuffet was poisoned by Grimer's Poison Touch!"); STATUS_ICON(opponent, poison: TRUE); } } diff --git a/test/battle/ability/rattled.c b/test/battle/ability/rattled.c index 3c05a9fc2b5b..5d771cc9c651 100644 --- a/test/battle/ability/rattled.c +++ b/test/battle/ability/rattled.c @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Rattled boosts speed by 1 when hit by Bug, Dark or Ghost typ if (move != MOVE_TACKLE) { ABILITY_POPUP(opponent, ABILITY_RATTLED); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Sudowoodo's Speed rose!"); + MESSAGE("The opposing Sudowoodo's Speed rose!"); } MESSAGE("The opposing Sudowoodo used Celebrate!"); // Sudowoodo is now faster @@ -42,7 +42,7 @@ SINGLE_BATTLE_TEST("Rattled boosts speed by 1 when hit by Bug, Dark or Ghost typ HP_BAR(opponent); ABILITY_POPUP(opponent, ABILITY_RATTLED); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Sudowoodo's Speed rose!"); + MESSAGE("The opposing Sudowoodo's Speed rose!"); } else { ANIMATION(ANIM_TYPE_MOVE, move, player); @@ -66,7 +66,7 @@ SINGLE_BATTLE_TEST("Rattled boosts speed by 1 when affected by Intimidate") MESSAGE("Gyarados's Intimidate cuts Foe Sudowoodo's attack!"); ABILITY_POPUP(opponent, ABILITY_RATTLED); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Sudowoodo's Speed rose!"); + MESSAGE("The opposing Sudowoodo's Speed rose!"); } } @@ -87,7 +87,7 @@ SINGLE_BATTLE_TEST("Rattled triggers correctly when hit by U-Turn") // Specific HP_BAR(opponent); ABILITY_POPUP(opponent, ABILITY_RATTLED); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Sudowoodo's Speed rose!"); + MESSAGE("The opposing Sudowoodo's Speed rose!"); SEND_IN_MESSAGE("Wynaut"); } } diff --git a/test/battle/ability/sap_sipper.c b/test/battle/ability/sap_sipper.c index 01716d42271a..a33c1a2b293a 100644 --- a/test/battle/ability/sap_sipper.c +++ b/test/battle/ability/sap_sipper.c @@ -74,7 +74,7 @@ SINGLE_BATTLE_TEST("Sap Sipper blocks multi-hit grass type moves") NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, opponent); HP_BAR(player); - MESSAGE("Hit 5 time(s)!"); + MESSAGE("The Pokémon was hit 5 time(s)!"); } } } diff --git a/test/battle/ability/shed_skin.c b/test/battle/ability/shed_skin.c index d3030b9baf49..0c44b750a4af 100644 --- a/test/battle/ability/shed_skin.c +++ b/test/battle/ability/shed_skin.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Shed Skin triggers 30% of the time") TURN; } SCENE { ABILITY_POPUP(opponent, ABILITY_SHED_SKIN); - MESSAGE("Foe Arbok's Shed Skin cured its poison problem!"); + MESSAGE("The opposing Arbok's Shed Skin cured its poison problem!"); STATUS_ICON(opponent, poison: FALSE); } } diff --git a/test/battle/ability/shield_dust.c b/test/battle/ability/shield_dust.c index d1785bd69e1b..3e01cf8ad386 100644 --- a/test/battle/ability/shield_dust.c +++ b/test/battle/ability/shield_dust.c @@ -28,12 +28,12 @@ SINGLE_BATTLE_TEST("Shield Dust blocks secondary effects") ANIMATION(ANIM_TYPE_MOVE, move, player); HP_BAR(opponent); NONE_OF { - MESSAGE("Foe Vivillon is paralyzed! It may be unable to move!"); - MESSAGE("Foe Vivillon was burned!"); - MESSAGE("Foe Vivillon was poisoned!"); - MESSAGE("Foe Vivillon flinched!"); + MESSAGE("The opposing Vivillon is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Vivillon was burned!"); + MESSAGE("The opposing Vivillon was poisoned!"); + MESSAGE("The opposing Vivillon flinched!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Vivillon was prevented from healing!"); + MESSAGE("The opposing Vivillon was prevented from healing!"); } } THEN { // Can't find good way to test trapping EXPECT(!(opponent->status2 & STATUS2_ESCAPE_PREVENTION)); @@ -64,10 +64,10 @@ SINGLE_BATTLE_TEST("Shield Dust does not block primary effects") switch (move) { case MOVE_INFESTATION: - MESSAGE("Foe Vivillon has been afflicted with an infestation by Wobbuffet!"); + MESSAGE("The opposing Vivillon has been afflicted with an infestation by Wobbuffet!"); break; case MOVE_THOUSAND_ARROWS: - MESSAGE("Foe Vivillon fell straight down!"); + MESSAGE("The opposing Vivillon fell straight down!"); break; case MOVE_JAW_LOCK: MESSAGE("Neither Pokémon can run away!"); @@ -137,11 +137,11 @@ DOUBLE_BATTLE_TEST("Shield Dust does or does not block Sparkling Aria depending } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPARKLING_ARIA, playerLeft); if (moveToUse == MOVE_TACKLE) { - MESSAGE("Foe Vivillon's burn was healed."); + MESSAGE("The opposing Vivillon's burn was healed."); STATUS_ICON(opponentLeft, none: TRUE); } else { NONE_OF { - MESSAGE("Foe Vivillon's burn was healed."); + MESSAGE("The opposing Vivillon's burn was healed."); STATUS_ICON(opponentLeft, none: TRUE); } } @@ -159,7 +159,7 @@ SINGLE_BATTLE_TEST("Shield Dust blocks Sparkling Aria in singles") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPARKLING_ARIA, player); NONE_OF { - MESSAGE("Foe Vivillon's burn was healed."); + MESSAGE("The opposing Vivillon's burn was healed."); STATUS_ICON(opponent, none: TRUE); } } diff --git a/test/battle/ability/stalwart.c b/test/battle/ability/stalwart.c index 289f25dd1c80..6f8acd6d8290 100644 --- a/test/battle/ability/stalwart.c +++ b/test/battle/ability/stalwart.c @@ -43,7 +43,7 @@ DOUBLE_BATTLE_TEST("Stalwart stops Lightning Rod and Storm Drain from redirectin NONE_OF { ABILITY_POPUP(opponentLeft, ability); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Raichu's Sp. Atk rose!"); + MESSAGE("The opposing Raichu's Sp. Atk rose!"); } } else { HP_BAR(opponentRight); diff --git a/test/battle/ability/static.c b/test/battle/ability/static.c index 726243718f84..8438d77b26f8 100644 --- a/test/battle/ability/static.c +++ b/test/battle/ability/static.c @@ -43,7 +43,7 @@ SINGLE_BATTLE_TEST("Static triggers 30% of the time") } SCENE { ABILITY_POPUP(opponent, ABILITY_STATIC); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, player); - MESSAGE("Foe Pikachu's Static paralyzed Wobbuffet! It may be unable to move!"); + MESSAGE("The opposing Pikachu's Static paralyzed Wobbuffet! It may be unable to move!"); STATUS_ICON(player, paralysis: TRUE); } } diff --git a/test/battle/ability/sticky_hold.c b/test/battle/ability/sticky_hold.c index 2c7cc095350c..708c691c801b 100644 --- a/test/battle/ability/sticky_hold.c +++ b/test/battle/ability/sticky_hold.c @@ -12,7 +12,7 @@ SINGLE_BATTLE_TEST("Sticky Hold prevents item theft") } SCENE { MESSAGE("Ursaluna used Thief!"); ABILITY_POPUP(opponent, ABILITY_STICKY_HOLD); - MESSAGE("Foe Gastrodon's Sticky Hold made Thief ineffective!"); + MESSAGE("The opposing Gastrodon's Sticky Hold made Thief ineffective!"); } } diff --git a/test/battle/ability/storm_drain.c b/test/battle/ability/storm_drain.c index 38d4a9be7595..9b8345b60e35 100644 --- a/test/battle/ability/storm_drain.c +++ b/test/battle/ability/storm_drain.c @@ -17,12 +17,12 @@ SINGLE_BATTLE_TEST("Storm Drain absorbs Water-type moves and increases the Sp. A }; ABILITY_POPUP(opponent, ABILITY_STORM_DRAIN); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Gastrodon's Sp. Atk rose!"); + MESSAGE("The opposing Gastrodon's Sp. Atk rose!"); } else { NONE_OF { ABILITY_POPUP(opponent, ABILITY_STORM_DRAIN); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Gastrodon's Sp. Atk rose!"); + MESSAGE("The opposing Gastrodon's Sp. Atk rose!"); }; ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_GUN, player); HP_BAR(opponent); @@ -54,10 +54,10 @@ DOUBLE_BATTLE_TEST("Storm Drain forces single-target Water-type moves to target }; ABILITY_POPUP(opponentLeft, ABILITY_STORM_DRAIN); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Gastrodon's Sp. Atk rose!"); + MESSAGE("The opposing Gastrodon's Sp. Atk rose!"); ABILITY_POPUP(opponentLeft, ABILITY_STORM_DRAIN); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Gastrodon's Sp. Atk rose!"); + MESSAGE("The opposing Gastrodon's Sp. Atk rose!"); } else { NONE_OF { HP_BAR(opponentRight); diff --git a/test/battle/ability/supreme_overlord.c b/test/battle/ability/supreme_overlord.c index dcaaa494a0df..f8868b4afb98 100644 --- a/test/battle/ability/supreme_overlord.c +++ b/test/battle/ability/supreme_overlord.c @@ -130,6 +130,6 @@ SINGLE_BATTLE_TEST("Supreme Overlord's message displays correctly after all batt SEND_IN_MESSAGE("Wobbuffet"); MESSAGE("2 sent out Kingambit!"); ABILITY_POPUP(opponent, ABILITY_SUPREME_OVERLORD); - MESSAGE("Foe Kingambit gained strength from the fallen!"); + MESSAGE("The opposing Kingambit gained strength from the fallen!"); } } diff --git a/test/battle/ability/sword_of_ruin.c b/test/battle/ability/sword_of_ruin.c index 02eec69ed868..3498522423a9 100644 --- a/test/battle/ability/sword_of_ruin.c +++ b/test/battle/ability/sword_of_ruin.c @@ -70,6 +70,6 @@ SINGLE_BATTLE_TEST("Sword of Ruin's message displays correctly after all battler SEND_IN_MESSAGE("Wobbuffet"); MESSAGE("2 sent out Chien-Pao!"); ABILITY_POPUP(opponent, ABILITY_SWORD_OF_RUIN); - MESSAGE("Foe Chien-Pao's Sword of Ruin weakened the Defense of all surrounding Pokémon!"); + MESSAGE("The opposing Chien-Pao's Sword of Ruin weakened the Defense of all surrounding Pokémon!"); } } diff --git a/test/battle/ability/tablets_of_ruin.c b/test/battle/ability/tablets_of_ruin.c index 7862a0bb8c56..c98384b805f3 100644 --- a/test/battle/ability/tablets_of_ruin.c +++ b/test/battle/ability/tablets_of_ruin.c @@ -70,6 +70,6 @@ SINGLE_BATTLE_TEST("Tablets of Ruin's message displays correctly after all battl SEND_IN_MESSAGE("Wobbuffet"); MESSAGE("2 sent out Wo-Chien!"); ABILITY_POPUP(opponent, ABILITY_TABLETS_OF_RUIN); - MESSAGE("Foe Wo-Chien's Tablets of Ruin weakened the Attack of all surrounding Pokémon!"); + MESSAGE("The opposing Wo-Chien's Tablets of Ruin weakened the Attack of all surrounding Pokémon!"); } } diff --git a/test/battle/ability/toxic_chain.c b/test/battle/ability/toxic_chain.c index 2c29770f52a6..2401843481e1 100644 --- a/test/battle/ability/toxic_chain.c +++ b/test/battle/ability/toxic_chain.c @@ -14,7 +14,7 @@ SINGLE_BATTLE_TEST("Toxic Chain inflicts bad poison when attacking") } SCENE { ABILITY_POPUP(player, ABILITY_TOXIC_CHAIN); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - MESSAGE("Foe Wobbuffet is badly poisoned!"); + MESSAGE("The opposing Wobbuffet is badly poisoned!"); STATUS_ICON(opponent, badPoison: TRUE); } THEN { EXPECT(opponent->status1 & STATUS1_TOXIC_POISON); @@ -35,13 +35,13 @@ SINGLE_BATTLE_TEST("Toxic Chain inflicts bad poison on any hit of a multi-hit mo } SCENE { ABILITY_POPUP(player, ABILITY_TOXIC_CHAIN); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - MESSAGE("Foe Wobbuffet is badly poisoned!"); + MESSAGE("The opposing Wobbuffet is badly poisoned!"); STATUS_ICON(opponent, badPoison: TRUE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); STATUS_ICON(opponent, badPoison: FALSE); ABILITY_POPUP(player, ABILITY_TOXIC_CHAIN); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - MESSAGE("Foe Wobbuffet is badly poisoned!"); + MESSAGE("The opposing Wobbuffet is badly poisoned!"); STATUS_ICON(opponent, badPoison: TRUE); } THEN { EXPECT(opponent->status1 & STATUS1_TOXIC_POISON); @@ -64,12 +64,12 @@ DOUBLE_BATTLE_TEST("Toxic Chain can inflict bad poison on both foes") HP_BAR(opponentLeft); ABILITY_POPUP(playerLeft, ABILITY_TOXIC_CHAIN); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponentLeft); - MESSAGE("Foe Wobbuffet is badly poisoned!"); + MESSAGE("The opposing Wobbuffet is badly poisoned!"); STATUS_ICON(opponentLeft, badPoison: TRUE); HP_BAR(opponentRight); ABILITY_POPUP(playerLeft, ABILITY_TOXIC_CHAIN); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponentRight); - MESSAGE("Foe Wynaut is badly poisoned!"); + MESSAGE("The opposing Wynaut is badly poisoned!"); STATUS_ICON(opponentRight, badPoison: TRUE); } THEN { EXPECT(opponentLeft->status1 & STATUS1_TOXIC_POISON); @@ -97,7 +97,7 @@ SINGLE_BATTLE_TEST("Toxic Chain makes Lum/Pecha Berry trigger before being knock } SCENE { ABILITY_POPUP(player, ABILITY_TOXIC_CHAIN); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - MESSAGE("Foe Wobbuffet is badly poisoned!"); + MESSAGE("The opposing Wobbuffet is badly poisoned!"); STATUS_ICON(opponent, badPoison: TRUE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); STATUS_ICON(opponent, badPoison: FALSE); diff --git a/test/battle/ability/vessel_of_ruin.c b/test/battle/ability/vessel_of_ruin.c index 362b44c00393..6531cbbf3aae 100644 --- a/test/battle/ability/vessel_of_ruin.c +++ b/test/battle/ability/vessel_of_ruin.c @@ -70,6 +70,6 @@ SINGLE_BATTLE_TEST("Vessel of Ruin's message displays correctly after all battle SEND_IN_MESSAGE("Wobbuffet"); MESSAGE("2 sent out Ting-Lu!"); ABILITY_POPUP(opponent, ABILITY_VESSEL_OF_RUIN); - MESSAGE("Foe Ting-Lu's Vessel of Ruin weakened the Sp. Atk of all surrounding Pokémon!"); + MESSAGE("The opposing Ting-Lu's Vessel of Ruin weakened the Sp. Atk of all surrounding Pokémon!"); } } diff --git a/test/battle/ability/wind_rider.c b/test/battle/ability/wind_rider.c index cd4dbeed1f64..e9cc4c184050 100644 --- a/test/battle/ability/wind_rider.c +++ b/test/battle/ability/wind_rider.c @@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Wind Rider raises Attack by one stage if it sets up Tailwind ANIMATION(ANIM_TYPE_MOVE, MOVE_TAILWIND, opponent); ABILITY_POPUP(opponent, ABILITY_WIND_RIDER); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Bramblin's Attack rose!"); + MESSAGE("The opposing Bramblin's Attack rose!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); } @@ -37,7 +37,7 @@ DOUBLE_BATTLE_TEST("Wind Rider raises Attack by one stage if Tailwind is setup b ANIMATION(ANIM_TYPE_MOVE, MOVE_TAILWIND, opponentLeft); ABILITY_POPUP(opponentRight, ABILITY_WIND_RIDER); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Bramblin's Attack rose!"); + MESSAGE("The opposing Bramblin's Attack rose!"); } THEN { EXPECT_EQ(opponentRight->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); } @@ -55,7 +55,7 @@ SINGLE_BATTLE_TEST("Wind Rider doesn't raise Attack if opponent sets up Tailwind NONE_OF { ABILITY_POPUP(opponent, ABILITY_WIND_RIDER); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Bramblin's Attack rose!"); + MESSAGE("The opposing Bramblin's Attack rose!"); } } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE); @@ -75,7 +75,7 @@ SINGLE_BATTLE_TEST("Wind Rider raises Attack by one stage if switched into Tailw ANIMATION(ANIM_TYPE_MOVE, MOVE_TAILWIND, opponent); ABILITY_POPUP(opponent, ABILITY_WIND_RIDER); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Bramblin's Wind Rider raised its Attack!"); + MESSAGE("The opposing Bramblin's Wind Rider raised its Attack!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); @@ -99,7 +99,7 @@ SINGLE_BATTLE_TEST("Wind Rider activates when it's no longer effected by Neutral MESSAGE("The effects of Neutralizing Gas wore off!"); ABILITY_POPUP(opponent, ABILITY_WIND_RIDER); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Bramblin's Wind Rider raised its Attack!"); + MESSAGE("The opposing Bramblin's Wind Rider raised its Attack!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); } @@ -120,7 +120,7 @@ SINGLE_BATTLE_TEST("Wind Rider absorbs Wind moves and raises Attack by one stage } ABILITY_POPUP(opponent, ABILITY_WIND_RIDER); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Bramblin's Attack rose!"); + MESSAGE("The opposing Bramblin's Attack rose!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); } diff --git a/test/battle/ability/zero_to_hero.c b/test/battle/ability/zero_to_hero.c index c35c0307cf8c..733104f15301 100644 --- a/test/battle/ability/zero_to_hero.c +++ b/test/battle/ability/zero_to_hero.c @@ -178,7 +178,7 @@ SINGLE_BATTLE_TEST("Zero to Hero's message displays correctly after all battlers SEND_IN_MESSAGE("Wobbuffet"); MESSAGE("2 sent out Palafin!"); ABILITY_POPUP(opponent, ABILITY_ZERO_TO_HERO); - MESSAGE("Foe Palafin underwent a heroic transformation!"); + MESSAGE("The opposing Palafin underwent a heroic transformation!"); } } diff --git a/test/battle/ai/ai_flag_sequence_switching.c b/test/battle/ai/ai_flag_sequence_switching.c index 7a0f3528bd34..4f219b848032 100644 --- a/test/battle/ai/ai_flag_sequence_switching.c +++ b/test/battle/ai/ai_flag_sequence_switching.c @@ -60,7 +60,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SEQUENCE_SWITCHING: Roar and Dragon Tail still fo TURN { MOVE(player, move); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, move, player); - MESSAGE("Foe Bulbasaur was dragged out!"); + MESSAGE("The opposing Bulbasaur was dragged out!"); } } diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index b3927509f026..13171be79ed9 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -158,7 +158,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI will not switch in a Pokemo } WHEN { TURN { MOVE(player, MOVE_NIGHT_SLASH) ; EXPECT_SEND_OUT(opponent, alakazamFirst ? 1 : 2); } // AI doesn't send out Alakazam if it gets outsped } SCENE { - MESSAGE("Foe Kadabra fainted!"); + MESSAGE("The opposing Kadabra fainted!"); if (alakazamFirst) { MESSAGE("{PKMN} TRAINER LEAF sent out Alakazam!"); } else { diff --git a/test/battle/form_change/mega_evolution.c b/test/battle/form_change/mega_evolution.c index 466388e2f189..1caa67f98e06 100644 --- a/test/battle/form_change/mega_evolution.c +++ b/test/battle/form_change/mega_evolution.c @@ -168,7 +168,7 @@ SINGLE_BATTLE_TEST("Mega Evolved Pokemon do not change abilities after fainting" } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_CRUNCH, player); - MESSAGE("Foe Garchomp fainted!"); + MESSAGE("The opposing Garchomp fainted!"); NONE_OF { ABILITY_POPUP(opponent, ABILITY_ROUGH_SKIN); MESSAGE("Wobbuffet was hurt by Foe Garchomp's Rough Skin!"); diff --git a/test/battle/gimmick/dynamax.c b/test/battle/gimmick/dynamax.c index 14117ac503aa..449f188b4dd2 100644 --- a/test/battle/gimmick/dynamax.c +++ b/test/battle/gimmick/dynamax.c @@ -113,7 +113,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by Destiny Bond } SCENE { MESSAGE("The opposing Wobbuffet used Destiny Bond!"); MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); NONE_OF { HP_BAR(player); } } } @@ -129,7 +129,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are affected by Grudge") MESSAGE("The opposing Wobbuffet used Grudge!"); MESSAGE("Wobbuffet used Max Strike!"); MESSAGE("Wobbuffet's Tackle lost all its PP due to the GRUDGE!"); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); } } @@ -185,7 +185,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by Red Card") } SCENE { MESSAGE("Wobbuffet used Max Strike!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Foe Wobbuffet held up its Red Card against Wobbuffet!"); + MESSAGE("The opposing Wobbuffet held up its Red Card against Wobbuffet!"); MESSAGE("The move was blocked by the power of Dynamax!"); } THEN { EXPECT_EQ(opponent->item, ITEM_NONE); @@ -339,7 +339,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not immune to Knock Off") } SCENE { MESSAGE("Wobbuffet used Max Strike!"); MESSAGE("The opposing Wobbuffet used Knock Off!"); - MESSAGE("Foe Wobbuffet knocked off Wobbuffet's Potion!"); + MESSAGE("The opposing Wobbuffet knocked off Wobbuffet's Potion!"); } THEN { EXPECT_EQ(player->item, ITEM_NONE); } @@ -637,11 +637,11 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Strike lowers single opponent's speed") MESSAGE("The opposing Wobbuffet used Tackle!"); MESSAGE("Wobbuffet used Max Strike!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); // turn 2 MESSAGE("Wobbuffet used Max Strike!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } } @@ -668,15 +668,15 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Max Strike lowers both opponents' speed") MESSAGE("The opposing Wobbuffet used Tackle!"); MESSAGE("Wobbuffet used Max Strike!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); // turn 2 MESSAGE("Wobbuffet used Max Strike!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet's Speed fell!"); MESSAGE("The opposing Wobbuffet used Tackle!"); MESSAGE("The opposing Wobbuffet used Tackle!"); } @@ -806,7 +806,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Overgrowth sets up Grassy Terrain") MESSAGE("Grass grew to cover the battlefield!"); MESSAGE("Wobbuffet is healed by the grassy terrain!"); HP_BAR(player, damage: -maxHP/16); - MESSAGE("Foe Wobbuffet is healed by the grassy terrain!"); + MESSAGE("The opposing Wobbuffet is healed by the grassy terrain!"); HP_BAR(opponent, damage: -maxHP/16); } } @@ -823,7 +823,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Mindstorm sets up Psychic Terrain") } SCENE { MESSAGE("The opposing Wobbuffet used Extreme Speed!"); MESSAGE("Wobbuffet used Max Mindstorm!"); - MESSAGE("Foe Wobbuffet cannot use Extreme Speed!"); + MESSAGE("The opposing Wobbuffet cannot use Extreme Speed!"); MESSAGE("Wobbuffet used Max Mindstorm!"); } } @@ -939,10 +939,10 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Volt Crash paralyzes both opponents") MESSAGE("Pikachu used G-Max Volt Crash!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, opponentLeft); STATUS_ICON(opponentLeft, paralysis: TRUE); - MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed! It may be unable to move!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, opponentRight); STATUS_ICON(opponentRight, paralysis: TRUE); - MESSAGE("Foe Wynaut is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wynaut is paralyzed! It may be unable to move!"); } } @@ -969,21 +969,21 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Stun Shock paralyzes or poisons both opponen ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponentLeft); if (statusAnim == B_ANIM_STATUS_PSN) { STATUS_ICON(opponentLeft, poison: TRUE); - MESSAGE("Foe Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); } else { STATUS_ICON(opponentLeft, paralysis: TRUE); - MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed! It may be unable to move!"); } // opponent right ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponentRight); if (statusAnim == B_ANIM_STATUS_PSN) { STATUS_ICON(opponentRight, poison: TRUE); - MESSAGE("Foe Wynaut was poisoned!"); + MESSAGE("The opposing Wynaut was poisoned!"); } else { STATUS_ICON(opponentRight, paralysis: TRUE); - MESSAGE("Foe Wynaut is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wynaut is paralyzed! It may be unable to move!"); } } } @@ -1005,14 +1005,14 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Stun Shock chooses statuses before consideri NONE_OF { // opponent left STATUS_ICON(opponentLeft, poison: TRUE); - MESSAGE("Foe Garbodor was poisoned!"); + MESSAGE("The opposing Garbodor was poisoned!"); STATUS_ICON(opponentLeft, paralysis: TRUE); - MESSAGE("Foe Garbodor is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Garbodor is paralyzed! It may be unable to move!"); // opponent right STATUS_ICON(opponentRight, poison: TRUE); - MESSAGE("Foe Trubbish was poisoned!"); + MESSAGE("The opposing Trubbish was poisoned!"); STATUS_ICON(opponentRight, paralysis: TRUE); - MESSAGE("Foe Trubbish is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Trubbish is paralyzed! It may be unable to move!"); } } } @@ -1039,29 +1039,29 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Befuddle paralyzes, poisons, or sleeps both ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponentLeft); if (statusAnim == B_ANIM_STATUS_PSN) { STATUS_ICON(opponentLeft, poison: TRUE); - MESSAGE("Foe Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); } else if (statusAnim == B_ANIM_STATUS_PRZ) { STATUS_ICON(opponentLeft, paralysis: TRUE); - MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed! It may be unable to move!"); } else { STATUS_ICON(opponentLeft, sleep: TRUE); - MESSAGE("Foe Wobbuffet fell asleep!"); + MESSAGE("The opposing Wobbuffet fell asleep!"); } // opponent right ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponentRight); if (statusAnim == B_ANIM_STATUS_PSN) { STATUS_ICON(opponentRight, poison: TRUE); - MESSAGE("Foe Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); } else if (statusAnim == B_ANIM_STATUS_PRZ) { STATUS_ICON(opponentRight, paralysis: TRUE); - MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed! It may be unable to move!"); } else { STATUS_ICON(opponentRight, sleep: TRUE); - MESSAGE("Foe Wobbuffet fell asleep!"); + MESSAGE("The opposing Wobbuffet fell asleep!"); } } } @@ -1079,9 +1079,9 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Gold Rush confuses both opponents and genera } SCENE { MESSAGE("Meowth used G-Max Gold Rush!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponentLeft); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponentRight); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); MESSAGE("Coins scattered everywhere!"); } } @@ -1099,9 +1099,9 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Smite confuses both opponents") } SCENE { MESSAGE("Hatterene used G-Max Smite!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponentLeft); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponentRight); - MESSAGE("Foe Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); } } @@ -1118,10 +1118,10 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Cuddle infatuates both opponents, if possibl } SCENE { MESSAGE("Eevee used G-Max Cuddle!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_INFATUATION, opponentLeft); - MESSAGE("Foe Wobbuffet fell in love!"); + MESSAGE("The opposing Wobbuffet fell in love!"); NONE_OF { ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_INFATUATION, opponentRight); - MESSAGE("Foe Wobbuffet fell in love!"); + MESSAGE("The opposing Wobbuffet fell in love!"); } } } @@ -1138,8 +1138,8 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Terror traps both opponents") TURN { MOVE(playerLeft, MOVE_LICK, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); } } SCENE { MESSAGE("Gengar used G-Max Terror!"); - MESSAGE("Foe Wobbuffet can't escape now!"); - MESSAGE("Foe Wobbuffet can't escape now!"); + MESSAGE("The opposing Wobbuffet can't escape now!"); + MESSAGE("The opposing Wobbuffet can't escape now!"); } THEN { // Can't find good way to test trapping EXPECT(opponentLeft->status2 & STATUS2_ESCAPE_PREVENTION); } @@ -1169,16 +1169,16 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Meltdown torments both opponents for 3 turns } SCENE { // turn 1 MESSAGE("Melmetal used G-Max Meltdown!"); - MESSAGE("Foe Wobbuffet was subjected to torment!"); - MESSAGE("Foe Wynaut was subjected to torment!"); + MESSAGE("The opposing Wobbuffet was subjected to torment!"); + MESSAGE("The opposing Wynaut was subjected to torment!"); MESSAGE("The opposing Wobbuffet used Splash!"); MESSAGE("The opposing Wynaut used Splash!"); // turn 2 MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("The opposing Wynaut used Celebrate!"); // end of turn 3 - MESSAGE("Foe Wobbuffet is tormented no more!"); - MESSAGE("Foe Wynaut is tormented no more!"); + MESSAGE("The opposing Wobbuffet is tormented no more!"); + MESSAGE("The opposing Wynaut is tormented no more!"); } } @@ -1203,26 +1203,26 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Wildfire sets a field effect that damages no // turn 1 MESSAGE("Charizard used G-Max Wildfire!"); MESSAGE("The opposing team was surrounded by flames!"); - MESSAGE("Foe Wobbuffet is burning up within G-Max Wildfire's flames!"); + MESSAGE("The opposing Wobbuffet is burning up within G-Max Wildfire's flames!"); HP_BAR(opponentLeft, captureDamage: &damage); - MESSAGE("Foe Wynaut is burning up within G-Max Wildfire's flames!"); + MESSAGE("The opposing Wynaut is burning up within G-Max Wildfire's flames!"); HP_BAR(opponentRight); // turn 2 - MESSAGE("Foe Wobbuffet is burning up within G-Max Wildfire's flames!"); + MESSAGE("The opposing Wobbuffet is burning up within G-Max Wildfire's flames!"); HP_BAR(opponentLeft); - MESSAGE("Foe Wynaut is burning up within G-Max Wildfire's flames!"); + MESSAGE("The opposing Wynaut is burning up within G-Max Wildfire's flames!"); HP_BAR(opponentRight); // turn 3 - NONE_OF { MESSAGE("Foe Arcanine is burning up within G-Max Wildfire's flames!"); } - MESSAGE("Foe Wynaut is burning up within G-Max Wildfire's flames!"); + NONE_OF { MESSAGE("The opposing Arcanine is burning up within G-Max Wildfire's flames!"); } + MESSAGE("The opposing Wynaut is burning up within G-Max Wildfire's flames!"); HP_BAR(opponentRight); // turn 4 - MESSAGE("Foe Wynaut is burning up within G-Max Wildfire's flames!"); + MESSAGE("The opposing Wynaut is burning up within G-Max Wildfire's flames!"); HP_BAR(opponentRight); // turn 5 NONE_OF { HP_BAR(opponentRight); - MESSAGE("Foe Wynaut is burning up within G-Max Wildfire's flames!"); + MESSAGE("The opposing Wynaut is burning up within G-Max Wildfire's flames!"); } } THEN { EXPECT_EQ(damage, 100); @@ -1276,7 +1276,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Snooze makes only the target drowsy") MESSAGE("Grimmsnarl made Foe Blissey drowsy!"); // turn 2 ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, opponentLeft); - MESSAGE("Foe Blissey fell asleep!"); + MESSAGE("The opposing Blissey fell asleep!"); STATUS_ICON(opponentLeft, sleep: TRUE); } } @@ -1337,14 +1337,14 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Centiferno traps both opponents in Fire Spin } SCENE { // turn 1 MESSAGE("Centiskorch used G-Max Centiferno!"); - MESSAGE("Foe Wobbuffet is hurt by Fire Spin!"); + MESSAGE("The opposing Wobbuffet is hurt by Fire Spin!"); HP_BAR(opponentLeft); - MESSAGE("Foe Wynaut is hurt by Fire Spin!"); + MESSAGE("The opposing Wynaut is hurt by Fire Spin!"); HP_BAR(opponentRight); // turn 2 - Fire Spin continues even after Centiskorch switches out - MESSAGE("Foe Wobbuffet is hurt by Fire Spin!"); + MESSAGE("The opposing Wobbuffet is hurt by Fire Spin!"); HP_BAR(opponentLeft); - MESSAGE("Foe Wynaut is hurt by Fire Spin!"); + MESSAGE("The opposing Wynaut is hurt by Fire Spin!"); HP_BAR(opponentRight); } } @@ -1457,8 +1457,8 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves don't execute effects on fainted battler } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_DYNAMAX_GROWTH, player); MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Foe Wobbuffet fainted!"); - NOT MESSAGE("Foe Wobbuffet's Speed fell!"); + MESSAGE("The opposing Wobbuffet fainted!"); + NOT MESSAGE("The opposing Wobbuffet's Speed fell!"); } } @@ -1472,7 +1472,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Moxie clones can be triggered by Max Moves faintin } WHEN { TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_WATERFALL, gimmick: GIMMICK_DYNAMAX); SEND_OUT(opponent, 1); } } SCENE { - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); ABILITY_POPUP(player, ABILITY_MOXIE); MESSAGE("Gyarados's Moxie raised its Attack!"); } diff --git a/test/battle/hold_effect/covert_cloak.c b/test/battle/hold_effect/covert_cloak.c index e15bca3b9f42..b7ee49dcfacd 100644 --- a/test/battle/hold_effect/covert_cloak.c +++ b/test/battle/hold_effect/covert_cloak.c @@ -33,12 +33,12 @@ SINGLE_BATTLE_TEST("Covert Cloak blocks secondary effects") ANIMATION(ANIM_TYPE_MOVE, move, player); HP_BAR(opponent); NONE_OF { - MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); - MESSAGE("Foe Wobbuffet was burned!"); - MESSAGE("Foe Wobbuffet was poisoned!"); - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet was burned!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet flinched!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet was prevented from healing!"); + MESSAGE("The opposing Wobbuffet was prevented from healing!"); } } THEN { // Can't find good way to test trapping EXPECT(!(opponent->status2 & STATUS2_ESCAPE_PREVENTION)); @@ -68,10 +68,10 @@ SINGLE_BATTLE_TEST("Covert Cloak does not block primary effects") HP_BAR(opponent); switch (move) { case MOVE_INFESTATION: - MESSAGE("Foe Skarmory has been afflicted with an infestation by Wobbuffet!"); + MESSAGE("The opposing Skarmory has been afflicted with an infestation by Wobbuffet!"); break; case MOVE_THOUSAND_ARROWS: - MESSAGE("Foe Skarmory fell straight down!"); + MESSAGE("The opposing Skarmory fell straight down!"); break; case MOVE_JAW_LOCK: MESSAGE("Neither Pokémon can run away!"); @@ -140,11 +140,11 @@ DOUBLE_BATTLE_TEST("Covert Cloak does or does not block Sparkling Aria depending } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPARKLING_ARIA, playerLeft); if (moveToUse == MOVE_TACKLE) { - MESSAGE("Foe Wobbuffet's burn was healed."); + MESSAGE("The opposing Wobbuffet's burn was healed."); STATUS_ICON(opponentLeft, none: TRUE); } else { NONE_OF { - MESSAGE("Foe Wobbuffet's burn was healed."); + MESSAGE("The opposing Wobbuffet's burn was healed."); STATUS_ICON(opponentLeft, none: TRUE); } } @@ -162,7 +162,7 @@ SINGLE_BATTLE_TEST("Covert Cloak blocks Sparkling Aria in singles") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPARKLING_ARIA, player); NONE_OF { - MESSAGE("Foe Wobbuffet's burn was healed."); + MESSAGE("The opposing Wobbuffet's burn was healed."); STATUS_ICON(opponent, none: TRUE); } } diff --git a/test/battle/hold_effect/metronome.c b/test/battle/hold_effect/metronome.c index 9dcc265b809a..0ab22cc87b23 100644 --- a/test/battle/hold_effect/metronome.c +++ b/test/battle/hold_effect/metronome.c @@ -144,7 +144,7 @@ SINGLE_BATTLE_TEST("Metronome Item doesn't increase damage per hit of multi-hit ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_ATTACK, player); HP_BAR(opponent, captureDamage: &damage[0]); HP_BAR(opponent, captureDamage: &damage[1]); - MESSAGE("Hit 5 time(s)!"); + MESSAGE("The Pokémon was hit 5 time(s)!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_ATTACK, player); HP_BAR(opponent, captureDamage: &damage[2]); } THEN { diff --git a/test/battle/hold_effect/mirror_herb.c b/test/battle/hold_effect/mirror_herb.c index 52326cc60fa0..88a7467334d2 100644 --- a/test/battle/hold_effect/mirror_herb.c +++ b/test/battle/hold_effect/mirror_herb.c @@ -60,7 +60,7 @@ DOUBLE_BATTLE_TEST("Mirror Herb does not trigger for Ally's Soul Heart's stat ra TURN { MOVE(playerRight, MOVE_TACKLE, target:opponentLeft); } } SCENE { MESSAGE("Wynaut used Tackle!"); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); diff --git a/test/battle/hold_effect/restore_stats.c b/test/battle/hold_effect/restore_stats.c index fb455f47c67b..7052c1aa1499 100644 --- a/test/battle/hold_effect/restore_stats.c +++ b/test/battle/hold_effect/restore_stats.c @@ -56,11 +56,11 @@ DOUBLE_BATTLE_TEST("White Herb restores stats after Attack was lowered by Intimi ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentLeft); - MESSAGE("Foe Wobbuffet's White Herb restored its status!"); + MESSAGE("The opposing Wobbuffet's White Herb restored its status!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentRight); - MESSAGE("Foe Wynaut's White Herb restored its status!"); + MESSAGE("The opposing Wynaut's White Herb restored its status!"); } THEN { EXPECT(opponentLeft->item == ITEM_NONE); EXPECT(opponentLeft->statStages[STAT_DEF] = DEFAULT_STAT_STAGE); @@ -141,14 +141,14 @@ SINGLE_BATTLE_TEST("White Herb wont have time to activate if it is knocked off o } SCENE { ANIMATION(ANIM_TYPE_MOVE, move, opponent); if (move == MOVE_THIEF) { - MESSAGE("Foe Wobbuffet stole Slugma's White Herb!"); + MESSAGE("The opposing Wobbuffet stole Slugma's White Herb!"); } ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Slugma's Weak Armor lowered its Defense!"); MESSAGE("Slugma's Weak Armor raised its Speed!"); if (move == MOVE_KNOCK_OFF) { - MESSAGE("Foe Wobbuffet knocked off Slugma's White Herb!"); + MESSAGE("The opposing Wobbuffet knocked off Slugma's White Herb!"); } NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); @@ -174,7 +174,7 @@ SINGLE_BATTLE_TEST("White Herb wont have time to activate if Magician steals it" MESSAGE("Slugma's Weak Armor lowered its Defense!"); MESSAGE("Slugma's Weak Armor raised its Speed!"); ABILITY_POPUP(opponent, ABILITY_MAGICIAN); - MESSAGE("Foe Fennekin stole Slugma's White Herb!"); + MESSAGE("The opposing Fennekin stole Slugma's White Herb!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); MESSAGE("Wobbuffet's White Herb restored its status!"); diff --git a/test/battle/hold_effect/safety_goggles.c b/test/battle/hold_effect/safety_goggles.c index 4c5c6a29653b..c2d371510e56 100644 --- a/test/battle/hold_effect/safety_goggles.c +++ b/test/battle/hold_effect/safety_goggles.c @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Safety Goggles block powder and spore moves") TURN { MOVE(player, MOVE_STUN_SPORE); } } SCENE { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); - MESSAGE("Foe Abra is not affected thanks to its Safety Goggles!"); + MESSAGE("The opposing Abra is not affected thanks to its Safety Goggles!"); } } @@ -28,7 +28,7 @@ SINGLE_BATTLE_TEST("Safety Goggles blocks damage from Hail") } WHEN { TURN { MOVE(player, MOVE_HAIL); } } SCENE { - NOT MESSAGE("Foe Wobbuffet is pelted by HAIL!"); + NOT MESSAGE("The opposing Wobbuffet is pelted by HAIL!"); } } @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Safety Goggles blocks damage from Sandstorm") } WHEN { TURN { MOVE(player, MOVE_SANDSTORM); } } SCENE { - NOT MESSAGE("Foe Wobbuffet is buffeted by the sandstorm!"); + NOT MESSAGE("The opposing Wobbuffet is buffeted by the sandstorm!"); } } diff --git a/test/battle/item_effect/increase_stat.c b/test/battle/item_effect/increase_stat.c index 97abe06afc8f..9b3ced5759c6 100644 --- a/test/battle/item_effect/increase_stat.c +++ b/test/battle/item_effect/increase_stat.c @@ -148,7 +148,7 @@ SINGLE_BATTLE_TEST("X Accuracy sharply raises battler's Accuracy stat") TURN { MOVE(player, MOVE_SING); } } SCENE { MESSAGE("Wobbuffet used Sing!"); - MESSAGE("Foe Wobbuffet fell asleep!"); + MESSAGE("The opposing Wobbuffet fell asleep!"); } } diff --git a/test/battle/move_effect/attack_down_2.c b/test/battle/move_effect/attack_down_2.c index 7b62294a765c..6fefec5e45a0 100644 --- a/test/battle/move_effect/attack_down_2.c +++ b/test/battle/move_effect/attack_down_2.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Charm lowers Attack by 2 stages", s16 damage) if (lowerAttack) { ANIMATION(ANIM_TYPE_MOVE, MOVE_CHARM, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Attack harshly fell!"); + MESSAGE("The opposing Wobbuffet's Attack harshly fell!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); HP_BAR(player, captureDamage: &results[i].damage); diff --git a/test/battle/move_effect/corrosive_gas.c b/test/battle/move_effect/corrosive_gas.c index a8c74fda1402..c5f8bf392ddb 100644 --- a/test/battle/move_effect/corrosive_gas.c +++ b/test/battle/move_effect/corrosive_gas.c @@ -44,7 +44,7 @@ SINGLE_BATTLE_TEST("Corrosive Gas doesn't destroy the item of a Pokemon with the ANIMATION(ANIM_TYPE_MOVE, MOVE_CORROSIVE_GAS, player); NOT MESSAGE("Wobbuffet corroded Foe Wobbuffet's Potion!"); ABILITY_POPUP(opponent, ABILITY_STICKY_HOLD); - MESSAGE("Foe Muk's Sticky Hold made Corrosive Gas ineffective!"); + MESSAGE("The opposing Muk's Sticky Hold made Corrosive Gas ineffective!"); } THEN { EXPECT_EQ(opponent->item, ITEM_POISON_BARB); } diff --git a/test/battle/move_effect/court_change.c b/test/battle/move_effect/court_change.c index 31bd2685e427..64413bcdd90d 100644 --- a/test/battle/move_effect/court_change.c +++ b/test/battle/move_effect/court_change.c @@ -35,10 +35,10 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the opponent") MESSAGE("Wynaut was caught in a Sticky Web!"); } MESSAGE("2 sent out Wobbuffet!"); - MESSAGE("Foe Wobbuffet is hurt by spikes!"); + MESSAGE("The opposing Wobbuffet is hurt by spikes!"); MESSAGE("Pointed stones dug into Foe Wobbuffet!"); - MESSAGE("Foe Wobbuffet was poisoned!"); - MESSAGE("Foe Wobbuffet was caught in a Sticky Web!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet was caught in a Sticky Web!"); } } @@ -62,7 +62,7 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the player") MESSAGE("Wobbuffet used Spikes!"); MESSAGE("Wobbuffet used Toxic Spikes!"); MESSAGE("The opposing Wynaut used Court Change!"); - MESSAGE("Foe Wynaut swapped the battle effects affecting each side!"); + MESSAGE("The opposing Wynaut swapped the battle effects affecting each side!"); SEND_IN_MESSAGE("Wobbuffet"); MESSAGE("Wobbuffet is hurt by spikes!"); MESSAGE("Pointed stones dug into Wobbuffet!"); @@ -70,10 +70,10 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the player") MESSAGE("Wobbuffet was caught in a Sticky Web!"); MESSAGE("2 sent out Wynaut!"); NONE_OF { - MESSAGE("Foe Wynaut is hurt by spikes!"); + MESSAGE("The opposing Wynaut is hurt by spikes!"); MESSAGE("Pointed stones dug into Foe Wynaut!"); - MESSAGE("Foe Wynaut was poisoned!"); - MESSAGE("Foe Wynaut was caught in a Sticky Web!"); + MESSAGE("The opposing Wynaut was poisoned!"); + MESSAGE("The opposing Wynaut was caught in a Sticky Web!"); } } } @@ -142,7 +142,7 @@ DOUBLE_BATTLE_TEST("Court Change used by the opponent swaps Mist, Safeguard, Aur MESSAGE("Wobbuffet used Light Screen!"); MESSAGE("Wobbuffet used Tailwind!"); MESSAGE("The opposing Wynaut used Court Change!"); - MESSAGE("Foe Wynaut swapped the battle effects affecting each side!"); + MESSAGE("The opposing Wynaut swapped the battle effects affecting each side!"); // The effects now end for the player side. MESSAGE("Foe's Mist wore off!"); MESSAGE("Foe's party is no longer protected by Safeguard!"); diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c index bbcc5c25708c..abb0788e4479 100644 --- a/test/battle/move_effect/defog.c +++ b/test/battle/move_effect/defog.c @@ -29,7 +29,7 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's evasiveness fell!"); + MESSAGE("The opposing Wobbuffet's evasiveness fell!"); } } @@ -46,7 +46,7 @@ SINGLE_BATTLE_TEST("Defog does not lower evasiveness if target behind Substitute NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's evasiveness fell!"); + MESSAGE("The opposing Wobbuffet's evasiveness fell!"); } } } @@ -72,7 +72,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Reflect and Light ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); if (move == MOVE_DEFOG) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Wobbuffet's evasiveness fell!"); + MESSAGE("The opposing Wobbuffet's evasiveness fell!"); MESSAGE("Foe's Reflect wore off!"); MESSAGE("Foe's Light Screen wore off!"); } @@ -105,7 +105,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard ANIMATION(ANIM_TYPE_MOVE, MOVE_MIST, opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_SAFEGUARD, opponentRight); if (move == MOVE_DEFOG) { - MESSAGE("Foe Wobbuffet is protected by MIST!"); + MESSAGE("The opposing Wobbuffet is protected by MIST!"); ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); MESSAGE("Foe's Mist wore off!"); MESSAGE("Foe's Safeguard wore off!"); @@ -116,7 +116,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); } else { - MESSAGE("Foe Wobbuffet is protected by MIST!"); + MESSAGE("The opposing Wobbuffet is protected by MIST!"); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); } MESSAGE("Wobbuffet used Toxic!"); @@ -125,7 +125,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard STATUS_ICON(opponentRight, badPoison: TRUE); } else { - MESSAGE("Foe Wobbuffet's party is protected by Safeguard!"); + MESSAGE("The opposing Wobbuffet's party is protected by Safeguard!"); NOT STATUS_ICON(opponentRight, badPoison: TRUE); } } @@ -153,7 +153,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and S ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); if (move == MOVE_DEFOG) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Wobbuffet's evasiveness fell!"); + MESSAGE("The opposing Wobbuffet's evasiveness fell!"); if (B_DEFOG_EFFECT_CLEARING >= GEN_6) { MESSAGE("The pointed stones disappeared from around your team!"); MESSAGE("The sticky web has disappeared from the ground around your team!"); @@ -199,7 +199,7 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Spikes from player ANIMATION(ANIM_TYPE_MOVE, move, player); if (move == MOVE_DEFOG) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's evasiveness fell!"); + MESSAGE("The opposing Wobbuffet's evasiveness fell!"); if (B_DEFOG_EFFECT_CLEARING >= GEN_6) MESSAGE("The spikes disappeared from the ground around your team!"); } @@ -288,13 +288,13 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Toxic Spikes from // Switch happens MESSAGE("2 sent out Wobbuffet!"); if (move != MOVE_DEFOG || B_DEFOG_EFFECT_CLEARING <= GEN_5) { - MESSAGE("Foe Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); STATUS_ICON(opponent, poison: TRUE); } else { NONE_OF { - MESSAGE("Foe Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); STATUS_ICON(opponent, poison: TRUE); } diff --git a/test/battle/move_effect/dragon_darts.c b/test/battle/move_effect/dragon_darts.c index 8190f0f4bd5f..3ffc6368d614 100644 --- a/test/battle/move_effect/dragon_darts.c +++ b/test/battle/move_effect/dragon_darts.c @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("Dragon Darts strikes twice") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, player); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -35,7 +35,7 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes each opponent once in a double battle") HP_BAR(opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); HP_BAR(opponentRight); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -54,7 +54,7 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes the ally twice if the target protects") HP_BAR(opponentRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); HP_BAR(opponentRight); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -72,7 +72,7 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes the right ally twice if the target is a HP_BAR(opponentRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); HP_BAR(opponentRight); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -90,7 +90,7 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes the left ally twice if the target is a HP_BAR(opponentRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); HP_BAR(opponentRight); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -110,7 +110,7 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes the ally twice if the target is in a se HP_BAR(opponentRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); HP_BAR(opponentRight); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -129,7 +129,7 @@ DOUBLE_BATTLE_TEST("Dragon Darts is not effected by Wide Guard") HP_BAR(opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); HP_BAR(opponentRight); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -148,7 +148,7 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes hit the ally if the target fainted") HP_BAR(opponentRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); HP_BAR(opponentRight); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -166,7 +166,7 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes left ally twice if one strike misses") HP_BAR(opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); HP_BAR(opponentLeft); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -184,6 +184,6 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes right ally twice if one strike misses") HP_BAR(opponentRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); HP_BAR(opponentRight); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } diff --git a/test/battle/move_effect/embargo.c b/test/battle/move_effect/embargo.c index 3456922d685b..7a15b40e3178 100644 --- a/test/battle/move_effect/embargo.c +++ b/test/battle/move_effect/embargo.c @@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Embargo blocks the effect of an affected Pokémon's held ite } SCENE { // Turn 1 MESSAGE("Wobbuffet used Embargo!"); - MESSAGE("Foe Wobbuffet can't use items anymore!"); + MESSAGE("The opposing Wobbuffet can't use items anymore!"); // Turn 2 MESSAGE("Wobbuffet used Fissure!"); HP_BAR(opponent, hp: 0); @@ -39,7 +39,7 @@ SINGLE_BATTLE_TEST("Embargo blocks an affected Pokémon's trainer from using ite TURN { USE_ITEM(opponent, ITEM_POTION, partyIndex: 0); } } SCENE { MESSAGE("Wobbuffet used Embargo!"); - MESSAGE("Foe Wobbuffet can't use items anymore!"); + MESSAGE("The opposing Wobbuffet can't use items anymore!"); } THEN { EXPECT_EQ(opponent->hp, 1); } @@ -107,7 +107,7 @@ SINGLE_BATTLE_TEST("Embargo negates a held item's Speed reduction") } SCENE { // Turn 1 MESSAGE("Wobbuffet used Embargo!"); - MESSAGE("Foe Wobbuffet can't use items anymore!"); + MESSAGE("The opposing Wobbuffet can't use items anymore!"); // Turn 2 MESSAGE("The opposing Wobbuffet used Scratch!"); MESSAGE("Wobbuffet used Scratch!"); @@ -194,12 +194,12 @@ SINGLE_BATTLE_TEST("Embargo doesn't stop an item flung at an affected target fro } SCENE { // Turn 1 MESSAGE("Wobbuffet used Embargo!"); - MESSAGE("Foe Wobbuffet can't use items anymore!"); + MESSAGE("The opposing Wobbuffet can't use items anymore!"); // Turn 2 MESSAGE("Wobbuffet used Fling!"); MESSAGE("Wobbuffet flung its Light Ball!"); HP_BAR(opponent); - MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed! It may be unable to move!"); } } @@ -325,8 +325,8 @@ SINGLE_BATTLE_TEST("Embargo can be reflected by Magic Coat") MESSAGE("Wobbuffet used Magic Coat!"); MESSAGE("Wobbuffet shrouded itself in Magic Coat!"); MESSAGE("The opposing Wobbuffet used Embargo!"); - MESSAGE("Foe Wobbuffet's Embargo was bounced back by MAGIC COAT!"); - MESSAGE("Foe Wobbuffet can't use items anymore!"); + MESSAGE("The opposing Wobbuffet's Embargo was bounced back by MAGIC COAT!"); + MESSAGE("The opposing Wobbuffet can't use items anymore!"); // Turn 2 MESSAGE("The opposing Wobbuffet used Fling!"); MESSAGE("But it failed!"); @@ -346,15 +346,15 @@ SINGLE_BATTLE_TEST("Embargo doesn't prevent Mega Evolution") } SCENE { // Turn 1 MESSAGE("Wobbuffet used Embargo!"); - MESSAGE("Foe Wobbuffet can't use items anymore!"); + MESSAGE("The opposing Wobbuffet can't use items anymore!"); // Turn 2 MESSAGE("The opposing Wobbuffet used Baton Pass!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_BATON_PASS, opponent); MESSAGE("2 sent out Charizard!"); // Turn 3 - MESSAGE("Foe Charizard's Charizardite Y is reacting to 2's Mega Ring!"); + MESSAGE("The opposing Charizard's Charizardite Y is reacting to 2's Mega Ring!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); - MESSAGE("Foe Charizard has Mega Evolved into Mega Charizard!"); + MESSAGE("The opposing Charizard has Mega Evolved into Mega Charizard!"); } } @@ -371,13 +371,13 @@ SINGLE_BATTLE_TEST("Embargo doesn't prevent Primal Reversion") } SCENE { // Turn 1 MESSAGE("Wobbuffet used Embargo!"); - MESSAGE("Foe Wobbuffet can't use items anymore!"); + MESSAGE("The opposing Wobbuffet can't use items anymore!"); // Turn 2 MESSAGE("The opposing Wobbuffet used Baton Pass!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_BATON_PASS, opponent); MESSAGE("2 sent out Groudon!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, opponent); - MESSAGE("Foe Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("The opposing Groudon's Primal Reversion! It reverted to its primal form!"); ABILITY_POPUP(opponent); // Turn 3 MESSAGE("The opposing Groudon used Fling!"); diff --git a/test/battle/move_effect/explosion.c b/test/battle/move_effect/explosion.c index f1a9dad218b8..7a72f9ff2c87 100644 --- a/test/battle/move_effect/explosion.c +++ b/test/battle/move_effect/explosion.c @@ -104,7 +104,7 @@ SINGLE_BATTLE_TEST("Explosion is blocked by Ability Damp") HP_BAR(player, hp: 0); } ABILITY_POPUP(opponent, ABILITY_DAMP); - MESSAGE("Foe Golduck's Damp prevents Wobbuffet from using Explosion!"); + MESSAGE("The opposing Golduck's Damp prevents Wobbuffet from using Explosion!"); } } @@ -141,7 +141,7 @@ DOUBLE_BATTLE_TEST("Explosion boosted by Galvanize is correctly blocked by Volt HP_BAR(playerRight, hp: 0); MESSAGE("Wynaut fainted!"); HP_BAR(opponentRight, hp: 0); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); MESSAGE("Geodude fainted!"); } } diff --git a/test/battle/move_effect/fling.c b/test/battle/move_effect/fling.c index f34f2c6a4f79..36700d50e877 100644 --- a/test/battle/move_effect/fling.c +++ b/test/battle/move_effect/fling.c @@ -117,7 +117,7 @@ SINGLE_BATTLE_TEST("Fling - Item is lost even when there is no target") MESSAGE("The opposing Wobbuffet used Self-Destruct!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SELF_DESTRUCT, opponent); HP_BAR(player); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); MESSAGE("Wobbuffet used Fling!"); MESSAGE("But it failed!"); @@ -141,7 +141,7 @@ SINGLE_BATTLE_TEST("Fling - Item is lost when target protects itself") MESSAGE("The opposing Wobbuffet used Protect!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PROTECT, opponent); MESSAGE("Wobbuffet used Fling!"); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); MESSAGE("Wobbuffet used Fling!"); MESSAGE("But it failed!"); @@ -182,7 +182,7 @@ SINGLE_BATTLE_TEST("Fling doesn't consume the item if pokemon is asleep/frozen/p MESSAGE("Wobbuffet was defrosted!"); } else if (status == STATUS1_PARALYSIS) { - MESSAGE("Wobbuffet is paralyzed! It can't move!"); + MESSAGE("Wobbuffet couldn't move because it's paralyzed!"); } else { MESSAGE("Wobbuffet is fast asleep."); @@ -225,32 +225,32 @@ SINGLE_BATTLE_TEST("Fling applies special effects when throwing specific Items") { case ITEM_FLAME_ORB: { - MESSAGE("Foe Wobbuffet was burned!"); + MESSAGE("The opposing Wobbuffet was burned!"); STATUS_ICON(opponent, STATUS1_BURN); } break; case ITEM_LIGHT_BALL: { - MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed! It may be unable to move!"); STATUS_ICON(opponent, STATUS1_PARALYSIS); } break; case ITEM_POISON_BARB: { - MESSAGE("Foe Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); STATUS_ICON(opponent, STATUS1_POISON); } break; case ITEM_TOXIC_ORB: { - MESSAGE("Foe Wobbuffet is badly poisoned!"); + MESSAGE("The opposing Wobbuffet is badly poisoned!"); STATUS_ICON(opponent, STATUS1_TOXIC_POISON); } break; case ITEM_RAZOR_FANG: case ITEM_KINGS_ROCK: { - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched!"); } break; } @@ -282,7 +282,7 @@ SINGLE_BATTLE_TEST("Fling's secondary effects are blocked by Shield Dust") case ITEM_FLAME_ORB: { NONE_OF { - MESSAGE("Foe Wobbuffet was burned!"); + MESSAGE("The opposing Wobbuffet was burned!"); STATUS_ICON(opponent, STATUS1_BURN); } MESSAGE("The Flame Orb was used up..."); @@ -291,7 +291,7 @@ SINGLE_BATTLE_TEST("Fling's secondary effects are blocked by Shield Dust") case ITEM_LIGHT_BALL: { NONE_OF { - MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed! It may be unable to move!"); STATUS_ICON(opponent, STATUS1_PARALYSIS); } MESSAGE("The Light Ball was used up..."); @@ -300,7 +300,7 @@ SINGLE_BATTLE_TEST("Fling's secondary effects are blocked by Shield Dust") case ITEM_POISON_BARB: { NONE_OF { - MESSAGE("Foe Wobbuffet was poisoned!"); + MESSAGE("The opposing Wobbuffet was poisoned!"); STATUS_ICON(opponent, STATUS1_POISON); } MESSAGE("The Poison Barb was used up..."); @@ -309,7 +309,7 @@ SINGLE_BATTLE_TEST("Fling's secondary effects are blocked by Shield Dust") case ITEM_TOXIC_ORB: { NONE_OF { - MESSAGE("Foe Wobbuffet is badly poisoned!"); + MESSAGE("The opposing Wobbuffet is badly poisoned!"); STATUS_ICON(opponent, STATUS1_TOXIC_POISON); } MESSAGE("The Toxic Orb was used up..."); @@ -319,7 +319,7 @@ SINGLE_BATTLE_TEST("Fling's secondary effects are blocked by Shield Dust") case ITEM_KINGS_ROCK: { NONE_OF { - MESSAGE("Foe Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched!"); } switch (item) { @@ -373,30 +373,30 @@ SINGLE_BATTLE_TEST("Fling - thrown berry's effect activates for the target even HP_BAR(opponent); if (effect == HOLD_EFFECT_RESTORE_HP) { if (item == ITEM_ORAN_BERRY) { - MESSAGE("Foe Wobbuffet's Oran Berry restored health!"); + MESSAGE("The opposing Wobbuffet's Oran Berry restored health!"); } else if (item == ITEM_SITRUS_BERRY) { - MESSAGE("Foe Wobbuffet's Sitrus Berry restored health!"); + MESSAGE("The opposing Wobbuffet's Sitrus Berry restored health!"); } else { MESSAGE("Wobbuffet's Enigma Berry restored health!"); } HP_BAR(opponent); } else if (effect == HOLD_EFFECT_RESTORE_PP) { - MESSAGE("Foe Wobbuffet's Leppa Berry restored Celebrate's PP!"); + MESSAGE("The opposing Wobbuffet's Leppa Berry restored Celebrate's PP!"); } else if (status1 != STATUS1_NONE) { if (status1 == STATUS1_BURN) { - MESSAGE("Foe Wobbuffet's Rawst Berry healed its burn!"); + MESSAGE("The opposing Wobbuffet's Rawst Berry healed its burn!"); } else if (status1 == STATUS1_SLEEP) { - MESSAGE("Foe Wobbuffet's Chesto Berry woke it from its sleep!"); + MESSAGE("The opposing Wobbuffet's Chesto Berry woke it from its sleep!"); } else if (status1 == STATUS1_FREEZE) { - MESSAGE("Foe Wobbuffet's Aspear Berry defrosted it!"); + MESSAGE("The opposing Wobbuffet's Aspear Berry defrosted it!"); } else if (status1 == STATUS1_FROSTBITE) { - MESSAGE("Foe Wobbuffet's Aspear Berry healed its frostbite!"); + MESSAGE("The opposing Wobbuffet's Aspear Berry healed its frostbite!"); } else if (status1 == STATUS1_PARALYSIS) { - MESSAGE("Foe Wobbuffet's Cheri Berry cured paralysis!"); + MESSAGE("The opposing Wobbuffet's Cheri Berry cured paralysis!"); } else if (status1 == STATUS1_TOXIC_POISON || status1 == STATUS1_POISON) { - MESSAGE("Foe Wobbuffet's Pecha Berry cured poison!"); + MESSAGE("The opposing Wobbuffet's Pecha Berry cured poison!"); } NOT STATUS_ICON(opponent, status1); } diff --git a/test/battle/move_effect/future_sight.c b/test/battle/move_effect/future_sight.c index 778895ba5898..6542d8d089cf 100644 --- a/test/battle/move_effect/future_sight.c +++ b/test/battle/move_effect/future_sight.c @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Future Sight uses Sp. Atk stat of the original user without ANIMATION(ANIM_TYPE_MOVE, MOVE_SEED_FLARE, player); HP_BAR(opponent, captureDamage: &seedFlareDmg); ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player); - MESSAGE("Foe Regice took the Future Sight attack!"); + MESSAGE("The opposing Regice took the Future Sight attack!"); HP_BAR(opponent, captureDamage: &futureSightDmg); } THEN { EXPECT_EQ(seedFlareDmg, futureSightDmg); @@ -58,7 +58,7 @@ SINGLE_BATTLE_TEST("Future Sight is not boosted by Life Orb is original user if ANIMATION(ANIM_TYPE_MOVE, MOVE_SEED_FLARE, player); HP_BAR(opponent, captureDamage: &seedFlareDmg); ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player); - MESSAGE("Foe Regice took the Future Sight attack!"); + MESSAGE("The opposing Regice took the Future Sight attack!"); HP_BAR(opponent, captureDamage: &futureSightDmg); NOT MESSAGE("Raichu was hurt by its Life Orb!"); } THEN { @@ -107,7 +107,7 @@ SINGLE_BATTLE_TEST("Future Sight is affected by type effectiveness") ANIMATION(ANIM_TYPE_MOVE, MOVE_SEED_FLARE, player); HP_BAR(opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player); - MESSAGE("Foe Houndoom took the Future Sight attack!"); + MESSAGE("The opposing Houndoom took the Future Sight attack!"); MESSAGE("It doesn't affect Foe Houndoom…"); NOT HP_BAR(opponent); } @@ -129,9 +129,9 @@ SINGLE_BATTLE_TEST("Future Sight will miss timing if target faints before it is ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_MEMENTO, opponent); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); MESSAGE("2 sent out Wynaut!"); - NOT MESSAGE("Foe Wynaut took the Future Sight attack!"); + NOT MESSAGE("The opposing Wynaut took the Future Sight attack!"); } } @@ -150,9 +150,9 @@ SINGLE_BATTLE_TEST("Future Sight will miss timing if target faints by residual d ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_WRAP, player); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); MESSAGE("2 sent out Wynaut!"); - NOT MESSAGE("Foe Wynaut took the Future Sight attack!"); + NOT MESSAGE("The opposing Wynaut took the Future Sight attack!"); } } @@ -169,8 +169,8 @@ SINGLE_BATTLE_TEST("Future Sight breaks Focus Sash and doesn't make the holder e TURN { } TURN { MOVE(player, MOVE_PSYCHIC); } } SCENE { - MESSAGE("Foe Pidgey hung on using its Focus Sash!"); + MESSAGE("The opposing Pidgey hung on using its Focus Sash!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHIC, player); - MESSAGE("Foe Pidgey fainted!"); + MESSAGE("The opposing Pidgey fainted!"); } } diff --git a/test/battle/move_effect/hit_escape.c b/test/battle/move_effect/hit_escape.c index 0c96bd4e7568..0a494cc667d4 100644 --- a/test/battle/move_effect/hit_escape.c +++ b/test/battle/move_effect/hit_escape.c @@ -108,7 +108,7 @@ SINGLE_BATTLE_TEST("U-turn switches the user out after Ice Face activates") ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player); HP_BAR(opponent); ABILITY_POPUP(opponent, ABILITY_ICE_FACE); - MESSAGE("Foe Eiscue transformed!"); + MESSAGE("The opposing Eiscue transformed!"); SEND_IN_MESSAGE("Wynaut"); } } diff --git a/test/battle/move_effect/knock_off.c b/test/battle/move_effect/knock_off.c index 7dfe8f19d00c..76f07f8cb4a8 100644 --- a/test/battle/move_effect/knock_off.c +++ b/test/battle/move_effect/knock_off.c @@ -137,7 +137,7 @@ SINGLE_BATTLE_TEST("Knock Off does not prevent targets from receiving another it if (B_KNOCK_OFF_REMOVAL >= GEN_5) { ANIMATION(ANIM_TYPE_MOVE, MOVE_BESTOW, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT); - MESSAGE("Foe Wobbuffet's Leftovers restored its HP a little!"); + MESSAGE("The opposing Wobbuffet's Leftovers restored its HP a little!"); } else { NOT { ANIMATION(ANIM_TYPE_MOVE, MOVE_BESTOW, player); } MESSAGE("But it failed!"); @@ -184,7 +184,7 @@ DOUBLE_BATTLE_TEST("Knock Off does not trigger the opposing ally's Symbiosis") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, opponentLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF); - MESSAGE("Foe Wobbuffet knocked off Wobbuffet's Leftovers!"); + MESSAGE("The opposing Wobbuffet knocked off Wobbuffet's Leftovers!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT); MESSAGE("Wobbuffet's Leftovers restored health!"); diff --git a/test/battle/move_effect/max_hp_50_recoil.c b/test/battle/move_effect/max_hp_50_recoil.c index 1ac98854e095..b35043014b35 100644 --- a/test/battle/move_effect/max_hp_50_recoil.c +++ b/test/battle/move_effect/max_hp_50_recoil.c @@ -77,7 +77,7 @@ SINGLE_BATTLE_TEST("Steel Beam causes the user & the target to faint when below } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STEEL_BEAM, player); HP_BAR(opponent, hp: 0); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); HP_BAR(player, hp: 0); MESSAGE("Wobbuffet fainted!"); } @@ -143,7 +143,7 @@ SINGLE_BATTLE_TEST("Steel Beam is not blocked by Damp") HP_BAR(player, damage: 200); NONE_OF { ABILITY_POPUP(opponent, ABILITY_DAMP); - MESSAGE("Foe Golduck's Damp prevents Wobbuffet from using Steel Beam!"); + MESSAGE("The opposing Golduck's Damp prevents Wobbuffet from using Steel Beam!"); } } } diff --git a/test/battle/move_effect/metronome.c b/test/battle/move_effect/metronome.c index 22e3390cb2b9..e9c75fd69d78 100644 --- a/test/battle/move_effect/metronome.c +++ b/test/battle/move_effect/metronome.c @@ -56,6 +56,6 @@ SINGLE_BATTLE_TEST("Metronome's called multi-hit move hits multiple times") MESSAGE("Wobbuffet used Rock Blast!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROCK_BLAST, player); HP_BAR(opponent); - MESSAGE("Hit 5 time(s)!"); + MESSAGE("The Pokémon was hit 5 time(s)!"); } } diff --git a/test/battle/move_effect/mind_blown.c b/test/battle/move_effect/mind_blown.c index da39cf18d787..dbb3a6164a5e 100644 --- a/test/battle/move_effect/mind_blown.c +++ b/test/battle/move_effect/mind_blown.c @@ -77,7 +77,7 @@ SINGLE_BATTLE_TEST("Mind Blown causes the user & the target to faint when below } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_MIND_BLOWN, player); HP_BAR(opponent, hp: 0); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet fainted!"); HP_BAR(player, hp: 0); MESSAGE("Wobbuffet fainted!"); } @@ -96,11 +96,11 @@ DOUBLE_BATTLE_TEST("Mind Blown causes everyone to faint in a double battle") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_MIND_BLOWN, playerLeft); HP_BAR(opponentLeft, hp: 0); - MESSAGE("Foe Abra fainted!"); + MESSAGE("The opposing Abra fainted!"); HP_BAR(playerRight, hp: 0); MESSAGE("Wynaut fainted!"); HP_BAR(opponentRight, hp: 0); - MESSAGE("Foe Kadabra fainted!"); + MESSAGE("The opposing Kadabra fainted!"); HP_BAR(playerLeft, hp: 0); MESSAGE("Wobbuffet fainted!"); } @@ -133,7 +133,7 @@ SINGLE_BATTLE_TEST("Mind Blown is blocked by Damp") HP_BAR(player, damage: 200); } ABILITY_POPUP(opponent, ABILITY_DAMP); - MESSAGE("Foe Golduck's Damp prevents Wobbuffet from using Mind Blown!"); + MESSAGE("The opposing Golduck's Damp prevents Wobbuffet from using Mind Blown!"); } } diff --git a/test/battle/move_effect/mirror_move.c b/test/battle/move_effect/mirror_move.c index 243f9dec9e1f..65c600fb1878 100644 --- a/test/battle/move_effect/mirror_move.c +++ b/test/battle/move_effect/mirror_move.c @@ -70,11 +70,11 @@ SINGLE_BATTLE_TEST("Mirror Move's called multi-hit move hits multiple times") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); HP_BAR(opponent); - MESSAGE("Hit 5 time(s)!"); + MESSAGE("The Pokémon was hit 5 time(s)!"); MESSAGE("The opposing Wobbuffet used Mirror Move!"); MESSAGE("The opposing Wobbuffet used Bullet Seed!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, opponent); HP_BAR(player); - MESSAGE("Hit 5 time(s)!"); + MESSAGE("The Pokémon was hit 5 time(s)!"); } } diff --git a/test/battle/move_effect/multi_hit.c b/test/battle/move_effect/multi_hit.c index df9cfea8070c..255e9a7510ee 100644 --- a/test/battle/move_effect/multi_hit.c +++ b/test/battle/move_effect/multi_hit.c @@ -21,7 +21,7 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit the maximum amount with Skill Link") ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); - MESSAGE("Hit 5 time(s)!"); + MESSAGE("The Pokémon was hit 5 time(s)!"); } } @@ -38,7 +38,7 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit twice 35% of the time") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -56,7 +56,7 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit thrice 35% of the time") ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); - MESSAGE("Hit 3 time(s)!"); + MESSAGE("The Pokémon was hit 3 time(s)!"); } } @@ -75,7 +75,7 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit four times 15% of the time") ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); - MESSAGE("Hit 4 time(s)!"); + MESSAGE("The Pokémon was hit 4 time(s)!"); } } @@ -95,7 +95,7 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit five times 15% of the time") ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); - MESSAGE("Hit 5 time(s)!"); + MESSAGE("The Pokémon was hit 5 time(s)!"); } } @@ -114,7 +114,7 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit at least four times with Loaded Dice") ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); - MESSAGE("Hit 4 time(s)!"); + MESSAGE("The Pokémon was hit 4 time(s)!"); } } @@ -134,7 +134,7 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit five times 50 Percent of the time with L ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, player); - MESSAGE("Hit 5 time(s)!"); + MESSAGE("The Pokémon was hit 5 time(s)!"); } } @@ -152,7 +152,7 @@ SINGLE_BATTLE_TEST("Scale Shot decreases defense and increases speed after final ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); - MESSAGE("Hit 5 time(s)!"); + MESSAGE("The Pokémon was hit 5 time(s)!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Wobbuffet's Defense fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); @@ -176,7 +176,7 @@ SINGLE_BATTLE_TEST("Endure does not prevent multiple hits and stat changes occur ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); - MESSAGE("Hit 5 time(s)!"); + MESSAGE("The Pokémon was hit 5 time(s)!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Wobbuffet's Defense fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); @@ -198,7 +198,7 @@ SINGLE_BATTLE_TEST("Scale Shot decreases defense and increases speed after the 4 ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); - MESSAGE("Hit 4 time(s)!"); + MESSAGE("The Pokémon was hit 4 time(s)!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Wobbuffet's Defense fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); @@ -223,8 +223,8 @@ SINGLE_BATTLE_TEST("Scale Shot decreases defense and increases speed after killi ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); - MESSAGE("Foe Slugma fainted!"); - MESSAGE("Hit 3 time(s)!"); + MESSAGE("The opposing Slugma fainted!"); + MESSAGE("The Pokémon was hit 3 time(s)!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Bagon's Defense fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); diff --git a/test/battle/move_effect/pledge.c b/test/battle/move_effect/pledge.c index b64f411c2ee2..b4d6591f55f8 100644 --- a/test/battle/move_effect/pledge.c +++ b/test/battle/move_effect/pledge.c @@ -685,8 +685,8 @@ DOUBLE_BATTLE_TEST("Pledge move combo fails if ally fails to act - Paralyzed Bot } WHEN { TURN { MOVE(playerLeft, MOVE_FIRE_PLEDGE, target: opponentRight, WITH_RNG(RNG_PARALYSIS, 0)); MOVE(playerRight, MOVE_GRASS_PLEDGE, target: opponentRight, WITH_RNG(RNG_PARALYSIS, 0)); } } SCENE { - MESSAGE("Wobbuffet is paralyzed! It can't move!"); - MESSAGE("Wynaut is paralyzed! It can't move!"); + MESSAGE("Wobbuffet couldn't move because it's paralyzed!"); + MESSAGE("Wynaut couldn't move because it's paralyzed!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); @@ -707,8 +707,8 @@ DOUBLE_BATTLE_TEST("Pledge move combo fails if ally fails to act - Paralyzed Bot } WHEN { TURN { MOVE(playerLeft, MOVE_FIRE_PLEDGE, target: opponentRight, WITH_RNG(RNG_PARALYSIS, 0)); MOVE(playerRight, MOVE_GRASS_PLEDGE, target: opponentRight, WITH_RNG(RNG_PARALYSIS, 0)); } } SCENE { - MESSAGE("Wynaut is paralyzed! It can't move!"); - MESSAGE("Wobbuffet is paralyzed! It can't move!"); + MESSAGE("Wynaut couldn't move because it's paralyzed!"); + MESSAGE("Wobbuffet couldn't move because it's paralyzed!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); diff --git a/test/battle/move_effect/population_bomb.c b/test/battle/move_effect/population_bomb.c index 4ef3d1110f5a..b3e2e4768e9b 100644 --- a/test/battle/move_effect/population_bomb.c +++ b/test/battle/move_effect/population_bomb.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Population Bomb can hit ten times") ANIMATION(ANIM_TYPE_MOVE, MOVE_POPULATION_BOMB, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_POPULATION_BOMB, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_POPULATION_BOMB, player); - MESSAGE("Hit 10 time(s)!"); + MESSAGE("The Pokémon was hit 10 time(s)!"); } } diff --git a/test/battle/move_effect/protect.c b/test/battle/move_effect/protect.c index 2e4c1090b4aa..b0a6ff3a7870 100644 --- a/test/battle/move_effect/protect.c +++ b/test/battle/move_effect/protect.c @@ -304,10 +304,10 @@ SINGLE_BATTLE_TEST("Multi-hit moves don't hit a protected target and fail only o } else if (move == MOVE_SPIKY_SHIELD) { HP_BAR(player); } - MESSAGE("Hit 2 time(s)!"); - MESSAGE("Hit 3 time(s)!"); - MESSAGE("Hit 4 time(s)!"); - MESSAGE("Hit 5 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 3 time(s)!"); + MESSAGE("The Pokémon was hit 4 time(s)!"); + MESSAGE("The Pokémon was hit 5 time(s)!"); } } } @@ -495,7 +495,7 @@ SINGLE_BATTLE_TEST("Protect does not block Confide") MESSAGE("Wobbuffet used Confide!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFIDE, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - NOT MESSAGE("Foe Wobbuffet protected itself!"); + NOT MESSAGE("The opposing Wobbuffet protected itself!"); } } @@ -511,9 +511,9 @@ DOUBLE_BATTLE_TEST("Crafty Shield protects self and ally from Confide") TURN { MOVE(opponentLeft, MOVE_CRAFTY_SHIELD); MOVE(playerLeft, MOVE_CONFIDE, target: opponentLeft); MOVE(playerRight, MOVE_CONFIDE, target: opponentRight); } } SCENE { MESSAGE("Wobbuffet used Confide!"); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); MESSAGE("Wynaut used Confide!"); - MESSAGE("Foe Wynaut protected itself!"); + MESSAGE("The opposing Wynaut protected itself!"); } } @@ -538,12 +538,12 @@ DOUBLE_BATTLE_TEST("Crafty Shield does not protect against moves that target all MESSAGE("Tangela's Defense rose!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FLOWER_SHIELD, playerLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Sunkern's Defense rose!"); + MESSAGE("The opposing Sunkern's Defense rose!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FLOWER_SHIELD, playerLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); MESSAGE("Tangrowth's Defense rose!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FLOWER_SHIELD, playerLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Sunflora's Defense rose!"); + MESSAGE("The opposing Sunflora's Defense rose!"); } } diff --git a/test/battle/move_effect/pursuit.c b/test/battle/move_effect/pursuit.c index 7c34e914d1bc..3a1db03d06d1 100644 --- a/test/battle/move_effect/pursuit.c +++ b/test/battle/move_effect/pursuit.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Pursuited mon correctly switches out after it got hit and ac ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponent); ABILITY_POPUP(player, ABILITY_TANGLING_HAIR); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wynaut's Speed fell!"); + MESSAGE("The opposing Wynaut's Speed fell!"); SEND_IN_MESSAGE("Wobbuffet"); } } diff --git a/test/battle/move_effect/revival_blessing.c b/test/battle/move_effect/revival_blessing.c index eaa1b6c74a34..6e24a152dac9 100644 --- a/test/battle/move_effect/revival_blessing.c +++ b/test/battle/move_effect/revival_blessing.c @@ -101,7 +101,7 @@ TO_DO_BATTLE_TEST("Revived battlers still lose their turn"); // SEND_OUT(opponentLeft, 1); } // } SCENE { // MESSAGE("Wobbuffet used Tackle!"); -// MESSAGE("Foe Wynaut fainted!"); +// MESSAGE("The opposing Wynaut fainted!"); // MESSAGE("The opposing Wobbuffet used Revival Blessing!"); // MESSAGE("Wynaut was revived and is ready to fight again!"); // NOT { MESSAGE("Wynaut used Celebrate!"); } diff --git a/test/battle/move_effect/salt_cure.c b/test/battle/move_effect/salt_cure.c index 970a4d0bad54..b16b4e2fe1bc 100644 --- a/test/battle/move_effect/salt_cure.c +++ b/test/battle/move_effect/salt_cure.c @@ -96,6 +96,6 @@ SINGLE_BATTLE_TEST("Salt Cure does not get applied if hitting a Substitute") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SALT_CURE, player); MESSAGE("The SUBSTITUTE took damage for Foe Wobbuffet!"); - NOT MESSAGE("Foe Wobbuffet is being salt cured!"); + NOT MESSAGE("The opposing Wobbuffet is being salt cured!"); } } diff --git a/test/battle/move_effect/smack_down.c b/test/battle/move_effect/smack_down.c index d68cb75ec331..eb924ea1acdc 100644 --- a/test/battle/move_effect/smack_down.c +++ b/test/battle/move_effect/smack_down.c @@ -14,6 +14,6 @@ SINGLE_BATTLE_TEST("Smack Down does not ground mons behind substitutes") } WHEN { TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_SMACK_DOWN); } } SCENE { - NOT MESSAGE("Foe Skarmory fell straight down!"); + NOT MESSAGE("The opposing Skarmory fell straight down!"); } } diff --git a/test/battle/move_effect/smelling_salts.c b/test/battle/move_effect/smelling_salts.c index 083db6d0dda4..22aa04ca0890 100644 --- a/test/battle/move_effect/smelling_salts.c +++ b/test/battle/move_effect/smelling_salts.c @@ -25,14 +25,14 @@ SINGLE_BATTLE_TEST("Smelling Salts does not cure paralyzed pokemons behind subst MESSAGE("The SUBSTITUTE took damage for Foe Seismitoad!"); NONE_OF { - MESSAGE("Foe Seismitoad's SUBSTITUTE faded!"); // Smelling Salts does 86 damage, the sub has 122 HP, if hitting a sub it shouldn't get boosted damage. - MESSAGE("Foe Seismitoad was healed of paralysis!"); + MESSAGE("The opposing Seismitoad's SUBSTITUTE faded!"); // Smelling Salts does 86 damage, the sub has 122 HP, if hitting a sub it shouldn't get boosted damage. + MESSAGE("The opposing Seismitoad was healed of paralysis!"); STATUS_ICON(opponent, none: TRUE); } } else { - MESSAGE("Foe Seismitoad was healed of paralysis!"); + MESSAGE("The opposing Seismitoad was healed of paralysis!"); STATUS_ICON(opponent, none: TRUE); } } @@ -52,11 +52,11 @@ SINGLE_BATTLE_TEST("Smelling Salts get incread power vs. paralyzed targets") ANIMATION(ANIM_TYPE_MOVE, MOVE_SMELLING_SALTS, player); if (status1 == STATUS1_PARALYSIS) { - MESSAGE("Foe Lotad fainted!"); + MESSAGE("The opposing Lotad fainted!"); } else { - NOT MESSAGE("Foe Lotad fainted!"); + NOT MESSAGE("The opposing Lotad fainted!"); MESSAGE("The opposing Lotad used Celebrate!"); } } diff --git a/test/battle/move_effect/sparkling_aria.c b/test/battle/move_effect/sparkling_aria.c index 0cbfdbc3e9de..eb891e0c037c 100644 --- a/test/battle/move_effect/sparkling_aria.c +++ b/test/battle/move_effect/sparkling_aria.c @@ -18,8 +18,8 @@ DOUBLE_BATTLE_TEST("Sparkling Aria cures burns from all Pokemon on the field and } WHEN { TURN { MOVE(opponentLeft, MOVE_SUBSTITUTE); MOVE(opponentRight, MOVE_CELEBRATE); MOVE(playerRight, MOVE_CELEBRATE); MOVE(playerLeft, MOVE_SPARKLING_ARIA); } } SCENE { - MESSAGE("Foe Wobbuffet's burn was healed."); + MESSAGE("The opposing Wobbuffet's burn was healed."); MESSAGE("Wobbuffet's burn was healed."); - MESSAGE("Foe Wynaut's burn was healed."); + MESSAGE("The opposing Wynaut's burn was healed."); } } diff --git a/test/battle/move_effect/spicy_extract.c b/test/battle/move_effect/spicy_extract.c index 248f37f7bed6..e512ab7c6fc6 100644 --- a/test/battle/move_effect/spicy_extract.c +++ b/test/battle/move_effect/spicy_extract.c @@ -16,9 +16,9 @@ SINGLE_BATTLE_TEST("Spicy Extract raises target's Attack by 2 stages and lowers } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPICY_EXTRACT, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Attack sharply rose!"); + MESSAGE("The opposing Wobbuffet's Attack sharply rose!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Defense harshly fell!"); + MESSAGE("The opposing Wobbuffet's Defense harshly fell!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2); EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 2); @@ -50,7 +50,7 @@ SINGLE_BATTLE_TEST("Spicy Extract is prevented by target's ability if it's Attac MESSAGE("Wobbuffet used Spicy Extract!"); if (ability == ABILITY_CLEAR_BODY) { ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); - MESSAGE("Foe Beldum's Clear Body prevents stat loss!"); + MESSAGE("The opposing Beldum's Clear Body prevents stat loss!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPICY_EXTRACT, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); @@ -73,13 +73,13 @@ SINGLE_BATTLE_TEST("Spicy Extract Defense loss is prevented by Big Pecks") MESSAGE("Wobbuffet used Spicy Extract!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPICY_EXTRACT, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Pidgey's Attack sharply rose!"); + MESSAGE("The opposing Pidgey's Attack sharply rose!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Defense harshly fell!"); + MESSAGE("The opposing Wobbuffet's Defense harshly fell!"); } ABILITY_POPUP(opponent, ABILITY_BIG_PECKS); - MESSAGE("Foe Pidgey's Big Pecks prevents Defense loss!"); + MESSAGE("The opposing Pidgey's Big Pecks prevents Defense loss!"); } } @@ -96,9 +96,9 @@ SINGLE_BATTLE_TEST("Spicy Extract bypasses accuracy checks") NOT MESSAGE("Wobbuffet's attack missed!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPICY_EXTRACT, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Attack sharply rose!"); + MESSAGE("The opposing Wobbuffet's Attack sharply rose!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wobbuffet's Defense harshly fell!"); + MESSAGE("The opposing Wobbuffet's Defense harshly fell!"); } } @@ -130,10 +130,10 @@ SINGLE_BATTLE_TEST("Spicy Extract stat changes will be inverted by Contrary") ANIMATION(ANIM_TYPE_MOVE, MOVE_SPICY_EXTRACT, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Snivy's Attack harshly fell!"); + MESSAGE("The opposing Snivy's Attack harshly fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Snivy's Defense sharply rose!"); + MESSAGE("The opposing Snivy's Defense sharply rose!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE - 2); EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 2); @@ -152,11 +152,11 @@ SINGLE_BATTLE_TEST("Spicy Extract against Clear Amulet and Contrary raises Defen ANIMATION(ANIM_TYPE_MOVE, MOVE_SPICY_EXTRACT, player); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Snivy's Attack harshly fell!"); + MESSAGE("The opposing Snivy's Attack harshly fell!"); } - MESSAGE("Foe Snivy's Clear Amulet prevents its stats from being lowered!"); + MESSAGE("The opposing Snivy's Clear Amulet prevents its stats from being lowered!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Snivy's Defense sharply rose!"); + MESSAGE("The opposing Snivy's Defense sharply rose!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE); EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 2); diff --git a/test/battle/move_effect/sticky_web.c b/test/battle/move_effect/sticky_web.c index d6960f88d18d..ecaa1c9c4af3 100644 --- a/test/battle/move_effect/sticky_web.c +++ b/test/battle/move_effect/sticky_web.c @@ -20,9 +20,9 @@ SINGLE_BATTLE_TEST("Sticky Web lowers Speed by 1 on switch-in") ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); MESSAGE("A sticky web spreads out on the ground around the opposing team!"); MESSAGE("2 sent out Wynaut!"); - MESSAGE("Foe Wynaut was caught in a Sticky Web!"); + MESSAGE("The opposing Wynaut was caught in a Sticky Web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Wynaut's Speed fell!"); + MESSAGE("The opposing Wynaut's Speed fell!"); } } @@ -66,12 +66,12 @@ DOUBLE_BATTLE_TEST("Sticky Web lowers Speed by 1 in a double battle after Explos ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, playerLeft); MESSAGE("2 sent out Wynaut!"); MESSAGE("2 sent out Alakazam!"); - MESSAGE("Foe Alakazam was caught in a Sticky Web!"); + MESSAGE("The opposing Alakazam was caught in a Sticky Web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Foe Alakazam's Speed fell!"); - MESSAGE("Foe Wynaut was caught in a Sticky Web!"); + MESSAGE("The opposing Alakazam's Speed fell!"); + MESSAGE("The opposing Wynaut was caught in a Sticky Web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Foe Wynaut's Speed fell!"); + MESSAGE("The opposing Wynaut's Speed fell!"); } } @@ -89,9 +89,9 @@ SINGLE_BATTLE_TEST("Sticky Web raises Speed by 1 for a Pokemon with Contrary") ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); MESSAGE("A sticky web spreads out on the ground around the opposing team!"); MESSAGE("2 sent out Shuckle!"); - MESSAGE("Foe Shuckle was caught in a Sticky Web!"); + MESSAGE("The opposing Shuckle was caught in a Sticky Web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Shuckle's Speed rose!"); + MESSAGE("The opposing Shuckle's Speed rose!"); } } @@ -128,14 +128,14 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - the ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, BATTLER_OPPONENT); if (opponentSetUpper == 0) { - MESSAGE("Foe Caterpie's Speed fell!"); + MESSAGE("The opposing Caterpie's Speed fell!"); NONE_OF { - MESSAGE("Foe Caterpie was caught in a Sticky Web!"); + MESSAGE("The opposing Caterpie was caught in a Sticky Web!"); } } else { - MESSAGE("Foe Weedle's Speed fell!"); + MESSAGE("The opposing Weedle's Speed fell!"); NONE_OF { - MESSAGE("Foe Weedle was caught in a Sticky Web!"); + MESSAGE("The opposing Weedle was caught in a Sticky Web!"); } } } @@ -220,7 +220,7 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - no o MESSAGE("A sticky web spreads out on the ground around your team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_MEMENTO, opponentLeft); - MESSAGE("Foe Caterpie fainted!"); + MESSAGE("The opposing Caterpie fainted!"); if (hasReplacement) { MESSAGE("2 sent out Pidgey!"); } diff --git a/test/battle/move_effect/stomping_tantrum.c b/test/battle/move_effect/stomping_tantrum.c index 1a5870fdd0db..861396d9fd2e 100644 --- a/test/battle/move_effect/stomping_tantrum.c +++ b/test/battle/move_effect/stomping_tantrum.c @@ -81,7 +81,7 @@ SINGLE_BATTLE_TEST("Stomping Tatrum will not deal double damage if target protec HP_BAR(opponent, captureDamage: &damage[0]); ANIMATION(ANIM_TYPE_MOVE, MOVE_PROTECT, opponent); - MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("The opposing Wobbuffet protected itself!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); HP_BAR(opponent, captureDamage: &damage[1]); diff --git a/test/battle/move_effect/thousand_arrows.c b/test/battle/move_effect/thousand_arrows.c index 961c0ec24e4d..09e726fa2093 100644 --- a/test/battle/move_effect/thousand_arrows.c +++ b/test/battle/move_effect/thousand_arrows.c @@ -15,7 +15,7 @@ SINGLE_BATTLE_TEST("Thousand Arrows does not ground mons behind substitutes") } WHEN { TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_THOUSAND_ARROWS); } } SCENE { - NOT MESSAGE("Foe Skarmory fell straight down!"); + NOT MESSAGE("The opposing Skarmory fell straight down!"); } } @@ -33,10 +33,10 @@ SINGLE_BATTLE_TEST("Thousand Arrows does neutral damage to non-grounded Flying t } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_THOUSAND_ARROWS, player); if (pokemon == SPECIES_SKARMORY) { - MESSAGE("Foe Skarmory fell straight down!"); + MESSAGE("The opposing Skarmory fell straight down!"); MESSAGE("The opposing Skarmory used Celebrate!"); } else { - MESSAGE("Foe Scyther fell straight down!"); + MESSAGE("The opposing Scyther fell straight down!"); MESSAGE("The opposing Scyther used Celebrate!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); diff --git a/test/battle/move_effect/wake_up_slap.c b/test/battle/move_effect/wake_up_slap.c index 25e7b87425a4..32b69bef98c8 100644 --- a/test/battle/move_effect/wake_up_slap.c +++ b/test/battle/move_effect/wake_up_slap.c @@ -24,12 +24,12 @@ SINGLE_BATTLE_TEST("Wake-Up Slap does not cure paralyzed pokemons behind substit MESSAGE("The SUBSTITUTE took damage for Foe Seismitoad!"); NONE_OF { - MESSAGE("Foe Seismitoad's SUBSTITUTE faded!"); // Smelling Salts does 86 damage, the sub has 122 HP, if hitting a sub it shouldn't get boosted damage. - MESSAGE("Foe Seismitoad woke up!"); + MESSAGE("The opposing Seismitoad's SUBSTITUTE faded!"); // Smelling Salts does 86 damage, the sub has 122 HP, if hitting a sub it shouldn't get boosted damage. + MESSAGE("The opposing Seismitoad woke up!"); STATUS_ICON(opponent, none: TRUE); } } else { - MESSAGE("Foe Seismitoad woke up!"); + MESSAGE("The opposing Seismitoad woke up!"); STATUS_ICON(opponent, none: TRUE); } } @@ -48,9 +48,9 @@ SINGLE_BATTLE_TEST("Wake-Up Slap get incread power vs. sleeping targets") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_WAKE_UP_SLAP, player); if (status1 == STATUS1_SLEEP) { - MESSAGE("Foe Lotad fainted!"); + MESSAGE("The opposing Lotad fainted!"); } else { - NOT MESSAGE("Foe Lotad fainted!"); + NOT MESSAGE("The opposing Lotad fainted!"); MESSAGE("The opposing Lotad used Celebrate!"); } } diff --git a/test/battle/move_effect_secondary/psychic_noise.c b/test/battle/move_effect_secondary/psychic_noise.c index e8d50dc961ac..e44ae75abe44 100644 --- a/test/battle/move_effect_secondary/psychic_noise.c +++ b/test/battle/move_effect_secondary/psychic_noise.c @@ -18,10 +18,10 @@ SINGLE_BATTLE_TEST("Psychic Noise blocks healing moves for 2 turns") TURN { MOVE(opponent, MOVE_RECOVER); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHIC_NOISE, player); - MESSAGE("Foe Wobbuffet was prevented from healing!"); - MESSAGE("Foe Wobbuffet was prevented from healing!"); + MESSAGE("The opposing Wobbuffet was prevented from healing!"); + MESSAGE("The opposing Wobbuffet was prevented from healing!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STRUGGLE, opponent); - MESSAGE("Foe Wobbuffet's Heal Block wore off!"); + MESSAGE("The opposing Wobbuffet's Heal Block wore off!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_RECOVER, opponent); } } @@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("Psychic Noise is blocked by Soundproof") TURN { MOVE(player, MOVE_PSYCHIC_NOISE); MOVE(opponent, MOVE_RECOVER); } } SCENE { ABILITY_POPUP(opponent, ABILITY_SOUNDPROOF); - MESSAGE("Foe Voltorb's Soundproof blocks Psychic Noise!"); + MESSAGE("The opposing Voltorb's Soundproof blocks Psychic Noise!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_RECOVER, opponent); } } @@ -50,7 +50,7 @@ SINGLE_BATTLE_TEST("Psychic Noise heal block effect is blocked by Aroma Veil") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHIC_NOISE, player); ABILITY_POPUP(opponent, ABILITY_AROMA_VEIL); - MESSAGE("Foe Milcery is protected by an aromatic veil!"); + MESSAGE("The opposing Milcery is protected by an aromatic veil!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_RECOVER, opponent); } } @@ -67,7 +67,7 @@ DOUBLE_BATTLE_TEST("Psychic Noise heal block effect is blocked by partners Aroma } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHIC_NOISE, playerLeft); ABILITY_POPUP(opponentRight, ABILITY_AROMA_VEIL); - MESSAGE("Foe Wobbuffet is protected by an aromatic veil!"); + MESSAGE("The opposing Wobbuffet is protected by an aromatic veil!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_RECOVER, opponentLeft); } } diff --git a/test/battle/move_effect_secondary/spikes.c b/test/battle/move_effect_secondary/spikes.c index b9c72930c2be..4c8aadba4490 100644 --- a/test/battle/move_effect_secondary/spikes.c +++ b/test/battle/move_effect_secondary/spikes.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Ceaseless Edge sets up hazards after hitting the target") MESSAGE("Spikes were scattered all around the opposing team!"); MESSAGE("2 sent out Wobbuffet!"); HP_BAR(opponent, damage: maxHP / 8); - MESSAGE("Foe Wobbuffet is hurt by spikes!"); + MESSAGE("The opposing Wobbuffet is hurt by spikes!"); } } @@ -59,6 +59,6 @@ SINGLE_BATTLE_TEST("Ceaseless Edge can set up to 3 layers of Spikes") MESSAGE("2 sent out Wynaut!"); HP_BAR(opponent, damage: maxHP / 4); - MESSAGE("Foe Wynaut is hurt by spikes!"); + MESSAGE("The opposing Wynaut is hurt by spikes!"); } } diff --git a/test/battle/move_flags/strike_count.c b/test/battle/move_flags/strike_count.c index 8967836eff9e..ba71e35c263d 100644 --- a/test/battle/move_flags/strike_count.c +++ b/test/battle/move_flags/strike_count.c @@ -12,7 +12,7 @@ SINGLE_BATTLE_TEST("Two strike count turns a move into a 2-hit move") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_KICK, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_KICK, player); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } diff --git a/test/battle/status2/confusion.c b/test/battle/status2/confusion.c index 3c86e5d5552b..96ed2e1362a0 100644 --- a/test/battle/status2/confusion.c +++ b/test/battle/status2/confusion.c @@ -18,8 +18,8 @@ SINGLE_BATTLE_TEST("Confusion adds a 50/33% chance to hit self with 40 power") ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); HP_BAR(player, captureDamage: &damage[0]); ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player); - MESSAGE("Foe Wobbuffet became confused!"); - MESSAGE("Foe Wobbuffet is confused!"); + MESSAGE("The opposing Wobbuffet became confused!"); + MESSAGE("The opposing Wobbuffet is confused!"); MESSAGE("It hurt itself in its confusion!"); HP_BAR(opponent, captureDamage: &damage[1]); } THEN { diff --git a/test/battle/terrain/electric.c b/test/battle/terrain/electric.c index f7fa2e697969..222f6af09e4d 100644 --- a/test/battle/terrain/electric.c +++ b/test/battle/terrain/electric.c @@ -14,7 +14,7 @@ SINGLE_BATTLE_TEST("Electric Terrain protects grounded battlers from falling asl MESSAGE("The opposing Claydol used Spore!"); MESSAGE("Wobbuffet surrounds itself with electrified terrain!"); MESSAGE("Wobbuffet used Spore!"); - MESSAGE("Foe Claydol fell asleep!"); + MESSAGE("The opposing Claydol fell asleep!"); STATUS_ICON(opponent, sleep: TRUE); } } @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Electric Terrain activates Electric Seed and Mimicry") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Using Electric Seed, the Defense of Wobbuffet rose!"); ABILITY_POPUP(opponent); - MESSAGE("Foe Stunfisk's type changed to Electric!"); + MESSAGE("The opposing Stunfisk's type changed to Electric!"); } THEN { EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].types[0], TYPE_ELECTRIC); } diff --git a/test/battle/terrain/grassy.c b/test/battle/terrain/grassy.c index be153d337056..f3412ff772a2 100644 --- a/test/battle/terrain/grassy.c +++ b/test/battle/terrain/grassy.c @@ -101,11 +101,11 @@ SINGLE_BATTLE_TEST("Grassy Terrain heals the pokemon on the field for the durati MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASSY_TERRAIN, player); MESSAGE("Grass grew to cover the battlefield!"); - MESSAGE("Foe Wobbuffet is healed by the grassy terrain!"); - MESSAGE("Foe Wobbuffet is healed by the grassy terrain!"); - MESSAGE("Foe Wobbuffet is healed by the grassy terrain!"); - MESSAGE("Foe Wobbuffet is healed by the grassy terrain!"); - MESSAGE("Foe Wobbuffet is healed by the grassy terrain!"); + MESSAGE("The opposing Wobbuffet is healed by the grassy terrain!"); + MESSAGE("The opposing Wobbuffet is healed by the grassy terrain!"); + MESSAGE("The opposing Wobbuffet is healed by the grassy terrain!"); + MESSAGE("The opposing Wobbuffet is healed by the grassy terrain!"); + MESSAGE("The opposing Wobbuffet is healed by the grassy terrain!"); MESSAGE("The grass disappeared from the battlefield."); } } diff --git a/test/battle/terrain/misty.c b/test/battle/terrain/misty.c index f6dc39a39a1c..aab35e312534 100644 --- a/test/battle/terrain/misty.c +++ b/test/battle/terrain/misty.c @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Misty Terrain activates Misty Seed and Mimicry") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Using Misty Seed, the Sp. Def of Wobbuffet rose!"); ABILITY_POPUP(opponent); - MESSAGE("Foe Stunfisk's type changed to Fairy!"); + MESSAGE("The opposing Stunfisk's type changed to Fairy!"); } THEN { EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].types[0], TYPE_FAIRY); } diff --git a/test/battle/terrain/psychic.c b/test/battle/terrain/psychic.c index 1f0a2adca7ce..67611352a675 100644 --- a/test/battle/terrain/psychic.c +++ b/test/battle/terrain/psychic.c @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Psychic Terrain activates Psychic Seed and Mimicry") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Using Psychic Seed, the Sp. Def of Wobbuffet rose!"); ABILITY_POPUP(opponent); - MESSAGE("Foe Stunfisk's type changed to Psychic!"); + MESSAGE("The opposing Stunfisk's type changed to Psychic!"); } THEN { EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].types[0], TYPE_PSYCHIC); } From ef2bc3773f5b20bb8e5628c247a4cdfc7a4efb7b Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 9 Sep 2024 17:09:15 -0300 Subject: [PATCH 37/68] 181 left --- docs/how_to_testing_system.md | 2 +- include/test/battle.h | 2 +- test/battle/ability/anger_point.c | 2 +- test/battle/ability/contrary.c | 8 +-- test/battle/ability/cursed_body.c | 2 +- test/battle/ability/cute_charm.c | 6 +-- test/battle/ability/defiant.c | 8 +-- test/battle/ability/disguise.c | 6 +-- test/battle/ability/effect_spore.c | 6 +-- test/battle/ability/frisk.c | 4 +- test/battle/ability/good_as_gold.c | 8 +-- test/battle/ability/inner_focus.c | 4 +- test/battle/ability/intimidate.c | 10 ++-- test/battle/ability/magic_bounce.c | 14 +++--- test/battle/ability/magician.c | 2 +- test/battle/ability/mirror_armor.c | 2 +- test/battle/ability/moxie.c | 6 +-- test/battle/ability/opportunist.c | 4 +- test/battle/ability/overcoat.c | 2 +- test/battle/ability/parental_bond.c | 2 +- test/battle/ability/poison_point.c | 6 +-- test/battle/ability/prankster.c | 6 +-- test/battle/ability/rattled.c | 2 +- test/battle/ability/shield_dust.c | 4 +- test/battle/ability/stench.c | 6 +-- test/battle/ability/supersweet_syrup.c | 6 +-- test/battle/ability/toxic_chain.c | 4 +- test/battle/ability/trace.c | 10 ++-- test/battle/ability/weak_armor.c | 6 +-- test/battle/ability/wind_power.c | 8 +-- test/battle/form_change/mega_evolution.c | 2 +- test/battle/form_change/primal_reversion.c | 38 +++++++------- test/battle/form_change/ultra_burst.c | 4 +- test/battle/gimmick/dynamax.c | 20 ++++---- test/battle/gimmick/terastal.c | 10 ++-- test/battle/gimmick/zmove.c | 2 +- test/battle/hold_effect/covert_cloak.c | 4 +- test/battle/hold_effect/custap_berry.c | 6 +-- test/battle/hold_effect/eject_button.c | 2 +- test/battle/hold_effect/gems.c | 8 +-- test/battle/hold_effect/jaboca_berry.c | 8 +-- test/battle/hold_effect/kee_berry.c | 6 +-- test/battle/hold_effect/maranga_berry.c | 6 +-- test/battle/hold_effect/protective_pads.c | 2 +- test/battle/hold_effect/red_card.c | 50 +++++++++---------- test/battle/hold_effect/rowap_berry.c | 6 +-- .../battle/item_effect/heal_and_cure_status.c | 12 ++--- test/battle/item_effect/revive.c | 8 +-- test/battle/move_effect/belly_drum.c | 4 +- test/battle/move_effect/corrosive_gas.c | 16 +++--- test/battle/move_effect/court_change.c | 12 ++--- test/battle/move_effect/defog.c | 8 +-- test/battle/move_effect/doodle.c | 8 +-- test/battle/move_effect/embargo.c | 4 +- test/battle/move_effect/explosion.c | 2 +- test/battle/move_effect/flame_burst.c | 4 +- test/battle/move_effect/fling.c | 18 +++---- test/battle/move_effect/future_sight.c | 2 +- .../move_effect/hit_set_remove_terrain.c | 2 +- test/battle/move_effect/knock_off.c | 18 +++---- test/battle/move_effect/leech_seed.c | 2 +- test/battle/move_effect/metronome.c | 2 +- test/battle/move_effect/octolock.c | 4 +- test/battle/move_effect/ohko.c | 2 +- test/battle/move_effect/pledge.c | 14 +++--- test/battle/move_effect/recoil_if_miss.c | 2 +- test/battle/move_effect/reflect_type.c | 8 +-- test/battle/move_effect/relic_song.c | 2 +- test/battle/move_effect/roost.c | 2 +- test/battle/move_effect/salt_cure.c | 2 +- test/battle/move_effect/shed_tail.c | 2 +- test/battle/move_effect/smelling_salts.c | 2 +- test/battle/move_effect/spikes.c | 16 +++--- test/battle/move_effect/sticky_web.c | 26 +++++----- test/battle/move_effect/stomping_tantrum.c | 2 +- test/battle/move_effect/strength_sap.c | 4 +- test/battle/move_effect/substitute.c | 2 +- test/battle/move_effect/teatime.c | 16 +++--- test/battle/move_effect/telekinesis.c | 2 +- test/battle/move_effect/tera_blast.c | 2 +- test/battle/move_effect/tera_starstorm.c | 4 +- test/battle/move_effect/toxic_spikes.c | 2 +- test/battle/move_effect/upper_hand.c | 4 +- test/battle/move_effect/wake_up_slap.c | 2 +- test/battle/move_effect_secondary/bug_bite.c | 2 +- test/battle/move_effect_secondary/flinch.c | 8 +-- .../battle/move_effect_secondary/rapid_spin.c | 4 +- test/battle/move_effect_secondary/spikes.c | 14 +++--- .../move_effect_secondary/stealth_rock.c | 4 +- .../battle/move_effect_secondary/syrup_bomb.c | 22 ++++---- .../move_effects_combined/flinch_status.c | 2 +- .../move_effects_combined/triple_arrows.c | 6 +-- test/battle/move_flags/powder.c | 2 +- test/battle/terrain/psychic.c | 2 +- test/battle/terrain/starting_terrain.c | 2 +- 95 files changed, 322 insertions(+), 322 deletions(-) diff --git a/docs/how_to_testing_system.md b/docs/how_to_testing_system.md index 64e46c76a10c..6910c44e9a61 100644 --- a/docs/how_to_testing_system.md +++ b/docs/how_to_testing_system.md @@ -86,7 +86,7 @@ SINGLE_BATTLE_TEST("Stun Spore does not affect Grass-types") TURN { MOVE(player, MOVE_STUN_SPORE); } // 3. } SCENE { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); // 4. - MESSAGE("It doesn't affect Foe Oddish…"); // 5. + MESSAGE("It doesn't affect the opposing Oddish…"); // 5. } } ``` diff --git a/include/test/battle.h b/include/test/battle.h index 4f7dfa105988..b13ae9802978 100644 --- a/include/test/battle.h +++ b/include/test/battle.h @@ -95,7 +95,7 @@ * TURN { MOVE(player, MOVE_STUN_SPORE); } // 3. * } SCENE { * NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); // 4. - * MESSAGE("It doesn't affect Foe Oddish…"); // 5. + * MESSAGE("It doesn't affect the opposing Oddish…"); // 5. * } * } * diff --git a/test/battle/ability/anger_point.c b/test/battle/ability/anger_point.c index ddfa3c841de3..1993e67550e0 100644 --- a/test/battle/ability/anger_point.c +++ b/test/battle/ability/anger_point.c @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Anger Point does not trigger when already at maximum Attack } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_BELLY_DRUM, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Primeape cut its own HP and maximized ATTACK!"); + MESSAGE("Primeape cut its own HP and maximized its Attack!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FROST_BREATH, opponent); MESSAGE("A critical hit!"); NONE_OF { diff --git a/test/battle/ability/contrary.c b/test/battle/ability/contrary.c index 512151ef1d00..c1688ecde6a4 100644 --- a/test/battle/ability/contrary.c +++ b/test/battle/ability/contrary.c @@ -54,7 +54,7 @@ DOUBLE_BATTLE_TEST("Contrary raises Attack when Intimidated in a double battle", MESSAGE("The opposing Spinda's Attack rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Mightyena's Intimidate cuts Foe Spinda's attack!"); + MESSAGE("Mightyena's Intimidate cuts the opposing Spinda's attack!"); } if (abilityRight == ABILITY_CONTRARY) { ABILITY_POPUP(opponentRight, ABILITY_CONTRARY); @@ -62,7 +62,7 @@ DOUBLE_BATTLE_TEST("Contrary raises Attack when Intimidated in a double battle", MESSAGE("The opposing Spinda's Attack rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Mightyena's Intimidate cuts Foe Spinda's attack!"); + MESSAGE("Mightyena's Intimidate cuts the opposing Spinda's attack!"); } HP_BAR(playerLeft, captureDamage: &results[i].damageLeft); HP_BAR(playerRight, captureDamage: &results[i].damageRight); @@ -207,11 +207,11 @@ SINGLE_BATTLE_TEST("Contrary lowers a stat after using a move which would normal if (ability == ABILITY_CONTRARY) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("The opposing Spinda cut its own HP and maximized ATTACK!"); //Message stays the same + MESSAGE("The opposing Spinda cut its own HP and maximized its Attack!"); //Message stays the same } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("The opposing Spinda cut its own HP and maximized ATTACK!"); + MESSAGE("The opposing Spinda cut its own HP and maximized its Attack!"); } HP_BAR(player, captureDamage: &results[i].damageAfter); diff --git a/test/battle/ability/cursed_body.c b/test/battle/ability/cursed_body.c index 20fe659d21ac..26d97a9f1189 100644 --- a/test/battle/ability/cursed_body.c +++ b/test/battle/ability/cursed_body.c @@ -12,6 +12,6 @@ SINGLE_BATTLE_TEST("Cursed Body triggers 30% of the time") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_AQUA_JET, player); ABILITY_POPUP(opponent, ABILITY_CURSED_BODY); - MESSAGE("Wobbuffet's Aqua Jet was disabled by Foe Frillish's Cursed Body!"); + MESSAGE("Wobbuffet's Aqua Jet was disabled by the opposing Frillish's Cursed Body!"); } } diff --git a/test/battle/ability/cute_charm.c b/test/battle/ability/cute_charm.c index 6134a395c27f..e6eee0ae0862 100644 --- a/test/battle/ability/cute_charm.c +++ b/test/battle/ability/cute_charm.c @@ -19,13 +19,13 @@ SINGLE_BATTLE_TEST("Cute Charm inflicts infatuation on contact") ABILITY_POPUP(opponent, ABILITY_CUTE_CHARM); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_INFATUATION, player); MESSAGE("The opposing Clefairy's Cute Charm infatuated Wobbuffet!"); - MESSAGE("Wobbuffet is in love with Foe Clefairy!"); + MESSAGE("Wobbuffet is in love with the opposing Clefairy!"); } else { NONE_OF { ABILITY_POPUP(opponent, ABILITY_CUTE_CHARM); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_INFATUATION, player); MESSAGE("The opposing Clefairy's Cute Charm infatuated Wobbuffet!"); - MESSAGE("Wobbuffet is in love with Foe Clefairy!"); + MESSAGE("Wobbuffet is in love with the opposing Clefairy!"); } } } @@ -61,6 +61,6 @@ SINGLE_BATTLE_TEST("Cute Charm triggers 30% of the time") ABILITY_POPUP(opponent, ABILITY_CUTE_CHARM); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_INFATUATION, player); MESSAGE("The opposing Clefairy's Cute Charm infatuated Wobbuffet!"); - MESSAGE("Wobbuffet is in love with Foe Clefairy!"); + MESSAGE("Wobbuffet is in love with the opposing Clefairy!"); } } diff --git a/test/battle/ability/defiant.c b/test/battle/ability/defiant.c index 0e5b44cb6b0a..5e3b621ae3db 100644 --- a/test/battle/ability/defiant.c +++ b/test/battle/ability/defiant.c @@ -79,14 +79,14 @@ DOUBLE_BATTLE_TEST("Defiant sharply raises opponent's Attack after Intimidate") //1st mon Intimidate ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Gyarados's Intimidate cuts Foe Mankey's attack!"); + MESSAGE("Gyarados's Intimidate cuts the opposing Mankey's attack!"); if (abilityLeft == ABILITY_DEFIANT) { ABILITY_POPUP(opponentLeft, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); MESSAGE("The opposing Mankey's Attack sharply rose!"); } ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Gyarados's Intimidate cuts Foe Primeape's attack!"); + MESSAGE("Gyarados's Intimidate cuts the opposing Primeape's attack!"); if (abilityRight == ABILITY_DEFIANT) { ABILITY_POPUP(opponentRight, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); @@ -96,14 +96,14 @@ DOUBLE_BATTLE_TEST("Defiant sharply raises opponent's Attack after Intimidate") //2nd mon Intimidate ABILITY_POPUP(playerRight, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Arbok's Intimidate cuts Foe Mankey's attack!"); + MESSAGE("Arbok's Intimidate cuts the opposing Mankey's attack!"); if (abilityLeft == ABILITY_DEFIANT) { ABILITY_POPUP(opponentLeft, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); MESSAGE("The opposing Mankey's Attack sharply rose!"); } ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Arbok's Intimidate cuts Foe Primeape's attack!"); + MESSAGE("Arbok's Intimidate cuts the opposing Primeape's attack!"); if (abilityRight == ABILITY_DEFIANT) { ABILITY_POPUP(opponentRight, ABILITY_DEFIANT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); diff --git a/test/battle/ability/disguise.c b/test/battle/ability/disguise.c index f9f1955f72fc..3a8df70be5a0 100644 --- a/test/battle/ability/disguise.c +++ b/test/battle/ability/disguise.c @@ -98,7 +98,7 @@ SINGLE_BATTLE_TEST("Disguised Mimikyu takes damage from Rocky Helmet without bre HP_BAR(opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); HP_BAR(player); - MESSAGE("Mimikyu was hurt by Foe Wobbuffet's Rocky Helmet!"); + MESSAGE("Mimikyu was hurt by the opposing Wobbuffet's Rocky Helmet!"); } THEN { EXPECT_EQ(player->species, SPECIES_MIMIKYU_DISGUISED); } @@ -116,7 +116,7 @@ SINGLE_BATTLE_TEST("Disguised Mimikyu takes damage from Rough Skin without break HP_BAR(opponent); ABILITY_POPUP(opponent, ABILITY_ROUGH_SKIN); HP_BAR(player); - MESSAGE("Mimikyu was hurt by Foe Carvanha's Rough Skin!"); + MESSAGE("Mimikyu was hurt by the opposing Carvanha's Rough Skin!"); } THEN { EXPECT_EQ(player->species, SPECIES_MIMIKYU_DISGUISED); } @@ -167,7 +167,7 @@ SINGLE_BATTLE_TEST("Disguised Mimikyu blocks a move after getting Gastro Acid Ba TURN { MOVE(opponent, MOVE_SHADOW_CLAW); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_GASTRO_ACID, opponent); - MESSAGE("Wobbuffet's ability was suppressed!"); + MESSAGE("Wobbuffet's Ability was suppressed!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_BATON_PASS, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_SHADOW_CLAW, opponent); ABILITY_POPUP(player, ABILITY_DISGUISE); diff --git a/test/battle/ability/effect_spore.c b/test/battle/ability/effect_spore.c index 52b0d3361200..e0e58b2d6f44 100644 --- a/test/battle/ability/effect_spore.c +++ b/test/battle/ability/effect_spore.c @@ -19,13 +19,13 @@ SINGLE_BATTLE_TEST("Effect Spore only inflicts status on contact") if (gMovesInfo[move].makesContact) { ABILITY_POPUP(opponent, ABILITY_EFFECT_SPORE); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player); - MESSAGE("Wobbuffet was poisoned by Foe Breloom's Effect Spore!"); + MESSAGE("Wobbuffet was poisoned by the opposing Breloom's Effect Spore!"); STATUS_ICON(player, poison: TRUE); } else { NONE_OF { ABILITY_POPUP(opponent, ABILITY_EFFECT_SPORE); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player); - MESSAGE("Wobbuffet was poisoned by Foe Breloom's Effect Spore!"); + MESSAGE("Wobbuffet was poisoned by the opposing Breloom's Effect Spore!"); STATUS_ICON(player, poison: TRUE); } } @@ -46,7 +46,7 @@ SINGLE_BATTLE_TEST("Effect Spore causes poison 9% of the time") } SCENE { ABILITY_POPUP(opponent, ABILITY_EFFECT_SPORE); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player); - MESSAGE("Wobbuffet was poisoned by Foe Breloom's Effect Spore!"); + MESSAGE("Wobbuffet was poisoned by the opposing Breloom's Effect Spore!"); STATUS_ICON(player, poison: TRUE); } } diff --git a/test/battle/ability/frisk.c b/test/battle/ability/frisk.c index 1f70df29dd41..3c892329c3b4 100644 --- a/test/battle/ability/frisk.c +++ b/test/battle/ability/frisk.c @@ -29,7 +29,7 @@ SINGLE_BATTLE_TEST("Frisk triggers in a Single Battle") TURN { ; } } SCENE { ABILITY_POPUP(player, ABILITY_FRISK); - MESSAGE("Furret frisked Foe Sentret and found its Potion!"); + MESSAGE("Furret frisked the opposing Sentret and found its Potion!"); ABILITY_POPUP(opponent, ABILITY_FRISK); MESSAGE("The opposing Sentret frisked Furret and found its Potion!"); } @@ -54,7 +54,7 @@ DOUBLE_BATTLE_TEST("Frisk triggers for player in a Double Battle after switching MESSAGE("The opposing Wynaut used Pound!"); MESSAGE("Wobbuffet fainted!"); ABILITY_POPUP(target, ABILITY_FRISK); - MESSAGE("Furret frisked Foe Wynaut and found its Potion!"); + MESSAGE("Furret frisked the opposing Wynaut and found its Potion!"); } } diff --git a/test/battle/ability/good_as_gold.c b/test/battle/ability/good_as_gold.c index 596bb6c4c7b7..40561ee767ee 100644 --- a/test/battle/ability/good_as_gold.c +++ b/test/battle/ability/good_as_gold.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Good as Gold protects from status moves") } SCENE { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, player); ABILITY_POPUP(opponent, ABILITY_GOOD_AS_GOLD); - MESSAGE("It doesn't affect Foe Gholdengo…"); + MESSAGE("It doesn't affect the opposing Gholdengo…"); } } @@ -29,7 +29,7 @@ SINGLE_BATTLE_TEST("Good as Gold doesn't protect the user from it's own moves") ANIMATION(ANIM_TYPE_MOVE, MOVE_NASTY_PLOT, opponent); NONE_OF { ABILITY_POPUP(opponent, ABILITY_GOOD_AS_GOLD); - MESSAGE("It doesn't affect Foe Gholdengo…"); + MESSAGE("It doesn't affect the opposing Gholdengo…"); } } } @@ -47,7 +47,7 @@ SINGLE_BATTLE_TEST("Good as Gold doesn't protect from moves that target the fiel ANIMATION(ANIM_TYPE_MOVE, MOVE_STEALTH_ROCK, player); NONE_OF { ABILITY_POPUP(opponent, ABILITY_GOOD_AS_GOLD); - MESSAGE("It doesn't affect Foe Gholdengo…"); + MESSAGE("It doesn't affect the opposing Gholdengo…"); } } } @@ -65,6 +65,6 @@ DOUBLE_BATTLE_TEST("Good as Gold protects from partner's status moves") } SCENE { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_HELPING_HAND, opponentRight); ABILITY_POPUP(opponentLeft, ABILITY_GOOD_AS_GOLD); - MESSAGE("It doesn't affect Foe Gholdengo…"); + MESSAGE("It doesn't affect the opposing Gholdengo…"); } } diff --git a/test/battle/ability/inner_focus.c b/test/battle/ability/inner_focus.c index 8d83f1ab8436..5a470b742f89 100644 --- a/test/battle/ability/inner_focus.c +++ b/test/battle/ability/inner_focus.c @@ -38,7 +38,7 @@ SINGLE_BATTLE_TEST("Inner Focus prevents flinching") } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, player); - NONE_OF { MESSAGE("The opposing Zubat flinched!"); } + NONE_OF { MESSAGE("The opposing Zubat flinched and couldn't move!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } } @@ -52,6 +52,6 @@ SINGLE_BATTLE_TEST("Inner Focus is ignored by Mold Breaker") TURN { MOVE(player, MOVE_FAKE_OUT); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, player); - MESSAGE("The opposing Zubat flinched!"); + MESSAGE("The opposing Zubat flinched and couldn't move!"); } } diff --git a/test/battle/ability/intimidate.c b/test/battle/ability/intimidate.c index adc1ae4794f9..4201d488bb64 100644 --- a/test/battle/ability/intimidate.c +++ b/test/battle/ability/intimidate.c @@ -92,9 +92,9 @@ DOUBLE_BATTLE_TEST("Intimidate doesn't activate on an empty field in a double ba // Intimidate activates after all battlers have been brought out ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Ekans's Intimidate cuts Foe Arbok's attack!"); + MESSAGE("Ekans's Intimidate cuts the opposing Arbok's attack!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Ekans's Intimidate cuts Foe Wynaut's attack!"); + MESSAGE("Ekans's Intimidate cuts the opposing Wynaut's attack!"); ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); @@ -161,10 +161,10 @@ DOUBLE_BATTLE_TEST("Intimidate activates on an empty slot") SEND_IN_MESSAGE("Hitmontop"); ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); NONE_OF { - MESSAGE("Hitmontop's Intimidate cuts Foe Ralts's attack!"); + MESSAGE("Hitmontop's Intimidate cuts the opposing Ralts's attack!"); } ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Hitmontop's Intimidate cuts Foe Azurill's attack!"); + MESSAGE("Hitmontop's Intimidate cuts the opposing Azurill's attack!"); } } @@ -211,7 +211,7 @@ SINGLE_BATTLE_TEST("Intimidate can not further lower opponents Atk stat if it is ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("The opposing Arbok's Intimidate cuts Wobbuffet's attack!"); } - MESSAGE("Wobbuffet's Attack won't go lower!"); + MESSAGE("Wobbuffet's Attack won't go any lower!"); } THEN { EXPECT_EQ(player->statStages[STAT_ATK], MIN_STAT_STAGE); } diff --git a/test/battle/ability/magic_bounce.c b/test/battle/ability/magic_bounce.c index 1fa071beefd7..a643b228248f 100644 --- a/test/battle/ability/magic_bounce.c +++ b/test/battle/ability/magic_bounce.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Magic Bounce bounces back status moves") } SCENE { ABILITY_POPUP(opponent, ABILITY_MAGIC_BOUNCE); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, player); - MESSAGE("Wynaut's Toxic was bounced back by Foe Espeon's Magic Bounce!"); + MESSAGE("Wynaut's Toxic was bounced back by the opposing Espeon's Magic Bounce!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, opponent); STATUS_ICON(player, badPoison: TRUE); } @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Magic Bounce bounces back powder moves") } SCENE { ABILITY_POPUP(opponent, ABILITY_MAGIC_BOUNCE); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, player); - MESSAGE("Wynaut's Stun Spore was bounced back by Foe Espeon's Magic Bounce!"); + MESSAGE("Wynaut's Stun Spore was bounced back by the opposing Espeon's Magic Bounce!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, opponent); STATUS_ICON(player, paralysis: TRUE); } @@ -49,7 +49,7 @@ SINGLE_BATTLE_TEST("Magic Bounce cannot bounce back powder moves against Grass T } SCENE { ABILITY_POPUP(opponent, ABILITY_MAGIC_BOUNCE); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); - MESSAGE("Oddish's Stun Spore was bounced back by Foe Espeon's Magic Bounce!"); + MESSAGE("Oddish's Stun Spore was bounced back by the opposing Espeon's Magic Bounce!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, opponent); MESSAGE("It doesn't affect Oddish…"); NOT STATUS_ICON(player, paralysis: TRUE); @@ -70,7 +70,7 @@ DOUBLE_BATTLE_TEST("Magic Bounce bounces back moves hitting both foes at two foe } SCENE { ABILITY_POPUP(opponentLeft, ABILITY_MAGIC_BOUNCE); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_LEER, playerLeft); - MESSAGE("Abra's Leer was bounced back by Foe Espeon's Magic Bounce!"); + MESSAGE("Abra's Leer was bounced back by the opposing Espeon's Magic Bounce!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_LEER, opponentLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Abra's Defense fell!"); @@ -106,10 +106,10 @@ DOUBLE_BATTLE_TEST("Magic Bounce bounces back moves hitting foes field") ABILITY_POPUP(opponentRight, ABILITY_MAGIC_BOUNCE); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STEALTH_ROCK, playerLeft); if (abilityBattlerOne == ABILITY_MAGIC_BOUNCE) { - MESSAGE("Abra's Stealth Rock was bounced back by Foe Natu's Magic Bounce!"); + MESSAGE("Abra's Stealth Rock was bounced back by the opposing Natu's Magic Bounce!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STEALTH_ROCK, opponentLeft); } else { - MESSAGE("Abra's Stealth Rock was bounced back by Foe Espeon's Magic Bounce!"); + MESSAGE("Abra's Stealth Rock was bounced back by the opposing Espeon's Magic Bounce!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STEALTH_ROCK, opponentRight); } } @@ -126,7 +126,7 @@ SINGLE_BATTLE_TEST("Magic Bounce bounced back status moves can not be bounced ba } SCENE { ABILITY_POPUP(opponent, ABILITY_MAGIC_BOUNCE); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, player); - MESSAGE("Espeon's Toxic was bounced back by Foe Espeon's Magic Bounce!"); + MESSAGE("Espeon's Toxic was bounced back by the opposing Espeon's Magic Bounce!"); NOT ABILITY_POPUP(player, ABILITY_MAGIC_BOUNCE); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, opponent); STATUS_ICON(player, badPoison: TRUE); diff --git a/test/battle/ability/magician.c b/test/battle/ability/magician.c index 5c67a35bacee..9493e3f71a41 100644 --- a/test/battle/ability/magician.c +++ b/test/battle/ability/magician.c @@ -15,7 +15,7 @@ SINGLE_BATTLE_TEST("Magician does not get self-damage recoil after stealing Life // 1st turn MESSAGE("Delphox used Tackle!"); ABILITY_POPUP(player, ABILITY_MAGICIAN); - MESSAGE("Delphox stole Foe Wobbuffet's Life Orb!"); + MESSAGE("Delphox stole the opposing Wobbuffet's Life Orb!"); NONE_OF { HP_BAR(player); MESSAGE("Delphox was hurt by its Life Orb!"); diff --git a/test/battle/ability/mirror_armor.c b/test/battle/ability/mirror_armor.c index 73bc999843ef..c82f02f4cae0 100644 --- a/test/battle/ability/mirror_armor.c +++ b/test/battle/ability/mirror_armor.c @@ -159,7 +159,7 @@ SINGLE_BATTLE_TEST("Mirror Armor doesn't lower the stat of the attacking Pokemon MESSAGE("The opposing Wynaut used Leer!"); ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("The opposing Wynaut's Defense won't go lower!"); + MESSAGE("The opposing Wynaut's Defense won't go any lower!"); } THEN { EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); EXPECT_EQ(opponent->statStages[STAT_DEF], MIN_STAT_STAGE); diff --git a/test/battle/ability/moxie.c b/test/battle/ability/moxie.c index b418763e8f58..a2f26f92b2e3 100644 --- a/test/battle/ability/moxie.c +++ b/test/battle/ability/moxie.c @@ -95,11 +95,11 @@ SINGLE_BATTLE_TEST("Moxie/Chilling Neigh does not trigger when already at maximu ANIMATION(ANIM_TYPE_MOVE, MOVE_BELLY_DRUM, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); if (species == SPECIES_SALAMENCE) - MESSAGE("Salamence cut its own HP and maximized ATTACK!"); + MESSAGE("Salamence cut its own HP and maximized its Attack!"); else if (species == SPECIES_GLASTRIER) - MESSAGE("Glastrier cut its own HP and maximized ATTACK!"); + MESSAGE("Glastrier cut its own HP and maximized its Attack!"); else - MESSAGE("Calyrex cut its own HP and maximized ATTACK!"); + MESSAGE("Calyrex cut its own HP and maximized its Attack!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); MESSAGE("The opposing Snorunt fainted!"); NONE_OF { diff --git a/test/battle/ability/opportunist.c b/test/battle/ability/opportunist.c index 234b18478ae3..54bc57929fea 100644 --- a/test/battle/ability/opportunist.c +++ b/test/battle/ability/opportunist.c @@ -64,7 +64,7 @@ DOUBLE_BATTLE_TEST("Opportunist raises Attack only once when partner has Intimid MESSAGE("The opposing Spinda's Attack rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Mightyena's Intimidate cuts Foe Spinda's attack!"); + MESSAGE("Mightyena's Intimidate cuts the opposing Spinda's attack!"); } if (abilityRight == ABILITY_CONTRARY) { ABILITY_POPUP(opponentRight, ABILITY_CONTRARY); @@ -72,7 +72,7 @@ DOUBLE_BATTLE_TEST("Opportunist raises Attack only once when partner has Intimid MESSAGE("The opposing Spinda's Attack rose!"); } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Mightyena's Intimidate cuts Foe Spinda's attack!"); + MESSAGE("Mightyena's Intimidate cuts the opposing Spinda's attack!"); } if ((abilityLeft == ABILITY_CONTRARY && abilityRight != ABILITY_CONTRARY) diff --git a/test/battle/ability/overcoat.c b/test/battle/ability/overcoat.c index 26eb90d66b1b..b73f098e783c 100644 --- a/test/battle/ability/overcoat.c +++ b/test/battle/ability/overcoat.c @@ -12,7 +12,7 @@ SINGLE_BATTLE_TEST("Overcoat blocks powder and spore moves") } SCENE { ABILITY_POPUP(opponent, ABILITY_OVERCOAT); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); - MESSAGE("It doesn't affect Foe Pineco…"); + MESSAGE("It doesn't affect the opposing Pineco…"); } } diff --git a/test/battle/ability/parental_bond.c b/test/battle/ability/parental_bond.c index 3fd1ddc76caa..e4b63232860f 100644 --- a/test/battle/ability/parental_bond.c +++ b/test/battle/ability/parental_bond.c @@ -94,7 +94,7 @@ DOUBLE_BATTLE_TEST("Parental Bond does not convert multi-target moves into a two ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, playerLeft); HP_BAR(opponentLeft); MESSAGE("It doesn't affect Pidgey…"); - MESSAGE("It doesn't affect Foe Pidgey…"); + MESSAGE("It doesn't affect the opposing Pidgey…"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); diff --git a/test/battle/ability/poison_point.c b/test/battle/ability/poison_point.c index 26c9c7296834..9f9cd5e900cd 100644 --- a/test/battle/ability/poison_point.c +++ b/test/battle/ability/poison_point.c @@ -18,13 +18,13 @@ SINGLE_BATTLE_TEST("Poison Point inflicts poison on contact") if (gMovesInfo[move].makesContact) { ABILITY_POPUP(opponent, ABILITY_POISON_POINT); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player); - MESSAGE("Wobbuffet was poisoned by Foe Nidoran♂'s Poison Point!"); + MESSAGE("Wobbuffet was poisoned by the opposing Nidoran♂'s Poison Point!"); STATUS_ICON(player, poison: TRUE); } else { NONE_OF { ABILITY_POPUP(opponent, ABILITY_POISON_POINT); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player); - MESSAGE("Wobbuffet was poisoned by Foe Nidoran♂'s Poison Point!"); + MESSAGE("Wobbuffet was poisoned by the opposing Nidoran♂'s Poison Point!"); STATUS_ICON(player, poison: TRUE); } } @@ -45,7 +45,7 @@ SINGLE_BATTLE_TEST("Poison Point triggers 30% of the time") } SCENE { ABILITY_POPUP(opponent, ABILITY_POISON_POINT); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player); - MESSAGE("Wobbuffet was poisoned by Foe Nidoran♂'s Poison Point!"); + MESSAGE("Wobbuffet was poisoned by the opposing Nidoran♂'s Poison Point!"); STATUS_ICON(player, poison: TRUE); } } diff --git a/test/battle/ability/prankster.c b/test/battle/ability/prankster.c index d442cdf07592..5df03669c94a 100644 --- a/test/battle/ability/prankster.c +++ b/test/battle/ability/prankster.c @@ -77,11 +77,11 @@ DOUBLE_BATTLE_TEST("Prankster-affected moves called via Instruct do not affect D } } SCENE { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, playerLeft); - MESSAGE("It doesn't affect Foe Umbreon…"); + MESSAGE("It doesn't affect the opposing Umbreon…"); MESSAGE("Wobbuffet used Instruct!"); MESSAGE("Volbeat used Confuse Ray!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, playerLeft); - MESSAGE("It doesn't affect Foe Umbreon…"); + MESSAGE("It doesn't affect the opposing Umbreon…"); } } @@ -182,7 +182,7 @@ SINGLE_BATTLE_TEST("Prankster-affected moves which are reflected by Magic Coat c MESSAGE("The opposing Murkrow's Confuse Ray was bounced back by MAGIC COAT!"); if (sableyeAbility == ABILITY_PRANKSTER) { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player); - MESSAGE("It doesn't affect Foe Murkrow…"); + MESSAGE("It doesn't affect the opposing Murkrow…"); } else { ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player); MESSAGE("The opposing Murkrow became confused!"); diff --git a/test/battle/ability/rattled.c b/test/battle/ability/rattled.c index 5d771cc9c651..f2aeff105c7f 100644 --- a/test/battle/ability/rattled.c +++ b/test/battle/ability/rattled.c @@ -63,7 +63,7 @@ SINGLE_BATTLE_TEST("Rattled boosts speed by 1 when affected by Intimidate") } SCENE { ABILITY_POPUP(player, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Gyarados's Intimidate cuts Foe Sudowoodo's attack!"); + MESSAGE("Gyarados's Intimidate cuts the opposing Sudowoodo's attack!"); ABILITY_POPUP(opponent, ABILITY_RATTLED); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); MESSAGE("The opposing Sudowoodo's Speed rose!"); diff --git a/test/battle/ability/shield_dust.c b/test/battle/ability/shield_dust.c index 3e01cf8ad386..bcd202a06441 100644 --- a/test/battle/ability/shield_dust.c +++ b/test/battle/ability/shield_dust.c @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Shield Dust blocks secondary effects") MESSAGE("The opposing Vivillon is paralyzed! It may be unable to move!"); MESSAGE("The opposing Vivillon was burned!"); MESSAGE("The opposing Vivillon was poisoned!"); - MESSAGE("The opposing Vivillon flinched!"); + MESSAGE("The opposing Vivillon flinched and couldn't move!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); MESSAGE("The opposing Vivillon was prevented from healing!"); } @@ -73,7 +73,7 @@ SINGLE_BATTLE_TEST("Shield Dust does not block primary effects") MESSAGE("Neither Pokémon can run away!"); break; case MOVE_PAY_DAY: - MESSAGE("Coins scattered everywhere!"); + MESSAGE("Coins were scattered everywhere!"); break; } } THEN { // Can't find good way to test trapping diff --git a/test/battle/ability/stench.c b/test/battle/ability/stench.c index 3ea2937b9cb3..db3192ce7850 100644 --- a/test/battle/ability/stench.c +++ b/test/battle/ability/stench.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Stench has a 10% chance to flinch") } WHEN { TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { - MESSAGE("The opposing Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); } } @@ -27,7 +27,7 @@ SINGLE_BATTLE_TEST("Stench does not stack with King's Rock") } WHEN { TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { - MESSAGE("The opposing Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); } } @@ -72,7 +72,7 @@ DOUBLE_BATTLE_TEST("Stench doesn't trigger if partner uses a move") } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, playerLeft); - MESSAGE("The opposing Grimer flinched!"); + MESSAGE("The opposing Grimer flinched and couldn't move!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); NOT MESSAGE("Wynaut flinched!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerRight); diff --git a/test/battle/ability/supersweet_syrup.c b/test/battle/ability/supersweet_syrup.c index 6a2fd4fd7618..4ff8c462ba7a 100644 --- a/test/battle/ability/supersweet_syrup.c +++ b/test/battle/ability/supersweet_syrup.c @@ -12,7 +12,7 @@ SINGLE_BATTLE_TEST("Supersweet Syrup lowers evasion once per battle by one stage TURN { SWITCH(opponent, 0); } } SCENE { ABILITY_POPUP(opponent, ABILITY_SUPERSWEET_SYRUP); - MESSAGE("A supersweet aroma is wafting from the syrup covering Foe Dipplin!"); + MESSAGE("A supersweet aroma is wafting from the syrup covering the opposing Dipplin!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("2 withdrew Dipplin!"); MESSAGE("2 withdrew Wobbuffet!"); @@ -37,7 +37,7 @@ DOUBLE_BATTLE_TEST("Supersweet Syrup lowers evasion of both opposing mon's in ba TURN { } } SCENE { ABILITY_POPUP(opponentLeft, ABILITY_SUPERSWEET_SYRUP); - MESSAGE("A supersweet aroma is wafting from the syrup covering Foe Dipplin!"); + MESSAGE("A supersweet aroma is wafting from the syrup covering the opposing Dipplin!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); } THEN { @@ -66,7 +66,7 @@ SINGLE_BATTLE_TEST("Supersweet Syrup can not further lower opponents evasion if ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Oddish's evasiveness fell!"); } - MESSAGE("Oddish's evasiveness won't go lower!"); + MESSAGE("Oddish's evasiveness won't go any lower!"); } THEN { EXPECT_EQ(player->statStages[STAT_EVASION], MIN_STAT_STAGE); } diff --git a/test/battle/ability/toxic_chain.c b/test/battle/ability/toxic_chain.c index 2401843481e1..b6f022542890 100644 --- a/test/battle/ability/toxic_chain.c +++ b/test/battle/ability/toxic_chain.c @@ -103,8 +103,8 @@ SINGLE_BATTLE_TEST("Toxic Chain makes Lum/Pecha Berry trigger before being knock STATUS_ICON(opponent, badPoison: FALSE); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF); - MESSAGE("Okidogi knocked off Foe Wobbuffet's Pecha Berry!"); - MESSAGE("Okidogi knocked off Foe Wobbuffet's Lum Berry!"); + MESSAGE("Okidogi knocked off the opposing Wobbuffet's Pecha Berry!"); + MESSAGE("Okidogi knocked off the opposing Wobbuffet's Lum Berry!"); } } THEN { EXPECT(opponent->status1 == 0); diff --git a/test/battle/ability/trace.c b/test/battle/ability/trace.c index acc49bcf1398..0e984947ea77 100644 --- a/test/battle/ability/trace.c +++ b/test/battle/ability/trace.c @@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Trace copies opponents ability") TURN { } } SCENE { ABILITY_POPUP(player, ABILITY_TRACE); - MESSAGE("Ralts TRACED Foe Torchic's Blaze!"); + MESSAGE("Ralts TRACED the opposing Torchic's Blaze!"); } } @@ -24,7 +24,7 @@ SINGLE_BATTLE_TEST("Trace copies opponents ability on switch-in") TURN { SWITCH(player, 1); } } SCENE { ABILITY_POPUP(player, ABILITY_TRACE); - MESSAGE("Ralts TRACED Foe Torchic's Blaze!"); + MESSAGE("Ralts TRACED the opposing Torchic's Blaze!"); } } @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Trace copies opponents ability on switch-in even if opponent } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_MISTY_EXPLOSION); ABILITY_POPUP(player, ABILITY_TRACE); - MESSAGE("Ralts TRACED Foe Torchic's Blaze!"); + MESSAGE("Ralts TRACED the opposing Torchic's Blaze!"); } } @@ -61,7 +61,7 @@ DOUBLE_BATTLE_TEST("Trace copies opponents ability randomly") TURN { } } SCENE { ABILITY_POPUP(playerLeft, ABILITY_TRACE); - MESSAGE("Ralts TRACED Foe Torchic's Blaze!"); + MESSAGE("Ralts TRACED the opposing Torchic's Blaze!"); } } @@ -76,7 +76,7 @@ SINGLE_BATTLE_TEST("Trace will copy an opponent's ability whenever it has the ch } SCENE { // TURN 2 ABILITY_POPUP(player, ABILITY_TRACE); - MESSAGE("Ralts TRACED Foe Torchic's Blaze!"); + MESSAGE("Ralts TRACED the opposing Torchic's Blaze!"); } } diff --git a/test/battle/ability/weak_armor.c b/test/battle/ability/weak_armor.c index 291b2ac639e9..f35da0f66574 100644 --- a/test/battle/ability/weak_armor.c +++ b/test/battle/ability/weak_armor.c @@ -95,7 +95,7 @@ SINGLE_BATTLE_TEST("Weak Armor still lowers boosts Speed if Defense can't go any ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Slugma's Weak Armor lowered its Defense!"); } - MESSAGE("Slugma's Defense won't go lower!"); + MESSAGE("Slugma's Defense won't go any lower!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Slugma's Weak Armor raised its Speed!"); } THEN { @@ -151,7 +151,7 @@ SINGLE_BATTLE_TEST("Weak Armor doesn't interrupt multi hit moves if Defense can' } ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_SWIPES, opponent); ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); - MESSAGE("Magcargo's Defense won't go lower!"); + MESSAGE("Magcargo's Defense won't go any lower!"); MESSAGE("Magcargo's Weak Armor raised its Speed!"); for (j = 0; j < 2; j++) { @@ -159,7 +159,7 @@ SINGLE_BATTLE_TEST("Weak Armor doesn't interrupt multi hit moves if Defense can' // Ability doesn't activate if neither stat can be changed. NONE_OF { ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); - MESSAGE("Magcargo's Defense won't go lower!"); + MESSAGE("Magcargo's Defense won't go any lower!"); MESSAGE("Magcargo's Speed won't go higher!"); } } diff --git a/test/battle/ability/wind_power.c b/test/battle/ability/wind_power.c index 146c47f3dd87..6ccf896eaac7 100644 --- a/test/battle/ability/wind_power.c +++ b/test/battle/ability/wind_power.c @@ -82,7 +82,7 @@ SINGLE_BATTLE_TEST("Wind Power sets up Charge for opponent when hit by a wind mo HP_BAR(opponent); if (move == MOVE_AIR_CUTTER) { ABILITY_POPUP(opponent, ABILITY_WIND_POWER); - MESSAGE("Being hit by Air Cutter charged Foe Wattrel with power!"); + MESSAGE("Being hit by Air Cutter charged the opposing Wattrel with power!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, opponent); @@ -92,7 +92,7 @@ SINGLE_BATTLE_TEST("Wind Power sets up Charge for opponent when hit by a wind mo HP_BAR(opponent); if (move == MOVE_AIR_CUTTER) { ABILITY_POPUP(opponent, ABILITY_WIND_POWER); - MESSAGE("Being hit by Air Cutter charged Foe Wattrel with power!"); + MESSAGE("Being hit by Air Cutter charged the opposing Wattrel with power!"); } } THEN { @@ -205,10 +205,10 @@ DOUBLE_BATTLE_TEST("Wind Power activates correctly when Tailwind is used") ANIMATION(ANIM_TYPE_MOVE, MOVE_TAILWIND, opponentLeft); ABILITY_POPUP(opponentLeft, ABILITY_WIND_POWER); - MESSAGE("Being hit by Tailwind charged Foe Wattrel with power!"); + MESSAGE("Being hit by Tailwind charged the opposing Wattrel with power!"); ABILITY_POPUP(opponentRight, ABILITY_WIND_POWER); - MESSAGE("Being hit by Tailwind charged Foe Wattrel with power!"); + MESSAGE("Being hit by Tailwind charged the opposing Wattrel with power!"); } else { ANIMATION(ANIM_TYPE_MOVE, MOVE_TAILWIND, playerLeft); diff --git a/test/battle/form_change/mega_evolution.c b/test/battle/form_change/mega_evolution.c index 1caa67f98e06..4c97c2c1519d 100644 --- a/test/battle/form_change/mega_evolution.c +++ b/test/battle/form_change/mega_evolution.c @@ -171,7 +171,7 @@ SINGLE_BATTLE_TEST("Mega Evolved Pokemon do not change abilities after fainting" MESSAGE("The opposing Garchomp fainted!"); NONE_OF { ABILITY_POPUP(opponent, ABILITY_ROUGH_SKIN); - MESSAGE("Wobbuffet was hurt by Foe Garchomp's Rough Skin!"); + MESSAGE("Wobbuffet was hurt by the opposing Garchomp's Rough Skin!"); HP_BAR(player); } } diff --git a/test/battle/form_change/primal_reversion.c b/test/battle/form_change/primal_reversion.c index 1241e98a8543..adbbe648e8d5 100644 --- a/test/battle/form_change/primal_reversion.c +++ b/test/battle/form_change/primal_reversion.c @@ -15,12 +15,12 @@ SINGLE_BATTLE_TEST("Primal reversion happens for Groudon only when holding Red O } SCENE { if (heldItem == ITEM_RED_ORB) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player); - MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("Groudon's Primal Reversion! It reverted to its primal state!"); } else { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player); - MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("Groudon's Primal Reversion! It reverted to its primal state!"); } } } THEN { @@ -47,12 +47,12 @@ SINGLE_BATTLE_TEST("Primal reversion happens for Kyogre only when holding Blue O } SCENE { if (heldItem == ITEM_BLUE_ORB) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, opponent); - MESSAGE("The opposing Kyogre's Primal Reversion! It reverted to its primal form!"); + MESSAGE("The opposing Kyogre's Primal Reversion! It reverted to its primal state!"); } else { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, opponent); - MESSAGE("The opposing Kyogre's Primal Reversion! It reverted to its primal form!"); + MESSAGE("The opposing Kyogre's Primal Reversion! It reverted to its primal state!"); } } } THEN { @@ -76,13 +76,13 @@ DOUBLE_BATTLE_TEST("Primal reversion's order is determined by Speed - opponent f TURN { MOVE(opponentLeft, MOVE_CELEBRATE); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, opponentRight); - MESSAGE("The opposing Kyogre's Primal Reversion! It reverted to its primal form!"); + MESSAGE("The opposing Kyogre's Primal Reversion! It reverted to its primal state!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, playerRight); - MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("Groudon's Primal Reversion! It reverted to its primal state!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, opponentLeft); - MESSAGE("The opposing Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("The opposing Groudon's Primal Reversion! It reverted to its primal state!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, playerLeft); - MESSAGE("Kyogre's Primal Reversion! It reverted to its primal form!"); + MESSAGE("Kyogre's Primal Reversion! It reverted to its primal state!"); } THEN { EXPECT_EQ(playerLeft->species, SPECIES_KYOGRE_PRIMAL); EXPECT_EQ(opponentLeft->species, SPECIES_GROUDON_PRIMAL); @@ -102,13 +102,13 @@ DOUBLE_BATTLE_TEST("Primal reversion's order is determined by Speed - player fas TURN { MOVE(opponentLeft, MOVE_CELEBRATE); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, playerRight); - MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("Groudon's Primal Reversion! It reverted to its primal state!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, playerLeft); - MESSAGE("Kyogre's Primal Reversion! It reverted to its primal form!"); + MESSAGE("Kyogre's Primal Reversion! It reverted to its primal state!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, opponentLeft); - MESSAGE("The opposing Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("The opposing Groudon's Primal Reversion! It reverted to its primal state!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, opponentRight); - MESSAGE("The opposing Kyogre's Primal Reversion! It reverted to its primal form!"); + MESSAGE("The opposing Kyogre's Primal Reversion! It reverted to its primal state!"); } THEN { EXPECT_EQ(playerLeft->species, SPECIES_KYOGRE_PRIMAL); EXPECT_EQ(opponentLeft->species, SPECIES_GROUDON_PRIMAL); @@ -130,7 +130,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a mon is sent out after a mon } SCENE { MESSAGE("Wobbuffet fainted!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player); - MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("Groudon's Primal Reversion! It reverted to its primal state!"); } THEN { EXPECT_EQ(player->species, SPECIES_GROUDON_PRIMAL); } @@ -147,7 +147,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a mon is switched in") TURN { MOVE(opponent, MOVE_CELEBRATE); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player); - MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("Groudon's Primal Reversion! It reverted to its primal state!"); } THEN { EXPECT_EQ(player->species, SPECIES_GROUDON_PRIMAL); } @@ -168,7 +168,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a switch-in caused by Eject B MESSAGE("Wobbuffet is switched out with the Eject Button!"); SEND_IN_MESSAGE("Groudon"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player); - MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("Groudon's Primal Reversion! It reverted to its primal state!"); } THEN { EXPECT_EQ(player->species, SPECIES_GROUDON_PRIMAL); } @@ -188,7 +188,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a switch-in caused by Red Car MESSAGE("The opposing Wobbuffet held up its Red Card against Wobbuffet!"); MESSAGE("Groudon was dragged out!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player); - MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("Groudon's Primal Reversion! It reverted to its primal state!"); } THEN { EXPECT_EQ(player->species, SPECIES_GROUDON_PRIMAL); } @@ -207,9 +207,9 @@ SINGLE_BATTLE_TEST("Primal reversion happens after the entry hazards damage") } SCENE { SEND_IN_MESSAGE("Groudon"); HP_BAR(player); - MESSAGE("Groudon is hurt by spikes!"); + MESSAGE("Groudon was hurt by the spikes!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player); - MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("Groudon's Primal Reversion! It reverted to its primal state!"); } THEN { EXPECT_EQ(player->species, SPECIES_GROUDON_PRIMAL); } @@ -228,7 +228,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens immediately if it was brought in by ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player); HP_BAR(opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player); - MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("Groudon's Primal Reversion! It reverted to its primal state!"); MESSAGE("2 sent out Wynaut!"); } THEN { EXPECT_EQ(player->species, SPECIES_GROUDON_PRIMAL); diff --git a/test/battle/form_change/ultra_burst.c b/test/battle/form_change/ultra_burst.c index c4b800c55c80..8eb21866f334 100644 --- a/test/battle/form_change/ultra_burst.c +++ b/test/battle/form_change/ultra_burst.c @@ -27,7 +27,7 @@ DOUBLE_BATTLE_TEST("Ultra Burst's order is determined by Speed - opponent faster } WHEN { TURN { MOVE(opponentLeft, MOVE_CELEBRATE, gimmick: GIMMICK_ULTRA_BURST); MOVE(playerLeft, MOVE_CELEBRATE, gimmick: GIMMICK_ULTRA_BURST); } } SCENE { - MESSAGE("Bright light is about to burst out of Foe Necrozma!"); + MESSAGE("Bright light is about to burst out of the opposing Necrozma!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, opponentLeft); MESSAGE("The opposing Necrozma regained its true power through Ultra Burst!"); MESSAGE("Bright light is about to burst out of Necrozma!"); @@ -49,7 +49,7 @@ DOUBLE_BATTLE_TEST("Ultra Burst's order is determined by Speed - player faster") MESSAGE("Bright light is about to burst out of Necrozma!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, playerLeft); MESSAGE("Necrozma regained its true power through Ultra Burst!"); - MESSAGE("Bright light is about to burst out of Foe Necrozma!"); + MESSAGE("Bright light is about to burst out of the opposing Necrozma!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, opponentLeft); MESSAGE("The opposing Necrozma regained its true power through Ultra Burst!"); } diff --git a/test/battle/gimmick/dynamax.c b/test/battle/gimmick/dynamax.c index 449f188b4dd2..f6f9127f9196 100644 --- a/test/battle/gimmick/dynamax.c +++ b/test/battle/gimmick/dynamax.c @@ -784,7 +784,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Rockfall sets up a sandstorm") TURN { MOVE(player, MOVE_ROCK_THROW, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { MESSAGE("Wobbuffet used Max Rockfall!"); - MESSAGE("A sandstorm brewed!"); + MESSAGE("A sandstorm kicked up!"); MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SANDSTORM_CONTINUES); } @@ -873,7 +873,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Stonesurge sets up Stealth Rocks") MESSAGE("Drednaw used G-Max Stonesurge!"); MESSAGE("Pointed stones float in the air around the opposing team!"); // turn 2 - MESSAGE("Pointed stones dug into Foe Wobbuffet!"); + MESSAGE("Pointed stones dug into the opposing Wobbuffet!"); } } @@ -896,7 +896,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Steelsurge sets up sharp steel") MESSAGE("Sharp-pointed steel floats around the opposing team!"); // turn 2 MESSAGE("2 sent out Hatterene!"); - MESSAGE("Sharp steel bit into Foe Hatterene!"); + MESSAGE("Sharp steel bit into the opposing Hatterene!"); // turn 4 MESSAGE("The opposing Hatterene used Defog!"); MESSAGE("The sharp steel disappeared from the ground around the opposing team!"); @@ -1082,7 +1082,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Gold Rush confuses both opponents and genera MESSAGE("The opposing Wobbuffet became confused!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponentRight); MESSAGE("The opposing Wobbuffet became confused!"); - MESSAGE("Coins scattered everywhere!"); + MESSAGE("Coins were scattered everywhere!"); } } @@ -1177,8 +1177,8 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Meltdown torments both opponents for 3 turns MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("The opposing Wynaut used Celebrate!"); // end of turn 3 - MESSAGE("The opposing Wobbuffet is tormented no more!"); - MESSAGE("The opposing Wynaut is tormented no more!"); + MESSAGE("The opposing Wobbuffet is no longer tormented!"); + MESSAGE("The opposing Wynaut is no longer tormented!"); } } @@ -1248,8 +1248,8 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Replenish recycles allies' berries 50\% of t // turn 1 MESSAGE("Using Apicot Berry, the Sp. Def of Snorlax rose!"); MESSAGE("Using Apicot Berry, the Sp. Def of Munchlax rose!"); - MESSAGE("Using Apicot Berry, the Sp. Def of Foe Wobbuffet rose!"); - MESSAGE("Using Apicot Berry, the Sp. Def of Foe Wobbuffet rose!"); + MESSAGE("Using Apicot Berry, the Sp. Def of the opposing Wobbuffet rose!"); + MESSAGE("Using Apicot Berry, the Sp. Def of the opposing Wobbuffet rose!"); // turn 2 MESSAGE("Snorlax used G-Max Replenish!"); MESSAGE("Snorlax found one Apicot Berry!"); @@ -1273,7 +1273,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Snooze makes only the target drowsy") } SCENE { // turn 1 MESSAGE("Grimmsnarl used G-Max Snooze!"); - MESSAGE("Grimmsnarl made Foe Blissey drowsy!"); + MESSAGE("Grimmsnarl made the opposing Blissey drowsy!"); // turn 2 ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, opponentLeft); MESSAGE("The opposing Blissey fell asleep!"); @@ -1397,7 +1397,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Depletion takes away 2 PP from the target's } SCENE { MESSAGE("The opposing Sableye used Celebrate!"); MESSAGE("Duraludon used G-Max Depletion!"); - MESSAGE("Reduced Foe Sableye's Celebrate by 2!"); + MESSAGE("Reduced the opposing Sableye's Celebrate by 2!"); } } diff --git a/test/battle/gimmick/terastal.c b/test/battle/gimmick/terastal.c index 435d5273ec22..0b8a3edc9db5 100644 --- a/test/battle/gimmick/terastal.c +++ b/test/battle/gimmick/terastal.c @@ -256,7 +256,7 @@ SINGLE_BATTLE_TEST("(TERA) Terastallization changes the effect of Curse") } SCENE { MESSAGE("Wobbuffet used Curse!"); HP_BAR(player); - MESSAGE("Wobbuffet cut its own HP and laid a CURSE on Foe Wobbuffet!"); + MESSAGE("Wobbuffet cut its own HP and laid a CURSE on the opposing Wobbuffet!"); NOT { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } } } @@ -350,7 +350,7 @@ SINGLE_BATTLE_TEST("(TERA) Reflect Type copies a Terastallized Pokemon's Tera Ty ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, opponent); // turn 3 MESSAGE("Wobbuffet used Tackle!"); - MESSAGE("It doesn't affect Foe Wobbuffet…"); + MESSAGE("It doesn't affect the opposing Wobbuffet…"); NOT { HP_BAR(opponent); } } } @@ -383,7 +383,7 @@ SINGLE_BATTLE_TEST("(TERA) Revelation Dance uses a Terastallized Pokemon's Tera TURN { MOVE(player, MOVE_REVELATION_DANCE, gimmick: GIMMICK_TERA); } } SCENE { MESSAGE("Oricorio used Revelation Dance!"); - MESSAGE("It doesn't affect Foe Gengar…"); + MESSAGE("It doesn't affect the opposing Gengar…"); NOT { HP_BAR(opponent); } } } @@ -489,7 +489,7 @@ SINGLE_BATTLE_TEST("(TERA) Reflect Type copies a Stellar-type Pokemon's base typ ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, opponent); // turn 3 MESSAGE("Banette used Tackle!"); - MESSAGE("It doesn't affect Foe Wobbuffet…"); + MESSAGE("It doesn't affect the opposing Wobbuffet…"); NOT { HP_BAR(opponent); } } } @@ -504,7 +504,7 @@ SINGLE_BATTLE_TEST("(TERA) Revelation Dance uses a Stellar-type Pokemon's base t TURN { MOVE(player, MOVE_REVELATION_DANCE, gimmick: GIMMICK_TERA); } } SCENE { MESSAGE("Oricorio used Revelation Dance!"); - MESSAGE("It doesn't affect Foe Gumshoos…"); + MESSAGE("It doesn't affect the opposing Gumshoos…"); NOT { HP_BAR(opponent); } } } diff --git a/test/battle/gimmick/zmove.c b/test/battle/gimmick/zmove.c index 51c65161061d..46cd6d04348b 100644 --- a/test/battle/gimmick/zmove.c +++ b/test/battle/gimmick/zmove.c @@ -543,7 +543,7 @@ SINGLE_BATTLE_TEST("(Z-MOVE) Splintered Stormshards removes terrain") } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLINTERED_STORMSHARDS, player); - MESSAGE("The weirdness disappeared from the battlefield."); + MESSAGE("The weirdness disappeared from the battlefield!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); HP_BAR(opponent); } diff --git a/test/battle/hold_effect/covert_cloak.c b/test/battle/hold_effect/covert_cloak.c index b7ee49dcfacd..7049e79b8e2a 100644 --- a/test/battle/hold_effect/covert_cloak.c +++ b/test/battle/hold_effect/covert_cloak.c @@ -36,7 +36,7 @@ SINGLE_BATTLE_TEST("Covert Cloak blocks secondary effects") MESSAGE("The opposing Wobbuffet is paralyzed! It may be unable to move!"); MESSAGE("The opposing Wobbuffet was burned!"); MESSAGE("The opposing Wobbuffet was poisoned!"); - MESSAGE("The opposing Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); MESSAGE("The opposing Wobbuffet was prevented from healing!"); } @@ -77,7 +77,7 @@ SINGLE_BATTLE_TEST("Covert Cloak does not block primary effects") MESSAGE("Neither Pokémon can run away!"); break; case MOVE_PAY_DAY: - MESSAGE("Coins scattered everywhere!"); + MESSAGE("Coins were scattered everywhere!"); break; } } THEN { // Can't find good way to test trapping diff --git a/test/battle/hold_effect/custap_berry.c b/test/battle/hold_effect/custap_berry.c index 469f3cf52797..6e7b210e8db7 100644 --- a/test/battle/hold_effect/custap_berry.c +++ b/test/battle/hold_effect/custap_berry.c @@ -15,7 +15,7 @@ SINGLE_BATTLE_TEST("Custap Berry allows the holder to move first in its priority TURN { MOVE(player, MOVE_TACKLE); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet can act faster, thanks to Custap Berry!"); + MESSAGE("Wobbuffet can act faster than normal, thanks to its Custap Berry!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); } @@ -30,7 +30,7 @@ SINGLE_BATTLE_TEST("Custap Berry allows the holder to move first in its priority TURN { MOVE(player, MOVE_TACKLE); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Bellsprout can act faster, thanks to Custap Berry!"); + MESSAGE("Bellsprout can act faster than normal, thanks to its Custap Berry!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); } @@ -46,6 +46,6 @@ SINGLE_BATTLE_TEST("Custap Berry activates even if the opposing mon switches out TURN { SWITCH(opponent, 1); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Regirock can act faster, thanks to Custap Berry!"); + MESSAGE("Regirock can act faster than normal, thanks to its Custap Berry!"); } } diff --git a/test/battle/hold_effect/eject_button.c b/test/battle/hold_effect/eject_button.c index bc13ada72c50..949e2a5f647e 100644 --- a/test/battle/hold_effect/eject_button.c +++ b/test/battle/hold_effect/eject_button.c @@ -63,7 +63,7 @@ SINGLE_BATTLE_TEST("Eject Button will not activate under Substitute") ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, opponent); MESSAGE("The opposing Raichu made a SUBSTITUTE!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); - MESSAGE("The SUBSTITUTE took damage for Foe Raichu!"); + MESSAGE("The SUBSTITUTE took damage for the opposing Raichu!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); MESSAGE("The opposing Raichu is switched out with the Eject Button!"); diff --git a/test/battle/hold_effect/gems.c b/test/battle/hold_effect/gems.c index ffba57651dd1..36a843bbfa09 100644 --- a/test/battle/hold_effect/gems.c +++ b/test/battle/hold_effect/gems.c @@ -17,11 +17,11 @@ SINGLE_BATTLE_TEST("Gem is consumed when it corresponds to the type of a move") } SCENE { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Fire Gem strengthened Wobbuffet's power!"); + MESSAGE("The Fire Gem strengthened Wobbuffet's power!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Normal Gem strengthened Wobbuffet's power!"); + MESSAGE("The Normal Gem strengthened Wobbuffet's power!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); } } @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Gem boost is only applied once") TURN { MOVE(player, MOVE_TACKLE); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Normal Gem strengthened Wobbuffet's power!"); + MESSAGE("The Normal Gem strengthened Wobbuffet's power!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); HP_BAR(opponent, captureDamage: &boostedHit); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); @@ -83,7 +83,7 @@ SINGLE_BATTLE_TEST("Gem is consumed if the move type is changed") } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Normal Gem strengthened Delcatty's power!"); + MESSAGE("The Normal Gem strengthened Delcatty's power!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FEINT_ATTACK, player); } } diff --git a/test/battle/hold_effect/jaboca_berry.c b/test/battle/hold_effect/jaboca_berry.c index 0b9975fc2a17..7b8aa6aa34fd 100644 --- a/test/battle/hold_effect/jaboca_berry.c +++ b/test/battle/hold_effect/jaboca_berry.c @@ -27,11 +27,11 @@ SINGLE_BATTLE_TEST("Jaboca Berry causes the attacker to lose 1/8 of its max HP i if (move == MOVE_TACKLE) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); HP_BAR(player, captureDamage: &damage); - MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Jaboca Berry!"); + MESSAGE("Wobbuffet was hurt by the opposing Wobbuffet's Jaboca Berry!"); } else { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Jaboca Berry!"); + MESSAGE("Wobbuffet was hurt by the opposing Wobbuffet's Jaboca Berry!"); } } } THEN { @@ -54,7 +54,7 @@ SINGLE_BATTLE_TEST("Jaboca Berry tirggers before Bug Bite can steal it") HP_BAR(opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); HP_BAR(player); - MESSAGE("Wyanut was hurt by Foe Wobbuffet's Jaboca Berry!"); - NOT MESSAGE("Wynaut stole and ate Foe Wobbuffet's Jaboca Berry!"); + MESSAGE("Wyanut was hurt by the opposing Wobbuffet's Jaboca Berry!"); + NOT MESSAGE("Wynaut stole and ate the opposing Wobbuffet's Jaboca Berry!"); } } diff --git a/test/battle/hold_effect/kee_berry.c b/test/battle/hold_effect/kee_berry.c index ace35a824c33..2375e65c2fb6 100644 --- a/test/battle/hold_effect/kee_berry.c +++ b/test/battle/hold_effect/kee_berry.c @@ -25,11 +25,11 @@ SINGLE_BATTLE_TEST("Kee Berry raises the holder's Defense by one stage when hit HP_BAR(opponent); if (move == MOVE_TACKLE) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Using Kee Berry, the Defense of Foe Wobbuffet rose!"); + MESSAGE("Using Kee Berry, the Defense of the opposing Wobbuffet rose!"); } else { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Using Kee Berry, the Defense of Foe Wobbuffet rose!"); + MESSAGE("Using Kee Berry, the Defense of the opposing Wobbuffet rose!"); } } } THEN { @@ -49,7 +49,7 @@ SINGLE_BATTLE_TEST("Kee Berry raises the holder's Defense by two stages with Rip ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); HP_BAR(opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Using Kee Berry, the Defense of Foe Applin sharply rose!"); + MESSAGE("Using Kee Berry, the Defense of the opposing Applin sharply rose!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 2); } diff --git a/test/battle/hold_effect/maranga_berry.c b/test/battle/hold_effect/maranga_berry.c index a7b90bd9b3e5..6d12f257a76f 100644 --- a/test/battle/hold_effect/maranga_berry.c +++ b/test/battle/hold_effect/maranga_berry.c @@ -23,12 +23,12 @@ SINGLE_BATTLE_TEST("Maranga Berry raises the holder's Sp. Def by one stage when HP_BAR(opponent); if (move == MOVE_SWIFT) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Using Maranga Berry, the Sp. Def of Foe Wobbuffet rose!"); + MESSAGE("Using Maranga Berry, the Sp. Def of the opposing Wobbuffet rose!"); } else { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Using Maranga Berry, the Sp. Def of Foe Wobbuffet rose!"); + MESSAGE("Using Maranga Berry, the Sp. Def of the opposing Wobbuffet rose!"); } } } THEN { @@ -49,7 +49,7 @@ SINGLE_BATTLE_TEST("Maranga Berry raises the holder's Sp. Def by two stages with ANIMATION(ANIM_TYPE_MOVE, MOVE_SWIFT, player); HP_BAR(opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Using Maranga Berry, the Sp. Def of Foe Applin sharply rose!"); + MESSAGE("Using Maranga Berry, the Sp. Def of the opposing Applin sharply rose!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE + 2); } diff --git a/test/battle/hold_effect/protective_pads.c b/test/battle/hold_effect/protective_pads.c index 914118d2d8b8..cfe331f4e8f4 100644 --- a/test/battle/hold_effect/protective_pads.c +++ b/test/battle/hold_effect/protective_pads.c @@ -69,7 +69,7 @@ SINGLE_BATTLE_TEST("Protective Pads protects from Rocly Helmet Damage") HP_BAR(opponent); NONE_OF { HP_BAR(player); - MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Rocky Helmet!"); + MESSAGE("Wobbuffet was hurt by the opposing Wobbuffet's Rocky Helmet!"); } } } diff --git a/test/battle/hold_effect/red_card.c b/test/battle/hold_effect/red_card.c index c4f1eaa26f00..00cf72c8f2b4 100644 --- a/test/battle/hold_effect/red_card.c +++ b/test/battle/hold_effect/red_card.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Red Card switches the attacker with a random non-fainted rep } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); MESSAGE("The opposing Bulbasaur was dragged out!"); } THEN { EXPECT(player->item == ITEM_NONE); @@ -43,7 +43,7 @@ DOUBLE_BATTLE_TEST("Red Card switches the target with a random non-battler, non- } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); MESSAGE("The opposing Bulbasaur was dragged out!"); } THEN { EXPECT(playerLeft->item == ITEM_NONE); @@ -63,7 +63,7 @@ SINGLE_BATTLE_TEST("Red Card does not activate if holder faints") ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); } } THEN { EXPECT(player->item == ITEM_NONE); @@ -82,7 +82,7 @@ SINGLE_BATTLE_TEST("Red Card does not activate if target is behind a Substitute" ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); } } THEN { EXPECT(player->item == ITEM_RED_CARD); // Not activated, so still has the item. @@ -102,7 +102,7 @@ SINGLE_BATTLE_TEST("Red Card activates after the last hit of a multi-hit move") HP_BAR(player); HP_BAR(player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); } THEN { EXPECT(player->item == ITEM_NONE); } @@ -119,7 +119,7 @@ SINGLE_BATTLE_TEST("Red Card does not activate if no replacements") ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); } } THEN { EXPECT(player->item == ITEM_RED_CARD); // Not activated, so still has the item. @@ -138,7 +138,7 @@ SINGLE_BATTLE_TEST("Red Card does not activate if replacements fainted") ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); } } THEN { EXPECT(player->item == ITEM_RED_CARD); // Not activated, so still has the item. @@ -157,7 +157,7 @@ SINGLE_BATTLE_TEST("Red Card does not activate if knocked off") ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, opponent); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); } } THEN { EXPECT(player->item == ITEM_NONE); @@ -182,11 +182,11 @@ SINGLE_BATTLE_TEST("Red Card does not activate if stolen by a move") ANIMATION(ANIM_TYPE_MOVE, MOVE_THIEF, opponent); if (activate) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); } else { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); } } } THEN { @@ -211,11 +211,11 @@ SINGLE_BATTLE_TEST("Red Card does not activate if stolen by Magician") ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); if (activate) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Fennekin!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Fennekin!"); } else { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Fennekin!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Fennekin!"); } } } THEN { @@ -240,13 +240,13 @@ DOUBLE_BATTLE_TEST("Red Card activates for only the fastest target") // Fastest target's Red Card activates. ANIMATION(ANIM_TYPE_MOVE, MOVE_ROCK_SLIDE, opponentLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); MESSAGE("The opposing Unown was dragged out!"); // Slower target's Red Card still able to activate on other battler. ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight); - MESSAGE("Wynaut held up its Red Card against Foe Wynaut!"); + MESSAGE("Wynaut held up its Red Card against the opposing Wynaut!"); MESSAGE("The opposing Wobbuffet was dragged out!"); } THEN { EXPECT(playerLeft->item == ITEM_NONE); @@ -271,14 +271,14 @@ DOUBLE_BATTLE_TEST("Red Card activates but fails if the attacker is rooted") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); MESSAGE("The opposing Wobbuffet anchored itself with its roots!"); // Red Card already consumed so cannot activate. ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight); - MESSAGE("Wynaut held up its Red Card against Foe Wynaut!"); + MESSAGE("Wynaut held up its Red Card against the opposing Wynaut!"); } } } @@ -299,14 +299,14 @@ DOUBLE_BATTLE_TEST("Red Card activates but fails if the attacker has Suction Cup } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); - MESSAGE("Wobbuffet held up its Red Card against Foe Octillery!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Octillery!"); MESSAGE("The opposing Octillery anchors itself with Suction Cups!"); // Red Card already consumed so cannot activate. ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight); - MESSAGE("Wynaut held up its Red Card against Foe Wynaut!"); + MESSAGE("Wynaut held up its Red Card against the opposing Wynaut!"); } } } @@ -328,11 +328,11 @@ SINGLE_BATTLE_TEST("Red Card does not activate if switched by Dragon Tail") ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, opponent); if (activate) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); } else { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); } } } @@ -349,7 +349,7 @@ SINGLE_BATTLE_TEST("Red Card activates and overrides U-turn") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); } } @@ -370,11 +370,11 @@ SINGLE_BATTLE_TEST("Red Card does not activate if attacker's Sheer Force applied ANIMATION(ANIM_TYPE_MOVE, move, opponent); if (activate) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Tauros!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Tauros!"); } else { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Tauros!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Tauros!"); } } } @@ -392,7 +392,7 @@ SINGLE_BATTLE_TEST("Red Card activates before Emergency Exit") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Golisopod held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Golisopod held up its Red Card against the opposing Wobbuffet!"); ABILITY_POPUP(player, ABILITY_EMERGENCY_EXIT); SEND_IN_MESSAGE("Wimpod"); } @@ -463,7 +463,7 @@ SINGLE_BATTLE_TEST("Red Card does not activate if holder is switched in mid-turn MESSAGE("Wobbuffet is switched out with the Eject Button!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Wobbuffet held up its Red Card against the opposing Wobbuffet!"); } } } diff --git a/test/battle/hold_effect/rowap_berry.c b/test/battle/hold_effect/rowap_berry.c index 925caf2179a9..5dc85492c31a 100644 --- a/test/battle/hold_effect/rowap_berry.c +++ b/test/battle/hold_effect/rowap_berry.c @@ -27,11 +27,11 @@ SINGLE_BATTLE_TEST("Rowap Berry causes the attacker to lose 1/8 of its max HP if if (move == MOVE_SWIFT) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); HP_BAR(player, captureDamage: &damage); - MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Rowap Berry!"); + MESSAGE("Wobbuffet was hurt by the opposing Wobbuffet's Rowap Berry!"); } else { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Rowap Berry!"); + MESSAGE("Wobbuffet was hurt by the opposing Wobbuffet's Rowap Berry!"); } } } THEN { @@ -53,7 +53,7 @@ SINGLE_BATTLE_TEST("Rowap Berry is not triggered by a physical move") HP_BAR(opponent); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Rowap Berry!"); + MESSAGE("Wobbuffet was hurt by the opposing Wobbuffet's Rowap Berry!"); } } } diff --git a/test/battle/item_effect/heal_and_cure_status.c b/test/battle/item_effect/heal_and_cure_status.c index e581c7655977..db15fbde8400 100644 --- a/test/battle/item_effect/heal_and_cure_status.c +++ b/test/battle/item_effect/heal_and_cure_status.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Full Restore restores a battler's HP and cures any primary s } WHEN { TURN { USE_ITEM(player, ITEM_FULL_RESTORE, partyIndex: 0); } } SCENE { - MESSAGE("Wobbuffet had its HP restored!"); + MESSAGE("Wobbuffet had its HP restored."); if (status != STATUS1_NONE) { MESSAGE("Wobbuffet had its status healed!"); // The message is not printed if status wasn't healed. } @@ -50,7 +50,7 @@ SINGLE_BATTLE_TEST("Full Restore restores a party members HP and cures any prima TURN { USE_ITEM(player, ITEM_FULL_RESTORE, partyIndex: 1); } TURN { SWITCH(player, 1); } } SCENE { - MESSAGE("Wynaut had its HP restored!"); + MESSAGE("Wynaut had its HP restored."); if (status != STATUS1_NONE) { MESSAGE("Wynaut had its status healed!"); // The message is not printed if status wasn't healed. } @@ -76,7 +76,7 @@ SINGLE_BATTLE_TEST("Full Restore heals a battler from any primary status") } WHEN { TURN { USE_ITEM(player, ITEM_FULL_RESTORE, partyIndex: 0); } } SCENE { - NOT MESSAGE("Wobbuffet had its HP restored!"); // The message is not printed if mon has max HP. + NOT MESSAGE("Wobbuffet had its HP restored."); // The message is not printed if mon has max HP. MESSAGE("Wobbuffet had its status healed!"); } THEN { EXPECT_EQ(player->status1, STATUS1_NONE); @@ -100,7 +100,7 @@ SINGLE_BATTLE_TEST("Full Restore heals a party member from any primary status") TURN { USE_ITEM(player, ITEM_FULL_RESTORE, partyIndex: 1); } TURN { SWITCH(player, 1); } } SCENE { - NOT MESSAGE("Wynaut had its HP restored!"); // The message is not printed if mon has max HP. + NOT MESSAGE("Wynaut had its HP restored."); // The message is not printed if mon has max HP. MESSAGE("Wynaut had its status healed!"); } THEN { EXPECT_EQ(player->species, SPECIES_WYNAUT); @@ -118,7 +118,7 @@ SINGLE_BATTLE_TEST("Full Restore restores a battler's HP and cures confusion") TURN{ USE_ITEM(player, ITEM_FULL_RESTORE, partyIndex: 0); } TURN{ MOVE(player, MOVE_TACKLE); } } SCENE { - MESSAGE("Wobbuffet had its HP restored!"); + MESSAGE("Wobbuffet had its HP restored."); NONE_OF { MESSAGE("Wobbuffet is confused!"); } } THEN { EXPECT_EQ(player->hp, player->maxHP); @@ -136,7 +136,7 @@ SINGLE_BATTLE_TEST("Full Restore resets Toxic Counter") TURN { USE_ITEM(player, ITEM_FULL_RESTORE, partyIndex: 0); } } SCENE { MESSAGE("The opposing Wobbuffet used Toxic!"); - MESSAGE("Wobbuffet had its HP restored!"); + MESSAGE("Wobbuffet had its HP restored."); MESSAGE("Wobbuffet had its status healed!"); } THEN { EXPECT_EQ(player->status1, STATUS1_NONE); diff --git a/test/battle/item_effect/revive.c b/test/battle/item_effect/revive.c index e113b6ae3398..31d29cd599cd 100644 --- a/test/battle/item_effect/revive.c +++ b/test/battle/item_effect/revive.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Revive restores a fainted battler's HP to half") TURN { USE_ITEM(player, ITEM_REVIVE, partyIndex: 0); } TURN { SWITCH(player, 0); } } SCENE { - MESSAGE("Wynaut had its HP restored!"); + MESSAGE("Wynaut had its HP restored."); } THEN { EXPECT_EQ(player->hp, 100); } @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Max Revive restores a fainted battler's HP fully") TURN { USE_ITEM(player, ITEM_MAX_REVIVE, partyIndex: 0); } TURN { SWITCH(player, 0); } } SCENE { - MESSAGE("Wynaut had its HP restored!"); + MESSAGE("Wynaut had its HP restored."); } THEN { EXPECT_EQ(player->hp, 200); } @@ -49,7 +49,7 @@ SINGLE_BATTLE_TEST("Revival Herb restores a fainted battler's HP fully") TURN { USE_ITEM(player, ITEM_REVIVAL_HERB, partyIndex: 0); } TURN { SWITCH(player, 0); } } SCENE { - MESSAGE("Wynaut had its HP restored!"); + MESSAGE("Wynaut had its HP restored."); } THEN { EXPECT_EQ(player->hp, 200); } @@ -67,7 +67,7 @@ SINGLE_BATTLE_TEST("Max Honey restores a fainted battler's HP fully") TURN { USE_ITEM(player, ITEM_MAX_HONEY, partyIndex: 0); } TURN { SWITCH(player, 0); } } SCENE { - MESSAGE("Wynaut had its HP restored!"); + MESSAGE("Wynaut had its HP restored."); } THEN { EXPECT_EQ(player->hp, 200); } diff --git a/test/battle/move_effect/belly_drum.c b/test/battle/move_effect/belly_drum.c index 82abaf30c455..3a773d202c4b 100644 --- a/test/battle/move_effect/belly_drum.c +++ b/test/battle/move_effect/belly_drum.c @@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("Belly Drum maximizes the user's Attack stat", s16 damage) if (raiseAttack) { ANIMATION(ANIM_TYPE_MOVE, MOVE_BELLY_DRUM, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Wobbuffet cut its own HP and maximized ATTACK!"); + MESSAGE("Wobbuffet cut its own HP and maximized its Attack!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); HP_BAR(opponent, captureDamage: &results[i].damage); @@ -100,7 +100,7 @@ SINGLE_BATTLE_TEST("Belly Drum's HP cost doesn't trigger effects that trigger on TURN { MOVE(player, MOVE_BELLY_DRUM); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_BELLY_DRUM, player); - MESSAGE("Wobbuffet cut its own HP and maximized ATTACK!"); + MESSAGE("Wobbuffet cut its own HP and maximized its Attack!"); NOT MESSAGE("Wobbuffet's Air Balloon popped!"); } } diff --git a/test/battle/move_effect/corrosive_gas.c b/test/battle/move_effect/corrosive_gas.c index c5f8bf392ddb..9b67fbc5f42c 100644 --- a/test/battle/move_effect/corrosive_gas.c +++ b/test/battle/move_effect/corrosive_gas.c @@ -22,10 +22,10 @@ SINGLE_BATTLE_TEST("Corrosive Gas destroys the target's item or fails if the tar MESSAGE("Wobbuffet used Corrosive Gas!"); if (item == ITEM_POTION) { ANIMATION(ANIM_TYPE_MOVE, MOVE_CORROSIVE_GAS, player); - MESSAGE("Wobbuffet corroded Foe Wobbuffet's Potion!"); + MESSAGE("Wobbuffet corroded the opposing Wobbuffet's Potion!"); } else { - MESSAGE("It had no effect on Foe Wobbuffet!"); + MESSAGE("It had no effect on the opposing Wobbuffet!"); } } THEN { EXPECT_EQ(opponent->item, ITEM_NONE); @@ -42,7 +42,7 @@ SINGLE_BATTLE_TEST("Corrosive Gas doesn't destroy the item of a Pokemon with the } SCENE { MESSAGE("Wobbuffet used Corrosive Gas!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CORROSIVE_GAS, player); - NOT MESSAGE("Wobbuffet corroded Foe Wobbuffet's Potion!"); + NOT MESSAGE("Wobbuffet corroded the opposing Wobbuffet's Potion!"); ABILITY_POPUP(opponent, ABILITY_STICKY_HOLD); MESSAGE("The opposing Muk's Sticky Hold made Corrosive Gas ineffective!"); } THEN { @@ -61,7 +61,7 @@ SINGLE_BATTLE_TEST("Items lost to Corrosive Gas cannot be restored by Recycle") } SCENE { MESSAGE("Wobbuffet used Corrosive Gas!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CORROSIVE_GAS, player); - MESSAGE("Wobbuffet corroded Foe Wobbuffet's Oran Berry!"); + MESSAGE("Wobbuffet corroded the opposing Wobbuffet's Oran Berry!"); MESSAGE("The opposing Wobbuffet used Recycle!"); MESSAGE("But it failed!"); } THEN { @@ -100,14 +100,14 @@ DOUBLE_BATTLE_TEST("Corrosive Gas destroys foes and ally's items if they have on MESSAGE("It had no effect on Wobbuffet!"); } if (itemOpponentLeft == ITEM_ORAN_BERRY) { - MESSAGE("Wynaut corroded Foe Abra's Oran Berry!"); + MESSAGE("Wynaut corroded the opposing Abra's Oran Berry!"); } else { - MESSAGE("It had no effect on Foe Abra!"); + MESSAGE("It had no effect on the opposing Abra!"); } if (itemOpponentRight == ITEM_CHESTO_BERRY) { - MESSAGE("Wynaut corroded Foe Kadabra's Chesto Berry!"); + MESSAGE("Wynaut corroded the opposing Kadabra's Chesto Berry!"); } else { - MESSAGE("It had no effect on Foe Kadabra!"); + MESSAGE("It had no effect on the opposing Kadabra!"); } } THEN { diff --git a/test/battle/move_effect/court_change.c b/test/battle/move_effect/court_change.c index 64413bcdd90d..4ec7b58f6735 100644 --- a/test/battle/move_effect/court_change.c +++ b/test/battle/move_effect/court_change.c @@ -29,14 +29,14 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the opponent") MESSAGE("Wynaut swapped the battle effects affecting each side!"); SEND_IN_MESSAGE("Wynaut"); NONE_OF { - MESSAGE("Wynaut is hurt by spikes!"); + MESSAGE("Wynaut was hurt by the spikes!"); MESSAGE("Pointed stones dug into Wynaut!"); MESSAGE("Wynaut was poisoned!"); MESSAGE("Wynaut was caught in a Sticky Web!"); } MESSAGE("2 sent out Wobbuffet!"); - MESSAGE("The opposing Wobbuffet is hurt by spikes!"); - MESSAGE("Pointed stones dug into Foe Wobbuffet!"); + MESSAGE("The opposing Wobbuffet was hurt by the spikes!"); + MESSAGE("Pointed stones dug into the opposing Wobbuffet!"); MESSAGE("The opposing Wobbuffet was poisoned!"); MESSAGE("The opposing Wobbuffet was caught in a Sticky Web!"); } @@ -64,14 +64,14 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the player") MESSAGE("The opposing Wynaut used Court Change!"); MESSAGE("The opposing Wynaut swapped the battle effects affecting each side!"); SEND_IN_MESSAGE("Wobbuffet"); - MESSAGE("Wobbuffet is hurt by spikes!"); + MESSAGE("Wobbuffet was hurt by the spikes!"); MESSAGE("Pointed stones dug into Wobbuffet!"); MESSAGE("Wobbuffet was poisoned!"); MESSAGE("Wobbuffet was caught in a Sticky Web!"); MESSAGE("2 sent out Wynaut!"); NONE_OF { - MESSAGE("The opposing Wynaut is hurt by spikes!"); - MESSAGE("Pointed stones dug into Foe Wynaut!"); + MESSAGE("The opposing Wynaut was hurt by the spikes!"); + MESSAGE("Pointed stones dug into the opposing Wynaut!"); MESSAGE("The opposing Wynaut was poisoned!"); MESSAGE("The opposing Wynaut was caught in a Sticky Web!"); } diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c index abb0788e4479..d7fa358019b6 100644 --- a/test/battle/move_effect/defog.c +++ b/test/battle/move_effect/defog.c @@ -208,12 +208,12 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Spikes from player SEND_IN_MESSAGE("Wobbuffet"); if (move != MOVE_DEFOG || B_DEFOG_EFFECT_CLEARING <= GEN_5) { HP_BAR(player); - MESSAGE("Wobbuffet is hurt by spikes!"); + MESSAGE("Wobbuffet was hurt by the spikes!"); } else { NONE_OF { HP_BAR(player); - MESSAGE("Wobbuffet is hurt by spikes!"); + MESSAGE("Wobbuffet was hurt by the spikes!"); } } } @@ -239,7 +239,7 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes terrain (Gen 8+)") MESSAGE("Wobbuffet's evasiveness fell!"); if (B_DEFOG_EFFECT_CLEARING >= GEN_8) { if (move == MOVE_PSYCHIC_TERRAIN) { - MESSAGE("The weirdness disappeared from the battlefield."); + MESSAGE("The weirdness disappeared from the battlefield!"); } else if (move == MOVE_ELECTRIC_TERRAIN) { MESSAGE("The electricity disappeared from the battlefield."); @@ -253,7 +253,7 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes terrain (Gen 8+)") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RESTORE_BG, player); } else { NONE_OF { - MESSAGE("The weirdness disappeared from the battlefield."); + MESSAGE("The weirdness disappeared from the battlefield!"); MESSAGE("The electricity disappeared from the battlefield."); MESSAGE("The mist disappeared from the battlefield."); MESSAGE("The grass disappeared from the battlefield."); diff --git a/test/battle/move_effect/doodle.c b/test/battle/move_effect/doodle.c index bf7e208646ba..e75678826249 100644 --- a/test/battle/move_effect/doodle.c +++ b/test/battle/move_effect/doodle.c @@ -17,8 +17,8 @@ DOUBLE_BATTLE_TEST("Doodle gives the target's ability to user and ally") TURN { MOVE(playerLeft, MOVE_DOODLE, target: opponentLeft); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DOODLE, playerLeft); - MESSAGE("Wynaut copied Foe Torchic's Blaze!"); - MESSAGE("Wynaut copied Foe Torchic's Blaze!"); + MESSAGE("Wynaut copied the opposing Torchic's Blaze!"); + MESSAGE("Wynaut copied the opposing Torchic's Blaze!"); } THEN { EXPECT(playerLeft->ability == ABILITY_BLAZE); EXPECT(playerRight->ability == ABILITY_BLAZE); @@ -37,8 +37,8 @@ DOUBLE_BATTLE_TEST("Doodle can't copy a banned ability") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DOODLE, playerLeft); NONE_OF { - MESSAGE("Wynaut copied Foe Great Tusk's Protosynthesis!"); - MESSAGE("Wynaut copied Foe Great Tusk's Protosynthesis!"); + MESSAGE("Wynaut copied the opposing Great Tusk's Protosynthesis!"); + MESSAGE("Wynaut copied the opposing Great Tusk's Protosynthesis!"); } } THEN { EXPECT(playerLeft->ability != ABILITY_PROTOSYNTHESIS); diff --git a/test/battle/move_effect/embargo.c b/test/battle/move_effect/embargo.c index 7a15b40e3178..fcd31581813f 100644 --- a/test/battle/move_effect/embargo.c +++ b/test/battle/move_effect/embargo.c @@ -244,7 +244,7 @@ SINGLE_BATTLE_TEST("Embargo doesn't block the effects of berries obtained throug // Turn 2 MESSAGE("Wobbuffet used Pluck!"); HP_BAR(opponent); - MESSAGE("Wobbuffet stole and ate Foe Wobbuffet's Oran Berry!"); + MESSAGE("Wobbuffet stole and ate the opposing Wobbuffet's Oran Berry!"); HP_BAR(player, damage: -hp); } } @@ -377,7 +377,7 @@ SINGLE_BATTLE_TEST("Embargo doesn't prevent Primal Reversion") ANIMATION(ANIM_TYPE_MOVE, MOVE_BATON_PASS, opponent); MESSAGE("2 sent out Groudon!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, opponent); - MESSAGE("The opposing Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("The opposing Groudon's Primal Reversion! It reverted to its primal state!"); ABILITY_POPUP(opponent); // Turn 3 MESSAGE("The opposing Groudon used Fling!"); diff --git a/test/battle/move_effect/explosion.c b/test/battle/move_effect/explosion.c index 7a72f9ff2c87..1a9f5067bf4f 100644 --- a/test/battle/move_effect/explosion.c +++ b/test/battle/move_effect/explosion.c @@ -62,7 +62,7 @@ SINGLE_BATTLE_TEST("Explosion causes the user to faint even if it has no effect" TURN { MOVE(player, MOVE_EXPLOSION); } } SCENE { HP_BAR(player, hp: 0); - MESSAGE("It doesn't affect Foe Gastly…"); + MESSAGE("It doesn't affect the opposing Gastly…"); NOT HP_BAR(opponent); MESSAGE("Wobbuffet fainted!"); } diff --git a/test/battle/move_effect/flame_burst.c b/test/battle/move_effect/flame_burst.c index d222325a7b69..7d2333b1149a 100644 --- a/test/battle/move_effect/flame_burst.c +++ b/test/battle/move_effect/flame_burst.c @@ -18,7 +18,7 @@ DOUBLE_BATTLE_TEST("Flame Burst Substitute") } WHEN { TURN { MOVE(opponentLeft, MOVE_SUBSTITUTE); MOVE(playerRight, MOVE_FLAME_BURST, target: opponentRight); } } SCENE { - MESSAGE("The bursting flames hit Foe Wynaut!"); - NOT MESSAGE("The SUBSTITUTE took damage for Foe Wynaut!"); + MESSAGE("The bursting flames hit the opposing Wynaut!"); + NOT MESSAGE("The SUBSTITUTE took damage for the opposing Wynaut!"); } } diff --git a/test/battle/move_effect/fling.c b/test/battle/move_effect/fling.c index 36700d50e877..bbc1d7c4c969 100644 --- a/test/battle/move_effect/fling.c +++ b/test/battle/move_effect/fling.c @@ -250,7 +250,7 @@ SINGLE_BATTLE_TEST("Fling applies special effects when throwing specific Items") case ITEM_RAZOR_FANG: case ITEM_KINGS_ROCK: { - MESSAGE("The opposing Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); } break; } @@ -319,7 +319,7 @@ SINGLE_BATTLE_TEST("Fling's secondary effects are blocked by Shield Dust") case ITEM_KINGS_ROCK: { NONE_OF { - MESSAGE("The opposing Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); } switch (item) { @@ -403,23 +403,23 @@ SINGLE_BATTLE_TEST("Fling - thrown berry's effect activates for the target even else if (statId != 0) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); if (statId == STAT_ATK) { - MESSAGE("Using Liechi Berry, the Attack of Foe Wobbuffet rose!"); + MESSAGE("Using Liechi Berry, the Attack of the opposing Wobbuffet rose!"); } else if (statId == STAT_DEF) { if (item == ITEM_GANLON_BERRY) { - MESSAGE("Using Ganlon Berry, the Defense of Foe Wobbuffet rose!"); + MESSAGE("Using Ganlon Berry, the Defense of the opposing Wobbuffet rose!"); } else { - MESSAGE("Using Kee Berry, the Defense of Foe Wobbuffet rose!"); + MESSAGE("Using Kee Berry, the Defense of the opposing Wobbuffet rose!"); } } else if (statId == STAT_SPDEF) { if (item == ITEM_APICOT_BERRY) { - MESSAGE("Using Apicot Berry, the Sp. Def of Foe Wobbuffet rose!"); + MESSAGE("Using Apicot Berry, the Sp. Def of the opposing Wobbuffet rose!"); } else { - MESSAGE("Using Maranga Berry, the Sp. Def of Foe Wobbuffet rose!"); + MESSAGE("Using Maranga Berry, the Sp. Def of the opposing Wobbuffet rose!"); } } else if (statId == STAT_SPEED) { - MESSAGE("Using Salac Berry, the Speed of Foe Wobbuffet rose!"); + MESSAGE("Using Salac Berry, the Speed of the opposing Wobbuffet rose!"); } else if (statId == STAT_SPATK) { - MESSAGE("Using Petaya Berry, the Sp. Atk of Foe Wobbuffet rose!"); + MESSAGE("Using Petaya Berry, the Sp. Atk of the opposing Wobbuffet rose!"); } } } THEN { diff --git a/test/battle/move_effect/future_sight.c b/test/battle/move_effect/future_sight.c index 6542d8d089cf..e25fc750123e 100644 --- a/test/battle/move_effect/future_sight.c +++ b/test/battle/move_effect/future_sight.c @@ -108,7 +108,7 @@ SINGLE_BATTLE_TEST("Future Sight is affected by type effectiveness") HP_BAR(opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player); MESSAGE("The opposing Houndoom took the Future Sight attack!"); - MESSAGE("It doesn't affect Foe Houndoom…"); + MESSAGE("It doesn't affect the opposing Houndoom…"); NOT HP_BAR(opponent); } } diff --git a/test/battle/move_effect/hit_set_remove_terrain.c b/test/battle/move_effect/hit_set_remove_terrain.c index 549b6bf04fb3..98c6e179eb27 100644 --- a/test/battle/move_effect/hit_set_remove_terrain.c +++ b/test/battle/move_effect/hit_set_remove_terrain.c @@ -45,7 +45,7 @@ SINGLE_BATTLE_TEST("Steel Roller and Ice Spinner can remove a terrain from the f MESSAGE("The electricity disappeared from the battlefield."); break; case MOVE_PSYCHIC_TERRAIN: - MESSAGE("The weirdness disappeared from the battlefield."); + MESSAGE("The weirdness disappeared from the battlefield!"); break; case MOVE_GRASSY_TERRAIN: MESSAGE("The grass disappeared from the battlefield."); diff --git a/test/battle/move_effect/knock_off.c b/test/battle/move_effect/knock_off.c index 76f07f8cb4a8..8086e8cc7c42 100644 --- a/test/battle/move_effect/knock_off.c +++ b/test/battle/move_effect/knock_off.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Knock Off knocks a healing berry before it has the chance to MESSAGE("The opposing Wobbuffet's Sitrus Berry restored health!"); } ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF); - MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Sitrus Berry!"); + MESSAGE("Wobbuffet knocked off the opposing Wobbuffet's Sitrus Berry!"); } THEN { EXPECT(opponent->item == ITEM_NONE); } @@ -43,13 +43,13 @@ SINGLE_BATTLE_TEST("Knock Off activates after Rocky Helmet and Weakness Policy") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); if (item == ITEM_WEAKNESS_POLICY) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE); - MESSAGE("Using Weakness Policy, the Attack of Foe Wobbuffet sharply rose!"); - MESSAGE("Using Weakness Policy, the Sp. Atk of Foe Wobbuffet sharply rose!"); + MESSAGE("Using Weakness Policy, the Attack of the opposing Wobbuffet sharply rose!"); + MESSAGE("Using Weakness Policy, the Sp. Atk of the opposing Wobbuffet sharply rose!"); } else if (item == ITEM_ROCKY_HELMET) { HP_BAR(player); - MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Rocky Helmet!"); + MESSAGE("Wobbuffet was hurt by the opposing Wobbuffet's Rocky Helmet!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF); - MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Rocky Helmet!"); + MESSAGE("Wobbuffet knocked off the opposing Wobbuffet's Rocky Helmet!"); } } THEN { EXPECT(opponent->item == ITEM_NONE); @@ -111,7 +111,7 @@ SINGLE_BATTLE_TEST("Recycle cannot recover an item removed by Knock Off") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF); - MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Leftovers!"); + MESSAGE("Wobbuffet knocked off the opposing Wobbuffet's Leftovers!"); MESSAGE("The opposing Wobbuffet used Recycle!"); MESSAGE("But it failed!"); @@ -132,7 +132,7 @@ SINGLE_BATTLE_TEST("Knock Off does not prevent targets from receiving another it // turn 1 ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF); - MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Leftovers!"); + MESSAGE("Wobbuffet knocked off the opposing Wobbuffet's Leftovers!"); // turn 2 if (B_KNOCK_OFF_REMOVAL >= GEN_5) { ANIMATION(ANIM_TYPE_MOVE, MOVE_BESTOW, player); @@ -163,7 +163,7 @@ SINGLE_BATTLE_TEST("Knock Off triggers Unburden") // turn 1 ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF); - MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Leftovers!"); + MESSAGE("Wobbuffet knocked off the opposing Wobbuffet's Leftovers!"); // turn 2 MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Wobbuffet used Celebrate!"); @@ -202,6 +202,6 @@ SINGLE_BATTLE_TEST("Knock Off doesn't knock off items from Pokemon behind substi } WHEN { TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_KNOCK_OFF); } } SCENE { - NOT MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Poké Ball"); + NOT MESSAGE("Wobbuffet knocked off the opposing Wobbuffet's Poké Ball"); } } diff --git a/test/battle/move_effect/leech_seed.c b/test/battle/move_effect/leech_seed.c index 1e71437f8016..fce80c661c57 100644 --- a/test/battle/move_effect/leech_seed.c +++ b/test/battle/move_effect/leech_seed.c @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("Leech Seed doesn't affect Grass-type Pokémon") TURN { MOVE(player, MOVE_LEECH_SEED); } } SCENE { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_LEECH_SEED, player); - MESSAGE("It doesn't affect Foe Oddish…"); + MESSAGE("It doesn't affect the opposing Oddish…"); } } TO_DO_BATTLE_TEST("Leech Seed doesn't affect already seeded targets") diff --git a/test/battle/move_effect/metronome.c b/test/battle/move_effect/metronome.c index e9c75fd69d78..bac581c5fbb8 100644 --- a/test/battle/move_effect/metronome.c +++ b/test/battle/move_effect/metronome.c @@ -37,7 +37,7 @@ SINGLE_BATTLE_TEST("Metronome's called powder move fails against Grass Types") ANIMATION(ANIM_TYPE_MOVE, MOVE_METRONOME, player); MESSAGE("Wobbuffet used Poison Powder!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_POISON_POWDER, player); - MESSAGE("It doesn't affect Foe Tangela…"); + MESSAGE("It doesn't affect the opposing Tangela…"); NOT STATUS_ICON(opponent, poison: TRUE); } } diff --git a/test/battle/move_effect/octolock.c b/test/battle/move_effect/octolock.c index d49973e3f444..f6d84a2d5f6a 100644 --- a/test/battle/move_effect/octolock.c +++ b/test/battle/move_effect/octolock.c @@ -123,8 +123,8 @@ SINGLE_BATTLE_TEST("Octolock will not decrease Defense and Sp. Def further then MESSAGE("The opposing Wobbuffet's Defense fell!"); MESSAGE("The opposing Wobbuffet's Sp. Def fell!"); } - MESSAGE("The opposing Wobbuffet's Defense won't go lower!"); - MESSAGE("The opposing Wobbuffet's Sp. Def won't go lower!"); + MESSAGE("The opposing Wobbuffet's Defense won't go any lower!"); + MESSAGE("The opposing Wobbuffet's Sp. Def won't go any lower!"); NONE_OF { MESSAGE("The opposing Wobbuffet's Defense fell!"); MESSAGE("The opposing Wobbuffet's Sp. Def fell!"); diff --git a/test/battle/move_effect/ohko.c b/test/battle/move_effect/ohko.c index ca448be6fd43..511d76a8ad31 100644 --- a/test/battle/move_effect/ohko.c +++ b/test/battle/move_effect/ohko.c @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("Sheer Cold doesn't affect Ice-type Pokémon") TURN { MOVE(player, MOVE_SHEER_COLD); } } SCENE { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SHEER_COLD, player); - MESSAGE("It doesn't affect Foe Glalie…"); + MESSAGE("It doesn't affect the opposing Glalie…"); } } TO_DO_BATTLE_TEST("Fissure faints the target, skipping regular damage calculations") diff --git a/test/battle/move_effect/pledge.c b/test/battle/move_effect/pledge.c index b4d6591f55f8..cb4d02908dba 100644 --- a/test/battle/move_effect/pledge.c +++ b/test/battle/move_effect/pledge.c @@ -72,7 +72,7 @@ DOUBLE_BATTLE_TEST("Rainbow flinch chance does not stack with Serene Grace") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PLEDGE, playerRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_BITE, playerLeft); - MESSAGE("The opposing Wynaut flinched!"); + MESSAGE("The opposing Wynaut flinched and couldn't move!"); } } @@ -100,17 +100,17 @@ DOUBLE_BATTLE_TEST("Fire and Grass Pledge summons Sea Of Fire for four turns tha MESSAGE("A sea of fire enveloped the opposing team!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SEA_OF_FIRE, opponentRight); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentLeft); - MESSAGE("The opposing Foe Wobbuffet was hurt by the sea of fire!"); + MESSAGE("The opposing Wobbuffet was hurt by the sea of fire!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentRight); - MESSAGE("The opposing Foe Wynaut was hurt by the sea of fire!"); + MESSAGE("The opposing Wynaut was hurt by the sea of fire!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentLeft); - MESSAGE("The opposing Foe Wobbuffet was hurt by the sea of fire!"); + MESSAGE("The opposing Wobbuffet was hurt by the sea of fire!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentRight); - MESSAGE("The opposing Foe Wynaut was hurt by the sea of fire!"); + MESSAGE("The opposing Wynaut was hurt by the sea of fire!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentLeft); - MESSAGE("The opposing Foe Wobbuffet was hurt by the sea of fire!"); + MESSAGE("The opposing Wobbuffet was hurt by the sea of fire!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponentRight); - MESSAGE("The opposing Foe Wynaut was hurt by the sea of fire!"); + MESSAGE("The opposing Wynaut was hurt by the sea of fire!"); MESSAGE("The sea of fire around the opposing team disappeared!"); } } diff --git a/test/battle/move_effect/recoil_if_miss.c b/test/battle/move_effect/recoil_if_miss.c index 24995d3c3a0c..a5f011109548 100644 --- a/test/battle/move_effect/recoil_if_miss.c +++ b/test/battle/move_effect/recoil_if_miss.c @@ -80,7 +80,7 @@ SINGLE_BATTLE_TEST("Jump Kick's recoil happens after Spiky Shield damage and Pok MESSAGE("Wobbuffet used Jump Kick!"); MESSAGE("The opposing Wobbuffet protected itself!"); HP_BAR(player, damage: maxHp / 8); - MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Spiky Shield!"); + MESSAGE("Wobbuffet was hurt by the opposing Wobbuffet's Spiky Shield!"); if (faintOnSpiky){ MESSAGE("Wobbuffet fainted!"); SEND_IN_MESSAGE("Wynaut"); diff --git a/test/battle/move_effect/reflect_type.c b/test/battle/move_effect/reflect_type.c index d452d3e421ba..49361dcc6084 100644 --- a/test/battle/move_effect/reflect_type.c +++ b/test/battle/move_effect/reflect_type.c @@ -121,7 +121,7 @@ SINGLE_BATTLE_TEST("Reflect Type copies a target's dual types") } SCENE { MESSAGE("Arcanine used Reflect Type!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, player); - MESSAGE("Arcanine's type changed to match the Foe Poliwrath's!"); + MESSAGE("Arcanine's type changed to match the the opposing Poliwrath's!"); } THEN { EXPECT_EQ(player->types[0], TYPE_WATER); EXPECT_EQ(player->types[1], TYPE_FIGHTING); @@ -143,7 +143,7 @@ SINGLE_BATTLE_TEST("Reflect Type copies a target's pure type") } SCENE { MESSAGE("Arcanine used Reflect Type!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, player); - MESSAGE("Arcanine's type changed to match the Foe Sudowoodo's!"); + MESSAGE("Arcanine's type changed to match the the opposing Sudowoodo's!"); } THEN { EXPECT_EQ(player->types[0], TYPE_ROCK); EXPECT_EQ(player->types[1], TYPE_ROCK); @@ -173,11 +173,11 @@ SINGLE_BATTLE_TEST("Reflect Type defaults to Normal type for the user's types[0] // Turn 2 MESSAGE("Wobbuffet used Forest's Curse!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FORESTS_CURSE, player); - MESSAGE("Grass type was added to Foe Arcanine!"); + MESSAGE("Grass type was added to the opposing Arcanine!"); // Turn 3 MESSAGE("Wobbuffet used Reflect Type!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, player); - MESSAGE("Wobbuffet's type changed to match the Foe Arcanine's!"); + MESSAGE("Wobbuffet's type changed to match the the opposing Arcanine's!"); } THEN { EXPECT_EQ(player->types[0], TYPE_NORMAL); EXPECT_EQ(player->types[1], TYPE_NORMAL); diff --git a/test/battle/move_effect/relic_song.c b/test/battle/move_effect/relic_song.c index 31a00ce51565..27df07797f9c 100644 --- a/test/battle/move_effect/relic_song.c +++ b/test/battle/move_effect/relic_song.c @@ -191,7 +191,7 @@ SINGLE_BATTLE_TEST("Relic Song transforms Meloetta after Magician was activated" ANIMATION(ANIM_TYPE_MOVE, MOVE_RELIC_SONG, player); HP_BAR(opponent); ABILITY_POPUP(player, ABILITY_MAGICIAN); - MESSAGE("Meloetta stole Foe Delphox's Potion!"); + MESSAGE("Meloetta stole the opposing Delphox's Potion!"); MESSAGE("Meloetta transformed!"); } THEN { EXPECT_EQ(player->species, SPECIES_MELOETTA_PIROUETTE); diff --git a/test/battle/move_effect/roost.c b/test/battle/move_effect/roost.c index 488528cfad72..16d33c668ae0 100644 --- a/test/battle/move_effect/roost.c +++ b/test/battle/move_effect/roost.c @@ -342,7 +342,7 @@ SINGLE_BATTLE_TEST("Roost's suppression prevents Reflect Type from copying any F MESSAGE("The opposing Wobbuffet's type changed to match the Swellow's!"); // Turn 3: EQ has no effect MESSAGE("Swellow used Earthquake!"); - MESSAGE("It doesn't affect Foe Wobbuffet…"); + MESSAGE("It doesn't affect the opposing Wobbuffet…"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, player); HP_BAR(opponent); diff --git a/test/battle/move_effect/salt_cure.c b/test/battle/move_effect/salt_cure.c index b16b4e2fe1bc..bca793e74c36 100644 --- a/test/battle/move_effect/salt_cure.c +++ b/test/battle/move_effect/salt_cure.c @@ -95,7 +95,7 @@ SINGLE_BATTLE_TEST("Salt Cure does not get applied if hitting a Substitute") TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_SALT_CURE); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SALT_CURE, player); - MESSAGE("The SUBSTITUTE took damage for Foe Wobbuffet!"); + MESSAGE("The SUBSTITUTE took damage for the opposing Wobbuffet!"); NOT MESSAGE("The opposing Wobbuffet is being salt cured!"); } } diff --git a/test/battle/move_effect/shed_tail.c b/test/battle/move_effect/shed_tail.c index d69993b88b82..db9351a7a9a6 100644 --- a/test/battle/move_effect/shed_tail.c +++ b/test/battle/move_effect/shed_tail.c @@ -37,7 +37,7 @@ SINGLE_BATTLE_TEST("Shed Tail fails if the user doesn't have enough HP") } WHEN { TURN { MOVE(player, MOVE_SHED_TAIL); } } SCENE { - MESSAGE("It was too weak to make a SUBSTITUTE!"); + MESSAGE("But it does not have enough HP left to make a substitute!"); } } diff --git a/test/battle/move_effect/smelling_salts.c b/test/battle/move_effect/smelling_salts.c index 22aa04ca0890..4eb624df572f 100644 --- a/test/battle/move_effect/smelling_salts.c +++ b/test/battle/move_effect/smelling_salts.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Smelling Salts does not cure paralyzed pokemons behind subst ANIMATION(ANIM_TYPE_MOVE, MOVE_SMELLING_SALTS, player); if (ability == ABILITY_INNER_FOCUS) { - MESSAGE("The SUBSTITUTE took damage for Foe Seismitoad!"); + MESSAGE("The SUBSTITUTE took damage for the opposing Seismitoad!"); NONE_OF { MESSAGE("The opposing Seismitoad's SUBSTITUTE faded!"); // Smelling Salts does 86 damage, the sub has 122 HP, if hitting a sub it shouldn't get boosted damage. diff --git a/test/battle/move_effect/spikes.c b/test/battle/move_effect/spikes.c index 664ff14cc0ad..339a9f9a4bf1 100644 --- a/test/battle/move_effect/spikes.c +++ b/test/battle/move_effect/spikes.c @@ -28,11 +28,11 @@ SINGLE_BATTLE_TEST("Spikes damage on switch in") s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); for (count = 0; count < layers; ++count) { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered all around the opposing team!"); + MESSAGE("Spikes were scattered on the ground all around the opposing team!"); } MESSAGE("2 sent out Wynaut!"); HP_BAR(opponent, damage: maxHP / divisor); - MESSAGE("The opposing Wynaut is hurt by spikes!"); + MESSAGE("The opposing Wynaut was hurt by the spikes!"); } } @@ -51,16 +51,16 @@ SINGLE_BATTLE_TEST("Spikes fails after 3 layers") } SCENE { s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered all around the opposing team!"); + MESSAGE("Spikes were scattered on the ground all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered all around the opposing team!"); + MESSAGE("Spikes were scattered on the ground all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered all around the opposing team!"); + MESSAGE("Spikes were scattered on the ground all around the opposing team!"); MESSAGE("Wobbuffet used Spikes!"); MESSAGE("But it failed!"); MESSAGE("2 sent out Wynaut!"); HP_BAR(opponent, damage: maxHP / 4); - MESSAGE("The opposing Wynaut is hurt by spikes!"); + MESSAGE("The opposing Wynaut was hurt by the spikes!"); } } @@ -79,10 +79,10 @@ SINGLE_BATTLE_TEST("Spikes damage on subsequent switch ins") s32 maxHP1 = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); MESSAGE("2 sent out Wynaut!"); HP_BAR(opponent, damage: maxHP1 / 8); - MESSAGE("The opposing Wynaut is hurt by spikes!"); + MESSAGE("The opposing Wynaut was hurt by the spikes!"); MESSAGE("2 sent out Wobbuffet!"); HP_BAR(opponent, damage: maxHP0 / 8); - MESSAGE("The opposing Wobbuffet is hurt by spikes!"); + MESSAGE("The opposing Wobbuffet was hurt by the spikes!"); } } diff --git a/test/battle/move_effect/sticky_web.c b/test/battle/move_effect/sticky_web.c index ecaa1c9c4af3..434814801f5b 100644 --- a/test/battle/move_effect/sticky_web.c +++ b/test/battle/move_effect/sticky_web.c @@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Sticky Web lowers Speed by 1 on switch-in") TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); - MESSAGE("A sticky web spreads out on the ground around the opposing team!"); + MESSAGE("A sticky web has been laid out on the ground around the opposing team!"); MESSAGE("2 sent out Wynaut!"); MESSAGE("The opposing Wynaut was caught in a Sticky Web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); @@ -37,7 +37,7 @@ SINGLE_BATTLE_TEST("Sticky Web can only be set up 1 time") } SCENE { MESSAGE("Wobbuffet used Sticky Web!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); - MESSAGE("A sticky web spreads out on the ground around the opposing team!"); + MESSAGE("A sticky web has been laid out on the ground around the opposing team!"); MESSAGE("Wobbuffet used Sticky Web!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); @@ -62,7 +62,7 @@ DOUBLE_BATTLE_TEST("Sticky Web lowers Speed by 1 in a double battle after Explos TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, playerRight); - MESSAGE("A sticky web spreads out on the ground around the opposing team!"); + MESSAGE("A sticky web has been laid out on the ground around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, playerLeft); MESSAGE("2 sent out Wynaut!"); MESSAGE("2 sent out Alakazam!"); @@ -87,7 +87,7 @@ SINGLE_BATTLE_TEST("Sticky Web raises Speed by 1 for a Pokemon with Contrary") TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); - MESSAGE("A sticky web spreads out on the ground around the opposing team!"); + MESSAGE("A sticky web has been laid out on the ground around the opposing team!"); MESSAGE("2 sent out Shuckle!"); MESSAGE("The opposing Shuckle was caught in a Sticky Web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); @@ -119,9 +119,9 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - the TURN { SWITCH(playerRight, 2); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, BATTLER_OPPONENT); - MESSAGE("A sticky web spreads out on the ground around your team!"); + MESSAGE("A sticky web has been laid out on the ground around your team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, BATTLER_PLAYER); - MESSAGE("A sticky web spreads out on the ground around the opposing team!"); + MESSAGE("A sticky web has been laid out on the ground around the opposing team!"); SEND_IN_MESSAGE("Corviknight"); MESSAGE("Corviknight was caught in a Sticky Web!"); @@ -166,14 +166,14 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - no o } SCENE { if (speedPlayer > speedOpponent) { ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, playerRight); - MESSAGE("A sticky web spreads out on the ground around the opposing team!"); + MESSAGE("A sticky web has been laid out on the ground around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, opponentLeft); - MESSAGE("A sticky web spreads out on the ground around your team!"); + MESSAGE("A sticky web has been laid out on the ground around your team!"); } else { ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, opponentLeft); - MESSAGE("A sticky web spreads out on the ground around your team!"); + MESSAGE("A sticky web has been laid out on the ground around your team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, playerRight); - MESSAGE("A sticky web spreads out on the ground around the opposing team!"); + MESSAGE("A sticky web has been laid out on the ground around the opposing team!"); } SEND_IN_MESSAGE("Corviknight"); @@ -217,7 +217,7 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - no o TURN { SWITCH(playerRight, 2); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, opponentLeft); - MESSAGE("A sticky web spreads out on the ground around your team!"); + MESSAGE("A sticky web has been laid out on the ground around your team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_MEMENTO, opponentLeft); MESSAGE("The opposing Caterpie fainted!"); @@ -251,7 +251,7 @@ SINGLE_BATTLE_TEST("Sticky Web is placed on the correct side after Explosion") ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); MESSAGE("Wobbuffet fainted!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, opponent); - MESSAGE("A sticky web spreads out on the ground around your team!"); + MESSAGE("A sticky web has been laid out on the ground around your team!"); } } @@ -268,6 +268,6 @@ SINGLE_BATTLE_TEST("Sticky Web is placed on the correct side after Memento") ANIMATION(ANIM_TYPE_MOVE, MOVE_MEMENTO, player); MESSAGE("Wobbuffet fainted!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, opponent); - MESSAGE("A sticky web spreads out on the ground around your team!"); + MESSAGE("A sticky web has been laid out on the ground around your team!"); } } diff --git a/test/battle/move_effect/stomping_tantrum.c b/test/battle/move_effect/stomping_tantrum.c index 861396d9fd2e..32747282e420 100644 --- a/test/battle/move_effect/stomping_tantrum.c +++ b/test/battle/move_effect/stomping_tantrum.c @@ -125,7 +125,7 @@ SINGLE_BATTLE_TEST("Stomping Tatrum will deal double damage if user was immune t } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); HP_BAR(opponent, captureDamage: &damage[0]); - MESSAGE("It doesn't affect Foe Pidgey…"); + MESSAGE("It doesn't affect the opposing Pidgey…"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); HP_BAR(opponent, captureDamage: &damage[1]); } THEN { diff --git a/test/battle/move_effect/strength_sap.c b/test/battle/move_effect/strength_sap.c index 801b8e6c6618..9a343f77ef30 100644 --- a/test/battle/move_effect/strength_sap.c +++ b/test/battle/move_effect/strength_sap.c @@ -51,7 +51,7 @@ SINGLE_BATTLE_TEST("Strength Sap works exactly the same when attacker is behind ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); MESSAGE("The opposing Wobbuffet's Attack fell!"); HP_BAR(player, captureDamage: &results[i].hp); - NOT MESSAGE("The SUBSTITUTE took damage for Foe Wobbuffet!"); + NOT MESSAGE("The SUBSTITUTE took damage for the opposing Wobbuffet!"); MESSAGE("The opposing Wobbuffet had its energy drained!"); } THEN { EXPECT_EQ(results[i].hp * -1, atkStat); @@ -137,7 +137,7 @@ SINGLE_BATTLE_TEST("Strength Sap fails if target is at -6 Atk") HP_BAR(player); MESSAGE("The opposing Wobbuffet had its energy drained!"); } - MESSAGE("The opposing Wobbuffet's Attack won't go lower!"); + MESSAGE("The opposing Wobbuffet's Attack won't go any lower!"); } } diff --git a/test/battle/move_effect/substitute.c b/test/battle/move_effect/substitute.c index 5a3c973ebb13..072eaa6869b1 100644 --- a/test/battle/move_effect/substitute.c +++ b/test/battle/move_effect/substitute.c @@ -36,7 +36,7 @@ SINGLE_BATTLE_TEST("Substitute fails if the user doesn't have enough HP") } WHEN { TURN { MOVE(player, MOVE_SUBSTITUTE); } } SCENE { - MESSAGE("It was too weak to make a SUBSTITUTE!"); + MESSAGE("But it does not have enough HP left to make a substitute!"); } } diff --git a/test/battle/move_effect/teatime.c b/test/battle/move_effect/teatime.c index 3f3edfae56c7..dfdc70c80122 100644 --- a/test/battle/move_effect/teatime.c +++ b/test/battle/move_effect/teatime.c @@ -62,7 +62,7 @@ SINGLE_BATTLE_TEST("Teatime causes the user to consume its Berry, ignoring HP re } SCENE { MESSAGE("The opposing Wobbuffet used Teatime!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TEATIME, opponent); - MESSAGE("Using Liechi Berry, the Attack of Foe Wobbuffet rose!"); + MESSAGE("Using Liechi Berry, the Attack of the opposing Wobbuffet rose!"); } } @@ -76,7 +76,7 @@ SINGLE_BATTLE_TEST("Teatime causes other Pokemon to consume their Berry even if } SCENE { MESSAGE("Wobbuffet used Teatime!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TEATIME, player); - MESSAGE("Using Liechi Berry, the Attack of Foe Wobbuffet rose!"); + MESSAGE("Using Liechi Berry, the Attack of the opposing Wobbuffet rose!"); } } @@ -117,9 +117,9 @@ DOUBLE_BATTLE_TEST("Teatime causes all Pokémon to consume their berry") } ANIMATION(ANIM_TYPE_MOVE, MOVE_TEATIME, user); MESSAGE("Using Liechi Berry, the Attack of Wobbuffet rose!"); - MESSAGE("Using Liechi Berry, the Attack of Foe Wobbuffet rose!"); + MESSAGE("Using Liechi Berry, the Attack of the opposing Wobbuffet rose!"); MESSAGE("Using Liechi Berry, the Attack of Wobbuffet rose!"); - MESSAGE("Using Liechi Berry, the Attack of Foe Wobbuffet rose!"); + MESSAGE("Using Liechi Berry, the Attack of the opposing Wobbuffet rose!"); } } @@ -151,7 +151,7 @@ SINGLE_BATTLE_TEST("Teatime does not affect Pokémon in the semi-invulnerable tu MESSAGE("Wobbuffet used Teatime!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_TEATIME, player); - MESSAGE("Using Liechi Berry, the Attack of Foe Wobbuffet rose!"); + MESSAGE("Using Liechi Berry, the Attack of the opposing Wobbuffet rose!"); } } } @@ -188,7 +188,7 @@ SINGLE_BATTLE_TEST("Teatime triggers Volt Absorb if it has been affected by Elec NOT ABILITY_POPUP(player, ABILITY_VOLT_ABSORB); MESSAGE("Using Liechi Berry, the Attack of Jolteon rose!"); } - MESSAGE("Using Liechi Berry, the Attack of Foe Wobbuffet rose!"); + MESSAGE("Using Liechi Berry, the Attack of the opposing Wobbuffet rose!"); } } @@ -227,7 +227,7 @@ SINGLE_BATTLE_TEST("Teatime triggers Lightning Rod if it has been affected by El } MESSAGE("Using Liechi Berry, the Attack of Pikachu rose!"); } - MESSAGE("Using Liechi Berry, the Attack of Foe Wobbuffet rose!"); + MESSAGE("Using Liechi Berry, the Attack of the opposing Wobbuffet rose!"); } } @@ -266,6 +266,6 @@ SINGLE_BATTLE_TEST("Teatime triggers Motor Drive if it has been affected by Elec } MESSAGE("Using Liechi Berry, the Attack of Electivire rose!"); } - MESSAGE("Using Liechi Berry, the Attack of Foe Wobbuffet rose!"); + MESSAGE("Using Liechi Berry, the Attack of the opposing Wobbuffet rose!"); } } diff --git a/test/battle/move_effect/telekinesis.c b/test/battle/move_effect/telekinesis.c index 8dd0b3c303bf..746c42d053eb 100644 --- a/test/battle/move_effect/telekinesis.c +++ b/test/battle/move_effect/telekinesis.c @@ -65,7 +65,7 @@ SINGLE_BATTLE_TEST("Telekinesis makes the target immune to Ground-type attacks") ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLDOZE, player); HP_BAR(opponent); } - MESSAGE("It doesn't affect Foe Wynaut…"); + MESSAGE("It doesn't affect the opposing Wynaut…"); } } diff --git a/test/battle/move_effect/tera_blast.c b/test/battle/move_effect/tera_blast.c index 6e141ad9edca..80e960a1affc 100644 --- a/test/battle/move_effect/tera_blast.c +++ b/test/battle/move_effect/tera_blast.c @@ -66,7 +66,7 @@ SINGLE_BATTLE_TEST("Tera Blast has correct effectiveness for every Tera Type") TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); } } SCENE { if (species == SPECIES_GASTLY && type == TYPE_NORMAL) - MESSAGE("It doesn't affect Foe Gastly…"); + MESSAGE("It doesn't affect the opposing Gastly…"); else MESSAGE("It's super effective!"); } diff --git a/test/battle/move_effect/tera_starstorm.c b/test/battle/move_effect/tera_starstorm.c index 8b1ff41c75b0..b6b457164424 100644 --- a/test/battle/move_effect/tera_starstorm.c +++ b/test/battle/move_effect/tera_starstorm.c @@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Tera Starstorm changes from Normal-type to Stellar-type if u MESSAGE("Terapagos used Tera Starstorm!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_STARSTORM, player); HP_BAR(opponent); - NOT { MESSAGE("It doesn't affect Foe Misdreavus…"); } + NOT { MESSAGE("It doesn't affect the opposing Misdreavus…"); } } } @@ -71,6 +71,6 @@ SINGLE_BATTLE_TEST("Tera Starstorm remains Normal-type if used by Pokemon other TURN { MOVE(player, MOVE_TERA_STARSTORM, gimmick: GIMMICK_TERA); } } SCENE { MESSAGE("Wobbuffet used Tera Starstorm!"); - MESSAGE("It doesn't affect Foe Misdreavus…"); + MESSAGE("It doesn't affect the opposing Misdreavus…"); } } diff --git a/test/battle/move_effect/toxic_spikes.c b/test/battle/move_effect/toxic_spikes.c index d9f9269ef0cf..b7661c3ff34f 100644 --- a/test/battle/move_effect/toxic_spikes.c +++ b/test/battle/move_effect/toxic_spikes.c @@ -230,7 +230,7 @@ SINGLE_BATTLE_TEST("Toxic Spikes inflicts poison on switch in after Primal Rever ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player); STATUS_ICON(player, poison: TRUE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player); - MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!"); + MESSAGE("Groudon's Primal Reversion! It reverted to its primal state!"); // Memento MESSAGE("Groudon used Memento!"); MESSAGE("Groudon fainted!"); diff --git a/test/battle/move_effect/upper_hand.c b/test/battle/move_effect/upper_hand.c index 4bae842244f5..69b2b75ef958 100644 --- a/test/battle/move_effect/upper_hand.c +++ b/test/battle/move_effect/upper_hand.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Upper Hand succeeds if the target is using a priority attack } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_UPPER_HAND, player); HP_BAR(opponent); - MESSAGE("The opposing Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_EXTREME_SPEED, opponent); } } @@ -75,7 +75,7 @@ SINGLE_BATTLE_TEST("Upper Hand succeeds if the target's move is boosted in prior } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_UPPER_HAND, player); HP_BAR(opponent); - MESSAGE("The opposing Comfey flinched!"); + MESSAGE("The opposing Comfey flinched and couldn't move!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAINING_KISS, opponent); } } diff --git a/test/battle/move_effect/wake_up_slap.c b/test/battle/move_effect/wake_up_slap.c index 32b69bef98c8..8ff1d8bf78cd 100644 --- a/test/battle/move_effect/wake_up_slap.c +++ b/test/battle/move_effect/wake_up_slap.c @@ -21,7 +21,7 @@ SINGLE_BATTLE_TEST("Wake-Up Slap does not cure paralyzed pokemons behind substit } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_WAKE_UP_SLAP, player); if (ability == ABILITY_INNER_FOCUS) { - MESSAGE("The SUBSTITUTE took damage for Foe Seismitoad!"); + MESSAGE("The SUBSTITUTE took damage for the opposing Seismitoad!"); NONE_OF { MESSAGE("The opposing Seismitoad's SUBSTITUTE faded!"); // Smelling Salts does 86 damage, the sub has 122 HP, if hitting a sub it shouldn't get boosted damage. diff --git a/test/battle/move_effect_secondary/bug_bite.c b/test/battle/move_effect_secondary/bug_bite.c index e4786c3056e3..3d2ae62c0748 100644 --- a/test/battle/move_effect_secondary/bug_bite.c +++ b/test/battle/move_effect_secondary/bug_bite.c @@ -129,7 +129,7 @@ SINGLE_BATTLE_TEST("Tanga Berry activates before Bug Bite") MESSAGE("The opposing Wobbuffet ate its Tanga Berry!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_BUG_BITE, player); HP_BAR(opponent); - MESSAGE("Tanga Berry weakened the damage to Foe Wobbuffet!"); + MESSAGE("Tanga Berry weakened the damage to the opposing Wobbuffet!"); } THEN { EXPECT_EQ(player->item, ITEM_NONE); } diff --git a/test/battle/move_effect_secondary/flinch.c b/test/battle/move_effect_secondary/flinch.c index 7a43a4992336..29bee42467ae 100644 --- a/test/battle/move_effect_secondary/flinch.c +++ b/test/battle/move_effect_secondary/flinch.c @@ -25,20 +25,20 @@ SINGLE_BATTLE_TEST("Headbutt flinches the target if attacker is faster") ANIMATION(ANIM_TYPE_MOVE, MOVE_HEADBUTT, player); HP_BAR(opponent); if (isFaster) { - MESSAGE("The opposing Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); } else { - NOT MESSAGE("The opposing Wobbuffet flinched!"); + NOT MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); } // 2nd turn ANIMATION(ANIM_TYPE_MOVE, MOVE_HEADBUTT, player); HP_BAR(opponent); if (isFaster) { - MESSAGE("The opposing Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); } else { - NOT MESSAGE("The opposing Wobbuffet flinched!"); + NOT MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); } } } diff --git a/test/battle/move_effect_secondary/rapid_spin.c b/test/battle/move_effect_secondary/rapid_spin.c index e78afa2c121d..4e490164d7c3 100644 --- a/test/battle/move_effect_secondary/rapid_spin.c +++ b/test/battle/move_effect_secondary/rapid_spin.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Rapin Spin blows away Wrap, hazards and raises Speed (Gen 8+ } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STEALTH_ROCK, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_RAPID_SPIN, player); - MESSAGE("Wobbuffet got free of Foe Wobbuffet's Wrap!"); + MESSAGE("Wobbuffet got free of the opposing Wobbuffet's Wrap!"); MESSAGE("Wobbuffet blew away Stealth Rock!"); #if B_SPEED_BUFFING_RAPID_SPIN >= GEN_8 ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); @@ -42,7 +42,7 @@ SINGLE_BATTLE_TEST("Mortal Spin blows away Wrap, hazards and poisons foe") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STEALTH_ROCK, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_MORTAL_SPIN, player); - MESSAGE("Wobbuffet got free of Foe Wobbuffet's Wrap!"); + MESSAGE("Wobbuffet got free of the opposing Wobbuffet's Wrap!"); MESSAGE("Wobbuffet blew away Stealth Rock!"); MESSAGE("The opposing Wobbuffet was poisoned!"); STATUS_ICON(opponent, poison: TRUE); diff --git a/test/battle/move_effect_secondary/spikes.c b/test/battle/move_effect_secondary/spikes.c index 4c8aadba4490..1aa2630fd796 100644 --- a/test/battle/move_effect_secondary/spikes.c +++ b/test/battle/move_effect_secondary/spikes.c @@ -19,10 +19,10 @@ SINGLE_BATTLE_TEST("Ceaseless Edge sets up hazards after hitting the target") s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); HP_BAR(opponent); - MESSAGE("Spikes were scattered all around the opposing team!"); + MESSAGE("Spikes were scattered on the ground all around the opposing team!"); MESSAGE("2 sent out Wobbuffet!"); HP_BAR(opponent, damage: maxHP / 8); - MESSAGE("The opposing Wobbuffet is hurt by spikes!"); + MESSAGE("The opposing Wobbuffet was hurt by the spikes!"); } } @@ -43,22 +43,22 @@ SINGLE_BATTLE_TEST("Ceaseless Edge can set up to 3 layers of Spikes") ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); HP_BAR(opponent); - MESSAGE("Spikes were scattered all around the opposing team!"); + MESSAGE("Spikes were scattered on the ground all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); HP_BAR(opponent); - MESSAGE("Spikes were scattered all around the opposing team!"); + MESSAGE("Spikes were scattered on the ground all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); HP_BAR(opponent); - MESSAGE("Spikes were scattered all around the opposing team!"); + MESSAGE("Spikes were scattered on the ground all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); HP_BAR(opponent); - NOT MESSAGE("Spikes were scattered all around the opposing team!"); + NOT MESSAGE("Spikes were scattered on the ground all around the opposing team!"); MESSAGE("2 sent out Wynaut!"); HP_BAR(opponent, damage: maxHP / 4); - MESSAGE("The opposing Wynaut is hurt by spikes!"); + MESSAGE("The opposing Wynaut was hurt by the spikes!"); } } diff --git a/test/battle/move_effect_secondary/stealth_rock.c b/test/battle/move_effect_secondary/stealth_rock.c index 034e2c347b6e..e9101b659145 100644 --- a/test/battle/move_effect_secondary/stealth_rock.c +++ b/test/battle/move_effect_secondary/stealth_rock.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Stone Axe sets up hazards after hitting the target") MESSAGE("Pointed stones float in the air around the opposing team!"); MESSAGE("2 sent out Wobbuffet!"); HP_BAR(opponent, damage: maxHP / 8); - MESSAGE("Pointed stones dug into Foe Wobbuffet!"); + MESSAGE("Pointed stones dug into the opposing Wobbuffet!"); } } @@ -59,7 +59,7 @@ SINGLE_BATTLE_TEST("Stone Axe can set up pointed stones only once") MESSAGE("2 sent out Wynaut!"); HP_BAR(opponent, damage: maxHP / 8); - MESSAGE("Pointed stones dug into Foe Wynaut!"); + MESSAGE("Pointed stones dug into the opposing Wynaut!"); } } diff --git a/test/battle/move_effect_secondary/syrup_bomb.c b/test/battle/move_effect_secondary/syrup_bomb.c index 6e7ec8ea9eba..91e6aa80f259 100644 --- a/test/battle/move_effect_secondary/syrup_bomb.c +++ b/test/battle/move_effect_secondary/syrup_bomb.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Syrup Bomb covers the foe in sticky syrup for 3 turns") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); HP_BAR(opponent); - MESSAGE("The opposing Wobbuffet got covered in sticky syrup!"); + MESSAGE("The opposing Wobbuffet got covered in sticky candy syrup!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); MESSAGE("The opposing Wobbuffet's Speed fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); @@ -45,12 +45,12 @@ SINGLE_BATTLE_TEST("Sticky Syrup isn't applied again if the target is already co } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); HP_BAR(opponent); - MESSAGE("The opposing Wobbuffet got covered in sticky syrup!"); + MESSAGE("The opposing Wobbuffet got covered in sticky candy syrup!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); MESSAGE("The opposing Wobbuffet's Speed fell!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); HP_BAR(opponent); - NOT MESSAGE("The opposing Wobbuffet got covered in sticky syrup!"); + NOT MESSAGE("The opposing Wobbuffet got covered in sticky candy syrup!"); } } @@ -92,7 +92,7 @@ SINGLE_BATTLE_TEST("Sticky Syrup speed reduction is prevented by Clear Body, Whi HP_BAR(opponent); if (species == SPECIES_BELDUM) { - MESSAGE("The opposing Beldum got covered in sticky syrup!"); + MESSAGE("The opposing Beldum got covered in sticky candy syrup!"); ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); MESSAGE("The opposing Beldum's Clear Body prevents stat loss!"); @@ -102,7 +102,7 @@ SINGLE_BATTLE_TEST("Sticky Syrup speed reduction is prevented by Clear Body, Whi } else if (species == SPECIES_TORKOAL) { - MESSAGE("The opposing Torkoal got covered in sticky syrup!"); + MESSAGE("The opposing Torkoal got covered in sticky candy syrup!"); ABILITY_POPUP(opponent, ABILITY_WHITE_SMOKE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); MESSAGE("The opposing Torkoal's White Smoke prevents stat loss!"); @@ -112,7 +112,7 @@ SINGLE_BATTLE_TEST("Sticky Syrup speed reduction is prevented by Clear Body, Whi } else if (species == SPECIES_SOLGALEO) { - MESSAGE("The opposing Solgaleo got covered in sticky syrup!"); + MESSAGE("The opposing Solgaleo got covered in sticky candy syrup!"); ABILITY_POPUP(opponent, ABILITY_FULL_METAL_BODY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); MESSAGE("The opposing Solgaleo's Full Metal Body prevents stat loss!"); @@ -133,7 +133,7 @@ SINGLE_BATTLE_TEST("Sticky Syrup speed reduction is prevented by Clear Amulet") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); HP_BAR(opponent); - MESSAGE("The opposing Wobbuffet got covered in sticky syrup!"); + MESSAGE("The opposing Wobbuffet got covered in sticky candy syrup!"); MESSAGE("The opposing Wobbuffet's Clear Amulet prevents its stats from being lowered!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); @@ -161,9 +161,9 @@ SINGLE_BATTLE_TEST("Sticky syrup will not decrease speed further then minus six" } ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); HP_BAR(opponent); - MESSAGE("The opposing Wobbuffet got covered in sticky syrup!"); + MESSAGE("The opposing Wobbuffet got covered in sticky candy syrup!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); - MESSAGE("The opposing Wobbuffet's Speed won't go lower!"); + MESSAGE("The opposing Wobbuffet's Speed won't go any lower!"); NONE_OF { MESSAGE("The opposing Wobbuffet's Speed fell!"); } @@ -182,7 +182,7 @@ SINGLE_BATTLE_TEST("Sticky Syrup is removed when the user switches out") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); HP_BAR(opponent); - MESSAGE("The opposing Wobbuffet got covered in sticky syrup!"); + MESSAGE("The opposing Wobbuffet got covered in sticky candy syrup!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); MESSAGE("The opposing Wobbuffet's Speed fell!"); NONE_OF { @@ -206,7 +206,7 @@ SINGLE_BATTLE_TEST("Sticky Syrup is removed when the user faints") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); HP_BAR(opponent); - MESSAGE("The opposing Wobbuffet got covered in sticky syrup!"); + MESSAGE("The opposing Wobbuffet got covered in sticky candy syrup!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); HP_BAR(player); MESSAGE("Wobbuffet fainted!"); diff --git a/test/battle/move_effects_combined/flinch_status.c b/test/battle/move_effects_combined/flinch_status.c index 45319980384d..75c9461880da 100644 --- a/test/battle/move_effects_combined/flinch_status.c +++ b/test/battle/move_effects_combined/flinch_status.c @@ -58,7 +58,7 @@ SINGLE_BATTLE_TEST("Thunder, Ice and Fire Fang cause the opponent to flinch 10% } SCENE { ANIMATION(ANIM_TYPE_MOVE, move, player); HP_BAR(opponent); - MESSAGE("The opposing Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); } } diff --git a/test/battle/move_effects_combined/triple_arrows.c b/test/battle/move_effects_combined/triple_arrows.c index f3445a676ca7..ad7878fdc93e 100644 --- a/test/battle/move_effects_combined/triple_arrows.c +++ b/test/battle/move_effects_combined/triple_arrows.c @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Triple Arrows makes the foe flinch 30% of the time") TURN { MOVE(player, MOVE_TRIPLE_ARROWS); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_ARROWS, player); - MESSAGE("The opposing Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); } } @@ -71,7 +71,7 @@ SINGLE_BATTLE_TEST("Triple Arrows can lower Defense and cause flinch at the time ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_ARROWS, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); MESSAGE("The opposing Wobbuffet's Defense fell!"); - MESSAGE("The opposing Wobbuffet flinched!"); + MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); } } @@ -86,7 +86,7 @@ SINGLE_BATTLE_TEST("Triple Arrows's flinching is prevented by Inner Focus") } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TRIPLE_ARROWS, player); - NONE_OF { MESSAGE("The opposing Wobbuffet flinched!"); } + NONE_OF { MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } } diff --git a/test/battle/move_flags/powder.c b/test/battle/move_flags/powder.c index 356ab69a980b..35a6e1012b28 100644 --- a/test/battle/move_flags/powder.c +++ b/test/battle/move_flags/powder.c @@ -12,6 +12,6 @@ SINGLE_BATTLE_TEST("Powder moves are blocked by Grass-type Pokémon") TURN { MOVE(player, MOVE_STUN_SPORE); } } SCENE { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); - MESSAGE("It doesn't affect Foe Oddish…"); + MESSAGE("It doesn't affect the opposing Oddish…"); } } diff --git a/test/battle/terrain/psychic.c b/test/battle/terrain/psychic.c index 67611352a675..3ea541da3905 100644 --- a/test/battle/terrain/psychic.c +++ b/test/battle/terrain/psychic.c @@ -158,6 +158,6 @@ SINGLE_BATTLE_TEST("Psychic Terrain lasts for 5 turns") MESSAGE("Wobbuffet used Celebrate!"); MESSAGE("The opposing Wobbuffet used Celebrate!"); - MESSAGE("The weirdness disappeared from the battlefield."); + MESSAGE("The weirdness disappeared from the battlefield!"); } } diff --git a/test/battle/terrain/starting_terrain.c b/test/battle/terrain/starting_terrain.c index 4356f5e2b17d..24d51f11a7a2 100644 --- a/test/battle/terrain/starting_terrain.c +++ b/test/battle/terrain/starting_terrain.c @@ -46,7 +46,7 @@ SINGLE_BATTLE_TEST("B_VAR_STARTING_STATUS starts a chosen terrain at the beginni ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RESTORE_BG); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RESTORE_BG); - MESSAGE("The weirdness disappeared from the battlefield."); + MESSAGE("The weirdness disappeared from the battlefield!"); MESSAGE("The electricity disappeared from the battlefield."); MESSAGE("The mist disappeared from the battlefield."); MESSAGE("The grass disappeared from the battlefield."); From d56ed423eecfbdae355e582c175474f081fb2a42 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 9 Sep 2024 18:02:44 -0300 Subject: [PATCH 38/68] 124 left --- test/battle/ability/anger_point.c | 2 +- test/battle/ability/cloud_nine.c | 2 +- test/battle/ability/dancer.c | 4 ++-- test/battle/ability/dauntless_shield.c | 4 ++-- test/battle/ability/defiant.c | 10 ++++----- test/battle/ability/embody_aspect.c | 4 ++-- test/battle/ability/intimidate.c | 4 ++-- test/battle/ability/intrepid_sword.c | 4 ++-- test/battle/ability/leaf_guard.c | 2 +- test/battle/ability/mirror_armor.c | 4 ++-- test/battle/ability/sheer_force.c | 4 ++-- test/battle/ability/shield_dust.c | 6 ++--- test/battle/ability/stamina.c | 2 +- test/battle/ability/stench.c | 4 ++-- test/battle/ability/toxic_chain.c | 12 +++++----- test/battle/ability/trace.c | 10 ++++----- test/battle/ability/wind_rider.c | 4 ++-- test/battle/gimmick/dynamax.c | 12 +++++----- test/battle/hold_effect/ability_shield.c | 2 +- test/battle/hold_effect/covert_cloak.c | 6 ++--- test/battle/hold_effect/eject_button.c | 2 +- test/battle/hold_effect/enigma_berry.c | 6 ++--- test/battle/hold_effect/metronome.c | 2 +- test/battle/hold_effect/red_card.c | 2 +- test/battle/hold_effect/restore_stats.c | 20 ++++++++--------- test/battle/item_effect/escape.c | 6 ++--- test/battle/move_effect/court_change.c | 12 +++++----- test/battle/move_effect/defog.c | 4 ++-- test/battle/move_effect/embargo.c | 4 ++-- test/battle/move_effect/fling.c | 12 +++++----- test/battle/move_effect/ion_deluge.c | 4 ++-- test/battle/move_effect/knock_off.c | 4 ++-- test/battle/move_effect/pledge.c | 16 +++++++------- test/battle/move_effect/protect.c | 2 +- test/battle/move_effect/relic_song.c | 2 +- test/battle/move_effect/shed_tail.c | 2 +- test/battle/move_effect/sparkling_aria.c | 6 ++--- test/battle/move_effect/sticky_web.c | 22 +++++++++---------- test/battle/move_effect/substitute.c | 6 ++--- test/battle/move_effect/tidy_up.c | 2 +- test/battle/move_effect/two_turns_attack.c | 10 ++++----- test/battle/move_effect_secondary/bug_bite.c | 6 ++--- test/battle/move_effect_secondary/flinch.c | 2 +- .../move_effect_secondary/throat_chop.c | 4 ++-- test/battle/status1/freeze.c | 4 ++-- 45 files changed, 132 insertions(+), 132 deletions(-) diff --git a/test/battle/ability/anger_point.c b/test/battle/ability/anger_point.c index 1993e67550e0..b803b40f3fcf 100644 --- a/test/battle/ability/anger_point.c +++ b/test/battle/ability/anger_point.c @@ -58,7 +58,7 @@ SINGLE_BATTLE_TEST("Anger Point does not trigger when a substitute takes the hit TURN { MOVE(player, MOVE_SUBSTITUTE); MOVE(opponent, MOVE_FROST_BREATH); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, player); - MESSAGE("Primeape made a SUBSTITUTE!"); + MESSAGE("Primeape put in a substitute!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FROST_BREATH, opponent); MESSAGE("A critical hit!"); NONE_OF { diff --git a/test/battle/ability/cloud_nine.c b/test/battle/ability/cloud_nine.c index b8d1d472d0c0..605b6f1c9455 100644 --- a/test/battle/ability/cloud_nine.c +++ b/test/battle/ability/cloud_nine.c @@ -15,7 +15,7 @@ SINGLE_BATTLE_TEST("Cloud Nine/Air Lock prevent basic weather effects, but witho TURN {} } SCENE { ABILITY_POPUP(player, ability); - MESSAGE("The effects of weather disappeared."); + MESSAGE("The effects of the weather disappeared."); MESSAGE("The opposing Wobbuffet used Sandstorm!"); MESSAGE("The sandstorm rages."); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SANDSTORM_CONTINUES); diff --git a/test/battle/ability/dancer.c b/test/battle/ability/dancer.c index dcb7a9eac8d2..45a442f7fdd0 100644 --- a/test/battle/ability/dancer.c +++ b/test/battle/ability/dancer.c @@ -90,7 +90,7 @@ SINGLE_BATTLE_TEST("Dancer doesn't trigger if the original user flinches") TURN { MOVE(opponent, MOVE_FAKE_OUT); MOVE(player, MOVE_DRAGON_DANCE); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, opponent); - MESSAGE("Wobbuffet flinched!"); + MESSAGE("Wobbuffet flinched and couldn't move!"); NONE_OF { ABILITY_POPUP(opponent, ABILITY_DANCER); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, opponent); @@ -114,7 +114,7 @@ DOUBLE_BATTLE_TEST("Dancer still triggers if another dancer flinches") ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerRight); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); ABILITY_POPUP(playerLeft, ABILITY_DANCER); - MESSAGE("Wobbuffet flinched!"); + MESSAGE("Wobbuffet flinched and couldn't move!"); NONE_OF { MESSAGE("Wobbuffet used Dragon Dance!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerLeft); diff --git a/test/battle/ability/dauntless_shield.c b/test/battle/ability/dauntless_shield.c index 062afb4c594f..ca9125e14f26 100644 --- a/test/battle/ability/dauntless_shield.c +++ b/test/battle/ability/dauntless_shield.c @@ -55,9 +55,9 @@ SINGLE_BATTLE_TEST("Dauntless Shield activates when it's no longer effected by N TURN { SWITCH(player, 1); } } SCENE { ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS); - MESSAGE("Neutralizing Gas filled the area!"); + MESSAGE("Neutralizing gas filled the area!"); SWITCH_OUT_MESSAGE("Weezing"); - MESSAGE("The effects of Neutralizing Gas wore off!"); + MESSAGE("The effects of the neutralizing gas wore off!"); ABILITY_POPUP(opponent, ABILITY_DAUNTLESS_SHIELD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); MESSAGE("The opposing Zamazenta's Dauntless Shield raised its Defense!"); diff --git a/test/battle/ability/defiant.c b/test/battle/ability/defiant.c index 5e3b621ae3db..e43810ef9a6e 100644 --- a/test/battle/ability/defiant.c +++ b/test/battle/ability/defiant.c @@ -129,7 +129,7 @@ SINGLE_BATTLE_TEST("Defiant activates after Sticky Web lowers Speed") ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, opponent); // Switch-in - Sticky Web activates SEND_IN_MESSAGE("Mankey"); - MESSAGE("Mankey was caught in a Sticky Web!"); + MESSAGE("Mankey was caught in a sticky web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Mankey's Speed fell!"); // Defiant activates @@ -153,7 +153,7 @@ SINGLE_BATTLE_TEST("Defiant doesn't activate after Sticky Web lowers Speed if Co ANIMATION(ANIM_TYPE_MOVE, MOVE_COURT_CHANGE, opponent); // Switch-in - Sticky Web activates SEND_IN_MESSAGE("Mankey"); - MESSAGE("Mankey was caught in a Sticky Web!"); + MESSAGE("Mankey was caught in a sticky web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Mankey's Speed fell!"); // Defiant doesn't activate @@ -180,7 +180,7 @@ SINGLE_BATTLE_TEST("Defiant correctly activates after Sticky Web lowers Speed if ANIMATION(ANIM_TYPE_MOVE, MOVE_COURT_CHANGE, opponent); // Switch-in - Sticky Web activates SEND_IN_MESSAGE("Mankey"); - MESSAGE("Mankey was caught in a Sticky Web!"); + MESSAGE("Mankey was caught in a sticky web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Mankey's Speed fell!"); // Defiant doesn't activate @@ -257,11 +257,11 @@ SINGLE_BATTLE_TEST("Defiant activates before White Herb") if (move == MOVE_LEER) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Mankey's White Herb restored its status!"); + MESSAGE("Mankey returned its stats to normal using its White Herb!"); } else { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Mankey's White Herb restored its status!"); + MESSAGE("Mankey returned its stats to normal using its White Herb!"); } } } THEN { diff --git a/test/battle/ability/embody_aspect.c b/test/battle/ability/embody_aspect.c index 1278fdb0079c..16a5e1ee6206 100644 --- a/test/battle/ability/embody_aspect.c +++ b/test/battle/ability/embody_aspect.c @@ -49,9 +49,9 @@ SINGLE_BATTLE_TEST("Embody Aspect activates when it's no longer effected by Neut TURN { SWITCH(player, 1); } } SCENE { ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS); - MESSAGE("Neutralizing Gas filled the area!"); + MESSAGE("Neutralizing gas filled the area!"); SWITCH_OUT_MESSAGE("Weezing"); - MESSAGE("The effects of Neutralizing Gas wore off!"); + MESSAGE("The effects of the neutralizing gas wore off!"); ABILITY_POPUP(opponent, ABILITY_EMBODY_ASPECT_TEAL_MASK); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); MESSAGE("The opposing Ogerpon's Embody Aspect raised its Speed!"); diff --git a/test/battle/ability/intimidate.c b/test/battle/ability/intimidate.c index 4201d488bb64..b7d979b4f30f 100644 --- a/test/battle/ability/intimidate.c +++ b/test/battle/ability/intimidate.c @@ -256,9 +256,9 @@ SINGLE_BATTLE_TEST("Intimidate activates when it's no longer effected by Neutral TURN { SWITCH(player, 1); } } SCENE { ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS); - MESSAGE("Neutralizing Gas filled the area!"); + MESSAGE("Neutralizing gas filled the area!"); SWITCH_OUT_MESSAGE("Weezing"); - MESSAGE("The effects of Neutralizing Gas wore off!"); + MESSAGE("The effects of the neutralizing gas wore off!"); ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); SEND_IN_MESSAGE("Wobbuffet"); } diff --git a/test/battle/ability/intrepid_sword.c b/test/battle/ability/intrepid_sword.c index 3ca1c9e7fb1f..68300fb229d6 100644 --- a/test/battle/ability/intrepid_sword.c +++ b/test/battle/ability/intrepid_sword.c @@ -55,9 +55,9 @@ SINGLE_BATTLE_TEST("Intrepid Sword activates when it's no longer effected by Neu TURN { SWITCH(player, 1); } } SCENE { ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS); - MESSAGE("Neutralizing Gas filled the area!"); + MESSAGE("Neutralizing gas filled the area!"); SWITCH_OUT_MESSAGE("Weezing"); - MESSAGE("The effects of Neutralizing Gas wore off!"); + MESSAGE("The effects of the neutralizing gas wore off!"); ABILITY_POPUP(opponent, ABILITY_INTREPID_SWORD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); MESSAGE("The opposing Zacian's Intrepid Sword raised its Attack!"); diff --git a/test/battle/ability/leaf_guard.c b/test/battle/ability/leaf_guard.c index 2c55236defb8..af113f1bb640 100644 --- a/test/battle/ability/leaf_guard.c +++ b/test/battle/ability/leaf_guard.c @@ -46,7 +46,7 @@ SINGLE_BATTLE_TEST("Leaf Guard prevents status conditions from Flame Orb and Tox NONE_OF { MESSAGE("Leafeon was burned!"); STATUS_ICON(player, burn: TRUE); } } else { - NONE_OF { MESSAGE("Leafeon is badly poisoned!"); STATUS_ICON(player, poison: TRUE); } + NONE_OF { MESSAGE("Leafeon was badly poisoned!"); STATUS_ICON(player, poison: TRUE); } } } } diff --git a/test/battle/ability/mirror_armor.c b/test/battle/ability/mirror_armor.c index c82f02f4cae0..00484205f06d 100644 --- a/test/battle/ability/mirror_armor.c +++ b/test/battle/ability/mirror_armor.c @@ -185,11 +185,11 @@ DOUBLE_BATTLE_TEST("Mirror Armor lowers Speed of the partner Pokemon after Court TURN { SWITCH(playerRight, 2);} TURN { } } SCENE { - MESSAGE("Wobbuffet used Sticky Web!"); + MESSAGE("Wobbuffet used sticky web!"); MESSAGE("The opposing Wynaut used Court Change!"); MESSAGE("The opposing Wynaut swapped the battle effects affecting each side!"); SEND_IN_MESSAGE("Corviknight"); - MESSAGE("Corviknight was caught in a Sticky Web!"); + MESSAGE("Corviknight was caught in a sticky web!"); ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Wobbuffet's Speed fell!"); diff --git a/test/battle/ability/sheer_force.c b/test/battle/ability/sheer_force.c index c144c8596f49..97dee48a313b 100644 --- a/test/battle/ability/sheer_force.c +++ b/test/battle/ability/sheer_force.c @@ -51,13 +51,13 @@ SINGLE_BATTLE_TEST("Sheer Force boosts power, but removes secondary effects of m STATUS_ICON(opponent, STATUS1_TOXIC_POISON); STATUS_ICON(opponent, STATUS1_PARALYSIS); MESSAGE("Wobbuffet is confused!"); - MESSAGE("Wobbuffet flinched!"); + MESSAGE("Wobbuffet flinched and couldn't move!"); } // Volt Tackle/Flare Blitz edge case: recoil happens, but target isn't statused if (gMovesInfo[move].recoil > 0) { HP_BAR(player); - MESSAGE("Tauros is hit with recoil!"); + MESSAGE("Tauros was damaged by the recoil!"); } } } FINALLY { diff --git a/test/battle/ability/shield_dust.c b/test/battle/ability/shield_dust.c index bcd202a06441..1fa2aad841fe 100644 --- a/test/battle/ability/shield_dust.c +++ b/test/battle/ability/shield_dust.c @@ -137,11 +137,11 @@ DOUBLE_BATTLE_TEST("Shield Dust does or does not block Sparkling Aria depending } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPARKLING_ARIA, playerLeft); if (moveToUse == MOVE_TACKLE) { - MESSAGE("The opposing Vivillon's burn was healed."); + MESSAGE("The opposing Vivillon's burn was cured!"); STATUS_ICON(opponentLeft, none: TRUE); } else { NONE_OF { - MESSAGE("The opposing Vivillon's burn was healed."); + MESSAGE("The opposing Vivillon's burn was cured!"); STATUS_ICON(opponentLeft, none: TRUE); } } @@ -159,7 +159,7 @@ SINGLE_BATTLE_TEST("Shield Dust blocks Sparkling Aria in singles") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPARKLING_ARIA, player); NONE_OF { - MESSAGE("The opposing Vivillon's burn was healed."); + MESSAGE("The opposing Vivillon's burn was cured!"); STATUS_ICON(opponent, none: TRUE); } } diff --git a/test/battle/ability/stamina.c b/test/battle/ability/stamina.c index 3402ffc969ff..527026284c0d 100644 --- a/test/battle/ability/stamina.c +++ b/test/battle/ability/stamina.c @@ -114,7 +114,7 @@ SINGLE_BATTLE_TEST("Stamina is not activated by users own Substitute") TURN { MOVE(player, MOVE_SUBSTITUTE); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, player); - MESSAGE("Mudbray made a SUBSTITUTE!"); + MESSAGE("Mudbray put in a substitute!"); NONE_OF { ABILITY_POPUP(player, ABILITY_STAMINA); MESSAGE("Mudbray's Defense rose!"); diff --git a/test/battle/ability/stench.c b/test/battle/ability/stench.c index db3192ce7850..76b36f3ff342 100644 --- a/test/battle/ability/stench.c +++ b/test/battle/ability/stench.c @@ -51,7 +51,7 @@ DOUBLE_BATTLE_TEST("Stench only triggers if target takes damage") MOVE(playerRight, MOVE_TACKLE, target: opponentRight); } } SCENE { - NONE_OF { MESSAGE("Wynaut flinched!"); } + NONE_OF { MESSAGE("Wynaut flinched and couldn't move!"); } } } @@ -74,7 +74,7 @@ DOUBLE_BATTLE_TEST("Stench doesn't trigger if partner uses a move") ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, playerLeft); MESSAGE("The opposing Grimer flinched and couldn't move!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); - NOT MESSAGE("Wynaut flinched!"); + NOT MESSAGE("Wynaut flinched and couldn't move!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerRight); } } diff --git a/test/battle/ability/toxic_chain.c b/test/battle/ability/toxic_chain.c index b6f022542890..0037cb85b6d3 100644 --- a/test/battle/ability/toxic_chain.c +++ b/test/battle/ability/toxic_chain.c @@ -14,7 +14,7 @@ SINGLE_BATTLE_TEST("Toxic Chain inflicts bad poison when attacking") } SCENE { ABILITY_POPUP(player, ABILITY_TOXIC_CHAIN); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - MESSAGE("The opposing Wobbuffet is badly poisoned!"); + MESSAGE("The opposing Wobbuffet was badly poisoned!"); STATUS_ICON(opponent, badPoison: TRUE); } THEN { EXPECT(opponent->status1 & STATUS1_TOXIC_POISON); @@ -35,13 +35,13 @@ SINGLE_BATTLE_TEST("Toxic Chain inflicts bad poison on any hit of a multi-hit mo } SCENE { ABILITY_POPUP(player, ABILITY_TOXIC_CHAIN); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - MESSAGE("The opposing Wobbuffet is badly poisoned!"); + MESSAGE("The opposing Wobbuffet was badly poisoned!"); STATUS_ICON(opponent, badPoison: TRUE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); STATUS_ICON(opponent, badPoison: FALSE); ABILITY_POPUP(player, ABILITY_TOXIC_CHAIN); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - MESSAGE("The opposing Wobbuffet is badly poisoned!"); + MESSAGE("The opposing Wobbuffet was badly poisoned!"); STATUS_ICON(opponent, badPoison: TRUE); } THEN { EXPECT(opponent->status1 & STATUS1_TOXIC_POISON); @@ -64,12 +64,12 @@ DOUBLE_BATTLE_TEST("Toxic Chain can inflict bad poison on both foes") HP_BAR(opponentLeft); ABILITY_POPUP(playerLeft, ABILITY_TOXIC_CHAIN); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponentLeft); - MESSAGE("The opposing Wobbuffet is badly poisoned!"); + MESSAGE("The opposing Wobbuffet was badly poisoned!"); STATUS_ICON(opponentLeft, badPoison: TRUE); HP_BAR(opponentRight); ABILITY_POPUP(playerLeft, ABILITY_TOXIC_CHAIN); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponentRight); - MESSAGE("The opposing Wynaut is badly poisoned!"); + MESSAGE("The opposing Wynaut was badly poisoned!"); STATUS_ICON(opponentRight, badPoison: TRUE); } THEN { EXPECT(opponentLeft->status1 & STATUS1_TOXIC_POISON); @@ -97,7 +97,7 @@ SINGLE_BATTLE_TEST("Toxic Chain makes Lum/Pecha Berry trigger before being knock } SCENE { ABILITY_POPUP(player, ABILITY_TOXIC_CHAIN); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); - MESSAGE("The opposing Wobbuffet is badly poisoned!"); + MESSAGE("The opposing Wobbuffet was badly poisoned!"); STATUS_ICON(opponent, badPoison: TRUE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); STATUS_ICON(opponent, badPoison: FALSE); diff --git a/test/battle/ability/trace.c b/test/battle/ability/trace.c index 0e984947ea77..b9ee36ec47cb 100644 --- a/test/battle/ability/trace.c +++ b/test/battle/ability/trace.c @@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Trace copies opponents ability") TURN { } } SCENE { ABILITY_POPUP(player, ABILITY_TRACE); - MESSAGE("Ralts TRACED the opposing Torchic's Blaze!"); + MESSAGE("It traced Torchic's Blaze!"); } } @@ -24,7 +24,7 @@ SINGLE_BATTLE_TEST("Trace copies opponents ability on switch-in") TURN { SWITCH(player, 1); } } SCENE { ABILITY_POPUP(player, ABILITY_TRACE); - MESSAGE("Ralts TRACED the opposing Torchic's Blaze!"); + MESSAGE("It traced Torchic's Blaze!"); } } @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Trace copies opponents ability on switch-in even if opponent } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_MISTY_EXPLOSION); ABILITY_POPUP(player, ABILITY_TRACE); - MESSAGE("Ralts TRACED the opposing Torchic's Blaze!"); + MESSAGE("It traced Torchic's Blaze!"); } } @@ -61,7 +61,7 @@ DOUBLE_BATTLE_TEST("Trace copies opponents ability randomly") TURN { } } SCENE { ABILITY_POPUP(playerLeft, ABILITY_TRACE); - MESSAGE("Ralts TRACED the opposing Torchic's Blaze!"); + MESSAGE("It traced Torchic's Blaze!"); } } @@ -76,7 +76,7 @@ SINGLE_BATTLE_TEST("Trace will copy an opponent's ability whenever it has the ch } SCENE { // TURN 2 ABILITY_POPUP(player, ABILITY_TRACE); - MESSAGE("Ralts TRACED the opposing Torchic's Blaze!"); + MESSAGE("It traced Torchic's Blaze!"); } } diff --git a/test/battle/ability/wind_rider.c b/test/battle/ability/wind_rider.c index e9cc4c184050..44baacc8a229 100644 --- a/test/battle/ability/wind_rider.c +++ b/test/battle/ability/wind_rider.c @@ -93,10 +93,10 @@ SINGLE_BATTLE_TEST("Wind Rider activates when it's no longer effected by Neutral TURN { SWITCH(player, 1); } } SCENE { ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS); - MESSAGE("Neutralizing Gas filled the area!"); + MESSAGE("Neutralizing gas filled the area!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TAILWIND, opponent); SWITCH_OUT_MESSAGE("Weezing"); - MESSAGE("The effects of Neutralizing Gas wore off!"); + MESSAGE("The effects of the neutralizing gas wore off!"); ABILITY_POPUP(opponent, ABILITY_WIND_RIDER); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); MESSAGE("The opposing Bramblin's Wind Rider raised its Attack!"); diff --git a/test/battle/gimmick/dynamax.c b/test/battle/gimmick/dynamax.c index f6f9127f9196..80b45cf72844 100644 --- a/test/battle/gimmick/dynamax.c +++ b/test/battle/gimmick/dynamax.c @@ -65,7 +65,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot be flinched") TURN { MOVE(opponent, MOVE_FAKE_OUT); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); } } SCENE { MESSAGE("The opposing Wobbuffet used Fake Out!"); - NONE_OF { MESSAGE("Wobbuffet flinched!"); } + NONE_OF { MESSAGE("Wobbuffet flinched and couldn't move!"); } MESSAGE("Wobbuffet used Max Strike!"); } } @@ -128,7 +128,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are affected by Grudge") } SCENE { MESSAGE("The opposing Wobbuffet used Grudge!"); MESSAGE("Wobbuffet used Max Strike!"); - MESSAGE("Wobbuffet's Tackle lost all its PP due to the GRUDGE!"); + MESSAGE("Wobbuffet's Tackle lost all its PP due to the grudge!"); MESSAGE("The opposing Wobbuffet fainted!"); } } @@ -355,7 +355,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon lose their substitutes") TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_TACKLE); } } SCENE { MESSAGE("Wobbuffet used Substitute!"); - MESSAGE("Wobbuffet made a SUBSTITUTE!"); + MESSAGE("Wobbuffet put in a substitute!"); MESSAGE("Wobbuffet used Max Strike!"); MESSAGE("The opposing Wobbuffet used Tackle!"); HP_BAR(player); @@ -595,7 +595,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Sitrus Berries heal based on a Pokemon's non-Dynam } WHEN { TURN { MOVE(opponent, MOVE_FLING); MOVE(player, MOVE_TACKLE, gimmick: dynamax); } } SCENE { - MESSAGE("Wobbuffet's Sitrus Berry restored health!"); + MESSAGE("Wobbuffet restored its health using its Sitrus Berry!"); HP_BAR(player, captureDamage: &results[i].damage); } FINALLY { EXPECT_EQ(results[0].damage, results[1].damage); @@ -1202,7 +1202,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Wildfire sets a field effect that damages no } SCENE { // turn 1 MESSAGE("Charizard used G-Max Wildfire!"); - MESSAGE("The opposing team was surrounded by flames!"); + MESSAGE("The opposing Pokémon were surrounded by fire!"); MESSAGE("The opposing Wobbuffet is burning up within G-Max Wildfire's flames!"); HP_BAR(opponentLeft, captureDamage: &damage); MESSAGE("The opposing Wynaut is burning up within G-Max Wildfire's flames!"); @@ -1273,7 +1273,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Snooze makes only the target drowsy") } SCENE { // turn 1 MESSAGE("Grimmsnarl used G-Max Snooze!"); - MESSAGE("Grimmsnarl made the opposing Blissey drowsy!"); + MESSAGE("Blissey grew drowsy!"); // turn 2 ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, opponentLeft); MESSAGE("The opposing Blissey fell asleep!"); diff --git a/test/battle/hold_effect/ability_shield.c b/test/battle/hold_effect/ability_shield.c index e10c3e08872a..3159d0d8a469 100644 --- a/test/battle/hold_effect/ability_shield.c +++ b/test/battle/hold_effect/ability_shield.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Ability Shield prevents Neutralizing Gas") TURN { } } SCENE { ABILITY_POPUP(opponent, ABILITY_NEUTRALIZING_GAS); - MESSAGE("Neutralizing Gas filled the area!"); + MESSAGE("Neutralizing gas filled the area!"); if (item == ITEM_ABILITY_SHIELD) { ABILITY_POPUP(player, ABILITY_DROUGHT); MESSAGE("Torkoal's Drought intensified the sun's rays!"); diff --git a/test/battle/hold_effect/covert_cloak.c b/test/battle/hold_effect/covert_cloak.c index 7049e79b8e2a..4bfc8a0e5255 100644 --- a/test/battle/hold_effect/covert_cloak.c +++ b/test/battle/hold_effect/covert_cloak.c @@ -140,11 +140,11 @@ DOUBLE_BATTLE_TEST("Covert Cloak does or does not block Sparkling Aria depending } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPARKLING_ARIA, playerLeft); if (moveToUse == MOVE_TACKLE) { - MESSAGE("The opposing Wobbuffet's burn was healed."); + MESSAGE("The opposing Wobbuffet's burn was cured!"); STATUS_ICON(opponentLeft, none: TRUE); } else { NONE_OF { - MESSAGE("The opposing Wobbuffet's burn was healed."); + MESSAGE("The opposing Wobbuffet's burn was cured!"); STATUS_ICON(opponentLeft, none: TRUE); } } @@ -162,7 +162,7 @@ SINGLE_BATTLE_TEST("Covert Cloak blocks Sparkling Aria in singles") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPARKLING_ARIA, player); NONE_OF { - MESSAGE("The opposing Wobbuffet's burn was healed."); + MESSAGE("The opposing Wobbuffet's burn was cured!"); STATUS_ICON(opponent, none: TRUE); } } diff --git a/test/battle/hold_effect/eject_button.c b/test/battle/hold_effect/eject_button.c index 949e2a5f647e..efbb034de1f7 100644 --- a/test/battle/hold_effect/eject_button.c +++ b/test/battle/hold_effect/eject_button.c @@ -61,7 +61,7 @@ SINGLE_BATTLE_TEST("Eject Button will not activate under Substitute") } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, opponent); - MESSAGE("The opposing Raichu made a SUBSTITUTE!"); + MESSAGE("The opposing Raichu put in a substitute!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); MESSAGE("The SUBSTITUTE took damage for the opposing Raichu!"); NONE_OF { diff --git a/test/battle/hold_effect/enigma_berry.c b/test/battle/hold_effect/enigma_berry.c index c678b178d3ea..5a058eed1b48 100644 --- a/test/battle/hold_effect/enigma_berry.c +++ b/test/battle/hold_effect/enigma_berry.c @@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Enigma Berry recovers 25% of HP if hit by super effective mo ANIMATION(ANIM_TYPE_MOVE, MOVE_ENDURE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_BITE, opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wynaut's Enigma Berry restored health!"); + MESSAGE("Wynaut restored its health using its Enigma Berry!"); HP_BAR(player, damage: -maxHP / 4); } } @@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("Enigma Berry does nothing if not hit by super effective move ANIMATION(ANIM_TYPE_MOVE, MOVE_BITE, opponent); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Mightyena's Enigma Berry restored health!"); + MESSAGE("Mightyena restored its health using its Enigma Berry!"); } } } @@ -54,7 +54,7 @@ SINGLE_BATTLE_TEST("Enigma Berry does nothing if Heal Block applies") ANIMATION(ANIM_TYPE_MOVE, MOVE_BITE, opponent); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wynaut's Enigma Berry restored health!"); + MESSAGE("Wynaut restored its health using its Enigma Berry!"); } } } diff --git a/test/battle/hold_effect/metronome.c b/test/battle/hold_effect/metronome.c index 0ab22cc87b23..21ad326cf1dd 100644 --- a/test/battle/hold_effect/metronome.c +++ b/test/battle/hold_effect/metronome.c @@ -120,7 +120,7 @@ SINGLE_BATTLE_TEST("Metronome Item counts charging turn of moves for its attacki TURN { SKIP_TURN(player); } } SCENE { MESSAGE("Wobbuffet used Solar Beam!"); - MESSAGE("Wobbuffet took in sunlight!"); + MESSAGE("Wobbuffet absorbed light!"); MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Congratulations, 1!"); MESSAGE("Wobbuffet used Solar Beam!"); diff --git a/test/battle/hold_effect/red_card.c b/test/battle/hold_effect/red_card.c index 00cf72c8f2b4..e1d94b4db0e9 100644 --- a/test/battle/hold_effect/red_card.c +++ b/test/battle/hold_effect/red_card.c @@ -417,7 +417,7 @@ SINGLE_BATTLE_TEST("Red Card is consumed after dragged out replacement has its S ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); MESSAGE("The opposing Wobbuffet held up its Red Card against Wobbuffet!"); MESSAGE("Wynaut was dragged out!"); - MESSAGE("Wynaut was caught in a Sticky Web!"); + MESSAGE("Wynaut was caught in a sticky web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); // 3rd turn, Red Card was consumed, it can't trigger again NONE_OF { diff --git a/test/battle/hold_effect/restore_stats.c b/test/battle/hold_effect/restore_stats.c index 7052c1aa1499..04e164b318f5 100644 --- a/test/battle/hold_effect/restore_stats.c +++ b/test/battle/hold_effect/restore_stats.c @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("White Herb restores stats when they're lowered") } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet's White Herb restored its status!"); + MESSAGE("Wobbuffet returned its stats to normal using its White Herb!"); } THEN { EXPECT(player->item == ITEM_NONE); EXPECT(player->statStages[STAT_DEF] = DEFAULT_STAT_STAGE); @@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("White Herb restores stats after Attack was lowered by Intimi ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet's White Herb restored its status!"); + MESSAGE("Wobbuffet returned its stats to normal using its White Herb!"); } THEN { EXPECT(player->item == ITEM_NONE); EXPECT(player->statStages[STAT_DEF] = DEFAULT_STAT_STAGE); @@ -56,11 +56,11 @@ DOUBLE_BATTLE_TEST("White Herb restores stats after Attack was lowered by Intimi ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentLeft); - MESSAGE("The opposing Wobbuffet's White Herb restored its status!"); + MESSAGE("The opposing Wobbuffet returned its stats to normal using its White Herb!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentRight); - MESSAGE("The opposing Wynaut's White Herb restored its status!"); + MESSAGE("The opposing Wynaut returned its stats to normal using its White Herb!"); } THEN { EXPECT(opponentLeft->item == ITEM_NONE); EXPECT(opponentLeft->statStages[STAT_DEF] = DEFAULT_STAT_STAGE); @@ -81,11 +81,11 @@ SINGLE_BATTLE_TEST("White Herb restores stats after Attack was lowered by Intimi ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet's White Herb restored its status!"); + MESSAGE("Wobbuffet returned its stats to normal using its White Herb!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CLOSE_COMBAT, player); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet's White Herb restored its status!"); + MESSAGE("Wobbuffet returned its stats to normal using its White Herb!"); } } THEN { EXPECT(player->item == ITEM_NONE); @@ -117,7 +117,7 @@ SINGLE_BATTLE_TEST("White Herb restores stats after all hits of a multi hit move ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Wobbuffet's Speed fell!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet's White Herb restored its status!"); + MESSAGE("Wobbuffet returned its stats to normal using its White Herb!"); } THEN { EXPECT(player->item == ITEM_NONE); EXPECT(player->statStages[STAT_SPEED] = DEFAULT_STAT_STAGE); @@ -152,7 +152,7 @@ SINGLE_BATTLE_TEST("White Herb wont have time to activate if it is knocked off o } NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet's White Herb restored its status!"); + MESSAGE("Wobbuffet returned its stats to normal using its White Herb!"); } } THEN { EXPECT(player->statStages[STAT_DEF] = DEFAULT_STAT_STAGE - 1); @@ -177,7 +177,7 @@ SINGLE_BATTLE_TEST("White Herb wont have time to activate if Magician steals it" MESSAGE("The opposing Fennekin stole Slugma's White Herb!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet's White Herb restored its status!"); + MESSAGE("Wobbuffet returned its stats to normal using its White Herb!"); } } THEN { EXPECT(player->statStages[STAT_DEF] = DEFAULT_STAT_STAGE - 1); @@ -205,7 +205,7 @@ SINGLE_BATTLE_TEST("White Herb has correct interactions with Intimidate triggere // Defiant activates first, so White Herb doesn't have a chance to trigger. if (ability == ABILITY_COMPETITIVE) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Igglybuff's White Herb restored its status!"); + MESSAGE("Igglybuff returned its stats to normal using its White Herb!"); } } THEN { if (ability == ABILITY_COMPETITIVE) { diff --git a/test/battle/item_effect/escape.c b/test/battle/item_effect/escape.c index 15207b7e600b..b02333567d91 100644 --- a/test/battle/item_effect/escape.c +++ b/test/battle/item_effect/escape.c @@ -14,7 +14,7 @@ WILD_BATTLE_TEST("Poke Toy lets the player escape from a wild battle") } WHEN { TURN { USE_ITEM(player, ITEM_POKE_TOY); } } SCENE { - MESSAGE("{PLAY_SE SE_FLEE}Got away safely!\p"); + MESSAGE("{PLAY_SE SE_FLEE}You got away safely!\p"); } } @@ -33,7 +33,7 @@ WILD_BATTLE_TEST("Poke Toy lets the player escape from a wild battle even if a m ANIMATION(ANIM_TYPE_MOVE, MOVE_MEAN_LOOK, opponent); MESSAGE("Wobbuffet can't escape now!"); // Turn 2 - MESSAGE("{PLAY_SE SE_FLEE}Got away safely!\p"); + MESSAGE("{PLAY_SE SE_FLEE}You got away safely!\p"); } } @@ -45,6 +45,6 @@ WILD_BATTLE_TEST("Poke Toy lets the player escape from a wild battle even if an } WHEN { TURN { USE_ITEM(player, ITEM_POKE_TOY); } } SCENE { - MESSAGE("{PLAY_SE SE_FLEE}Got away safely!\p"); + MESSAGE("{PLAY_SE SE_FLEE}You got away safely!\p"); } } diff --git a/test/battle/move_effect/court_change.c b/test/battle/move_effect/court_change.c index 4ec7b58f6735..bfaab880f2f9 100644 --- a/test/battle/move_effect/court_change.c +++ b/test/battle/move_effect/court_change.c @@ -21,7 +21,7 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the opponent") TURN { MOVE(playerLeft, MOVE_COURT_CHANGE); } TURN { SWITCH(playerLeft, 2); SWITCH(opponentLeft, 2); } } SCENE { - MESSAGE("The opposing Wobbuffet used Sticky Web!"); + MESSAGE("The opposing Wobbuffet used sticky web!"); MESSAGE("The opposing Wobbuffet used Stealth Rock!"); MESSAGE("The opposing Wobbuffet used Spikes!"); MESSAGE("The opposing Wobbuffet used Toxic Spikes!"); @@ -32,13 +32,13 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the opponent") MESSAGE("Wynaut was hurt by the spikes!"); MESSAGE("Pointed stones dug into Wynaut!"); MESSAGE("Wynaut was poisoned!"); - MESSAGE("Wynaut was caught in a Sticky Web!"); + MESSAGE("Wynaut was caught in a sticky web!"); } MESSAGE("2 sent out Wobbuffet!"); MESSAGE("The opposing Wobbuffet was hurt by the spikes!"); MESSAGE("Pointed stones dug into the opposing Wobbuffet!"); MESSAGE("The opposing Wobbuffet was poisoned!"); - MESSAGE("The opposing Wobbuffet was caught in a Sticky Web!"); + MESSAGE("The opposing Wobbuffet was caught in a sticky web!"); } } @@ -57,7 +57,7 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the player") TURN { MOVE(opponentLeft, MOVE_COURT_CHANGE); } TURN { SWITCH(opponentLeft, 2); SWITCH(playerLeft, 2); } } SCENE { - MESSAGE("Wobbuffet used Sticky Web!"); + MESSAGE("Wobbuffet used sticky web!"); MESSAGE("Wobbuffet used Stealth Rock!"); MESSAGE("Wobbuffet used Spikes!"); MESSAGE("Wobbuffet used Toxic Spikes!"); @@ -67,13 +67,13 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the player") MESSAGE("Wobbuffet was hurt by the spikes!"); MESSAGE("Pointed stones dug into Wobbuffet!"); MESSAGE("Wobbuffet was poisoned!"); - MESSAGE("Wobbuffet was caught in a Sticky Web!"); + MESSAGE("Wobbuffet was caught in a sticky web!"); MESSAGE("2 sent out Wynaut!"); NONE_OF { MESSAGE("The opposing Wynaut was hurt by the spikes!"); MESSAGE("Pointed stones dug into the opposing Wynaut!"); MESSAGE("The opposing Wynaut was poisoned!"); - MESSAGE("The opposing Wynaut was caught in a Sticky Web!"); + MESSAGE("The opposing Wynaut was caught in a sticky web!"); } } } diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c index d7fa358019b6..4403153cd2b8 100644 --- a/test/battle/move_effect/defog.c +++ b/test/battle/move_effect/defog.c @@ -165,7 +165,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and S if (move != MOVE_DEFOG || B_DEFOG_EFFECT_CLEARING <= GEN_5) { HP_BAR(playerLeft); MESSAGE("Pointed stones dug into Wobbuffet!"); - MESSAGE("Wobbuffet was caught in a Sticky Web!"); + MESSAGE("Wobbuffet was caught in a sticky web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Wobbuffet's Speed fell!"); } @@ -173,7 +173,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and S NONE_OF { HP_BAR(playerLeft); MESSAGE("Pointed stones dug into Wobbuffet!"); - MESSAGE("Wobbuffet was caught in a Sticky Web!"); + MESSAGE("Wobbuffet was caught in a sticky web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Wobbuffet's Speed fell!"); } diff --git a/test/battle/move_effect/embargo.c b/test/battle/move_effect/embargo.c index fcd31581813f..960a547442cc 100644 --- a/test/battle/move_effect/embargo.c +++ b/test/battle/move_effect/embargo.c @@ -59,7 +59,7 @@ WILD_BATTLE_TEST("Embargo doesn't block held item effects that affect experience } WHEN { TURN { MOVE(opponent, MOVE_EMBARGO); MOVE(player, MOVE_SCRATCH); } } SCENE { - MESSAGE("Wild Caterpie used Embargo!"); + MESSAGE("The wild Caterpie used Embargo!"); MESSAGE("Wobbuffet can't use items anymore!"); MESSAGE("Wobbuffet used Scratch!"); MESSAGE("Wild Caterpie fainted!"); @@ -84,7 +84,7 @@ WILD_BATTLE_TEST("Embargo doesn't block held item effects that affect effort val TURN { MOVE(opponent, MOVE_EMBARGO); MOVE(player, MOVE_SCRATCH); } } SCENE { // Turn 1 - MESSAGE("Wild Caterpie used Embargo!"); + MESSAGE("The wild Caterpie used Embargo!"); MESSAGE("Wobbuffet can't use items anymore!"); // Turn 2 MESSAGE("Wobbuffet used Scratch!"); diff --git a/test/battle/move_effect/fling.c b/test/battle/move_effect/fling.c index bbc1d7c4c969..70a6c68366d2 100644 --- a/test/battle/move_effect/fling.c +++ b/test/battle/move_effect/fling.c @@ -179,7 +179,7 @@ SINGLE_BATTLE_TEST("Fling doesn't consume the item if pokemon is asleep/frozen/p } SCENE { if (status == STATUS1_FREEZE) { MESSAGE("Wobbuffet is frozen solid!"); - MESSAGE("Wobbuffet was defrosted!"); + MESSAGE("Wobbuffet thawed out!"); } else if (status == STATUS1_PARALYSIS) { MESSAGE("Wobbuffet couldn't move because it's paralyzed!"); @@ -243,7 +243,7 @@ SINGLE_BATTLE_TEST("Fling applies special effects when throwing specific Items") break; case ITEM_TOXIC_ORB: { - MESSAGE("The opposing Wobbuffet is badly poisoned!"); + MESSAGE("The opposing Wobbuffet was badly poisoned!"); STATUS_ICON(opponent, STATUS1_TOXIC_POISON); } break; @@ -309,7 +309,7 @@ SINGLE_BATTLE_TEST("Fling's secondary effects are blocked by Shield Dust") case ITEM_TOXIC_ORB: { NONE_OF { - MESSAGE("The opposing Wobbuffet is badly poisoned!"); + MESSAGE("The opposing Wobbuffet was badly poisoned!"); STATUS_ICON(opponent, STATUS1_TOXIC_POISON); } MESSAGE("The Toxic Orb was used up..."); @@ -373,11 +373,11 @@ SINGLE_BATTLE_TEST("Fling - thrown berry's effect activates for the target even HP_BAR(opponent); if (effect == HOLD_EFFECT_RESTORE_HP) { if (item == ITEM_ORAN_BERRY) { - MESSAGE("The opposing Wobbuffet's Oran Berry restored health!"); + MESSAGE("The opposing Wobbuffet restored its health using its Oran Berry!"); } else if (item == ITEM_SITRUS_BERRY) { - MESSAGE("The opposing Wobbuffet's Sitrus Berry restored health!"); + MESSAGE("The opposing Wobbuffet restored its health using its Sitrus Berry!"); } else { - MESSAGE("Wobbuffet's Enigma Berry restored health!"); + MESSAGE("Wobbuffet restored its health using its Enigma Berry!"); } HP_BAR(opponent); } diff --git a/test/battle/move_effect/ion_deluge.c b/test/battle/move_effect/ion_deluge.c index 6f76b07f8c96..d0862ee8b441 100644 --- a/test/battle/move_effect/ion_deluge.c +++ b/test/battle/move_effect/ion_deluge.c @@ -15,7 +15,7 @@ WILD_BATTLE_TEST("Ion Deluge works the same way as always when used by a mon wit } WHEN { TURN { MOVE(opponent, MOVE_ION_DELUGE); } } SCENE { - MESSAGE("Wild Lanturn used Ion Deluge!"); + MESSAGE("The wild Lanturn used Ion Deluge!"); NONE_OF { ABILITY_POPUP(opponent, ABILITY_VOLT_ABSORB); HP_BAR(opponent); @@ -37,7 +37,7 @@ WILD_BATTLE_TEST("Ion Deluge works the same way as always when used by a mon wit } WHEN { TURN { MOVE(opponent, MOVE_ION_DELUGE); } } SCENE { - MESSAGE("Wild Zebstrika used Ion Deluge!"); + MESSAGE("The wild Zebstrika used Ion Deluge!"); NONE_OF { ABILITY_POPUP(opponent, ability); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); diff --git a/test/battle/move_effect/knock_off.c b/test/battle/move_effect/knock_off.c index 8086e8cc7c42..c6dbc392846b 100644 --- a/test/battle/move_effect/knock_off.c +++ b/test/battle/move_effect/knock_off.c @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("Knock Off knocks a healing berry before it has the chance to ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, player); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); - MESSAGE("The opposing Wobbuffet's Sitrus Berry restored health!"); + MESSAGE("The opposing Wobbuffet restored its health using its Sitrus Berry!"); } ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF); MESSAGE("Wobbuffet knocked off the opposing Wobbuffet's Sitrus Berry!"); @@ -187,7 +187,7 @@ DOUBLE_BATTLE_TEST("Knock Off does not trigger the opposing ally's Symbiosis") MESSAGE("The opposing Wobbuffet knocked off Wobbuffet's Leftovers!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT); - MESSAGE("Wobbuffet's Leftovers restored health!"); + MESSAGE("Wobbuffet restored its health using its Leftovers!"); } } THEN { EXPECT(playerLeft->item == ITEM_NONE); diff --git a/test/battle/move_effect/pledge.c b/test/battle/move_effect/pledge.c index cb4d02908dba..a06876f4a81b 100644 --- a/test/battle/move_effect/pledge.c +++ b/test/battle/move_effect/pledge.c @@ -426,11 +426,11 @@ DOUBLE_BATTLE_TEST("Pledge move combo fails if ally fails to act - Flinch Right" TURN { MOVE(opponentLeft, MOVE_FAKE_OUT, target: playerRight); MOVE(playerLeft, MOVE_FIRE_PLEDGE, target: opponentRight); MOVE(playerRight, MOVE_GRASS_PLEDGE, target: opponentRight); } } SCENE { if (speedPLeft < speedPRight) { - MESSAGE("Wynaut flinched!"); + MESSAGE("Wynaut flinched and couldn't move!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); } else { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); - MESSAGE("Wynaut flinched!"); + MESSAGE("Wynaut flinched and couldn't move!"); } NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); @@ -459,11 +459,11 @@ DOUBLE_BATTLE_TEST("Pledge move combo fails if ally fails to act - Flinch Left") TURN { MOVE(opponentLeft, MOVE_FAKE_OUT, target: playerLeft); MOVE(playerRight, MOVE_FIRE_PLEDGE, target: opponentRight); MOVE(playerLeft, MOVE_GRASS_PLEDGE, target: opponentRight); } } SCENE { if (speedPRight < speedPLeft) { - MESSAGE("Wobbuffet flinched!"); + MESSAGE("Wobbuffet flinched and couldn't move!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); } else { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); - MESSAGE("Wobbuffet flinched!"); + MESSAGE("Wobbuffet flinched and couldn't move!"); } NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); @@ -732,8 +732,8 @@ DOUBLE_BATTLE_TEST("Pledge move combo fails if ally fails to act - Flinch Both L } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, opponentRight); - MESSAGE("Wobbuffet flinched!"); - MESSAGE("Wynaut flinched!"); + MESSAGE("Wobbuffet flinched and couldn't move!"); + MESSAGE("Wynaut flinched and couldn't move!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); @@ -757,8 +757,8 @@ DOUBLE_BATTLE_TEST("Pledge move combo fails if ally fails to act - Flinch Both R } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, opponentRight); - MESSAGE("Wynaut flinched!"); - MESSAGE("Wobbuffet flinched!"); + MESSAGE("Wynaut flinched and couldn't move!"); + MESSAGE("Wobbuffet flinched and couldn't move!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); diff --git a/test/battle/move_effect/protect.c b/test/battle/move_effect/protect.c index b0a6ff3a7870..fb046cdba33e 100644 --- a/test/battle/move_effect/protect.c +++ b/test/battle/move_effect/protect.c @@ -260,7 +260,7 @@ SINGLE_BATTLE_TEST("Recoil damage is not applied if target was protected") // MESSAGE("Rapidash used recoilMove!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, recoilMove, player); - MESSAGE("Rapidash is hit with recoil!"); + MESSAGE("Rapidash was damaged by the recoil!"); } } } diff --git a/test/battle/move_effect/relic_song.c b/test/battle/move_effect/relic_song.c index 27df07797f9c..e7569c7e389e 100644 --- a/test/battle/move_effect/relic_song.c +++ b/test/battle/move_effect/relic_song.c @@ -64,7 +64,7 @@ SINGLE_BATTLE_TEST("Relic Song is blocked by Throat Chop") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_THROAT_CHOP, opponent); HP_BAR(player); - MESSAGE("Wobbuffet can't use Relic Song due to Throat Chop!"); + MESSAGE("The effects of Throat Chop prevent Wobbuffet from using certain moves!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_RELIC_SONG, player); } } diff --git a/test/battle/move_effect/shed_tail.c b/test/battle/move_effect/shed_tail.c index db9351a7a9a6..788ba079c23e 100644 --- a/test/battle/move_effect/shed_tail.c +++ b/test/battle/move_effect/shed_tail.c @@ -52,7 +52,7 @@ SINGLE_BATTLE_TEST("Shed Tail's HP cost can trigger a berry before the user swit TURN { MOVE(player, MOVE_SHED_TAIL); SEND_OUT(player, 1); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SHED_TAIL, player); - MESSAGE("Wobbuffet's Sitrus Berry restored health!"); + MESSAGE("Wobbuffet restored its health using its Sitrus Berry!"); SEND_IN_MESSAGE("Wynaut"); } } diff --git a/test/battle/move_effect/sparkling_aria.c b/test/battle/move_effect/sparkling_aria.c index eb891e0c037c..332cf8165c9c 100644 --- a/test/battle/move_effect/sparkling_aria.c +++ b/test/battle/move_effect/sparkling_aria.c @@ -18,8 +18,8 @@ DOUBLE_BATTLE_TEST("Sparkling Aria cures burns from all Pokemon on the field and } WHEN { TURN { MOVE(opponentLeft, MOVE_SUBSTITUTE); MOVE(opponentRight, MOVE_CELEBRATE); MOVE(playerRight, MOVE_CELEBRATE); MOVE(playerLeft, MOVE_SPARKLING_ARIA); } } SCENE { - MESSAGE("The opposing Wobbuffet's burn was healed."); - MESSAGE("Wobbuffet's burn was healed."); - MESSAGE("The opposing Wynaut's burn was healed."); + MESSAGE("The opposing Wobbuffet's burn was cured!"); + MESSAGE("Wobbuffet's burn was cured!"); + MESSAGE("The opposing Wynaut's burn was cured!"); } } diff --git a/test/battle/move_effect/sticky_web.c b/test/battle/move_effect/sticky_web.c index 434814801f5b..e7555cae48be 100644 --- a/test/battle/move_effect/sticky_web.c +++ b/test/battle/move_effect/sticky_web.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Sticky Web lowers Speed by 1 on switch-in") ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); MESSAGE("A sticky web has been laid out on the ground around the opposing team!"); MESSAGE("2 sent out Wynaut!"); - MESSAGE("The opposing Wynaut was caught in a Sticky Web!"); + MESSAGE("The opposing Wynaut was caught in a sticky web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); MESSAGE("The opposing Wynaut's Speed fell!"); } @@ -35,11 +35,11 @@ SINGLE_BATTLE_TEST("Sticky Web can only be set up 1 time") TURN { MOVE(player, MOVE_STICKY_WEB); } TURN { MOVE(player, MOVE_STICKY_WEB); } } SCENE { - MESSAGE("Wobbuffet used Sticky Web!"); + MESSAGE("Wobbuffet used sticky web!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); MESSAGE("A sticky web has been laid out on the ground around the opposing team!"); - MESSAGE("Wobbuffet used Sticky Web!"); + MESSAGE("Wobbuffet used sticky web!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); MESSAGE("But it failed!"); } @@ -66,10 +66,10 @@ DOUBLE_BATTLE_TEST("Sticky Web lowers Speed by 1 in a double battle after Explos ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, playerLeft); MESSAGE("2 sent out Wynaut!"); MESSAGE("2 sent out Alakazam!"); - MESSAGE("The opposing Alakazam was caught in a Sticky Web!"); + MESSAGE("The opposing Alakazam was caught in a sticky web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); MESSAGE("The opposing Alakazam's Speed fell!"); - MESSAGE("The opposing Wynaut was caught in a Sticky Web!"); + MESSAGE("The opposing Wynaut was caught in a sticky web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); MESSAGE("The opposing Wynaut's Speed fell!"); } @@ -89,7 +89,7 @@ SINGLE_BATTLE_TEST("Sticky Web raises Speed by 1 for a Pokemon with Contrary") ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); MESSAGE("A sticky web has been laid out on the ground around the opposing team!"); MESSAGE("2 sent out Shuckle!"); - MESSAGE("The opposing Shuckle was caught in a Sticky Web!"); + MESSAGE("The opposing Shuckle was caught in a sticky web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); MESSAGE("The opposing Shuckle's Speed rose!"); } @@ -124,18 +124,18 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - the MESSAGE("A sticky web has been laid out on the ground around the opposing team!"); SEND_IN_MESSAGE("Corviknight"); - MESSAGE("Corviknight was caught in a Sticky Web!"); + MESSAGE("Corviknight was caught in a sticky web!"); ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, BATTLER_OPPONENT); if (opponentSetUpper == 0) { MESSAGE("The opposing Caterpie's Speed fell!"); NONE_OF { - MESSAGE("The opposing Caterpie was caught in a Sticky Web!"); + MESSAGE("The opposing Caterpie was caught in a sticky web!"); } } else { MESSAGE("The opposing Weedle's Speed fell!"); NONE_OF { - MESSAGE("The opposing Weedle was caught in a Sticky Web!"); + MESSAGE("The opposing Weedle was caught in a sticky web!"); } } } @@ -177,7 +177,7 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - no o } SEND_IN_MESSAGE("Corviknight"); - MESSAGE("Corviknight was caught in a Sticky Web!"); + MESSAGE("Corviknight was caught in a sticky web!"); ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); } THEN { @@ -226,7 +226,7 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - no o } SEND_IN_MESSAGE("Corviknight"); - MESSAGE("Corviknight was caught in a Sticky Web!"); + MESSAGE("Corviknight was caught in a sticky web!"); ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); } THEN { diff --git a/test/battle/move_effect/substitute.c b/test/battle/move_effect/substitute.c index 072eaa6869b1..92e894fa073f 100644 --- a/test/battle/move_effect/substitute.c +++ b/test/battle/move_effect/substitute.c @@ -21,7 +21,7 @@ SINGLE_BATTLE_TEST("Substitute creates a Substitute at the cost of 1/4 users max maxHP = GetMonData(&gPlayerParty[0], MON_DATA_HP); ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, player); HP_BAR(player, captureDamage: &costHP); - MESSAGE("Wobbuffet made a SUBSTITUTE!"); + MESSAGE("Wobbuffet put in a substitute!"); }THEN { EXPECT_EQ(maxHP / 4, costHP); } @@ -51,7 +51,7 @@ SINGLE_BATTLE_TEST("Substitute's HP cost can trigger a berry") TURN { MOVE(player, MOVE_SUBSTITUTE); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, player); - MESSAGE("Wobbuffet's Sitrus Berry restored health!"); + MESSAGE("Wobbuffet restored its health using its Sitrus Berry!"); } } @@ -64,7 +64,7 @@ SINGLE_BATTLE_TEST("Substitute's HP cost doesn't trigger effects that trigger on TURN { MOVE(player, MOVE_SUBSTITUTE); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, player); - MESSAGE("Wobbuffet made a SUBSTITUTE!"); + MESSAGE("Wobbuffet put in a substitute!"); NOT MESSAGE("Wobbuffet's Air Balloon popped!"); } } diff --git a/test/battle/move_effect/tidy_up.c b/test/battle/move_effect/tidy_up.c index ed278fe33743..b2567ffc6ee5 100644 --- a/test/battle/move_effect/tidy_up.c +++ b/test/battle/move_effect/tidy_up.c @@ -63,7 +63,7 @@ SINGLE_BATTLE_TEST("Tidy Up removes Substitute") } SCENE { MESSAGE("The opposing Wobbuffet used Substitute!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, opponent); - MESSAGE("The opposing Wobbuffet made a SUBSTITUTE!"); + MESSAGE("The opposing Wobbuffet put in a substitute!"); MESSAGE("Wobbuffet used Tidy Up!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TIDY_UP, player); MESSAGE("The opposing Wobbuffet's SUBSTITUTE faded!"); diff --git a/test/battle/move_effect/two_turns_attack.c b/test/battle/move_effect/two_turns_attack.c index 4b7adc6f812d..efeb419ce554 100644 --- a/test/battle/move_effect/two_turns_attack.c +++ b/test/battle/move_effect/two_turns_attack.c @@ -208,29 +208,29 @@ SINGLE_BATTLE_TEST("Solar Beam and Solar Blade can be used instantly in Sunlight TURN { SKIP_TURN(player); } } SCENE { if (move1 == MOVE_SUNNY_DAY) { - NOT MESSAGE("Wobbuffet took in sunlight!"); + NOT MESSAGE("Wobbuffet absorbed light!"); } else { if (move2 == MOVE_SOLAR_BEAM) { if (B_UPDATED_MOVE_DATA >= GEN_5) { MESSAGE("Wobbuffet used Solar Beam!"); - MESSAGE("Wobbuffet took in sunlight!"); + MESSAGE("Wobbuffet absorbed light!"); ANIMATION(ANIM_TYPE_MOVE, move2, player); } else { NOT MESSAGE("Wobbuffet used Solar Beam!"); ANIMATION(ANIM_TYPE_MOVE, move2, player); - MESSAGE("Wobbuffet took in sunlight!"); + MESSAGE("Wobbuffet absorbed light!"); } MESSAGE("Wobbuffet used Solar Beam!"); } else { if (B_UPDATED_MOVE_DATA >= GEN_5) { MESSAGE("Wobbuffet used Solar Blade!"); - MESSAGE("Wobbuffet took in sunlight!"); + MESSAGE("Wobbuffet absorbed light!"); ANIMATION(ANIM_TYPE_MOVE, move2, player); } else { NOT MESSAGE("Wobbuffet used Solar Blade!"); ANIMATION(ANIM_TYPE_MOVE, move2, player); - MESSAGE("Wobbuffet took in sunlight!"); + MESSAGE("Wobbuffet absorbed light!"); } MESSAGE("Wobbuffet used Solar Blade!"); } diff --git a/test/battle/move_effect_secondary/bug_bite.c b/test/battle/move_effect_secondary/bug_bite.c index 3d2ae62c0748..d4bbde4fad75 100644 --- a/test/battle/move_effect_secondary/bug_bite.c +++ b/test/battle/move_effect_secondary/bug_bite.c @@ -52,11 +52,11 @@ SINGLE_BATTLE_TEST("Bug Bite eats the target's berry and immediately gains its e HP_BAR(opponent); if (effect == HOLD_EFFECT_RESTORE_HP || effect == HOLD_EFFECT_ENIGMA_BERRY) { if (item == ITEM_ORAN_BERRY) { - MESSAGE("Wobbuffet's Oran Berry restored health!"); + MESSAGE("Wobbuffet restored its health using its Oran Berry!"); } else if (item == ITEM_SITRUS_BERRY) { - MESSAGE("Wobbuffet's Sitrus Berry restored health!"); + MESSAGE("Wobbuffet restored its health using its Sitrus Berry!"); } else { - MESSAGE("Wobbuffet's Enigma Berry restored health!"); + MESSAGE("Wobbuffet restored its health using its Enigma Berry!"); } HP_BAR(player); } diff --git a/test/battle/move_effect_secondary/flinch.c b/test/battle/move_effect_secondary/flinch.c index 29bee42467ae..28b555f00f2a 100644 --- a/test/battle/move_effect_secondary/flinch.c +++ b/test/battle/move_effect_secondary/flinch.c @@ -60,7 +60,7 @@ SINGLE_BATTLE_TEST("Protect always works when used after flinching") // 2nd turn ANIMATION(ANIM_TYPE_MOVE, MOVE_HEADBUTT, opponent); HP_BAR(player); - MESSAGE("Wobbuffet flinched!"); + MESSAGE("Wobbuffet flinched and couldn't move!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); // 3rd turn diff --git a/test/battle/move_effect_secondary/throat_chop.c b/test/battle/move_effect_secondary/throat_chop.c index 7a9fcfaccfef..79232227852a 100644 --- a/test/battle/move_effect_secondary/throat_chop.c +++ b/test/battle/move_effect_secondary/throat_chop.c @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("Throat Chop prevents the usage of sound moves") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_THROAT_CHOP, player); HP_BAR(opponent); - MESSAGE("The opposing Wobbuffet can't use Hyper Voice due to Throat Chop!"); + MESSAGE("The effects of Throat Chop prevent The opposing Wobbuffet from using certain moves!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPER_VOICE, opponent); } @@ -38,7 +38,7 @@ SINGLE_BATTLE_TEST("Throat Chop won't work through a substitute") HP_BAR(opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_THROAT_CHOP, player); NONE_OF { - MESSAGE("The opposing Wobbuffet can't use Hyper Voice due to Throat Chop!"); + MESSAGE("The effects of Throat Chop prevent The opposing Wobbuffet from using certain moves!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPER_VOICE, opponent); } diff --git a/test/battle/status1/freeze.c b/test/battle/status1/freeze.c index 906d3643993a..f218430909e1 100644 --- a/test/battle/status1/freeze.c +++ b/test/battle/status1/freeze.c @@ -24,7 +24,7 @@ SINGLE_BATTLE_TEST("Freeze is thawed by opponent's Fire-type attacks") TURN { MOVE(opponent, MOVE_EMBER); MOVE(player, MOVE_CELEBRATE); } } SCENE { MESSAGE("The opposing Wobbuffet used Ember!"); - MESSAGE("Wobbuffet was defrosted!"); + MESSAGE("Wobbuffet thawed out!"); STATUS_ICON(player, none: TRUE); } } @@ -38,7 +38,7 @@ SINGLE_BATTLE_TEST("Freeze is thawed by user's Flame Wheel") } WHEN { TURN { MOVE(player, MOVE_FLAME_WHEEL); } } SCENE { - MESSAGE("Wobbuffet was defrosted by Flame Wheel!"); + MESSAGE("Wobbuffet's Flame Wheel melted the ice!"); STATUS_ICON(player, none: TRUE); MESSAGE("Wobbuffet used Flame Wheel!"); } From a96b5f69f5718fc76eaf6c5bf1fa85fd0b7e25e5 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 9 Sep 2024 19:00:37 -0300 Subject: [PATCH 39/68] 99 left --- test/battle/ability/hyper_cutter.c | 2 +- test/battle/ability/keen_eye.c | 6 +++--- test/battle/ability/prankster.c | 4 ++-- test/battle/ability/static.c | 6 +++--- test/battle/ability/toxic_debris.c | 20 ++++++++++---------- test/battle/ability/weak_armor.c | 6 +++--- test/battle/crit_chance.c | 2 +- test/battle/hold_effect/berserk_gene.c | 2 +- test/battle/hold_effect/critical_hit_up.c | 8 ++++---- test/battle/hold_effect/cure_status.c | 4 ++-- test/battle/move_effect/defog.c | 2 +- test/battle/move_effect/embargo.c | 2 +- test/battle/move_effect/pledge.c | 6 +++--- test/battle/move_effect/toxic_spikes.c | 12 ++++++------ test/battle/status1/frostbite.c | 6 +++--- test/battle/terrain/electric.c | 2 +- test/battle/terrain/starting_terrain.c | 4 ++-- 17 files changed, 47 insertions(+), 47 deletions(-) diff --git a/test/battle/ability/hyper_cutter.c b/test/battle/ability/hyper_cutter.c index 943fbba88a9b..a688da25319c 100644 --- a/test/battle/ability/hyper_cutter.c +++ b/test/battle/ability/hyper_cutter.c @@ -107,7 +107,7 @@ SINGLE_BATTLE_TEST("Hyper Cutter doesn't prevent Topsy-Turvy") ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, opponent); MESSAGE("The opposing Krabby's Attack sharply rose!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOPSY_TURVY, player); - MESSAGE("The opposing Krabby's stat changes were all reversed!"); + MESSAGE("All stat changes on the opposing Krabby were inverted!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE - 2); } diff --git a/test/battle/ability/keen_eye.c b/test/battle/ability/keen_eye.c index 5c0b09628216..b047ec988f71 100644 --- a/test/battle/ability/keen_eye.c +++ b/test/battle/ability/keen_eye.c @@ -122,11 +122,11 @@ SINGLE_BATTLE_TEST("Keen Eye, Gen9+ Illuminate & Minds Eye don't prevent Topsy-T } ANIMATION(ANIM_TYPE_MOVE, MOVE_TOPSY_TURVY, player); if (species == SPECIES_HITMONCHAN) - MESSAGE("The opposing Hitmonchan's stat changes were all reversed!"); + MESSAGE("All stat changes on the opposing Hitmonchan were inverted!"); else if (species == SPECIES_STARYU) - MESSAGE("The opposing Staryu's stat changes were all reversed!"); + MESSAGE("All stat changes on the opposing Staryu were inverted!"); else - MESSAGE("The opposing Ursaluna's stat changes were all reversed!"); + MESSAGE("All stat changes on the opposing Ursaluna were inverted!"); } THEN { EXPECT_EQ(opponent->statStages[STAT_ACC], DEFAULT_STAT_STAGE - 1); } diff --git a/test/battle/ability/prankster.c b/test/battle/ability/prankster.c index 5df03669c94a..c56950672930 100644 --- a/test/battle/ability/prankster.c +++ b/test/battle/ability/prankster.c @@ -157,7 +157,7 @@ SINGLE_BATTLE_TEST("Prankster-affected moves can still be bounced back by Dark-t } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_MAGIC_COAT, player); MESSAGE("The opposing Volbeat used Confuse Ray!"); - MESSAGE("The opposing Volbeat's Confuse Ray was bounced back by MAGIC COAT!"); + MESSAGE("Umbreon bounced the Confuse Ray back!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player); MESSAGE("The opposing Volbeat became confused!"); } @@ -179,7 +179,7 @@ SINGLE_BATTLE_TEST("Prankster-affected moves which are reflected by Magic Coat c MESSAGE("Sableye used Magic Coat!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_MAGIC_COAT, player); MESSAGE("The opposing Murkrow used Confuse Ray!"); - MESSAGE("The opposing Murkrow's Confuse Ray was bounced back by MAGIC COAT!"); + MESSAGE("Sableye bounced the Confuse Ray back!"); if (sableyeAbility == ABILITY_PRANKSTER) { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player); MESSAGE("It doesn't affect the opposing Murkrow…"); diff --git a/test/battle/ability/static.c b/test/battle/ability/static.c index 8438d77b26f8..3c5d042cd0c9 100644 --- a/test/battle/ability/static.c +++ b/test/battle/ability/static.c @@ -17,13 +17,13 @@ SINGLE_BATTLE_TEST("Static inflicts paralysis on contact") if (gMovesInfo[move].makesContact) { ABILITY_POPUP(opponent, ABILITY_STATIC); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, player); - MESSAGE("The opposing Pikachu's Static paralyzed Wobbuffet! It may be unable to move!"); + MESSAGE("The opposing Pikachu's Static paralyzed Wobbuffet, so it may be unable to move!"); STATUS_ICON(player, paralysis: TRUE); } else { NONE_OF { ABILITY_POPUP(opponent, ABILITY_STATIC); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, player); - MESSAGE("The opposing Pikachu's Static paralyzed Wobbuffet! It may be unable to move!"); + MESSAGE("The opposing Pikachu's Static paralyzed Wobbuffet, so it may be unable to move!"); STATUS_ICON(player, paralysis: TRUE); } } @@ -43,7 +43,7 @@ SINGLE_BATTLE_TEST("Static triggers 30% of the time") } SCENE { ABILITY_POPUP(opponent, ABILITY_STATIC); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, player); - MESSAGE("The opposing Pikachu's Static paralyzed Wobbuffet! It may be unable to move!"); + MESSAGE("The opposing Pikachu's Static paralyzed Wobbuffet, so it may be unable to move!"); STATUS_ICON(player, paralysis: TRUE); } } diff --git a/test/battle/ability/toxic_debris.c b/test/battle/ability/toxic_debris.c index ed2c60e59456..c4a50a5d1363 100644 --- a/test/battle/ability/toxic_debris.c +++ b/test/battle/ability/toxic_debris.c @@ -22,11 +22,11 @@ SINGLE_BATTLE_TEST("Toxic Debris sets Toxic Spikes on the opposing side if hit b } SCENE { if (move == MOVE_TACKLE) { ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); } else { NONE_OF { ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); } } } @@ -44,14 +44,14 @@ SINGLE_BATTLE_TEST("Toxic Debris does not activate if two layers of Toxic Spikes } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); NONE_OF { ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); } } } @@ -69,7 +69,7 @@ SINGLE_BATTLE_TEST("If a Substitute is hit, Toxic Debris does not set Toxic Spik ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); NONE_OF { ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); } } } @@ -84,10 +84,10 @@ SINGLE_BATTLE_TEST("Each hit of a Multi Hit move activates Toxic Debris") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_SWIPES, opponent); ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_SWIPES, opponent); ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); } } @@ -102,7 +102,7 @@ SINGLE_BATTLE_TEST("Toxic Debris activates if user faints after physical hit") ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); MESSAGE("Glimmora fainted!"); ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); } } @@ -116,7 +116,7 @@ SINGLE_BATTLE_TEST("Air Balloon is popped after Toxic Debris activates") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); ABILITY_POPUP(player, ABILITY_TOXIC_DEBRIS); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); MESSAGE("Glimmora's Air Balloon popped!"); } } diff --git a/test/battle/ability/weak_armor.c b/test/battle/ability/weak_armor.c index f35da0f66574..7fd7e10ef7d4 100644 --- a/test/battle/ability/weak_armor.c +++ b/test/battle/ability/weak_armor.c @@ -124,7 +124,7 @@ SINGLE_BATTLE_TEST("Weak Armor still lowers Defense if Speed can't go any higher ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Slugma's Weak Armor raised its Speed!"); } - MESSAGE("Slugma's Speed won't go higher!"); + MESSAGE("Slugma's Speed won't go any higher!"); } THEN { EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 1); EXPECT_EQ(player->statStages[STAT_SPEED], MAX_STAT_STAGE); @@ -160,7 +160,7 @@ SINGLE_BATTLE_TEST("Weak Armor doesn't interrupt multi hit moves if Defense can' NONE_OF { ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); MESSAGE("Magcargo's Defense won't go any lower!"); - MESSAGE("Magcargo's Speed won't go higher!"); + MESSAGE("Magcargo's Speed won't go any higher!"); } } } THEN { @@ -189,7 +189,7 @@ SINGLE_BATTLE_TEST("Weak Armor doesn't interrupt multi hit moves if Speed can't ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_SWIPES, opponent); ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); MESSAGE("Magcargo's Weak Armor lowered its Defense!"); - MESSAGE("Magcargo's Speed won't go higher!"); + MESSAGE("Magcargo's Speed won't go any higher!"); } } THEN { EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 5); diff --git a/test/battle/crit_chance.c b/test/battle/crit_chance.c index d4c8e2b1a007..33b81d417e2b 100644 --- a/test/battle/crit_chance.c +++ b/test/battle/crit_chance.c @@ -244,7 +244,7 @@ SINGLE_BATTLE_TEST("Crit Chance: Dire Hit increases a battler's critical hit cha TURN { MOVE(player, MOVE_SCRATCH); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FOCUS_ENERGY, player); - MESSAGE("Wobbuffet used Dire Hit to get pumped!"); + MESSAGE("Wobbuffet used the Dire Hit to get pumped!"); MESSAGE("Wobbuffet used Scratch!"); MESSAGE("A critical hit!"); } diff --git a/test/battle/hold_effect/berserk_gene.c b/test/battle/hold_effect/berserk_gene.c index cda82ebb60e7..59f78c1a12f8 100644 --- a/test/battle/hold_effect/berserk_gene.c +++ b/test/battle/hold_effect/berserk_gene.c @@ -182,7 +182,7 @@ SINGLE_BATTLE_TEST("Berserk Gene does not confuse when Safeguard is active") } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Using Berserk Gene, the Attack of Wobbuffet sharply rose!"); - MESSAGE("Wobbuffet's party is protected by Safeguard!"); + MESSAGE("Wobbuffet is protected by Safeguard!"); NOT MESSAGE("Wobbuffet became confused!"); } } diff --git a/test/battle/hold_effect/critical_hit_up.c b/test/battle/hold_effect/critical_hit_up.c index eb73da36dd7e..c23f29773aea 100644 --- a/test/battle/hold_effect/critical_hit_up.c +++ b/test/battle/hold_effect/critical_hit_up.c @@ -25,11 +25,11 @@ SINGLE_BATTLE_TEST("Lansat Berry raises the holder's critical-hit-ratio by two s if (move == MOVE_TACKLE) { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet used Lansat Berry to get pumped!"); + MESSAGE("Wobbuffet used the Lansat Berry to get pumped!"); } } else { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet used Lansat Berry to get pumped!"); + MESSAGE("Wobbuffet used the Lansat Berry to get pumped!"); } } } @@ -44,7 +44,7 @@ SINGLE_BATTLE_TEST("Lansat Berry raises the holder's critical-hit-ratio by two s } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_RAGE, opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Bellsprout used Lansat Berry to get pumped!"); + MESSAGE("Bellsprout used the Lansat Berry to get pumped!"); } } @@ -61,7 +61,7 @@ SINGLE_BATTLE_TEST("Lansat Berry raises the holder's critical-hit-ratio by two s } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_RAGE, opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet used Lansat Berry to get pumped!"); + MESSAGE("Wobbuffet used the Lansat Berry to get pumped!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); MESSAGE("A critical hit!"); } diff --git a/test/battle/hold_effect/cure_status.c b/test/battle/hold_effect/cure_status.c index 7f7e294fe747..2e37e6eaecb6 100644 --- a/test/battle/hold_effect/cure_status.c +++ b/test/battle/hold_effect/cure_status.c @@ -206,7 +206,7 @@ SINGLE_BATTLE_TEST("Opponent Pokemon can be further poisoned with Toxic spikes a } SCENE { MESSAGE("Wobbuffet used Toxic Spikes!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); // 1st switch-in MESSAGE("2 sent out Wynaut!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); @@ -247,7 +247,7 @@ SINGLE_BATTLE_TEST("Player Pokemon can be further poisoned with Toxic spikes aft } SCENE { MESSAGE("The opposing Wobbuffet used Toxic Spikes!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, opponent); - MESSAGE("Poison Spikes were scattered all around your team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around your team!"); // 1st switch-in SEND_IN_MESSAGE("Wobbuffet"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player); diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c index 4403153cd2b8..c0855b7b82e5 100644 --- a/test/battle/move_effect/defog.c +++ b/test/battle/move_effect/defog.c @@ -125,7 +125,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard STATUS_ICON(opponentRight, badPoison: TRUE); } else { - MESSAGE("The opposing Wobbuffet's party is protected by Safeguard!"); + MESSAGE("The opposing Wobbuffet is protected by Safeguard!"); NOT STATUS_ICON(opponentRight, badPoison: TRUE); } } diff --git a/test/battle/move_effect/embargo.c b/test/battle/move_effect/embargo.c index 960a547442cc..759341f6f8de 100644 --- a/test/battle/move_effect/embargo.c +++ b/test/battle/move_effect/embargo.c @@ -325,7 +325,7 @@ SINGLE_BATTLE_TEST("Embargo can be reflected by Magic Coat") MESSAGE("Wobbuffet used Magic Coat!"); MESSAGE("Wobbuffet shrouded itself in Magic Coat!"); MESSAGE("The opposing Wobbuffet used Embargo!"); - MESSAGE("The opposing Wobbuffet's Embargo was bounced back by MAGIC COAT!"); + MESSAGE("Wobbuffet bounced the Embargo back!"); MESSAGE("The opposing Wobbuffet can't use items anymore!"); // Turn 2 MESSAGE("The opposing Wobbuffet used Fling!"); diff --git a/test/battle/move_effect/pledge.c b/test/battle/move_effect/pledge.c index a06876f4a81b..df68668f1068 100644 --- a/test/battle/move_effect/pledge.c +++ b/test/battle/move_effect/pledge.c @@ -26,7 +26,7 @@ DOUBLE_BATTLE_TEST("Water and Fire Pledge create a rainbow on the user's side of MESSAGE("Wobbuffet used Water Pledge!"); MESSAGE("Wobbuffet is waiting for Wynaut's move…{PAUSE 16}"); MESSAGE("Wynaut used Fire Pledge!"); - MESSAGE("The two moves become one! It's a combined move!{PAUSE 16}"); + MESSAGE("The two moves have become one! It's a combined move!{PAUSE 16}"); ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PLEDGE, playerRight); HP_BAR(opponentRight); MESSAGE("A rainbow appeared in the sky on your team's side!"); @@ -94,7 +94,7 @@ DOUBLE_BATTLE_TEST("Fire and Grass Pledge summons Sea Of Fire for four turns tha MESSAGE("Wobbuffet used Fire Pledge!"); MESSAGE("Wobbuffet is waiting for Wynaut's move…{PAUSE 16}"); MESSAGE("Wynaut used Grass Pledge!"); - MESSAGE("The two moves become one! It's a combined move!{PAUSE 16}"); + MESSAGE("The two moves have become one! It's a combined move!{PAUSE 16}"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); HP_BAR(opponentRight); MESSAGE("A sea of fire enveloped the opposing team!"); @@ -152,7 +152,7 @@ DOUBLE_BATTLE_TEST("Grass and Water Pledge create a swamp on the user's side of MESSAGE("Wobbuffet used Grass Pledge!"); MESSAGE("Wobbuffet is waiting for Wynaut's move…{PAUSE 16}"); MESSAGE("Wynaut used Water Pledge!"); - MESSAGE("The two moves become one! It's a combined move!{PAUSE 16}"); + MESSAGE("The two moves have become one! It's a combined move!{PAUSE 16}"); ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, playerRight); HP_BAR(opponentRight); MESSAGE("A swamp enveloped the opposing team!"); diff --git a/test/battle/move_effect/toxic_spikes.c b/test/battle/move_effect/toxic_spikes.c index b7661c3ff34f..9ab656caa53e 100644 --- a/test/battle/move_effect/toxic_spikes.c +++ b/test/battle/move_effect/toxic_spikes.c @@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Toxic Spikes inflicts poison on switch in") TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); MESSAGE("2 sent out Wynaut!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); STATUS_ICON(opponent, poison: TRUE); @@ -38,9 +38,9 @@ SINGLE_BATTLE_TEST("Toxic Spikes inflicts bad poison on switch in") TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); MESSAGE("2 sent out Wynaut!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); STATUS_ICON(opponent, badPoison: TRUE); @@ -61,9 +61,9 @@ SINGLE_BATTLE_TEST("Toxic Spikes fails after 2 layers") TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); - MESSAGE("Poison Spikes were scattered all around the opposing team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around the opposing team!"); MESSAGE("Wobbuffet used Toxic Spikes!"); MESSAGE("But it failed!"); MESSAGE("2 sent out Wynaut!"); @@ -224,7 +224,7 @@ SINGLE_BATTLE_TEST("Toxic Spikes inflicts poison on switch in after Primal Rever } SCENE { MESSAGE("The opposing Wobbuffet used Toxic Spikes!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, opponent); - MESSAGE("Poison Spikes were scattered all around your team's feet!"); + MESSAGE("Poison spikes were scattered on the ground all around your team!"); // Switch in SEND_IN_MESSAGE("Groudon"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player); diff --git a/test/battle/status1/frostbite.c b/test/battle/status1/frostbite.c index e4b42d9b96f5..cb09bcfaa041 100644 --- a/test/battle/status1/frostbite.c +++ b/test/battle/status1/frostbite.c @@ -33,7 +33,7 @@ SINGLE_BATTLE_TEST("Frostbite deals 1/16 damage to effected pokemon") } WHEN { TURN {} } SCENE { - MESSAGE("The opposing Wobbuffet is hurt by its frostbite!"); + MESSAGE("The opposing Wobbuffet was hurt by its frostbite!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent); HP_BAR(opponent, captureDamage: &frostbiteDamage); } THEN { EXPECT_EQ(frostbiteDamage, opponent->maxHP / 16); } @@ -85,11 +85,11 @@ SINGLE_BATTLE_TEST("Frostbite is healed when the user uses a thawing move") ANIMATION(ANIM_TYPE_MOVE, move, player); HP_BAR(opponent); if (move == MOVE_EMBER) { - MESSAGE("Wobbuffet is hurt by its frostbite!"); + MESSAGE("Wobbuffet was hurt by its frostbite!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, player); } else { NONE_OF { - MESSAGE("Wobbuffet is hurt by its frostbite!"); + MESSAGE("Wobbuffet was hurt by its frostbite!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, player); } } diff --git a/test/battle/terrain/electric.c b/test/battle/terrain/electric.c index 222f6af09e4d..356f37a75c08 100644 --- a/test/battle/terrain/electric.c +++ b/test/battle/terrain/electric.c @@ -75,7 +75,7 @@ SINGLE_BATTLE_TEST("Electric Terrain lasts for 5 turns") } SCENE { MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ELECTRIC_TERRAIN, player); - MESSAGE("An electric current runs across the battlefield!"); + MESSAGE("An electric current is running across the battlefield!"); MESSAGE("Wobbuffet used Celebrate!"); MESSAGE("The opposing Wobbuffet used Celebrate!"); diff --git a/test/battle/terrain/starting_terrain.c b/test/battle/terrain/starting_terrain.c index 24d51f11a7a2..e3784690f73b 100644 --- a/test/battle/terrain/starting_terrain.c +++ b/test/battle/terrain/starting_terrain.c @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("B_VAR_STARTING_STATUS starts a chosen terrain at the beginni MESSAGE("Mist swirled about the battlefield!"); break; case STARTING_STATUS_ELECTRIC_TERRAIN: - MESSAGE("An electric current runs across the battlefield!"); + MESSAGE("An electric current is running across the battlefield!"); break; } ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RESTORE_BG); @@ -80,7 +80,7 @@ SINGLE_BATTLE_TEST("Terrain started after the one which started the battle lasts TURN { ; } } SCENE { // Electric Terrain at battle's start - MESSAGE("An electric current runs across the battlefield!"); + MESSAGE("An electric current is running across the battlefield!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RESTORE_BG); // Player uses Grassy Terrain if (viaMove) { From a71f91888250c24a21a170f29d6749d173cb60b2 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 9 Sep 2024 21:59:39 -0300 Subject: [PATCH 40/68] 53 left --- include/test/battle.h | 2 +- test/battle/ability/effect_spore.c | 2 +- test/battle/ability/mirror_armor.c | 2 +- test/battle/ability/poison_touch.c | 2 +- test/battle/gimmick/dynamax.c | 6 ++-- test/battle/gimmick/terastal.c | 4 +-- test/battle/hold_effect/clear_amulet.c | 6 ++-- test/battle/hold_effect/cure_status.c | 4 +-- test/battle/hold_effect/eject_button.c | 2 +- test/battle/hold_effect/jaboca_berry.c | 2 +- test/battle/hold_effect/leftovers.c | 6 ++-- test/battle/item_effect/escape.c | 2 +- test/battle/move_effect/bide.c | 2 +- test/battle/move_effect/corrosive_gas.c | 8 ++--- test/battle/move_effect/court_change.c | 10 +++---- test/battle/move_effect/embargo.c | 2 +- .../battle/move_effect/fail_if_not_arg_type.c | 4 +-- test/battle/move_effect/flame_burst.c | 2 +- test/battle/move_effect/fling.c | 16 +++++----- test/battle/move_effect/healing_wish.c | 8 ++--- test/battle/move_effect/knock_off.c | 2 +- test/battle/move_effect/metronome.c | 6 ++-- test/battle/move_effect/octolock.c | 2 +- test/battle/move_effect/pledge.c | 4 +-- test/battle/move_effect/rage_fist.c | 4 +-- test/battle/move_effect/reflect_type.c | 6 ++-- test/battle/move_effect/roost.c | 30 +++++++++---------- test/battle/move_effect/salt_cure.c | 2 +- test/battle/move_effect/smelling_salts.c | 4 +-- test/battle/move_effect/spicy_extract.c | 2 +- test/battle/move_effect/strength_sap.c | 2 +- test/battle/move_effect/tidy_up.c | 2 +- test/battle/move_effect/wake_up_slap.c | 4 +-- test/battle/move_effect_secondary/bug_bite.c | 4 +-- .../battle/move_effect_secondary/syrup_bomb.c | 2 +- test/battle/terrain/misty.c | 2 +- test/battle/terrain/starting_terrain.c | 2 +- 37 files changed, 86 insertions(+), 86 deletions(-) diff --git a/include/test/battle.h b/include/test/battle.h index b13ae9802978..3b2b9565f845 100644 --- a/include/test/battle.h +++ b/include/test/battle.h @@ -1006,7 +1006,7 @@ void SendOut(u32 sourceLine, struct BattlePokemon *, u32 partyIndex); #define SEND_IN_MESSAGE(name) ONE_OF { \ MESSAGE("Go! " name "!"); \ - MESSAGE("Do it! " name "!"); \ + MESSAGE("You're in charge, " name "!"); \ MESSAGE("Go for it, " name "!"); \ MESSAGE("Your foe's weak! Get 'em, " name "!"); \ } diff --git a/test/battle/ability/effect_spore.c b/test/battle/ability/effect_spore.c index e0e58b2d6f44..49750c4797b9 100644 --- a/test/battle/ability/effect_spore.c +++ b/test/battle/ability/effect_spore.c @@ -65,7 +65,7 @@ SINGLE_BATTLE_TEST("Effect Spore causes paralysis 10% of the time") } SCENE { ABILITY_POPUP(opponent, ABILITY_EFFECT_SPORE); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, player); - MESSAGE("The opposing Breloom's Effect Spore paralyzed Wobbuffet! It may be unable to move!"); + MESSAGE("The opposing Breloom's Effect Spore paralyzed Wobbuffet, so it may be unable to move!"); STATUS_ICON(player, paralysis: TRUE); } } diff --git a/test/battle/ability/mirror_armor.c b/test/battle/ability/mirror_armor.c index 00484205f06d..d9ba1d572e9a 100644 --- a/test/battle/ability/mirror_armor.c +++ b/test/battle/ability/mirror_armor.c @@ -187,7 +187,7 @@ DOUBLE_BATTLE_TEST("Mirror Armor lowers Speed of the partner Pokemon after Court } SCENE { MESSAGE("Wobbuffet used sticky web!"); MESSAGE("The opposing Wynaut used Court Change!"); - MESSAGE("The opposing Wynaut swapped the battle effects affecting each side!"); + MESSAGE("The opposing Wynaut swapped the battle effects affecting each side of the field!"); SEND_IN_MESSAGE("Corviknight"); MESSAGE("Corviknight was caught in a sticky web!"); ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR); diff --git a/test/battle/ability/poison_touch.c b/test/battle/ability/poison_touch.c index 267bc3be225b..8fb4d243fb71 100644 --- a/test/battle/ability/poison_touch.c +++ b/test/battle/ability/poison_touch.c @@ -67,7 +67,7 @@ SINGLE_BATTLE_TEST("Poison Touch applies between multi-hit move hits") ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); MESSAGE("The opposing Wobbuffet was poisoned by Grimer's Poison Touch!"); STATUS_ICON(opponent, poison: TRUE); - MESSAGE("The opposing Wobbuffet's Pecha Berry cured poison!"); + MESSAGE("The opposing Wobbuffet's Pecha Berry cured its poison!"); STATUS_ICON(opponent, poison: FALSE); ABILITY_POPUP(player, ABILITY_POISON_TOUCH); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); diff --git a/test/battle/gimmick/dynamax.c b/test/battle/gimmick/dynamax.c index 80b45cf72844..24395386e950 100644 --- a/test/battle/gimmick/dynamax.c +++ b/test/battle/gimmick/dynamax.c @@ -736,7 +736,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Flare sets up sunlight") TURN { MOVE(player, MOVE_EMBER, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { MESSAGE("Wobbuffet used Max Flare!"); - MESSAGE("The sunlight got bright!"); + MESSAGE("The sunlight turned harsh!"); MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SUN_CONTINUES); } @@ -1138,8 +1138,8 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Terror traps both opponents") TURN { MOVE(playerLeft, MOVE_LICK, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); } } SCENE { MESSAGE("Gengar used G-Max Terror!"); - MESSAGE("The opposing Wobbuffet can't escape now!"); - MESSAGE("The opposing Wobbuffet can't escape now!"); + MESSAGE("The opposing Wobbuffet can no longer escape!"); + MESSAGE("The opposing Wobbuffet can no longer escape!"); } THEN { // Can't find good way to test trapping EXPECT(opponentLeft->status2 & STATUS2_ESCAPE_PREVENTION); } diff --git a/test/battle/gimmick/terastal.c b/test/battle/gimmick/terastal.c index 0b8a3edc9db5..c1e184760610 100644 --- a/test/battle/gimmick/terastal.c +++ b/test/battle/gimmick/terastal.c @@ -256,7 +256,7 @@ SINGLE_BATTLE_TEST("(TERA) Terastallization changes the effect of Curse") } SCENE { MESSAGE("Wobbuffet used Curse!"); HP_BAR(player); - MESSAGE("Wobbuffet cut its own HP and laid a CURSE on the opposing Wobbuffet!"); + MESSAGE("Wobbuffet cut its own HP and put a curse on the opposing Wobbuffet!"); NOT { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } } } @@ -366,7 +366,7 @@ SINGLE_BATTLE_TEST("(TERA) Synchronoise uses a Terastallized Pokemon's Tera Type } SCENE { // turn 1 MESSAGE("The opposing Wobbuffet used Synchronoise!"); - MESSAGE("It had no effect on Wobbuffet!"); + MESSAGE("It won't have any effect on Wobbuffet!"); // turn 2 MESSAGE("The opposing Wobbuffet used Synchronoise!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SYNCHRONOISE, opponent); diff --git a/test/battle/hold_effect/clear_amulet.c b/test/battle/hold_effect/clear_amulet.c index 90b94df03116..d0666ff3a91a 100644 --- a/test/battle/hold_effect/clear_amulet.c +++ b/test/battle/hold_effect/clear_amulet.c @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Clear Amulet prevents Intimidate") HP_BAR(player, captureDamage: &turnOneHit); ABILITY_POPUP(player, ABILITY_INTIMIDATE); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("The opposing Wobbuffet's Clear Amulet prevents its stats from being lowered!"); + MESSAGE("The effects of the Clear Amulet held by the opposing Wobbuffet prevents its stats from being lowered!"); HP_BAR(player, captureDamage: &turnTwoHit); } THEN { EXPECT_EQ(turnOneHit, turnTwoHit); @@ -55,7 +55,7 @@ SINGLE_BATTLE_TEST("Clear Amulet prevents stat reducing effects") TURN { MOVE(player, move); } } SCENE { NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("The opposing Wobbuffet's Clear Amulet prevents its stats from being lowered!"); + MESSAGE("The effects of the Clear Amulet held by the opposing Wobbuffet prevents its stats from being lowered!"); } } @@ -84,7 +84,7 @@ SINGLE_BATTLE_TEST("Clear Amulet prevents secondary effects that reduce stats") } SCENE { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("The opposing Wobbuffet's Clear Amulet prevents its stats from being lowered!"); + MESSAGE("The effects of the Clear Amulet held by the opposing Wobbuffet prevents its stats from being lowered!"); } } } diff --git a/test/battle/hold_effect/cure_status.c b/test/battle/hold_effect/cure_status.c index 2e37e6eaecb6..d954983f888e 100644 --- a/test/battle/hold_effect/cure_status.c +++ b/test/battle/hold_effect/cure_status.c @@ -213,7 +213,7 @@ SINGLE_BATTLE_TEST("Opponent Pokemon can be further poisoned with Toxic spikes a STATUS_ICON(opponent, poison: TRUE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); if (item == ITEM_PECHA_BERRY) { - MESSAGE("The opposing Wynaut's Pecha Berry cured poison!"); + MESSAGE("The opposing Wynaut's Pecha Berry cured its poison!"); } else { MESSAGE("The opposing Wynaut's Lum Berry cured its poison problem!"); } @@ -254,7 +254,7 @@ SINGLE_BATTLE_TEST("Player Pokemon can be further poisoned with Toxic spikes aft STATUS_ICON(player, poison: TRUE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); if (item == ITEM_PECHA_BERRY) { - MESSAGE("Wobbuffet's Pecha Berry cured poison!"); + MESSAGE("Wobbuffet's Pecha Berry cured its poison!"); } else { MESSAGE("Wobbuffet's Lum Berry cured its poison problem!"); } diff --git a/test/battle/hold_effect/eject_button.c b/test/battle/hold_effect/eject_button.c index efbb034de1f7..dca6eb8357c1 100644 --- a/test/battle/hold_effect/eject_button.c +++ b/test/battle/hold_effect/eject_button.c @@ -63,7 +63,7 @@ SINGLE_BATTLE_TEST("Eject Button will not activate under Substitute") ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, opponent); MESSAGE("The opposing Raichu put in a substitute!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); - MESSAGE("The SUBSTITUTE took damage for the opposing Raichu!"); + MESSAGE("The substitute took damage for the opposing Raichu!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); MESSAGE("The opposing Raichu is switched out with the Eject Button!"); diff --git a/test/battle/hold_effect/jaboca_berry.c b/test/battle/hold_effect/jaboca_berry.c index 7b8aa6aa34fd..373780be712f 100644 --- a/test/battle/hold_effect/jaboca_berry.c +++ b/test/battle/hold_effect/jaboca_berry.c @@ -55,6 +55,6 @@ SINGLE_BATTLE_TEST("Jaboca Berry tirggers before Bug Bite can steal it") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); HP_BAR(player); MESSAGE("Wyanut was hurt by the opposing Wobbuffet's Jaboca Berry!"); - NOT MESSAGE("Wynaut stole and ate the opposing Wobbuffet's Jaboca Berry!"); + NOT MESSAGE("Wynaut stole and ate the opposing its target's Jaboca Berry!"); } } diff --git a/test/battle/hold_effect/leftovers.c b/test/battle/hold_effect/leftovers.c index 2151d43ff94f..4ba6d7b97b71 100644 --- a/test/battle/hold_effect/leftovers.c +++ b/test/battle/hold_effect/leftovers.c @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Leftovers recovers 1/16th HP at end of turn") } SCENE { s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet's Leftovers restored its HP a little!"); + MESSAGE("Wobbuffet restored a little HP using its Leftovers!"); HP_BAR(player, damage: -maxHP / 16); } } @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Leftovers does nothing if max HP") } SCENE { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet's Leftovers restored its HP a little!"); + MESSAGE("Wobbuffet restored a little HP using its Leftovers!"); HP_BAR(player); } } @@ -47,7 +47,7 @@ SINGLE_BATTLE_TEST("Leftovers does nothing if Heal Block applies") } SCENE { NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); - MESSAGE("Wobbuffet's Leftovers restored its HP a little!"); + MESSAGE("Wobbuffet restored a little HP using its Leftovers!"); HP_BAR(player); } } diff --git a/test/battle/item_effect/escape.c b/test/battle/item_effect/escape.c index b02333567d91..bffa6e429261 100644 --- a/test/battle/item_effect/escape.c +++ b/test/battle/item_effect/escape.c @@ -31,7 +31,7 @@ WILD_BATTLE_TEST("Poke Toy lets the player escape from a wild battle even if a m // Turn 1 MESSAGE("The wild Wobbuffet used Mean Look!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_MEAN_LOOK, opponent); - MESSAGE("Wobbuffet can't escape now!"); + MESSAGE("Wobbuffet can no longer escape!"); // Turn 2 MESSAGE("{PLAY_SE SE_FLEE}You got away safely!\p"); } diff --git a/test/battle/move_effect/bide.c b/test/battle/move_effect/bide.c index 41a6e01416ae..f99829d57c92 100644 --- a/test/battle/move_effect/bide.c +++ b/test/battle/move_effect/bide.c @@ -25,7 +25,7 @@ SINGLE_BATTLE_TEST("Bide deals twice the taken damage over two turns") MESSAGE("Wobbuffet is storing energy!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); HP_BAR(player, captureDamage: &damage2); - MESSAGE("Wobbuffet unleashed energy!"); + MESSAGE("Wobbuffet unleashed its energy!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_BIDE, player); HP_BAR(opponent, captureDamage: &bideDamage); } THEN { diff --git a/test/battle/move_effect/corrosive_gas.c b/test/battle/move_effect/corrosive_gas.c index 9b67fbc5f42c..cc4110a7e38b 100644 --- a/test/battle/move_effect/corrosive_gas.c +++ b/test/battle/move_effect/corrosive_gas.c @@ -25,7 +25,7 @@ SINGLE_BATTLE_TEST("Corrosive Gas destroys the target's item or fails if the tar MESSAGE("Wobbuffet corroded the opposing Wobbuffet's Potion!"); } else { - MESSAGE("It had no effect on the opposing Wobbuffet!"); + MESSAGE("It won't have any effect on the opposing Wobbuffet!"); } } THEN { EXPECT_EQ(opponent->item, ITEM_NONE); @@ -97,17 +97,17 @@ DOUBLE_BATTLE_TEST("Corrosive Gas destroys foes and ally's items if they have on if (itemPlayerLeft == ITEM_CHERI_BERRY) { MESSAGE("Wynaut corroded Wobbuffet's Cheri Berry!"); } else { - MESSAGE("It had no effect on Wobbuffet!"); + MESSAGE("It won't have any effect on Wobbuffet!"); } if (itemOpponentLeft == ITEM_ORAN_BERRY) { MESSAGE("Wynaut corroded the opposing Abra's Oran Berry!"); } else { - MESSAGE("It had no effect on the opposing Abra!"); + MESSAGE("It won't have any effect on the opposing Abra!"); } if (itemOpponentRight == ITEM_CHESTO_BERRY) { MESSAGE("Wynaut corroded the opposing Kadabra's Chesto Berry!"); } else { - MESSAGE("It had no effect on the opposing Kadabra!"); + MESSAGE("It won't have any effect on the opposing Kadabra!"); } } THEN { diff --git a/test/battle/move_effect/court_change.c b/test/battle/move_effect/court_change.c index bfaab880f2f9..ff127faf4da4 100644 --- a/test/battle/move_effect/court_change.c +++ b/test/battle/move_effect/court_change.c @@ -21,12 +21,12 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the opponent") TURN { MOVE(playerLeft, MOVE_COURT_CHANGE); } TURN { SWITCH(playerLeft, 2); SWITCH(opponentLeft, 2); } } SCENE { - MESSAGE("The opposing Wobbuffet used sticky web!"); + MESSAGE("The opposing Wobbuffet used Sticky Web!"); MESSAGE("The opposing Wobbuffet used Stealth Rock!"); MESSAGE("The opposing Wobbuffet used Spikes!"); MESSAGE("The opposing Wobbuffet used Toxic Spikes!"); MESSAGE("Wynaut used Court Change!"); - MESSAGE("Wynaut swapped the battle effects affecting each side!"); + MESSAGE("Wynaut swapped the battle effects affecting each side of the field!"); SEND_IN_MESSAGE("Wynaut"); NONE_OF { MESSAGE("Wynaut was hurt by the spikes!"); @@ -62,7 +62,7 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the player") MESSAGE("Wobbuffet used Spikes!"); MESSAGE("Wobbuffet used Toxic Spikes!"); MESSAGE("The opposing Wynaut used Court Change!"); - MESSAGE("The opposing Wynaut swapped the battle effects affecting each side!"); + MESSAGE("The opposing Wynaut swapped the battle effects affecting each side of the field!"); SEND_IN_MESSAGE("Wobbuffet"); MESSAGE("Wobbuffet was hurt by the spikes!"); MESSAGE("Pointed stones dug into Wobbuffet!"); @@ -105,7 +105,7 @@ DOUBLE_BATTLE_TEST("Court Change used by the player swaps Mist, Safeguard, Auror MESSAGE("The opposing Wobbuffet used Light Screen!"); MESSAGE("The opposing Wobbuffet used Tailwind!"); MESSAGE("Wynaut used Court Change!"); - MESSAGE("Wynaut swapped the battle effects affecting each side!"); + MESSAGE("Wynaut swapped the battle effects affecting each side of the field!"); // The effects now end for the player side. MESSAGE("Ally's Mist wore off!"); MESSAGE("Ally's party is no longer protected by Safeguard!"); @@ -142,7 +142,7 @@ DOUBLE_BATTLE_TEST("Court Change used by the opponent swaps Mist, Safeguard, Aur MESSAGE("Wobbuffet used Light Screen!"); MESSAGE("Wobbuffet used Tailwind!"); MESSAGE("The opposing Wynaut used Court Change!"); - MESSAGE("The opposing Wynaut swapped the battle effects affecting each side!"); + MESSAGE("The opposing Wynaut swapped the battle effects affecting each side of the field!"); // The effects now end for the player side. MESSAGE("Foe's Mist wore off!"); MESSAGE("Foe's party is no longer protected by Safeguard!"); diff --git a/test/battle/move_effect/embargo.c b/test/battle/move_effect/embargo.c index 759341f6f8de..9afb7307301c 100644 --- a/test/battle/move_effect/embargo.c +++ b/test/battle/move_effect/embargo.c @@ -244,7 +244,7 @@ SINGLE_BATTLE_TEST("Embargo doesn't block the effects of berries obtained throug // Turn 2 MESSAGE("Wobbuffet used Pluck!"); HP_BAR(opponent); - MESSAGE("Wobbuffet stole and ate the opposing Wobbuffet's Oran Berry!"); + MESSAGE("Wobbuffet stole and ate the opposing its target's Oran Berry!"); HP_BAR(player, damage: -hp); } } diff --git a/test/battle/move_effect/fail_if_not_arg_type.c b/test/battle/move_effect/fail_if_not_arg_type.c index 4ffe0a032353..9e8d005d8ba9 100644 --- a/test/battle/move_effect/fail_if_not_arg_type.c +++ b/test/battle/move_effect/fail_if_not_arg_type.c @@ -70,7 +70,7 @@ SINGLE_BATTLE_TEST("Double Shock user loses its Electric-type") TURN { MOVE(player, MOVE_DOUBLE_SHOCK); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SHOCK, player); - MESSAGE("Pikachu used up all of its electricity!"); + MESSAGE("Pikachu used up all its electricity!"); MESSAGE("Pikachu used Double Shock!"); MESSAGE("But it failed!"); } @@ -107,6 +107,6 @@ SINGLE_BATTLE_TEST("Double Shock user loses its Electric-type if enemy faints") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SHOCK, player); HP_BAR(opponent, hp: 0); - MESSAGE("Pikachu used up all of its electricity!"); + MESSAGE("Pikachu used up all its electricity!"); } } diff --git a/test/battle/move_effect/flame_burst.c b/test/battle/move_effect/flame_burst.c index 7d2333b1149a..3597c8001450 100644 --- a/test/battle/move_effect/flame_burst.c +++ b/test/battle/move_effect/flame_burst.c @@ -19,6 +19,6 @@ DOUBLE_BATTLE_TEST("Flame Burst Substitute") TURN { MOVE(opponentLeft, MOVE_SUBSTITUTE); MOVE(playerRight, MOVE_FLAME_BURST, target: opponentRight); } } SCENE { MESSAGE("The bursting flames hit the opposing Wynaut!"); - NOT MESSAGE("The SUBSTITUTE took damage for the opposing Wynaut!"); + NOT MESSAGE("The substitute took damage for the opposing Wynaut!"); } } diff --git a/test/battle/move_effect/fling.c b/test/battle/move_effect/fling.c index 70a6c68366d2..e851f946d552 100644 --- a/test/battle/move_effect/fling.c +++ b/test/battle/move_effect/fling.c @@ -285,7 +285,7 @@ SINGLE_BATTLE_TEST("Fling's secondary effects are blocked by Shield Dust") MESSAGE("The opposing Wobbuffet was burned!"); STATUS_ICON(opponent, STATUS1_BURN); } - MESSAGE("The Flame Orb was used up..."); + MESSAGE("The Flame Orb was used up…"); } break; case ITEM_LIGHT_BALL: @@ -294,7 +294,7 @@ SINGLE_BATTLE_TEST("Fling's secondary effects are blocked by Shield Dust") MESSAGE("The opposing Wobbuffet is paralyzed! It may be unable to move!"); STATUS_ICON(opponent, STATUS1_PARALYSIS); } - MESSAGE("The Light Ball was used up..."); + MESSAGE("The Light Ball was used up…"); } break; case ITEM_POISON_BARB: @@ -303,7 +303,7 @@ SINGLE_BATTLE_TEST("Fling's secondary effects are blocked by Shield Dust") MESSAGE("The opposing Wobbuffet was poisoned!"); STATUS_ICON(opponent, STATUS1_POISON); } - MESSAGE("The Poison Barb was used up..."); + MESSAGE("The Poison Barb was used up…"); } break; case ITEM_TOXIC_ORB: @@ -312,7 +312,7 @@ SINGLE_BATTLE_TEST("Fling's secondary effects are blocked by Shield Dust") MESSAGE("The opposing Wobbuffet was badly poisoned!"); STATUS_ICON(opponent, STATUS1_TOXIC_POISON); } - MESSAGE("The Toxic Orb was used up..."); + MESSAGE("The Toxic Orb was used up…"); } break; case ITEM_RAZOR_FANG: @@ -324,10 +324,10 @@ SINGLE_BATTLE_TEST("Fling's secondary effects are blocked by Shield Dust") switch (item) { case ITEM_RAZOR_FANG: - MESSAGE("The Razor Fang was used up..."); + MESSAGE("The Razor Fang was used up…"); break; case ITEM_KINGS_ROCK: - MESSAGE("The King's Rock was used up..."); + MESSAGE("The King's Rock was used up…"); break; } } @@ -382,7 +382,7 @@ SINGLE_BATTLE_TEST("Fling - thrown berry's effect activates for the target even HP_BAR(opponent); } else if (effect == HOLD_EFFECT_RESTORE_PP) { - MESSAGE("The opposing Wobbuffet's Leppa Berry restored Celebrate's PP!"); + MESSAGE("The opposing Wobbuffet restored PP to its move Celebrate using its Leppa Berry!"); } else if (status1 != STATUS1_NONE) { if (status1 == STATUS1_BURN) { @@ -396,7 +396,7 @@ SINGLE_BATTLE_TEST("Fling - thrown berry's effect activates for the target even } else if (status1 == STATUS1_PARALYSIS) { MESSAGE("The opposing Wobbuffet's Cheri Berry cured paralysis!"); } else if (status1 == STATUS1_TOXIC_POISON || status1 == STATUS1_POISON) { - MESSAGE("The opposing Wobbuffet's Pecha Berry cured poison!"); + MESSAGE("The opposing Wobbuffet's Pecha Berry cured its poison!"); } NOT STATUS_ICON(opponent, status1); } diff --git a/test/battle/move_effect/healing_wish.c b/test/battle/move_effect/healing_wish.c index df0c2c3a9bbf..a6e14d710db8 100644 --- a/test/battle/move_effect/healing_wish.c +++ b/test/battle/move_effect/healing_wish.c @@ -23,7 +23,7 @@ SINGLE_BATTLE_TEST("Healing Wish causes the user to faint and fully heals the re MESSAGE("The healing wish came true for Wynaut!"); HP_BAR(player, hp: 100); STATUS_ICON(player, none: TRUE); - MESSAGE("Wynaut regained health!"); + MESSAGE("Wynaut's HP was restored."); } } @@ -45,7 +45,7 @@ DOUBLE_BATTLE_TEST("Lunar Dance causes the user to faint and fully heals the rep MESSAGE("Wynaut became cloaked in mystical moonlight!"); HP_BAR(playerLeft, hp: 100); STATUS_ICON(playerLeft, none: TRUE); - MESSAGE("Wynaut regained health!"); + MESSAGE("Wynaut's HP was restored."); } } @@ -66,12 +66,12 @@ SINGLE_BATTLE_TEST("Healing Wish effect activates only if the switched pokemon c MESSAGE("Gardevoir fainted!"); NONE_OF { MESSAGE("The healing wish came true for Wynaut!"); - MESSAGE("Wynaut regained health!"); + MESSAGE("Wynaut's HP was restored."); } ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player); MESSAGE("The healing wish came true for Wynaut!"); HP_BAR(player, hp: 100); STATUS_ICON(player, none: TRUE); - MESSAGE("Wynaut regained health!"); + MESSAGE("Wynaut's HP was restored."); } } diff --git a/test/battle/move_effect/knock_off.c b/test/battle/move_effect/knock_off.c index c6dbc392846b..aa1081ff6726 100644 --- a/test/battle/move_effect/knock_off.c +++ b/test/battle/move_effect/knock_off.c @@ -137,7 +137,7 @@ SINGLE_BATTLE_TEST("Knock Off does not prevent targets from receiving another it if (B_KNOCK_OFF_REMOVAL >= GEN_5) { ANIMATION(ANIM_TYPE_MOVE, MOVE_BESTOW, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT); - MESSAGE("The opposing Wobbuffet's Leftovers restored its HP a little!"); + MESSAGE("The opposing Wobbuffet restored a little HP using its Leftovers!"); } else { NOT { ANIMATION(ANIM_TYPE_MOVE, MOVE_BESTOW, player); } MESSAGE("But it failed!"); diff --git a/test/battle/move_effect/metronome.c b/test/battle/move_effect/metronome.c index bac581c5fbb8..98e4bfd6187c 100644 --- a/test/battle/move_effect/metronome.c +++ b/test/battle/move_effect/metronome.c @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Metronome picks a random move") } SCENE { MESSAGE("Wobbuffet used Metronome!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_METRONOME, player); - MESSAGE("Wobbuffet used Scratch!"); + MESSAGE("Waggling a finger let it use Scratch!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player); HP_BAR(opponent); } @@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("Metronome's called powder move fails against Grass Types") } SCENE { MESSAGE("Wobbuffet used Metronome!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_METRONOME, player); - MESSAGE("Wobbuffet used Poison Powder!"); + MESSAGE("Waggling a finger let it use Poison Powder!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_POISON_POWDER, player); MESSAGE("It doesn't affect the opposing Tangela…"); NOT STATUS_ICON(opponent, poison: TRUE); @@ -53,7 +53,7 @@ SINGLE_BATTLE_TEST("Metronome's called multi-hit move hits multiple times") } SCENE { MESSAGE("Wobbuffet used Metronome!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_METRONOME, player); - MESSAGE("Wobbuffet used Rock Blast!"); + MESSAGE("Waggling a finger let it use Rock Blast!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROCK_BLAST, player); HP_BAR(opponent); MESSAGE("The Pokémon was hit 5 time(s)!"); diff --git a/test/battle/move_effect/octolock.c b/test/battle/move_effect/octolock.c index f6d84a2d5f6a..1a04de7331c8 100644 --- a/test/battle/move_effect/octolock.c +++ b/test/battle/move_effect/octolock.c @@ -97,7 +97,7 @@ SINGLE_BATTLE_TEST("Octolock reduction is prevented by Clear Amulet") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_OCTOLOCK, player); MESSAGE("The opposing Wobbuffet can no longer escape because of Octolock!"); - MESSAGE("The opposing Wobbuffet's Clear Amulet prevents its stats from being lowered!"); + MESSAGE("The effects of the Clear Amulet held by the opposing Wobbuffet prevents its stats from being lowered!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); MESSAGE("The opposing Wobbuffet's Defense fell!"); diff --git a/test/battle/move_effect/pledge.c b/test/battle/move_effect/pledge.c index df68668f1068..4c999755da0c 100644 --- a/test/battle/move_effect/pledge.c +++ b/test/battle/move_effect/pledge.c @@ -30,7 +30,7 @@ DOUBLE_BATTLE_TEST("Water and Fire Pledge create a rainbow on the user's side of ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PLEDGE, playerRight); HP_BAR(opponentRight); MESSAGE("A rainbow appeared in the sky on your team's side!"); - MESSAGE("The rainbow on your side disappeared!"); + MESSAGE("The rainbow on your team's side disappeared!"); } } @@ -253,7 +253,7 @@ DOUBLE_BATTLE_TEST("Pledge status timer does not reset if combined move is used if (pledgeMove1 == MOVE_WATER_PLEDGE && pledgeMove2 == MOVE_FIRE_PLEDGE) { NOT MESSAGE("A rainbow appeared in the sky on your team's side!"); - MESSAGE("The rainbow on your side disappeared!"); + MESSAGE("The rainbow on your team's side disappeared!"); } if (pledgeMove1 == MOVE_FIRE_PLEDGE && pledgeMove2 == MOVE_GRASS_PLEDGE) { diff --git a/test/battle/move_effect/rage_fist.c b/test/battle/move_effect/rage_fist.c index 6a12a62d452e..7bc349cef03e 100644 --- a/test/battle/move_effect/rage_fist.c +++ b/test/battle/move_effect/rage_fist.c @@ -142,8 +142,8 @@ SINGLE_BATTLE_TEST("Rage Fist base power is not increased if a substitute was hi HP_BAR(opponent, captureDamage: ×GotHit[0]); ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_CRUNCH, opponent); - MESSAGE("The SUBSTITUTE took damage for Wobbuffet!"); - MESSAGE("Wobbuffet's SUBSTITUTE faded!"); + MESSAGE("The substitute took damage for Wobbuffet!"); + MESSAGE("Wobbuffet's substitute faded!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGE_FIST, player); HP_BAR(opponent, captureDamage: ×GotHit[1]); } THEN { diff --git a/test/battle/move_effect/reflect_type.c b/test/battle/move_effect/reflect_type.c index 49361dcc6084..fc152fc27f85 100644 --- a/test/battle/move_effect/reflect_type.c +++ b/test/battle/move_effect/reflect_type.c @@ -121,7 +121,7 @@ SINGLE_BATTLE_TEST("Reflect Type copies a target's dual types") } SCENE { MESSAGE("Arcanine used Reflect Type!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, player); - MESSAGE("Arcanine's type changed to match the the opposing Poliwrath's!"); + MESSAGE("Arcanine became the same type as the opposing Poliwrath!"); } THEN { EXPECT_EQ(player->types[0], TYPE_WATER); EXPECT_EQ(player->types[1], TYPE_FIGHTING); @@ -143,7 +143,7 @@ SINGLE_BATTLE_TEST("Reflect Type copies a target's pure type") } SCENE { MESSAGE("Arcanine used Reflect Type!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, player); - MESSAGE("Arcanine's type changed to match the the opposing Sudowoodo's!"); + MESSAGE("Arcanine became the same type as the opposing Sudowoodo!"); } THEN { EXPECT_EQ(player->types[0], TYPE_ROCK); EXPECT_EQ(player->types[1], TYPE_ROCK); @@ -177,7 +177,7 @@ SINGLE_BATTLE_TEST("Reflect Type defaults to Normal type for the user's types[0] // Turn 3 MESSAGE("Wobbuffet used Reflect Type!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, player); - MESSAGE("Wobbuffet's type changed to match the the opposing Arcanine's!"); + MESSAGE("Wobbuffet became the same type as the opposing Arcanine!"); } THEN { EXPECT_EQ(player->types[0], TYPE_NORMAL); EXPECT_EQ(player->types[1], TYPE_NORMAL); diff --git a/test/battle/move_effect/roost.c b/test/battle/move_effect/roost.c index 16d33c668ae0..449119a89abc 100644 --- a/test/battle/move_effect/roost.c +++ b/test/battle/move_effect/roost.c @@ -96,7 +96,7 @@ SINGLE_BATTLE_TEST("Roost suppresses the user's Flying-typing this turn, then re // Turn 1: EQ hits when Roosted MESSAGE("Skarmory used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); - MESSAGE("Skarmory regained health!"); + MESSAGE("Skarmory's HP was restored."); MESSAGE("The opposing Wobbuffet used Earthquake!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponent); MESSAGE("It's super effective!"); @@ -140,7 +140,7 @@ SINGLE_BATTLE_TEST("Roost, if used by a Flying/Flying type, treats the user as a } SCENE { MESSAGE("Tornadus used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); - MESSAGE("Tornadus regained health!"); + MESSAGE("Tornadus's HP was restored."); if (B_ROOST_PURE_FLYING >= GEN_5) // >= Gen. 5, Pokemon becomes pure Normal-type { @@ -214,7 +214,7 @@ SINGLE_BATTLE_TEST("Roost, if used by a Mystery/Flying type, treats the user as // Turn 2: Use Roost to now be treated as a Mystery/Mystery type MESSAGE("Moltres used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); - MESSAGE("Moltres regained health!"); + MESSAGE("Moltres's HP was restored."); ANIMATION(ANIM_TYPE_MOVE, damagingMove, opponent); NONE_OF { MESSAGE("It's super effective!"); @@ -241,7 +241,7 @@ DOUBLE_BATTLE_TEST("Roost suppresses the user's not-yet-aquired Flying-type this } SCENE { MESSAGE("Kecleon used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, playerLeft); - MESSAGE("Kecleon regained health!"); + MESSAGE("Kecleon's HP was restored."); MESSAGE("The opposing Pidgey used Gust!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_GUST, opponentLeft); MESSAGE("Kecleon's Color Change made it the Flying type!"); @@ -263,7 +263,7 @@ SINGLE_BATTLE_TEST("Roost prevents a Flying-type user from being protected by De } SCENE { MESSAGE("Rayquaza used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); - MESSAGE("Rayquaza regained health!"); + MESSAGE("Rayquaza's HP was restored."); MESSAGE("The opposing Wobbuffet used Ice Beam!"); NOT MESSAGE("The mysterious strong winds weakened the attack!"); } @@ -282,7 +282,7 @@ SINGLE_BATTLE_TEST("Roost does not undo other type-changing effects at the end o } SCENE { MESSAGE("Swellow used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); - MESSAGE("Swellow regained health!"); + MESSAGE("Swellow's HP was restored."); MESSAGE("The opposing Wobbuffet used Soak!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SOAK, opponent); MESSAGE("Swellow transformed into the Water type!"); @@ -305,7 +305,7 @@ SINGLE_BATTLE_TEST("Roost's effect is lifted after Grassy Terrain's healing") } SCENE { MESSAGE("Swellow used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); - MESSAGE("Swellow regained health!"); + MESSAGE("Swellow's HP was restored."); MESSAGE("Swellow is healed by the grassy terrain!"); HP_BAR(player); } @@ -329,17 +329,17 @@ SINGLE_BATTLE_TEST("Roost's suppression prevents Reflect Type from copying any F // Turn 1: Reflect Type on Roosted Normal/Flying MESSAGE("Swellow used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); - MESSAGE("Swellow regained health!"); + MESSAGE("Swellow's HP was restored."); MESSAGE("The opposing Wobbuffet used Reflect Type!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, opponent); - MESSAGE("The opposing Wobbuffet's type changed to match the Swellow's!"); + MESSAGE("The opposing Wobbuffet became the same type as Swellow!"); // Turn 2: EQ hits, Reflect Type on non-Roosted Normal/Flying MESSAGE("Swellow used Earthquake!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, player); HP_BAR(opponent); MESSAGE("The opposing Wobbuffet used Reflect Type!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, opponent); - MESSAGE("The opposing Wobbuffet's type changed to match the Swellow's!"); + MESSAGE("The opposing Wobbuffet became the same type as Swellow!"); // Turn 3: EQ has no effect MESSAGE("Swellow used Earthquake!"); MESSAGE("It doesn't affect the opposing Wobbuffet…"); @@ -360,7 +360,7 @@ SINGLE_BATTLE_TEST("Roost does not suppress the ungrounded effect of Levitate") } SCENE { MESSAGE("Flygon used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); - MESSAGE("Flygon regained health!"); + MESSAGE("Flygon's HP was restored."); MESSAGE("The opposing Wobbuffet used Earthquake!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponent); @@ -379,7 +379,7 @@ SINGLE_BATTLE_TEST("Roost does not suppress the ungrounded effect of Air Balloon } SCENE { MESSAGE("Wobbuffet used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); - MESSAGE("Wobbuffet regained health!"); + MESSAGE("Wobbuffet's HP was restored."); MESSAGE("The opposing Wobbuffet used Earthquake!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponent); @@ -400,11 +400,11 @@ SINGLE_BATTLE_TEST("Roost does not suppress the ungrounded effect of Magnet Rise // Turn 1: Magnet Rise MESSAGE("Wobbuffet used Magnet Rise!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_MAGNET_RISE, player); - MESSAGE("Wobbuffet levitated on electromagnetism!"); + MESSAGE("Wobbuffet levitated with electromagnetism!"); // Turn 2 MESSAGE("Wobbuffet used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); - MESSAGE("Wobbuffet regained health!"); + MESSAGE("Wobbuffet's HP was restored."); MESSAGE("The opposing Wobbuffet used Earthquake!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponent); @@ -429,7 +429,7 @@ SINGLE_BATTLE_TEST("Roost does not suppress the ungrounded effect of Telekinesis // Turn 2 MESSAGE("Wobbuffet used Roost!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); - MESSAGE("Wobbuffet regained health!"); + MESSAGE("Wobbuffet's HP was restored."); MESSAGE("The opposing Wobbuffet used Earthquake!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponent); diff --git a/test/battle/move_effect/salt_cure.c b/test/battle/move_effect/salt_cure.c index bca793e74c36..006a55d64287 100644 --- a/test/battle/move_effect/salt_cure.c +++ b/test/battle/move_effect/salt_cure.c @@ -95,7 +95,7 @@ SINGLE_BATTLE_TEST("Salt Cure does not get applied if hitting a Substitute") TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_SALT_CURE); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SALT_CURE, player); - MESSAGE("The SUBSTITUTE took damage for the opposing Wobbuffet!"); + MESSAGE("The substitute took damage for the opposing Wobbuffet!"); NOT MESSAGE("The opposing Wobbuffet is being salt cured!"); } } diff --git a/test/battle/move_effect/smelling_salts.c b/test/battle/move_effect/smelling_salts.c index 4eb624df572f..d07f9e9a2887 100644 --- a/test/battle/move_effect/smelling_salts.c +++ b/test/battle/move_effect/smelling_salts.c @@ -22,10 +22,10 @@ SINGLE_BATTLE_TEST("Smelling Salts does not cure paralyzed pokemons behind subst ANIMATION(ANIM_TYPE_MOVE, MOVE_SMELLING_SALTS, player); if (ability == ABILITY_INNER_FOCUS) { - MESSAGE("The SUBSTITUTE took damage for the opposing Seismitoad!"); + MESSAGE("The substitute took damage for the opposing Seismitoad!"); NONE_OF { - MESSAGE("The opposing Seismitoad's SUBSTITUTE faded!"); // Smelling Salts does 86 damage, the sub has 122 HP, if hitting a sub it shouldn't get boosted damage. + MESSAGE("The opposing Seismitoad's substitute faded!"); // Smelling Salts does 86 damage, the sub has 122 HP, if hitting a sub it shouldn't get boosted damage. MESSAGE("The opposing Seismitoad was healed of paralysis!"); STATUS_ICON(opponent, none: TRUE); } diff --git a/test/battle/move_effect/spicy_extract.c b/test/battle/move_effect/spicy_extract.c index e512ab7c6fc6..c9ddb3c30db0 100644 --- a/test/battle/move_effect/spicy_extract.c +++ b/test/battle/move_effect/spicy_extract.c @@ -154,7 +154,7 @@ SINGLE_BATTLE_TEST("Spicy Extract against Clear Amulet and Contrary raises Defen ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); MESSAGE("The opposing Snivy's Attack harshly fell!"); } - MESSAGE("The opposing Snivy's Clear Amulet prevents its stats from being lowered!"); + MESSAGE("The effects of the Clear Amulet held by the opposing Snivy prevents its stats from being lowered!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); MESSAGE("The opposing Snivy's Defense sharply rose!"); } THEN { diff --git a/test/battle/move_effect/strength_sap.c b/test/battle/move_effect/strength_sap.c index 9a343f77ef30..52eb68590899 100644 --- a/test/battle/move_effect/strength_sap.c +++ b/test/battle/move_effect/strength_sap.c @@ -51,7 +51,7 @@ SINGLE_BATTLE_TEST("Strength Sap works exactly the same when attacker is behind ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); MESSAGE("The opposing Wobbuffet's Attack fell!"); HP_BAR(player, captureDamage: &results[i].hp); - NOT MESSAGE("The SUBSTITUTE took damage for the opposing Wobbuffet!"); + NOT MESSAGE("The substitute took damage for the opposing Wobbuffet!"); MESSAGE("The opposing Wobbuffet had its energy drained!"); } THEN { EXPECT_EQ(results[i].hp * -1, atkStat); diff --git a/test/battle/move_effect/tidy_up.c b/test/battle/move_effect/tidy_up.c index b2567ffc6ee5..986e9a2ba39c 100644 --- a/test/battle/move_effect/tidy_up.c +++ b/test/battle/move_effect/tidy_up.c @@ -66,7 +66,7 @@ SINGLE_BATTLE_TEST("Tidy Up removes Substitute") MESSAGE("The opposing Wobbuffet put in a substitute!"); MESSAGE("Wobbuffet used Tidy Up!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TIDY_UP, player); - MESSAGE("The opposing Wobbuffet's SUBSTITUTE faded!"); + MESSAGE("The opposing Wobbuffet's substitute faded!"); MESSAGE("Tidying up complete!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Wobbuffet's Attack rose!"); diff --git a/test/battle/move_effect/wake_up_slap.c b/test/battle/move_effect/wake_up_slap.c index 8ff1d8bf78cd..e2aba1a76563 100644 --- a/test/battle/move_effect/wake_up_slap.c +++ b/test/battle/move_effect/wake_up_slap.c @@ -21,10 +21,10 @@ SINGLE_BATTLE_TEST("Wake-Up Slap does not cure paralyzed pokemons behind substit } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_WAKE_UP_SLAP, player); if (ability == ABILITY_INNER_FOCUS) { - MESSAGE("The SUBSTITUTE took damage for the opposing Seismitoad!"); + MESSAGE("The substitute took damage for the opposing Seismitoad!"); NONE_OF { - MESSAGE("The opposing Seismitoad's SUBSTITUTE faded!"); // Smelling Salts does 86 damage, the sub has 122 HP, if hitting a sub it shouldn't get boosted damage. + MESSAGE("The opposing Seismitoad's substitute faded!"); // Smelling Salts does 86 damage, the sub has 122 HP, if hitting a sub it shouldn't get boosted damage. MESSAGE("The opposing Seismitoad woke up!"); STATUS_ICON(opponent, none: TRUE); } diff --git a/test/battle/move_effect_secondary/bug_bite.c b/test/battle/move_effect_secondary/bug_bite.c index d4bbde4fad75..683a0a6dc8d0 100644 --- a/test/battle/move_effect_secondary/bug_bite.c +++ b/test/battle/move_effect_secondary/bug_bite.c @@ -61,7 +61,7 @@ SINGLE_BATTLE_TEST("Bug Bite eats the target's berry and immediately gains its e HP_BAR(player); } else if (effect == HOLD_EFFECT_RESTORE_PP) { - MESSAGE("Wobbuffet's Leppa Berry restored Bug Bite's PP!"); + MESSAGE("Wobbuffet restored PP to its move Bug Bite using its Leppa Berry!"); } else if (status1 != STATUS1_NONE) { if (status1 == STATUS1_BURN) { @@ -71,7 +71,7 @@ SINGLE_BATTLE_TEST("Bug Bite eats the target's berry and immediately gains its e } else if (status1 == STATUS1_PARALYSIS) { MESSAGE("Wobbuffet's Cheri Berry cured paralysis!"); } else if (status1 == STATUS1_TOXIC_POISON || status1 == STATUS1_POISON) { - MESSAGE("Wobbuffet's Pecha Berry cured poison!"); + MESSAGE("Wobbuffet's Pecha Berry cured its poison!"); } else if (status1 == STATUS1_FROSTBITE) { MESSAGE("Wobbuffet's Aspear Berry healed its frostbite!"); } diff --git a/test/battle/move_effect_secondary/syrup_bomb.c b/test/battle/move_effect_secondary/syrup_bomb.c index 91e6aa80f259..9390041f6e44 100644 --- a/test/battle/move_effect_secondary/syrup_bomb.c +++ b/test/battle/move_effect_secondary/syrup_bomb.c @@ -134,7 +134,7 @@ SINGLE_BATTLE_TEST("Sticky Syrup speed reduction is prevented by Clear Amulet") ANIMATION(ANIM_TYPE_MOVE, MOVE_SYRUP_BOMB, player); HP_BAR(opponent); MESSAGE("The opposing Wobbuffet got covered in sticky candy syrup!"); - MESSAGE("The opposing Wobbuffet's Clear Amulet prevents its stats from being lowered!"); + MESSAGE("The effects of the Clear Amulet held by the opposing Wobbuffet prevents its stats from being lowered!"); NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent); MESSAGE("The opposing Wobbuffet's Speed fell!"); diff --git a/test/battle/terrain/misty.c b/test/battle/terrain/misty.c index aab35e312534..1312dcb8a61e 100644 --- a/test/battle/terrain/misty.c +++ b/test/battle/terrain/misty.c @@ -92,7 +92,7 @@ SINGLE_BATTLE_TEST("Misty Terrain lasts for 5 turns") } SCENE { MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_MISTY_TERRAIN, player); - MESSAGE("Mist swirled about the battlefield!"); + MESSAGE("Mist swirled around the battlefield!"); MESSAGE("Wobbuffet used Celebrate!"); MESSAGE("The opposing Wobbuffet used Celebrate!"); diff --git a/test/battle/terrain/starting_terrain.c b/test/battle/terrain/starting_terrain.c index e3784690f73b..e505dbd18530 100644 --- a/test/battle/terrain/starting_terrain.c +++ b/test/battle/terrain/starting_terrain.c @@ -37,7 +37,7 @@ SINGLE_BATTLE_TEST("B_VAR_STARTING_STATUS starts a chosen terrain at the beginni MESSAGE("The battlefield got weird!"); break; case STARTING_STATUS_MISTY_TERRAIN: - MESSAGE("Mist swirled about the battlefield!"); + MESSAGE("Mist swirled around the battlefield!"); break; case STARTING_STATUS_ELECTRIC_TERRAIN: MESSAGE("An electric current is running across the battlefield!"); From 67bc758e421626c5a3c3d6a34f68b23265bc84ce Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 10 Sep 2024 17:19:34 -0300 Subject: [PATCH 41/68] 1 left --- docs/how_to_testing_system.md | 2 +- include/battle_message.h | 34 +++++++++++++------ include/test/battle.h | 10 +++--- src/battle_message.c | 27 ++++++++++----- src/battle_util.c | 2 +- test/battle/ability/cloud_nine.c | 4 +-- test/battle/ability/desolate_land.c | 10 +++--- test/battle/ability/mirror_armor.c | 2 +- test/battle/ability/shield_dust.c | 2 +- test/battle/ability/speed_boost.c | 2 +- test/battle/ability/trace.c | 10 +++--- test/battle/battle_message.c | 4 +-- test/battle/gimmick/dynamax.c | 22 ++++++------ test/battle/hold_effect/covert_cloak.c | 2 +- test/battle/hold_effect/safety_goggles.c | 2 +- test/battle/item_effect/set_mist.c | 4 +-- test/battle/move_effect/court_change.c | 28 +++++++-------- test/battle/move_effect/defog.c | 26 +++++++------- test/battle/move_effect/doodle.c | 8 ++--- test/battle/move_effect/embargo.c | 10 +++--- test/battle/move_effect/fling.c | 12 +++---- test/battle/move_effect/heal_bell.c | 10 +++--- test/battle/move_effect/healing_wish.c | 6 ++-- test/battle/move_effect/smelling_salts.c | 4 +-- test/battle/move_effect/sticky_web.c | 4 +-- test/battle/move_effect/strength_sap.c | 2 +- test/battle/move_effect/toxic_spikes.c | 4 +-- test/battle/move_effect/uproar.c | 6 ++-- test/battle/move_effect_secondary/bug_bite.c | 10 +++--- .../move_effect_secondary/throat_chop.c | 4 +-- test/battle/status1/frostbite.c | 4 +-- test/battle/status1/paralysis.c | 2 +- test/battle/terrain/electric.c | 2 +- test/text.c | 23 +++++++++++++ 34 files changed, 175 insertions(+), 129 deletions(-) diff --git a/docs/how_to_testing_system.md b/docs/how_to_testing_system.md index 6910c44e9a61..c573dfbbf7f6 100644 --- a/docs/how_to_testing_system.md +++ b/docs/how_to_testing_system.md @@ -44,7 +44,7 @@ SINGLE_BATTLE_TEST("Stun Spore inflicts paralysis") TURN { MOVE(player, MOVE_STUN_SPORE); } // 3. } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); - MESSAGE("The opposing Wobbuffet is paralyzed! It may be unable to move!"); // 4 + MESSAGE("The opposing Wobbuffet is paralyzed, so it may be unable to move!"); // 4 STATUS_ICON(opponent, paralysis: TRUE); // 4. } } diff --git a/include/battle_message.h b/include/battle_message.h index c0e9353e777f..cbd9fd5a7e90 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -1,6 +1,8 @@ #ifndef GUARD_BATTLE_MESSAGE_H #define GUARD_BATTLE_MESSAGE_H +#include "constants/battle.h" + // This buffer can hold many different things. Some of the things it can hold // that have explicit sizes are listed below to ensure it can contain them. #define TEXT_BUFF_ARRAY_COUNT max(16, \ @@ -76,17 +78,18 @@ #define B_TXT_EFF_NAME_WITH_PREFIX2 0x40 //lowercase #define B_TXT_SCR_ACTIVE_NAME_WITH_PREFIX2 0x41 //lowercase -#define B_BUFF_STRING 0 -#define B_BUFF_NUMBER 1 -#define B_BUFF_MOVE 2 -#define B_BUFF_TYPE 3 -#define B_BUFF_MON_NICK_WITH_PREFIX 4 -#define B_BUFF_STAT 5 -#define B_BUFF_SPECIES 6 -#define B_BUFF_MON_NICK 7 -#define B_BUFF_NEGATIVE_FLAVOR 8 -#define B_BUFF_ABILITY 9 -#define B_BUFF_ITEM 10 +#define B_BUFF_STRING 0 +#define B_BUFF_NUMBER 1 +#define B_BUFF_MOVE 2 +#define B_BUFF_TYPE 3 +#define B_BUFF_MON_NICK_WITH_PREFIX 4 +#define B_BUFF_STAT 5 +#define B_BUFF_SPECIES 6 +#define B_BUFF_MON_NICK 7 +#define B_BUFF_NEGATIVE_FLAVOR 8 +#define B_BUFF_ABILITY 9 +#define B_BUFF_ITEM 10 +#define B_BUFF_MON_NICK_WITH_PREFIX_LOWER 11 // lowercase prefix #define B_BUFF_PLACEHOLDER_BEGIN 0xFD #define B_BUFF_EOS 0xFF @@ -203,6 +206,15 @@ textVar[4] = B_BUFF_EOS; \ } +#define PREPARE_MON_NICK_WITH_PREFIX_LOWER_BUFFER(textVar, battler, partyId) \ +{ \ + textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \ + textVar[1] = B_BUFF_MON_NICK_WITH_PREFIX_LOWER; \ + textVar[2] = battler; \ + textVar[3] = partyId; \ + textVar[4] = B_BUFF_EOS; \ +} + #define PREPARE_MON_NICK_BUFFER(textVar, battler, partyId) \ { \ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \ diff --git a/include/test/battle.h b/include/test/battle.h index 3b2b9565f845..41757ab7d293 100644 --- a/include/test/battle.h +++ b/include/test/battle.h @@ -1004,11 +1004,11 @@ void SendOut(u32 sourceLine, struct BattlePokemon *, u32 partyIndex); MESSAGE(name ", good! Come back!"); \ } -#define SEND_IN_MESSAGE(name) ONE_OF { \ - MESSAGE("Go! " name "!"); \ - MESSAGE("You're in charge, " name "!"); \ - MESSAGE("Go for it, " name "!"); \ - MESSAGE("Your foe's weak! Get 'em, " name "!"); \ +#define SEND_IN_MESSAGE(name) ONE_OF { \ + MESSAGE("Go! " name "!"); \ + MESSAGE("You're in charge, " name "!"); \ + MESSAGE("Go for it, " name "!"); \ + MESSAGE("Your opponent's weak! Get 'em, " name "!"); \ } enum QueueGroupType diff --git a/src/battle_message.c b/src/battle_message.c index 68be0e5a5306..ad1f76b6a46e 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -167,7 +167,7 @@ static const u8 sText_PkmnFreedFrom[] = _("{B_ATK_NAME_WITH_PREFIX} was freed\nf static const u8 sText_PkmnCrashed[] = _("{B_ATK_NAME_WITH_PREFIX} kept going\nand crashed!"); const u8 gText_PkmnShroudedInMist[] = _("{B_ATK_TEAM1} team became\nshrouded in mist!"); static const u8 sText_PkmnProtectedByMist[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is protected\nby the mist!"); -const u8 gText_PkmnGettingPumped[] = _("{B_ATK_NAME_WITH_PREFIX} is getting\npumped!"); +const u8 gText_PkmnGettingPumped[] = _("{B_DEF_NAME_WITH_PREFIX} is getting\npumped!"); static const u8 sText_PkmnHitWithRecoil[] = _("{B_ATK_NAME_WITH_PREFIX} was damaged\nby the recoil!"); static const u8 sText_PkmnProtectedItself2[] = _("{B_ATK_NAME_WITH_PREFIX} protected\nitself!"); static const u8 sText_PkmnBuffetedBySandstorm[] = _("{B_ATK_NAME_WITH_PREFIX} is buffeted\nby the sandstorm!"); @@ -258,7 +258,7 @@ static const u8 sText_PkmnSealedOpponentMove[] = _("{B_ATK_NAME_WITH_PREFIX} sea static const u8 sText_PkmnWantsGrudge[] = _("{B_ATK_NAME_WITH_PREFIX} wants its target\nto bear a grudge!"); static const u8 sText_PkmnLostPPGrudge[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} lost all its PP\ndue to the grudge!"); static const u8 sText_PkmnShroudedItself[] = _("{B_ATK_NAME_WITH_PREFIX} shrouded\nitself with Magic Coat!"); -static const u8 sText_PkmnMoveBounced[] = _("{B_DEF_NAME_WITH_PREFIX}\nbounced the {B_CURRENT_MOVE} back!"); +static const u8 sText_PkmnMoveBounced[] = _("{B_ATK_NAME_WITH_PREFIX}\nbounced the {B_CURRENT_MOVE} back!"); static const u8 sText_PkmnWaitsForTarget[] = _("{B_ATK_NAME_WITH_PREFIX} waits for a target\nto make a move!"); static const u8 sText_PkmnSnatchedMove[] = _("{B_DEF_NAME_WITH_PREFIX} snatched\n{B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s move!"); static const u8 sText_ElectricityWeakened[] = _("Electricity's power was weakened!"); @@ -305,7 +305,7 @@ static const u8 sText_PkmnsXPreventsYLoss[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} static const u8 sText_PkmnsXInfatuatedY[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\ninfatuated {B_ATK_NAME_WITH_PREFIX2}!"); //not in gen 5+, ability popup static const u8 sText_PkmnsXMadeYIneffective[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} ineffective!"); //not in gen 5+, ability popup static const u8 sText_PkmnsXCuredYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!"); //not in gen 5+, ability popup -static const u8 sText_ItSuckedLiquidOoze[] = _("{B_DEF_NAME_WITH_PREFIX} sucked up\nthe liquid ooze!"); +static const u8 sText_ItSuckedLiquidOoze[] = _("{B_ATK_NAME_WITH_PREFIX} sucked up\nthe liquid ooze!"); static const u8 sText_PkmnTransformed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} transformed!"); static const u8 sText_PkmnsXTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\ntook the attack!"); //In gen 5+ but without naming the ability const u8 gText_PkmnsXPreventsSwitching[] = _("{B_BUFF1} is preventing switching out\nwith its {B_LAST_ABILITY} Ability!\p"); @@ -753,7 +753,7 @@ static const u8 sText_ItemCannotBeRemoved[] = _("{B_ATK_NAME_WITH_PREFIX}'s item static const u8 sText_StickyBarbTransfer[] = _("The {B_LAST_ITEM} attached itself to\n{B_ATK_NAME_WITH_PREFIX2}!"); static const u8 sText_PkmnBurnHealed[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nburn was cured!"); static const u8 sText_RedCardActivate[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} held up its Red Card\nagainst {B_ATK_NAME_WITH_PREFIX2}!"); -static const u8 sText_EjectButtonActivate[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is switched\nout with the Eject Button!"); +static const u8 sText_EjectButtonActivate[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is switched\nout with the {B_LAST_ITEM}!"); static const u8 sText_AttackerGotOverInfatuation[] =_("{B_ATK_NAME_WITH_PREFIX} got over\nits infatuation!"); static const u8 sText_TormentedNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is\nno longer tormented!"); static const u8 sText_HealBlockedNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is cured of\nits heal block!"); @@ -811,7 +811,7 @@ static const u8 sText_AbilityWeakenedSurroundingMonsStat[] = _("{B_SCR_ACTIVE_NA static const u8 sText_AttackerGainedStrengthFromTheFallen[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} gained strength\nfrom the fallen!"); static const u8 sText_PrepareShellTrap[] = _("{B_ATK_NAME_WITH_PREFIX} set a shell trap!"); static const u8 sText_ShellTrapDidntWork[] = _("{B_ATK_NAME_WITH_PREFIX}'s shell trap didn't work!"); -static const u8 sText_SharpSteelFloats[] = _("Sharp-pointed pieces of steel started\nfloating around your {B_DEF_TEAM2} Pokémon!"); +static const u8 sText_SharpSteelFloats[] = _("Sharp-pointed pieces of steel started\nfloating around {B_DEF_TEAM2} Pokémon!"); static const u8 sText_SharpSteelDmg[] = _("The sharp steel bit into\n{B_DEF_NAME_WITH_PREFIX2}!"); static const u8 sText_PkmnBlewAwaySharpSteel[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nsharp steel!"); static const u8 sText_SharpSteelDisappearedFromTeam[] = _("The pieces of steel surrounding\n{B_ATK_TEAM2} Pokémon disappeared!"); @@ -3816,16 +3816,27 @@ void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst) srcID += 2; break; case B_BUFF_MON_NICK_WITH_PREFIX: // poke nick with prefix + case B_BUFF_MON_NICK_WITH_PREFIX_LOWER: // poke nick with lowercase prefix if (GetBattlerSide(src[srcID + 1]) == B_SIDE_PLAYER) { GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, nickname); } else { - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - StringAppend(dst, sText_FoePkmnPrefix); + if (src[srcID] == B_BUFF_MON_NICK_WITH_PREFIX_LOWER) + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + StringAppend(dst, sText_FoePkmnPrefixLower); + else + StringAppend(dst, sText_WildPkmnPrefixLower); + } else - StringAppend(dst, sText_WildPkmnPrefix); + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + StringAppend(dst, sText_FoePkmnPrefix); + else + StringAppend(dst, sText_WildPkmnPrefix); + } GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, nickname); } diff --git a/src/battle_util.c b/src/battle_util.c index 2fc7ab899c59..253eb3bf2150 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4369,7 +4369,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 RecordAbilityBattle(chosenTarget, gLastUsedAbility); // Record the opposing battler has this ability battler = gBattlerAbility = gBattleScripting.battler = battler; - PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, chosenTarget, gBattlerPartyIndexes[chosenTarget]) + PREPARE_MON_NICK_WITH_PREFIX_LOWER_BUFFER(gBattleTextBuff1, chosenTarget, gBattlerPartyIndexes[chosenTarget]) PREPARE_ABILITY_BUFFER(gBattleTextBuff2, gLastUsedAbility) } } diff --git a/test/battle/ability/cloud_nine.c b/test/battle/ability/cloud_nine.c index 605b6f1c9455..fb87b7f2ba35 100644 --- a/test/battle/ability/cloud_nine.c +++ b/test/battle/ability/cloud_nine.c @@ -17,14 +17,14 @@ SINGLE_BATTLE_TEST("Cloud Nine/Air Lock prevent basic weather effects, but witho ABILITY_POPUP(player, ability); MESSAGE("The effects of the weather disappeared."); MESSAGE("The opposing Wobbuffet used Sandstorm!"); - MESSAGE("The sandstorm rages."); + MESSAGE("The sandstorm is raging."); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SANDSTORM_CONTINUES); NONE_OF { HP_BAR(player); HP_BAR(opponent); MESSAGE("The opposing Wobbuffet is buffeted by the sandstorm!"); } - MESSAGE("The sandstorm rages."); + MESSAGE("The sandstorm is raging."); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SANDSTORM_CONTINUES); } } diff --git a/test/battle/ability/desolate_land.c b/test/battle/ability/desolate_land.c index 1ab6e7a44825..06d604e8fcec 100644 --- a/test/battle/ability/desolate_land.c +++ b/test/battle/ability/desolate_land.c @@ -18,11 +18,11 @@ SINGLE_BATTLE_TEST("Desolate Land blocks damaging Water-type moves") } SCENE { MESSAGE("The opposing Wobbuffet used Water Gun!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_GUN, opponent); - MESSAGE("The Water-type attack evaporated in the harsh sunlight!"); + MESSAGE("The Water-type attack evaporated in the extremely harsh sunlight!"); NOT HP_BAR(player); MESSAGE("The opposing Wobbuffet used Water Gun!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_GUN, opponent); - MESSAGE("The Water-type attack evaporated in the harsh sunlight!"); + MESSAGE("The Water-type attack evaporated in the extremely harsh sunlight!"); NOT HP_BAR(player); } THEN { EXPECT_EQ(player->hp, player->maxHP); @@ -44,8 +44,8 @@ DOUBLE_BATTLE_TEST("Desolate Land blocks damaging Water-type moves and prints th } SCENE { MESSAGE("The opposing Wobbuffet used Surf!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SURF, opponentLeft); - MESSAGE("The Water-type attack evaporated in the harsh sunlight!"); - NOT MESSAGE("The Water-type attack evaporated in the harsh sunlight!"); + MESSAGE("The Water-type attack evaporated in the extremely harsh sunlight!"); + NOT MESSAGE("The Water-type attack evaporated in the extremely harsh sunlight!"); } THEN { EXPECT_EQ(playerLeft->hp, playerLeft->maxHP); EXPECT_EQ(playerRight->hp, playerRight->maxHP); @@ -61,7 +61,7 @@ SINGLE_BATTLE_TEST("Desolate Land does not block a move if pokemon is asleep and } WHEN { TURN { MOVE(opponent, MOVE_WATER_GUN); } } SCENE { - NOT MESSAGE("The Water-type attack evaporated in the harsh sunlight!"); + NOT MESSAGE("The Water-type attack evaporated in the extremely harsh sunlight!"); MESSAGE("The opposing Wobbuffet is fast asleep."); } } diff --git a/test/battle/ability/mirror_armor.c b/test/battle/ability/mirror_armor.c index d9ba1d572e9a..288fe72334eb 100644 --- a/test/battle/ability/mirror_armor.c +++ b/test/battle/ability/mirror_armor.c @@ -185,7 +185,7 @@ DOUBLE_BATTLE_TEST("Mirror Armor lowers Speed of the partner Pokemon after Court TURN { SWITCH(playerRight, 2);} TURN { } } SCENE { - MESSAGE("Wobbuffet used sticky web!"); + MESSAGE("Wobbuffet used Sticky Web!"); MESSAGE("The opposing Wynaut used Court Change!"); MESSAGE("The opposing Wynaut swapped the battle effects affecting each side of the field!"); SEND_IN_MESSAGE("Corviknight"); diff --git a/test/battle/ability/shield_dust.c b/test/battle/ability/shield_dust.c index 1fa2aad841fe..9374a5f01846 100644 --- a/test/battle/ability/shield_dust.c +++ b/test/battle/ability/shield_dust.c @@ -28,7 +28,7 @@ SINGLE_BATTLE_TEST("Shield Dust blocks secondary effects") ANIMATION(ANIM_TYPE_MOVE, move, player); HP_BAR(opponent); NONE_OF { - MESSAGE("The opposing Vivillon is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Vivillon is paralyzed, so it may be unable to move!"); MESSAGE("The opposing Vivillon was burned!"); MESSAGE("The opposing Vivillon was poisoned!"); MESSAGE("The opposing Vivillon flinched and couldn't move!"); diff --git a/test/battle/ability/speed_boost.c b/test/battle/ability/speed_boost.c index 49af39c1088f..b8c9bd496642 100644 --- a/test/battle/ability/speed_boost.c +++ b/test/battle/ability/speed_boost.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Speed Boost gradually boosts Speed") MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Torchic used Celebrate!"); ABILITY_POPUP(player, ABILITY_SPEED_BOOST); - MESSAGE("Torchic's Speed Boost raised its SPEED!"); + MESSAGE("Torchic's Speed Boost raised its Speed!"); MESSAGE("Torchic used Celebrate!"); MESSAGE("The opposing Wobbuffet used Celebrate!"); } diff --git a/test/battle/ability/trace.c b/test/battle/ability/trace.c index b9ee36ec47cb..7fb64e7a9692 100644 --- a/test/battle/ability/trace.c +++ b/test/battle/ability/trace.c @@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Trace copies opponents ability") TURN { } } SCENE { ABILITY_POPUP(player, ABILITY_TRACE); - MESSAGE("It traced Torchic's Blaze!"); + MESSAGE("It traced the opposing Torchic's Blaze!"); } } @@ -24,7 +24,7 @@ SINGLE_BATTLE_TEST("Trace copies opponents ability on switch-in") TURN { SWITCH(player, 1); } } SCENE { ABILITY_POPUP(player, ABILITY_TRACE); - MESSAGE("It traced Torchic's Blaze!"); + MESSAGE("It traced the opposing Torchic's Blaze!"); } } @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Trace copies opponents ability on switch-in even if opponent } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_MISTY_EXPLOSION); ABILITY_POPUP(player, ABILITY_TRACE); - MESSAGE("It traced Torchic's Blaze!"); + MESSAGE("It traced the opposing Torchic's Blaze!"); } } @@ -61,7 +61,7 @@ DOUBLE_BATTLE_TEST("Trace copies opponents ability randomly") TURN { } } SCENE { ABILITY_POPUP(playerLeft, ABILITY_TRACE); - MESSAGE("It traced Torchic's Blaze!"); + MESSAGE("It traced the opposing Torchic's Blaze!"); } } @@ -76,7 +76,7 @@ SINGLE_BATTLE_TEST("Trace will copy an opponent's ability whenever it has the ch } SCENE { // TURN 2 ABILITY_POPUP(player, ABILITY_TRACE); - MESSAGE("It traced Torchic's Blaze!"); + MESSAGE("It traced the opposing Torchic's Blaze!"); } } diff --git a/test/battle/battle_message.c b/test/battle/battle_message.c index 9ea74ceb27cc..423da7cf05e3 100644 --- a/test/battle/battle_message.c +++ b/test/battle/battle_message.c @@ -19,11 +19,11 @@ SINGLE_BATTLE_TEST("Battle Message: Send-in message depends on foe HP") if (hp > 69) MESSAGE("Go! Wynaut!"); else if (hp > 39) - MESSAGE("Do it! Wynaut!"); + MESSAGE("You're in charge, Wynaut!"); else if (hp > 9) MESSAGE("Go for it, Wynaut!"); else - MESSAGE("Your foe's weak! Get 'em, Wynaut!"); + MESSAGE("Your opponent's weak! Get 'em, Wynaut!"); } } diff --git a/test/battle/gimmick/dynamax.c b/test/battle/gimmick/dynamax.c index 24395386e950..d4e5c4399e8c 100644 --- a/test/battle/gimmick/dynamax.c +++ b/test/battle/gimmick/dynamax.c @@ -893,7 +893,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Steelsurge sets up sharp steel") } SCENE { // turn 1 MESSAGE("Copperajah used G-Max Steelsurge!"); - MESSAGE("Sharp-pointed steel floats around the opposing team!"); + MESSAGE("Sharp-pointed pieces of steel started\nfloating around the opposing Pokémon!"); // turn 2 MESSAGE("2 sent out Hatterene!"); MESSAGE("Sharp steel bit into the opposing Hatterene!"); @@ -939,10 +939,10 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Volt Crash paralyzes both opponents") MESSAGE("Pikachu used G-Max Volt Crash!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, opponentLeft); STATUS_ICON(opponentLeft, paralysis: TRUE); - MESSAGE("The opposing Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed, so it may be unable to move!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, opponentRight); STATUS_ICON(opponentRight, paralysis: TRUE); - MESSAGE("The opposing Wynaut is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wynaut is paralyzed, so it may be unable to move!"); } } @@ -973,7 +973,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Stun Shock paralyzes or poisons both opponen } else { STATUS_ICON(opponentLeft, paralysis: TRUE); - MESSAGE("The opposing Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed, so it may be unable to move!"); } // opponent right ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponentRight); @@ -983,7 +983,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Stun Shock paralyzes or poisons both opponen } else { STATUS_ICON(opponentRight, paralysis: TRUE); - MESSAGE("The opposing Wynaut is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wynaut is paralyzed, so it may be unable to move!"); } } } @@ -1007,12 +1007,12 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Stun Shock chooses statuses before consideri STATUS_ICON(opponentLeft, poison: TRUE); MESSAGE("The opposing Garbodor was poisoned!"); STATUS_ICON(opponentLeft, paralysis: TRUE); - MESSAGE("The opposing Garbodor is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Garbodor is paralyzed, so it may be unable to move!"); // opponent right STATUS_ICON(opponentRight, poison: TRUE); MESSAGE("The opposing Trubbish was poisoned!"); STATUS_ICON(opponentRight, paralysis: TRUE); - MESSAGE("The opposing Trubbish is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Trubbish is paralyzed, so it may be unable to move!"); } } } @@ -1043,7 +1043,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Befuddle paralyzes, poisons, or sleeps both } else if (statusAnim == B_ANIM_STATUS_PRZ) { STATUS_ICON(opponentLeft, paralysis: TRUE); - MESSAGE("The opposing Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed, so it may be unable to move!"); } else { STATUS_ICON(opponentLeft, sleep: TRUE); @@ -1057,7 +1057,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Befuddle paralyzes, poisons, or sleeps both } else if (statusAnim == B_ANIM_STATUS_PRZ) { STATUS_ICON(opponentRight, paralysis: TRUE); - MESSAGE("The opposing Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed, so it may be unable to move!"); } else { STATUS_ICON(opponentRight, sleep: TRUE); @@ -1273,7 +1273,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Snooze makes only the target drowsy") } SCENE { // turn 1 MESSAGE("Grimmsnarl used G-Max Snooze!"); - MESSAGE("Blissey grew drowsy!"); + MESSAGE("The opposing Blissey grew drowsy!"); // turn 2 ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, opponentLeft); MESSAGE("The opposing Blissey fell asleep!"); @@ -1397,7 +1397,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Depletion takes away 2 PP from the target's } SCENE { MESSAGE("The opposing Sableye used Celebrate!"); MESSAGE("Duraludon used G-Max Depletion!"); - MESSAGE("Reduced the opposing Sableye's Celebrate by 2!"); + MESSAGE("The opposing Sableye's PP was reduced!"); } } diff --git a/test/battle/hold_effect/covert_cloak.c b/test/battle/hold_effect/covert_cloak.c index 4bfc8a0e5255..b55b1492daff 100644 --- a/test/battle/hold_effect/covert_cloak.c +++ b/test/battle/hold_effect/covert_cloak.c @@ -33,7 +33,7 @@ SINGLE_BATTLE_TEST("Covert Cloak blocks secondary effects") ANIMATION(ANIM_TYPE_MOVE, move, player); HP_BAR(opponent); NONE_OF { - MESSAGE("The opposing Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed, so it may be unable to move!"); MESSAGE("The opposing Wobbuffet was burned!"); MESSAGE("The opposing Wobbuffet was poisoned!"); MESSAGE("The opposing Wobbuffet flinched and couldn't move!"); diff --git a/test/battle/hold_effect/safety_goggles.c b/test/battle/hold_effect/safety_goggles.c index c2d371510e56..ec66ad8bcddb 100644 --- a/test/battle/hold_effect/safety_goggles.c +++ b/test/battle/hold_effect/safety_goggles.c @@ -28,7 +28,7 @@ SINGLE_BATTLE_TEST("Safety Goggles blocks damage from Hail") } WHEN { TURN { MOVE(player, MOVE_HAIL); } } SCENE { - NOT MESSAGE("The opposing Wobbuffet is pelted by HAIL!"); + NOT MESSAGE("The opposing Wobbuffet is buffeted by the hail!"); } } diff --git a/test/battle/item_effect/set_mist.c b/test/battle/item_effect/set_mist.c index b11eb7ebcee2..68ac3534bbea 100644 --- a/test/battle/item_effect/set_mist.c +++ b/test/battle/item_effect/set_mist.c @@ -12,8 +12,8 @@ SINGLE_BATTLE_TEST("Guard Spec. sets Mist effect on the battlers side") TURN { MOVE(opponent, MOVE_GROWL); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_MIST, player); - MESSAGE("Ally became shrouded in MIST!"); + MESSAGE("Your team became shrouded in mist!"); MESSAGE("The opposing Wobbuffet used Growl!"); - MESSAGE("Wobbuffet is protected by MIST!"); + MESSAGE("Wobbuffet is protected by the mist!"); } } diff --git a/test/battle/move_effect/court_change.c b/test/battle/move_effect/court_change.c index ff127faf4da4..f3775d0af65a 100644 --- a/test/battle/move_effect/court_change.c +++ b/test/battle/move_effect/court_change.c @@ -57,7 +57,7 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the player") TURN { MOVE(opponentLeft, MOVE_COURT_CHANGE); } TURN { SWITCH(opponentLeft, 2); SWITCH(playerLeft, 2); } } SCENE { - MESSAGE("Wobbuffet used sticky web!"); + MESSAGE("Wobbuffet used Sticky Web!"); MESSAGE("Wobbuffet used Stealth Rock!"); MESSAGE("Wobbuffet used Spikes!"); MESSAGE("Wobbuffet used Toxic Spikes!"); @@ -106,13 +106,13 @@ DOUBLE_BATTLE_TEST("Court Change used by the player swaps Mist, Safeguard, Auror MESSAGE("The opposing Wobbuffet used Tailwind!"); MESSAGE("Wynaut used Court Change!"); MESSAGE("Wynaut swapped the battle effects affecting each side of the field!"); - // The effects now end for the player side. - MESSAGE("Ally's Mist wore off!"); - MESSAGE("Ally's party is no longer protected by Safeguard!"); - MESSAGE("Ally's Reflect wore off!"); - MESSAGE("Ally's Aurora Veil wore off!"); - MESSAGE("Your team's tailwind petered out!"); - MESSAGE("Ally's Light Screen wore off!"); + // The effects now end for the player side. + MESSAGE("Your team's Mist wore off!"); + MESSAGE("Your team is no longer protected by Safeguard!"); + MESSAGE("Your team's Reflect wore off!"); + MESSAGE("Your team's Aurora Veil wore off!"); + MESSAGE("Your team's Tailwind petered out!"); + MESSAGE("Your team's Light Screen wore off!"); } } @@ -144,12 +144,12 @@ DOUBLE_BATTLE_TEST("Court Change used by the opponent swaps Mist, Safeguard, Aur MESSAGE("The opposing Wynaut used Court Change!"); MESSAGE("The opposing Wynaut swapped the battle effects affecting each side of the field!"); // The effects now end for the player side. - MESSAGE("Foe's Mist wore off!"); - MESSAGE("Foe's party is no longer protected by Safeguard!"); - MESSAGE("Foe's Reflect wore off!"); - MESSAGE("Foe's Aurora Veil wore off!"); - MESSAGE("The opposing team's tailwind petered out!"); - MESSAGE("Foe's Light Screen wore off!"); + MESSAGE("The opposing team's Mist wore off!"); + MESSAGE("The opposing team is no longer protected by Safeguard!"); + MESSAGE("The opposing team's Reflect wore off!"); + MESSAGE("The opposing team's Aurora Veil wore off!"); + MESSAGE("The opposing team's Tailwind petered out!"); + MESSAGE("The opposing team's Light Screen wore off!"); } } diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c index c0855b7b82e5..8029c92245d4 100644 --- a/test/battle/move_effect/defog.c +++ b/test/battle/move_effect/defog.c @@ -73,8 +73,8 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Reflect and Light if (move == MOVE_DEFOG) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); MESSAGE("The opposing Wobbuffet's evasiveness fell!"); - MESSAGE("Foe's Reflect wore off!"); - MESSAGE("Foe's Light Screen wore off!"); + MESSAGE("The opposing team's Reflect wore off!"); + MESSAGE("The opposing team's Light Screen wore off!"); } MESSAGE("Wobbuffet used Tackle!"); HP_BAR(opponentLeft, captureDamage: &results[i].damagePhysical); @@ -105,10 +105,10 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard ANIMATION(ANIM_TYPE_MOVE, MOVE_MIST, opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_SAFEGUARD, opponentRight); if (move == MOVE_DEFOG) { - MESSAGE("The opposing Wobbuffet is protected by MIST!"); + MESSAGE("The opposing Wobbuffet is protected by the mist!"); ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); - MESSAGE("Foe's Mist wore off!"); - MESSAGE("Foe's Safeguard wore off!"); + MESSAGE("The opposing team's Mist wore off!"); + MESSAGE("The opposing team's Safeguard wore off!"); } MESSAGE("Wobbuffet used Screech!"); if (move == MOVE_DEFOG) { @@ -116,7 +116,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); } else { - MESSAGE("The opposing Wobbuffet is protected by MIST!"); + MESSAGE("The opposing Wobbuffet is protected by the mist!"); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); } MESSAGE("Wobbuffet used Toxic!"); @@ -326,7 +326,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Aurora Veil from p if (move == MOVE_DEFOG) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Glalie's evasiveness fell!"); - MESSAGE("Ally's Aurora Veil wore off!"); + MESSAGE("Your team's Aurora Veil wore off!"); } MESSAGE("The opposing Glalie used Tackle!"); HP_BAR(playerLeft, captureDamage: &results[i].damagePhysical); @@ -360,14 +360,14 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes everything it can" TURN { MOVE(playerLeft, MOVE_MIST); MOVE(playerRight, MOVE_SAFEGUARD); MOVE(opponentLeft, MOVE_MIST); MOVE(opponentRight, MOVE_DEFOG, target: playerLeft); } } SCENE { MESSAGE("The opposing Glalie used Defog!"); - MESSAGE("Glalie is protected by MIST!"); + MESSAGE("Glalie is protected by the mist!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, opponentRight); // Player side - MESSAGE("Ally's Reflect wore off!"); - MESSAGE("Ally's Light Screen wore off!"); - MESSAGE("Ally's Mist wore off!"); - MESSAGE("Ally's Aurora Veil wore off!"); - MESSAGE("Ally's Safeguard wore off!"); + MESSAGE("Your team's Reflect wore off!"); + MESSAGE("Your team's Light Screen wore off!"); + MESSAGE("Your team's Mist wore off!"); + MESSAGE("Your team's Aurora Veil wore off!"); + MESSAGE("Your team's Safeguard wore off!"); if (B_DEFOG_EFFECT_CLEARING >= GEN_6) { MESSAGE("The spikes disappeared from the ground around your team!"); diff --git a/test/battle/move_effect/doodle.c b/test/battle/move_effect/doodle.c index e75678826249..a10916789948 100644 --- a/test/battle/move_effect/doodle.c +++ b/test/battle/move_effect/doodle.c @@ -17,8 +17,8 @@ DOUBLE_BATTLE_TEST("Doodle gives the target's ability to user and ally") TURN { MOVE(playerLeft, MOVE_DOODLE, target: opponentLeft); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DOODLE, playerLeft); - MESSAGE("Wynaut copied the opposing Torchic's Blaze!"); - MESSAGE("Wynaut copied the opposing Torchic's Blaze!"); + MESSAGE("Wynaut copied the opposing Torchic's Ability!"); + MESSAGE("Wynaut copied the opposing Torchic's Ability!"); } THEN { EXPECT(playerLeft->ability == ABILITY_BLAZE); EXPECT(playerRight->ability == ABILITY_BLAZE); @@ -37,8 +37,8 @@ DOUBLE_BATTLE_TEST("Doodle can't copy a banned ability") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DOODLE, playerLeft); NONE_OF { - MESSAGE("Wynaut copied the opposing Great Tusk's Protosynthesis!"); - MESSAGE("Wynaut copied the opposing Great Tusk's Protosynthesis!"); + MESSAGE("Wynaut copied the opposing Great Tusk's Ability!"); + MESSAGE("Wynaut copied the opposing Great Tusk's Ability!"); } } THEN { EXPECT(playerLeft->ability != ABILITY_PROTOSYNTHESIS); diff --git a/test/battle/move_effect/embargo.c b/test/battle/move_effect/embargo.c index 9afb7307301c..81939a6d567d 100644 --- a/test/battle/move_effect/embargo.c +++ b/test/battle/move_effect/embargo.c @@ -62,7 +62,7 @@ WILD_BATTLE_TEST("Embargo doesn't block held item effects that affect experience MESSAGE("The wild Caterpie used Embargo!"); MESSAGE("Wobbuffet can't use items anymore!"); MESSAGE("Wobbuffet used Scratch!"); - MESSAGE("Wild Caterpie fainted!"); + MESSAGE("The wild Caterpie fainted!"); EXPERIENCE_BAR(player, captureGainedExp: &results[i].exp); } FINALLY { EXPECT_MUL_EQ(results[1].exp, Q_4_12(1.5), results[0].exp); @@ -88,7 +88,7 @@ WILD_BATTLE_TEST("Embargo doesn't block held item effects that affect effort val MESSAGE("Wobbuffet can't use items anymore!"); // Turn 2 MESSAGE("Wobbuffet used Scratch!"); - MESSAGE("Wild Caterpie fainted!"); + MESSAGE("The wild Caterpie fainted!"); } THEN { finalHPEVAmount = (GetMonData(&PLAYER_PARTY[0], MON_DATA_HP_EV) + gItemsInfo[ITEM_POWER_WEIGHT].holdEffectParam + gSpeciesInfo[SPECIES_CATERPIE].evYield_HP); EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_HP_EV), finalHPEVAmount); @@ -199,7 +199,7 @@ SINGLE_BATTLE_TEST("Embargo doesn't stop an item flung at an affected target fro MESSAGE("Wobbuffet used Fling!"); MESSAGE("Wobbuffet flung its Light Ball!"); HP_BAR(opponent); - MESSAGE("The opposing Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed, so it may be unable to move!"); } } @@ -244,7 +244,7 @@ SINGLE_BATTLE_TEST("Embargo doesn't block the effects of berries obtained throug // Turn 2 MESSAGE("Wobbuffet used Pluck!"); HP_BAR(opponent); - MESSAGE("Wobbuffet stole and ate the opposing its target's Oran Berry!"); + MESSAGE("Wobbuffet stole and ate its target's Oran Berry!"); HP_BAR(player, damage: -hp); } } @@ -323,7 +323,7 @@ SINGLE_BATTLE_TEST("Embargo can be reflected by Magic Coat") } SCENE { // Turn 1 MESSAGE("Wobbuffet used Magic Coat!"); - MESSAGE("Wobbuffet shrouded itself in Magic Coat!"); + MESSAGE("Wobbuffet shrouded itself with Magic Coat!"); MESSAGE("The opposing Wobbuffet used Embargo!"); MESSAGE("Wobbuffet bounced the Embargo back!"); MESSAGE("The opposing Wobbuffet can't use items anymore!"); diff --git a/test/battle/move_effect/fling.c b/test/battle/move_effect/fling.c index e851f946d552..2bd1e824f1dd 100644 --- a/test/battle/move_effect/fling.c +++ b/test/battle/move_effect/fling.c @@ -231,7 +231,7 @@ SINGLE_BATTLE_TEST("Fling applies special effects when throwing specific Items") break; case ITEM_LIGHT_BALL: { - MESSAGE("The opposing Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed, so it may be unable to move!"); STATUS_ICON(opponent, STATUS1_PARALYSIS); } break; @@ -291,7 +291,7 @@ SINGLE_BATTLE_TEST("Fling's secondary effects are blocked by Shield Dust") case ITEM_LIGHT_BALL: { NONE_OF { - MESSAGE("The opposing Wobbuffet is paralyzed! It may be unable to move!"); + MESSAGE("The opposing Wobbuffet is paralyzed, so it may be unable to move!"); STATUS_ICON(opponent, STATUS1_PARALYSIS); } MESSAGE("The Light Ball was used up…"); @@ -386,15 +386,15 @@ SINGLE_BATTLE_TEST("Fling - thrown berry's effect activates for the target even } else if (status1 != STATUS1_NONE) { if (status1 == STATUS1_BURN) { - MESSAGE("The opposing Wobbuffet's Rawst Berry healed its burn!"); + MESSAGE("The opposing Wobbuffet's Rawst Berry cured its burn!"); } else if (status1 == STATUS1_SLEEP) { - MESSAGE("The opposing Wobbuffet's Chesto Berry woke it from its sleep!"); + MESSAGE("The opposing Wobbuffet's Chesto Berry woke it up!"); } else if (status1 == STATUS1_FREEZE) { MESSAGE("The opposing Wobbuffet's Aspear Berry defrosted it!"); } else if (status1 == STATUS1_FROSTBITE) { - MESSAGE("The opposing Wobbuffet's Aspear Berry healed its frostbite!"); + MESSAGE("The opposing Wobbuffet's Aspear Berry cured its frostbite!"); } else if (status1 == STATUS1_PARALYSIS) { - MESSAGE("The opposing Wobbuffet's Cheri Berry cured paralysis!"); + MESSAGE("The opposing Wobbuffet's Cheri Berry cured its paralysis!"); } else if (status1 == STATUS1_TOXIC_POISON || status1 == STATUS1_POISON) { MESSAGE("The opposing Wobbuffet's Pecha Berry cured its poison!"); } diff --git a/test/battle/move_effect/heal_bell.c b/test/battle/move_effect/heal_bell.c index c098886a982d..9b62a36f9be2 100644 --- a/test/battle/move_effect/heal_bell.c +++ b/test/battle/move_effect/heal_bell.c @@ -30,7 +30,7 @@ DOUBLE_BATTLE_TEST("Heal Bell cures the entire party") int i; ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); - NOT MESSAGE("Wobbuffet is hurt by poison!"); + NOT MESSAGE("Wobbuffet was hurt by its poisoning!"); for (i = 0; i < 6; i++) EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_STATUS), STATUS1_NONE); } @@ -55,9 +55,9 @@ DOUBLE_BATTLE_TEST("Heal Bell does not cure soundproof partners") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_HEAL_BELL, playerLeft); if (ability == ABILITY_SOUNDPROOF) { - MESSAGE("Exploud is hurt by poison!"); + MESSAGE("Exploud was hurt by its poisoning!"); } else { - NOT MESSAGE("Exploud is hurt by poison!"); + NOT MESSAGE("Exploud was hurt by its poisoning!"); } } } @@ -81,7 +81,7 @@ SINGLE_BATTLE_TEST("Heal Bell cures inactive soundproof Pokemon") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_HEAL_BELL, player); SEND_IN_MESSAGE("Exploud"); - NOT MESSAGE("Exploud is hurt by poison!"); + NOT MESSAGE("Exploud was hurt by its poisoning!"); } } @@ -96,6 +96,6 @@ SINGLE_BATTLE_TEST("Heal Bell cures a soundproof user") TURN { MOVE(player, MOVE_HEAL_BELL, target: player); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_HEAL_BELL, player); - NOT MESSAGE("Exploud is hurt by poison!"); + NOT MESSAGE("Exploud was hurt by its poisoning!"); } } diff --git a/test/battle/move_effect/healing_wish.c b/test/battle/move_effect/healing_wish.c index a6e14d710db8..a597d552ed5e 100644 --- a/test/battle/move_effect/healing_wish.c +++ b/test/battle/move_effect/healing_wish.c @@ -23,7 +23,7 @@ SINGLE_BATTLE_TEST("Healing Wish causes the user to faint and fully heals the re MESSAGE("The healing wish came true for Wynaut!"); HP_BAR(player, hp: 100); STATUS_ICON(player, none: TRUE); - MESSAGE("Wynaut's HP was restored."); + MESSAGE("Wynaut regained health!"); } } @@ -45,7 +45,7 @@ DOUBLE_BATTLE_TEST("Lunar Dance causes the user to faint and fully heals the rep MESSAGE("Wynaut became cloaked in mystical moonlight!"); HP_BAR(playerLeft, hp: 100); STATUS_ICON(playerLeft, none: TRUE); - MESSAGE("Wynaut's HP was restored."); + MESSAGE("Wynaut regained health!"); } } @@ -72,6 +72,6 @@ SINGLE_BATTLE_TEST("Healing Wish effect activates only if the switched pokemon c MESSAGE("The healing wish came true for Wynaut!"); HP_BAR(player, hp: 100); STATUS_ICON(player, none: TRUE); - MESSAGE("Wynaut's HP was restored."); + MESSAGE("Wynaut regained health!"); } } diff --git a/test/battle/move_effect/smelling_salts.c b/test/battle/move_effect/smelling_salts.c index d07f9e9a2887..bb3f333a4228 100644 --- a/test/battle/move_effect/smelling_salts.c +++ b/test/battle/move_effect/smelling_salts.c @@ -26,13 +26,13 @@ SINGLE_BATTLE_TEST("Smelling Salts does not cure paralyzed pokemons behind subst NONE_OF { MESSAGE("The opposing Seismitoad's substitute faded!"); // Smelling Salts does 86 damage, the sub has 122 HP, if hitting a sub it shouldn't get boosted damage. - MESSAGE("The opposing Seismitoad was healed of paralysis!"); + MESSAGE("The opposing Seismitoad was cured of paralysis!"); STATUS_ICON(opponent, none: TRUE); } } else { - MESSAGE("The opposing Seismitoad was healed of paralysis!"); + MESSAGE("The opposing Seismitoad was cured of paralysis!"); STATUS_ICON(opponent, none: TRUE); } } diff --git a/test/battle/move_effect/sticky_web.c b/test/battle/move_effect/sticky_web.c index e7555cae48be..f1fff0fd1ef2 100644 --- a/test/battle/move_effect/sticky_web.c +++ b/test/battle/move_effect/sticky_web.c @@ -35,11 +35,11 @@ SINGLE_BATTLE_TEST("Sticky Web can only be set up 1 time") TURN { MOVE(player, MOVE_STICKY_WEB); } TURN { MOVE(player, MOVE_STICKY_WEB); } } SCENE { - MESSAGE("Wobbuffet used sticky web!"); + MESSAGE("Wobbuffet used Sticky Web!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); MESSAGE("A sticky web has been laid out on the ground around the opposing team!"); - MESSAGE("Wobbuffet used sticky web!"); + MESSAGE("Wobbuffet used Sticky Web!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); MESSAGE("But it failed!"); } diff --git a/test/battle/move_effect/strength_sap.c b/test/battle/move_effect/strength_sap.c index 52eb68590899..0246d0881f43 100644 --- a/test/battle/move_effect/strength_sap.c +++ b/test/battle/move_effect/strength_sap.c @@ -187,7 +187,7 @@ SINGLE_BATTLE_TEST("Strength Sap makes attacker lose HP if target's ability is L MESSAGE("The opposing Wobbuffet's Attack fell!"); ABILITY_POPUP(opponent, ABILITY_LIQUID_OOZE); HP_BAR(player, captureDamage: &lostHp); - MESSAGE("It sucked up the liquid ooze!"); + MESSAGE("Wobbuffet sucked up the liquid ooze!"); if (atkStat >= 490) { MESSAGE("Wobbuffet fainted!"); SEND_IN_MESSAGE("Wobbuffet"); diff --git a/test/battle/move_effect/toxic_spikes.c b/test/battle/move_effect/toxic_spikes.c index 9ab656caa53e..fd18f57b97a4 100644 --- a/test/battle/move_effect/toxic_spikes.c +++ b/test/battle/move_effect/toxic_spikes.c @@ -176,7 +176,7 @@ SINGLE_BATTLE_TEST("Toxic Spikes are removed by grounded Poison-type Pokémon on } SCENE { if (grounded) { NOT STATUS_ICON(opponent, poison: TRUE); - MESSAGE("The poison spikes disappeared from around the opposing team's feet!"); + MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); NOT STATUS_ICON(opponent, poison: TRUE); } else { NOT STATUS_ICON(opponent, poison: TRUE); @@ -204,7 +204,7 @@ SINGLE_BATTLE_TEST("Toxic Spikes are removed by Poison-type Pokémon affected by TURN { SWITCH(opponent, 0); } } SCENE { NOT STATUS_ICON(opponent, poison: TRUE); - MESSAGE("The poison spikes disappeared from around the opposing team's feet!"); + MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); NOT STATUS_ICON(opponent, poison: TRUE); } } diff --git a/test/battle/move_effect/uproar.c b/test/battle/move_effect/uproar.c index 95de3ef7b16e..e4fc748dc38b 100644 --- a/test/battle/move_effect/uproar.c +++ b/test/battle/move_effect/uproar.c @@ -18,11 +18,11 @@ DOUBLE_BATTLE_TEST("Uproar status causes sleeping pokemon to wake up during an a } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_UPROAR, playerLeft); HP_BAR(opponentRight); - MESSAGE("Wobbuffet woke up in the UPROAR!"); + MESSAGE("The uproar woke Wobbuffet!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); - MESSAGE("The opposing Voltorb woke up in the UPROAR!"); + MESSAGE("The uproar woke the opposing Voltorb!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentLeft); - MESSAGE("The opposing Wobbuffet woke up in the UPROAR!"); + MESSAGE("The uproar woke the opposing Wobbuffet!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); } } diff --git a/test/battle/move_effect_secondary/bug_bite.c b/test/battle/move_effect_secondary/bug_bite.c index 683a0a6dc8d0..a55f7f9a2f0d 100644 --- a/test/battle/move_effect_secondary/bug_bite.c +++ b/test/battle/move_effect_secondary/bug_bite.c @@ -65,15 +65,15 @@ SINGLE_BATTLE_TEST("Bug Bite eats the target's berry and immediately gains its e } else if (status1 != STATUS1_NONE) { if (status1 == STATUS1_BURN) { - MESSAGE("Wobbuffet's Rawst Berry healed its burn!"); + MESSAGE("Wobbuffet's Rawst Berry cured its burn!"); } else if (status1 == STATUS1_SLEEP) { - MESSAGE("Wobbuffet's Chesto Berry woke it from its sleep!"); + MESSAGE("Wobbuffet's Chesto Berry woke it up!"); } else if (status1 == STATUS1_PARALYSIS) { - MESSAGE("Wobbuffet's Cheri Berry cured paralysis!"); + MESSAGE("Wobbuffet's Cheri Berry cured its paralysis!"); } else if (status1 == STATUS1_TOXIC_POISON || status1 == STATUS1_POISON) { MESSAGE("Wobbuffet's Pecha Berry cured its poison!"); } else if (status1 == STATUS1_FROSTBITE) { - MESSAGE("Wobbuffet's Aspear Berry healed its frostbite!"); + MESSAGE("Wobbuffet's Aspear Berry cured its frostbite!"); } NOT STATUS_ICON(player, status1); } @@ -129,7 +129,7 @@ SINGLE_BATTLE_TEST("Tanga Berry activates before Bug Bite") MESSAGE("The opposing Wobbuffet ate its Tanga Berry!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_BUG_BITE, player); HP_BAR(opponent); - MESSAGE("Tanga Berry weakened the damage to the opposing Wobbuffet!"); + MESSAGE("The Tanga Berry weakened the damage to the opposing Wobbuffet!"); } THEN { EXPECT_EQ(player->item, ITEM_NONE); } diff --git a/test/battle/move_effect_secondary/throat_chop.c b/test/battle/move_effect_secondary/throat_chop.c index 79232227852a..e640948c9585 100644 --- a/test/battle/move_effect_secondary/throat_chop.c +++ b/test/battle/move_effect_secondary/throat_chop.c @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("Throat Chop prevents the usage of sound moves") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_THROAT_CHOP, player); HP_BAR(opponent); - MESSAGE("The effects of Throat Chop prevent The opposing Wobbuffet from using certain moves!"); + MESSAGE("The effects of Throat Chop prevent the opposing Wobbuffet from using certain moves!"); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPER_VOICE, opponent); } @@ -38,7 +38,7 @@ SINGLE_BATTLE_TEST("Throat Chop won't work through a substitute") HP_BAR(opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_THROAT_CHOP, player); NONE_OF { - MESSAGE("The effects of Throat Chop prevent The opposing Wobbuffet from using certain moves!"); + MESSAGE("The effects of Throat Chop prevent the opposing Wobbuffet from using certain moves!"); } ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPER_VOICE, opponent); } diff --git a/test/battle/status1/frostbite.c b/test/battle/status1/frostbite.c index cb09bcfaa041..abbc796245b2 100644 --- a/test/battle/status1/frostbite.c +++ b/test/battle/status1/frostbite.c @@ -58,10 +58,10 @@ SINGLE_BATTLE_TEST("Frostbite is healed if hit with a thawing move") ANIMATION(ANIM_TYPE_MOVE, move, player); if (move == MOVE_EMBER) { NONE_OF { - MESSAGE("The opposing Wobbuffet's frostbite was healed!"); + MESSAGE("The opposing Wobbuffet's frostbite was cured!"); } } else { - MESSAGE("The opposing Wobbuffet's frostbite was healed!"); + MESSAGE("The opposing Wobbuffet's frostbite was cured!"); } } } diff --git a/test/battle/status1/paralysis.c b/test/battle/status1/paralysis.c index e6fd6422ea36..85a784764ef3 100644 --- a/test/battle/status1/paralysis.c +++ b/test/battle/status1/paralysis.c @@ -39,7 +39,7 @@ SINGLE_BATTLE_TEST("Paralysis has a 25% chance of skipping the turn") } WHEN { TURN { MOVE(player, MOVE_CELEBRATE); } } SCENE { - MESSAGE("Wobbuffet is paralyzed, so it may be unable to move!"); + MESSAGE("Wobbuffet couldn't move because it's paralyzed!"); } } diff --git a/test/battle/terrain/electric.c b/test/battle/terrain/electric.c index 356f37a75c08..93c24bae4a2d 100644 --- a/test/battle/terrain/electric.c +++ b/test/battle/terrain/electric.c @@ -75,7 +75,7 @@ SINGLE_BATTLE_TEST("Electric Terrain lasts for 5 turns") } SCENE { MESSAGE("The opposing Wobbuffet used Celebrate!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_ELECTRIC_TERRAIN, player); - MESSAGE("An electric current is running across the battlefield!"); + MESSAGE("An electric current ran across the battlefield!"); MESSAGE("Wobbuffet used Celebrate!"); MESSAGE("The opposing Wobbuffet used Celebrate!"); diff --git a/test/text.c b/test/text.c index 0e6900edadfc..01db7dccf716 100644 --- a/test/text.c +++ b/test/text.c @@ -1,9 +1,12 @@ #include "global.h" #include "test/test.h" #include "battle_main.h" +#include "battle_message.h" #include "item.h" #include "text.h" #include "constants/abilities.h" +#include "constants/battle.h" +#include "constants/battle_string_ids.h" #include "constants/items.h" #include "constants/moves.h" @@ -567,3 +570,23 @@ TEST("Type names fit on Pokedex Search Screen") } EXPECT_LE(GetStringWidth(fontId, gTypesInfo[type].name, 0), widthPx); } + +/* +TEST("Battle strings fit on the battle message window") +{ + u32 i; + const u32 fontId = FONT_NORMAL, widthPx = 208; + u32 battleStringId = 0; + u8 *battleString = NULL; + + for (i = BATTLESTRINGS_TABLE_START; i < BATTLESTRINGS_COUNT; i++) + { + PARAMETRIZE_LABEL("%S", gBattleStringsTable[i]) { battleStringId = i; } + } + BattleStringExpandPlaceholders(gBattleStringsTable[battleStringId], battleString); + Test_MgbaPrintf("test1:%S", gBattleStringsTable[battleStringId]); + //Test_MgbaPrintf("test2:%S", battleString); + EXPECT_LE(GetStringWidth(fontId, gBattleStringsTable[battleStringId], 0), widthPx); + //EXPECT_LE(GetStringWidth(fontId, battleString, 0), widthPx); +} +//*/ From 281ea38426cd4f4be35a02512bf95394b3ace2f3 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Fri, 20 Sep 2024 13:18:16 -0500 Subject: [PATCH 42/68] Fix the remaining tests --- src/battle_message.c | 2 +- test/battle/ability/magician.c | 4 ++-- test/battle/gimmick/dynamax.c | 8 ++++---- test/battle/hold_effect/restore_hp.c | 4 ++-- test/battle/hold_effect/speed_up.c | 6 +++--- test/battle/move_effect/defog.c | 4 ++-- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index 9422d33504e6..4be02ccdd047 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -258,7 +258,7 @@ static const u8 sText_PkmnSealedOpponentMove[] = _("{B_ATK_NAME_WITH_PREFIX} sea static const u8 sText_PkmnWantsGrudge[] = _("{B_ATK_NAME_WITH_PREFIX} wants its target\nto bear a grudge!"); static const u8 sText_PkmnLostPPGrudge[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} lost all its PP\ndue to the grudge!"); static const u8 sText_PkmnShroudedItself[] = _("{B_ATK_NAME_WITH_PREFIX} shrouded\nitself with Magic Coat!"); -static const u8 sText_PkmnMoveBounced[] = _("{B_ATK_NAME_WITH_PREFIX}\nbounced the {B_CURRENT_MOVE} back!"); +static const u8 sText_PkmnMoveBounced[] = _("{B_EFF_NAME_WITH_PREFIX}\nbounced the {B_CURRENT_MOVE} back!"); static const u8 sText_PkmnWaitsForTarget[] = _("{B_ATK_NAME_WITH_PREFIX} waits for a target\nto make a move!"); static const u8 sText_PkmnSnatchedMove[] = _("{B_DEF_NAME_WITH_PREFIX} snatched\n{B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s move!"); static const u8 sText_ElectricityWeakened[] = _("Electricity's power was weakened!"); diff --git a/test/battle/ability/magician.c b/test/battle/ability/magician.c index 9493e3f71a41..a951c2f97348 100644 --- a/test/battle/ability/magician.c +++ b/test/battle/ability/magician.c @@ -18,12 +18,12 @@ SINGLE_BATTLE_TEST("Magician does not get self-damage recoil after stealing Life MESSAGE("Delphox stole the opposing Wobbuffet's Life Orb!"); NONE_OF { HP_BAR(player); - MESSAGE("Delphox was hurt by its Life Orb!"); + MESSAGE("Delphox was hurt by the Life Orb!"); } // 2nd turn - Life Orb recoil happens now MESSAGE("Delphox used Tackle!"); HP_BAR(player); - MESSAGE("Delphox was hurt by its Life Orb!"); + MESSAGE("Delphox was hurt by the Life Orb!"); } } diff --git a/test/battle/gimmick/dynamax.c b/test/battle/gimmick/dynamax.c index d4e5c4399e8c..b0f2905e0016 100644 --- a/test/battle/gimmick/dynamax.c +++ b/test/battle/gimmick/dynamax.c @@ -893,13 +893,13 @@ SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Steelsurge sets up sharp steel") } SCENE { // turn 1 MESSAGE("Copperajah used G-Max Steelsurge!"); - MESSAGE("Sharp-pointed pieces of steel started\nfloating around the opposing Pokémon!"); + MESSAGE("Sharp-pointed pieces of steel started floating around the opposing Pokémon!"); // turn 2 MESSAGE("2 sent out Hatterene!"); - MESSAGE("Sharp steel bit into the opposing Hatterene!"); + MESSAGE("The sharp steel bit into the opposing Hatterene!"); // turn 4 MESSAGE("The opposing Hatterene used Defog!"); - MESSAGE("The sharp steel disappeared from the ground around the opposing team!"); + MESSAGE("The pieces of steel surrounding the opposing Pokémon disappeared!"); } THEN { EXPECT_MUL_EQ(opponent->maxHP, Q_4_12(0.75), opponent->hp); } @@ -1505,7 +1505,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves don't bypass absorbing abilities") PARAMETRIZE { move = MOVE_WATER_GUN; ability = ABILITY_DRY_SKIN; species = SPECIES_PARASECT; } PARAMETRIZE { move = MOVE_MUD_BOMB; ability = ABILITY_EARTH_EATER; species = SPECIES_ORTHWORM; } PARAMETRIZE { move = MOVE_VINE_WHIP; ability = ABILITY_SAP_SIPPER; species = SPECIES_MILTANK; } - + GIVEN { ASSUME(gMovesInfo[MOVE_WATER_GUN].type == TYPE_WATER); ASSUME(gMovesInfo[MOVE_SPARK].type == TYPE_ELECTRIC); diff --git a/test/battle/hold_effect/restore_hp.c b/test/battle/hold_effect/restore_hp.c index 09daecc860d9..b34eb0d05fc6 100644 --- a/test/battle/hold_effect/restore_hp.c +++ b/test/battle/hold_effect/restore_hp.c @@ -22,8 +22,8 @@ DOUBLE_BATTLE_TEST("Restore HP Item effects do not miss timing") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); MESSAGE("A sea of fire enveloped the opposing team!"); - MESSAGE("The opposing Foe Wynaut was hurt by the sea of fire!"); + MESSAGE("The opposing Wynaut was hurt by the sea of fire!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentLeft); - MESSAGE("The opposing Foe Wobbuffet was hurt by the sea of fire!"); + MESSAGE("The opposing Wobbuffet was hurt by the sea of fire!"); } } diff --git a/test/battle/hold_effect/speed_up.c b/test/battle/hold_effect/speed_up.c index c6ddc19d8d05..4a8b28b6d902 100644 --- a/test/battle/hold_effect/speed_up.c +++ b/test/battle/hold_effect/speed_up.c @@ -81,9 +81,9 @@ DOUBLE_BATTLE_TEST("Salac Berry does not miss timing miss timing") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); MESSAGE("A sea of fire enveloped the opposing team!"); - MESSAGE("The opposing Foe Wynaut was hurt by the sea of fire!"); + MESSAGE("The opposing Wynaut was hurt by the sea of fire!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentLeft); - MESSAGE("Using Salac Berry, the Speed of Foe Wynaut rose!"); - MESSAGE("The opposing Foe Wobbuffet was hurt by the sea of fire!"); + MESSAGE("Using Salac Berry, the Speed of the opposing Wynaut rose!"); + MESSAGE("The opposing Wobbuffet was hurt by the sea of fire!"); } } diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c index af8f64efe7e2..d5838d7ffd08 100644 --- a/test/battle/move_effect/defog.c +++ b/test/battle/move_effect/defog.c @@ -397,7 +397,7 @@ SINGLE_BATTLE_TEST("Defog is used on the correct side if opposing mon is behind ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, opponent); MESSAGE("Wobbuffet used Defog!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, player); - MESSAGE("Foe Wobbuffet's evasiveness fell!"); - MESSAGE("Foe's Light Screen wore off!"); + MESSAGE("The opposing Wobbuffet's evasiveness fell!"); + MESSAGE("The opposing team's Light Screen wore off!"); } } From 4dbe05164b75e06b569c4df0aef0aa3d42479337 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Sat, 28 Sep 2024 10:24:36 -0500 Subject: [PATCH 43/68] Test fixes from merge --- test/battle/move_effect/after_you.c | 2 +- test/battle/move_effect/destiny_bond.c | 4 ++-- test/battle/move_effect/dragon_darts.c | 8 ++++---- test/battle/move_effect/multi_hit.c | 8 ++++---- test/battle/move_effect/powder.c | 2 +- test/battle/move_effect/quash.c | 2 +- test/battle/move_effect/shell_trap.c | 2 +- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/test/battle/move_effect/after_you.c b/test/battle/move_effect/after_you.c index 7cccf1288ddb..c1202f0f9cdd 100644 --- a/test/battle/move_effect/after_you.c +++ b/test/battle/move_effect/after_you.c @@ -75,7 +75,7 @@ DOUBLE_BATTLE_TEST("After You calculates correct turn order if only one pokemon MESSAGE("Regirock took the kind offer!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_EDGE, playerRight); HP_BAR(opponentLeft); - MESSAGE("Foe Pidgeot fainted!"); + MESSAGE("The opposing Pidgeot fainted!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_AFTER_YOU, playerLeft); diff --git a/test/battle/move_effect/destiny_bond.c b/test/battle/move_effect/destiny_bond.c index baba378f6b1e..ba49e0ec431a 100644 --- a/test/battle/move_effect/destiny_bond.c +++ b/test/battle/move_effect/destiny_bond.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Destiny Bond faints the opposing mon if it fainted from the } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DESTINY_BOND, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); - MESSAGE("Wobbuffet took Foe Wobbuffet with it!"); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("Wobbuffet took its attacker down with it!"); + MESSAGE("The opposing Wobbuffet fainted!"); } } diff --git a/test/battle/move_effect/dragon_darts.c b/test/battle/move_effect/dragon_darts.c index a37ccdc6d49a..dfe629896f41 100644 --- a/test/battle/move_effect/dragon_darts.c +++ b/test/battle/move_effect/dragon_darts.c @@ -109,7 +109,7 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes left ally twice if electrified and righ HP_BAR(opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); HP_BAR(opponentLeft); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -128,7 +128,7 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes right ally twice if electrified and lef HP_BAR(opponentRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); HP_BAR(opponentRight); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -147,7 +147,7 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes left ally twice if electrified and righ HP_BAR(opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); HP_BAR(opponentLeft); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } @@ -166,7 +166,7 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes right ally twice if electrified and lef HP_BAR(opponentRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft); HP_BAR(opponentRight); - MESSAGE("Hit 2 time(s)!"); + MESSAGE("The Pokémon was hit 2 time(s)!"); } } diff --git a/test/battle/move_effect/multi_hit.c b/test/battle/move_effect/multi_hit.c index a6f5775ab2b3..e2331efbf743 100644 --- a/test/battle/move_effect/multi_hit.c +++ b/test/battle/move_effect/multi_hit.c @@ -172,7 +172,7 @@ SINGLE_BATTLE_TEST("Scale Shot is immune to Fairy types and will end the move co TURN { MOVE(player, MOVE_SCALE_SHOT); } } SCENE { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); - MESSAGE("It doesn't affect Foe Clefairy…"); + MESSAGE("It doesn't affect the opposing Clefairy…"); } } @@ -192,7 +192,7 @@ DOUBLE_BATTLE_TEST("Scale Shot does not corrupt the next turn move used") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, playerRight); HP_BAR(opponentRight); - MESSAGE("Hit 1 time(s)!"); + MESSAGE("The Pokémon was hit 1 time(s)!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLDOZE, playerRight); HP_BAR(playerLeft); HP_BAR(opponentLeft); @@ -292,7 +292,7 @@ SINGLE_BATTLE_TEST("Multi Hit moves will not disrupt Destiny Bond flag") ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLET_SEED, opponent); } - MESSAGE("Wobbuffet took Foe Wobbuffet with it!"); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("Wobbuffet took its attacker down with it!"); + MESSAGE("The opposing Wobbuffet fainted!"); } } diff --git a/test/battle/move_effect/powder.c b/test/battle/move_effect/powder.c index dbd1570e6c2d..85e486918be2 100644 --- a/test/battle/move_effect/powder.c +++ b/test/battle/move_effect/powder.c @@ -232,7 +232,7 @@ SINGLE_BATTLE_TEST("Powder doesn't prevent a Fire move from thawing its user out TURN { MOVE(opponent, MOVE_POWDER); MOVE(player, MOVE_FLAME_WHEEL); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_POWDER, opponent); - MESSAGE("Wobbuffet was defrosted by Flame Wheel!"); + MESSAGE("Wobbuffet's Flame Wheel melted the ice!"); STATUS_ICON(player, none: TRUE); NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_FLAME_WHEEL, player); diff --git a/test/battle/move_effect/quash.c b/test/battle/move_effect/quash.c index 5500fcb33e5c..b342eafd74ae 100644 --- a/test/battle/move_effect/quash.c +++ b/test/battle/move_effect/quash.c @@ -67,7 +67,7 @@ DOUBLE_BATTLE_TEST("Quash calculates correct turn order if only one pokemon is l ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_EDGE, playerRight); HP_BAR(opponentLeft); - MESSAGE("Foe Pidgeot fainted!"); + MESSAGE("The opposing Pidgeot fainted!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_QUASH, playerLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); diff --git a/test/battle/move_effect/shell_trap.c b/test/battle/move_effect/shell_trap.c index 9f4abc9cd4c0..d43893244a40 100644 --- a/test/battle/move_effect/shell_trap.c +++ b/test/battle/move_effect/shell_trap.c @@ -188,7 +188,7 @@ DOUBLE_BATTLE_TEST("Shell Trap targets correctly if one of the opponents has fai ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SHELL_TRAP_SETUP, playerRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_TRAP, playerRight); - MESSAGE("Foe Scizor fainted!"); + MESSAGE("The opposing Scizor fainted!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentRight); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerLeft); From 10d1fb3f5d5be99ee314c955b3fa9915f8a6f1ed Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 29 Sep 2024 11:00:49 -0300 Subject: [PATCH 44/68] Battle message test --- gflib/string_util.c | 22 ++++++++++++ gflib/string_util.h | 1 + gflib/text.c | 28 +++++++++++++++ gflib/text.h | 1 + test/text.c | 88 +++++++++++++++++++++++++++++++++++++++------ 5 files changed, 129 insertions(+), 11 deletions(-) diff --git a/gflib/string_util.c b/gflib/string_util.c index 0fde2cb861d3..fd4a0861eeb2 100644 --- a/gflib/string_util.c +++ b/gflib/string_util.c @@ -122,6 +122,28 @@ u16 StringLength(const u8 *str) return length; } +u16 StringLineLength(const u8 *str) +{ + u16 i = 0, length = 0; + + while (str[length] != EOS) + { + switch (str[length]) + { + case CHAR_PROMPT_SCROLL: + case CHAR_PROMPT_CLEAR: + case CHAR_NEWLINE: + return length; + default: + i++; + length++; + break; + } + } + + return length; +} + s32 StringCompare(const u8 *str1, const u8 *str2) { while (*str1 == *str2) diff --git a/gflib/string_util.h b/gflib/string_util.h index 9e5dfffd574d..d4c954bc5e95 100644 --- a/gflib/string_util.h +++ b/gflib/string_util.h @@ -21,6 +21,7 @@ u8 *StringAppend(u8 *dest, const u8 *src); u8 *StringCopyN(u8 *dest, const u8 *src, u8 n); u8 *StringAppendN(u8 *dest, const u8 *src, u8 n); u16 StringLength(const u8 *str); +u16 StringLineLength(const u8 *str); s32 StringCompare(const u8 *str1, const u8 *str2); s32 StringCompareN(const u8 *str1, const u8 *str2, u32 n); bool8 IsStringLengthAtLeast(const u8 *str, s32 n); diff --git a/gflib/text.c b/gflib/text.c index e2adba1cdb21..b2c7d98e15b9 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -1595,6 +1595,34 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) return width; } +s32 GetStringLineWidth(u8 fontId, const u8 *str, s16 letterSpacing, u32 lineNum) +{ + u32 strWidth = 0, strLen, currLine; +#ifndef NDEBUG + u8 strCopy[300]; +#endif + + for (currLine = 1; currLine <= lineNum; currLine++) + { + strWidth = GetStringWidth(fontId, str, letterSpacing); + strLen = StringLineLength(str); + #ifndef NDEBUG + memset(strCopy, EOS, 300); + if (currLine == lineNum && strLen != 0) + { + StringCopyN(strCopy, str, strLen); + strWidth = GetStringWidth(fontId, strCopy, letterSpacing); + strLen = StringLineLength(strCopy); + StringAppend(strCopy, gText_EmptyString3); + DebugPrintf(" Line %d, len:%d, width:%d, \"%S\"", currLine, strLen, strWidth, strCopy); + //DebugPrintf(" width:%d, \"%S\"", strWidth, strCopy); + } + #endif + str += strLen + 1; + } + return strWidth; +} + u8 RenderTextHandleBold(u8 *pixels, u8 fontId, u8 *str) { u8 shadowColor; diff --git a/gflib/text.h b/gflib/text.h index fc457e5a00f0..1f19bcbe38a3 100644 --- a/gflib/text.h +++ b/gflib/text.h @@ -158,6 +158,7 @@ bool32 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter); bool32 TextPrinterWait(struct TextPrinter *textPrinter); void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool32 drawArrow, u8 *counter, u8 *yCoordIndex); s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing); +s32 GetStringLineWidth(u8 fontId, const u8 *str, s16 letterSpacing, u32 lineNum); u8 RenderTextHandleBold(u8 *pixels, u8 fontId, u8 *str); u8 DrawKeypadIcon(u8 windowId, u8 keypadIconId, u16 x, u16 y); u8 GetKeypadIconTileOffset(u8 keypadIconId); diff --git a/test/text.c b/test/text.c index 01db7dccf716..071e826ab323 100644 --- a/test/text.c +++ b/test/text.c @@ -1,14 +1,18 @@ #include "global.h" #include "test/test.h" +#include "battle.h" #include "battle_main.h" #include "battle_message.h" +#include "battle_setup.h" #include "item.h" +#include "string_util.h" #include "text.h" #include "constants/abilities.h" #include "constants/battle.h" #include "constants/battle_string_ids.h" #include "constants/items.h" #include "constants/moves.h" +#include "test/overworld_script.h" TEST("Move names fit on Pokemon Summary Screen") { @@ -571,22 +575,84 @@ TEST("Type names fit on Pokedex Search Screen") EXPECT_LE(GetStringWidth(fontId, gTypesInfo[type].name, 0), widthPx); } -/* +//* TEST("Battle strings fit on the battle message window") { - u32 i; + u32 i, j, strWidth; + u32 start = BATTLESTRINGS_TABLE_START; + u32 end = BATTLESTRINGS_TABLE_START + 20; const u32 fontId = FONT_NORMAL, widthPx = 208; u32 battleStringId = 0; - u8 *battleString = NULL; - - for (i = BATTLESTRINGS_TABLE_START; i < BATTLESTRINGS_COUNT; i++) - { - PARAMETRIZE_LABEL("%S", gBattleStringsTable[i]) { battleStringId = i; } + u8 battleString[1000] = {0}; + s32 sixDigitNines = 999999; + u8 nickname[POKEMON_NAME_LENGTH + 1] = _("MMMMMMMMMMMM"); + u32 longMoveID = MOVE_STOMPING_TANTRUM; + + RUN_OVERWORLD_SCRIPT( + givemon SPECIES_WOBBUFFET, 100; + createmon 1, 0, SPECIES_WOBBUFFET, 100; + ); + SetMonData(&gPlayerParty[0], MON_DATA_NICKNAME, nickname); + SetMonData(&gEnemyParty[0], MON_DATA_NICKNAME, nickname); + + for (i = start; i <= end; i++) // BATTLESTRINGS_COUNT + { + PARAMETRIZE_LABEL("%S", gBattleStringsTable[i - BATTLESTRINGS_TABLE_START]) { battleStringId = i - BATTLESTRINGS_TABLE_START; } + } + PREPARE_STRING_BUFFER(gBattleTextBuff1, STRINGID_EMPTYSTRING3); + PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_EMPTYSTRING3); + PREPARE_STRING_BUFFER(gBattleTextBuff3, STRINGID_EMPTYSTRING3); + gBattlerPositions[0] = B_POSITION_PLAYER_LEFT; + gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT; + gBattlerPositions[2] = B_POSITION_PLAYER_RIGHT; + gBattlerPositions[3] = B_POSITION_OPPONENT_RIGHT; + gBattleTypeFlags |= BATTLE_TYPE_TRAINER; + // By default, the add "The opposing" prefix to the attacker. + gBattlerAttacker = 1; + gBattlerTarget = 0; + + switch (battleStringId + BATTLESTRINGS_TABLE_START) + { + case STRINGID_TRAINER1LOSETEXT: + // Out of scope: testing all trainer lose messages. + break; + case STRINGID_PKMNGAINEDEXP: + PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, 0, 0); + PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_ABOOSTED); // 'gained a boosted' + PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff3, 6, sixDigitNines); + break; + case STRINGID_PKMNGREWTOLV: + PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, 0, 0); + PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff2, 3, 100); + break; + case STRINGID_PKMNLEARNEDMOVE: + case STRINGID_TRYTOLEARNMOVE1: + case STRINGID_TRYTOLEARNMOVE2: + case STRINGID_TRYTOLEARNMOVE3: + case STRINGID_PKMNFORGOTMOVE: + case STRINGID_STOPLEARNINGMOVE: + case STRINGID_DIDNOTLEARNMOVE: + PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, 0, 0); + PREPARE_MOVE_BUFFER(gBattleTextBuff2, longMoveID); + break; + case STRINGID_PKMNLEARNEDMOVE2: + PREPARE_MOVE_BUFFER(gBattleTextBuff1, longMoveID); + break; + case STRINGID_PKMNPROTECTEDITSELF: + gBattlerAttacker = 0; + gBattlerTarget = 1; + default: + break; } + memset(battleString, EOS, 1000); BattleStringExpandPlaceholders(gBattleStringsTable[battleStringId], battleString); - Test_MgbaPrintf("test1:%S", gBattleStringsTable[battleStringId]); - //Test_MgbaPrintf("test2:%S", battleString); - EXPECT_LE(GetStringWidth(fontId, gBattleStringsTable[battleStringId], 0), widthPx); - //EXPECT_LE(GetStringWidth(fontId, battleString, 0), widthPx); + DebugPrintf("Battle String ID %d: %S", battleStringId + BATTLESTRINGS_TABLE_START, battleString); + for (j = 1;; j++) + { + strWidth = GetStringLineWidth(fontId, battleString, 0, j); + if (strWidth == 0) + break; + EXPECT_LE(strWidth, widthPx); + } } //*/ From 5c0f7ef17995d9d35ec340102144cbecb0c59401 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 29 Sep 2024 15:33:29 -0300 Subject: [PATCH 45/68] Message adjustments --- src/battle_message.c | 54 ++++++++++++++++++++++-------------------- test/text.c | 56 ++++++++++++++++++++++++++++++++++++++------ 2 files changed, 78 insertions(+), 32 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index 4be02ccdd047..245afe4112aa 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -51,7 +51,11 @@ struct BattleWindowText static void ChooseMoveUsedParticle(u8 *textPtr); static void ChooseTypeOfMoveUsedString(u8 *dst); +#if TESTING +EWRAM_DATA u16 sBattlerAbilities[MAX_BATTLERS_COUNT] = {0}; +#else static EWRAM_DATA u16 sBattlerAbilities[MAX_BATTLERS_COUNT] = {0}; +#endif EWRAM_DATA struct BattleMsgData *gBattleMsgDataPtr = NULL; // todo: make some of those names less vague: attacker/target vs pkmn, etc. @@ -91,60 +95,60 @@ static const u8 sText_CantEscape2[] = _("You couldn't get away!\p"); static const u8 sText_AttackerCantEscape[] = _("{B_ATK_NAME_WITH_PREFIX} can't escape!"); static const u8 sText_HitXTimes[] = _("The Pokémon was\nhit {B_BUFF1} time(s)!"); //SV has dynamic plural here static const u8 sText_PkmnFellAsleep[] = _("{B_EFF_NAME_WITH_PREFIX}\nfell asleep!"); -static const u8 sText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}\nmade {B_EFF_NAME_WITH_PREFIX2} sleep!"); //not in gen 5+, ability popup +static const u8 sText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_BUFF1} made\n{B_EFF_NAME_WITH_PREFIX2} sleep!"); //not in gen 5+, ability popup static const u8 sText_PkmnAlreadyAsleep[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready asleep!"); static const u8 sText_PkmnAlreadyAsleep2[] = _("{B_ATK_NAME_WITH_PREFIX} is\nalready asleep!"); static const u8 sText_PkmnWasntAffected[] = _("{B_DEF_NAME_WITH_PREFIX}\nwasn't affected!"); //not in gen 5+, ability popup static const u8 sText_PkmnWasPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX}\nwas poisoned!"); -static const u8 sText_PkmnPoisonedBy[] = _("{B_EFF_NAME_WITH_PREFIX} was poisoned by\n{B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s {B_BUFF1}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnPoisonedBy[] = _("{B_EFF_NAME_WITH_PREFIX}\nwas poisoned by\n{B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s\n{B_BUFF1}!"); //not in gen 5+, ability popup static const u8 sText_PkmnHurtByPoison[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby its poisoning!"); static const u8 sText_PkmnAlreadyPoisoned[] = _("{B_DEF_NAME_WITH_PREFIX} is already\npoisoned!"); static const u8 sText_PkmnBadlyPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX} was badly\npoisoned!"); static const u8 sText_PkmnEnergyDrained[] = _("{B_DEF_NAME_WITH_PREFIX} had its\nenergy drained!"); static const u8 sText_PkmnWasBurned[] = _("{B_EFF_NAME_WITH_PREFIX} was burned!"); static const u8 sText_PkmnGotFrostbite[] = _("{B_EFF_NAME_WITH_PREFIX} got frostbite!"); -static const u8 sText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}\nburned {B_EFF_NAME_WITH_PREFIX2}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_BUFF1} burned\n{B_EFF_NAME_WITH_PREFIX2}!"); //not in gen 5+, ability popup static const u8 sText_PkmnHurtByBurn[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby its burn!"); static const u8 sText_PkmnHurtByFrostbite[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby its frostbite!"); static const u8 sText_PkmnAlreadyHasBurn[] = _("{B_DEF_NAME_WITH_PREFIX} is already\nburned!"); static const u8 sText_PkmnWasFrozen[] = _("{B_EFF_NAME_WITH_PREFIX} was\nfrozen solid!"); -static const u8 sText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}\nfroze {B_EFF_NAME_WITH_PREFIX2} solid!"); //not in gen 5+, ability popup +static const u8 sText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_BUFF1} froze\n{B_EFF_NAME_WITH_PREFIX2} solid!"); //not in gen 5+, ability popup static const u8 sText_PkmnIsFrozen[] = _("{B_ATK_NAME_WITH_PREFIX} is\nfrozen solid!"); static const u8 sText_PkmnWasDefrosted[] = _("{B_DEF_NAME_WITH_PREFIX} thawed out!"); static const u8 sText_PkmnWasDefrosted2[] = _("{B_ATK_NAME_WITH_PREFIX} thawed out!"); -static const u8 sText_PkmnWasDefrostedBy[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\nmelted the ice!"); +static const u8 sText_PkmnWasDefrostedBy[] = _("{B_ATK_NAME_WITH_PREFIX}'s\n{B_CURRENT_MOVE} melted the ice!"); static const u8 sText_PkmnFrostbiteHealed[] = _("{B_DEF_NAME_WITH_PREFIX}'s frostbite\nwas cured!"); static const u8 sText_PkmnFrostbiteHealed2[] = _("{B_ATK_NAME_WITH_PREFIX}'s frostbite\nwas cured!"); static const u8 sText_PkmnFrostbiteHealedBy[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\ncured its frostbite!"); -static const u8 sText_PkmnWasParalyzed[] = _("{B_EFF_NAME_WITH_PREFIX} is paralyzed,\nso it may be unable to move!"); -static const u8 sText_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}\nparalyzed {B_EFF_NAME_WITH_PREFIX2},\lso it may be unable to move!"); //not in gen 5+, ability popup -static const u8 sText_PkmnIsParalyzed[] = _("{B_ATK_NAME_WITH_PREFIX} couldn't move\nbecause it's paralyzed!"); +static const u8 sText_PkmnWasParalyzed[] = _("{B_EFF_NAME_WITH_PREFIX} is\nparalyzed, so it may be unable to move!"); +static const u8 sText_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_BUFF1} paralyzed\n{B_EFF_NAME_WITH_PREFIX2},\lso it may be unable to move!"); //not in gen 5+, ability popup +static const u8 sText_PkmnIsParalyzed[] = _("{B_ATK_NAME_WITH_PREFIX} couldn't\nmove because it's paralyzed!"); static const u8 sText_PkmnIsAlreadyParalyzed[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready paralyzed!"); -static const u8 sText_PkmnHealedParalysis[] = _("{B_DEF_NAME_WITH_PREFIX} was cured of\nparalysis!"); +static const u8 sText_PkmnHealedParalysis[] = _("{B_DEF_NAME_WITH_PREFIX} was\ncured of paralysis!"); static const u8 sText_PkmnDreamEaten[] = _("{B_DEF_NAME_WITH_PREFIX}'s\ndream was eaten!"); //not in gen 5+, expansion doesn't use anymore -static const u8 sText_StatsWontIncrease[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} won't\ngo any higher!"); -static const u8 sText_StatsWontDecrease[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1} won't\ngo any lower!"); +static const u8 sText_StatsWontIncrease[] = _("{B_ATK_NAME_WITH_PREFIX}'s\n{B_BUFF1} won't go any higher!"); +static const u8 sText_StatsWontDecrease[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_BUFF1} won't go any lower!"); static const u8 sText_TeamStoppedWorking[] = _("Your team's {B_BUFF1}\nstopped working!"); //unused static const u8 sText_FoeStoppedWorking[] = _("The foe's {B_BUFF1}\nstopped working!"); //unused static const u8 sText_PkmnIsConfused[] = _("{B_ATK_NAME_WITH_PREFIX} is\nconfused!"); -static const u8 sText_PkmnHealedConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} snapped out of\nits confusion!"); +static const u8 sText_PkmnHealedConfusion[] = _("{B_ATK_NAME_WITH_PREFIX}\nsnapped out of its confusion!"); static const u8 sText_PkmnWasConfused[] = _("{B_EFF_NAME_WITH_PREFIX} became\nconfused!"); static const u8 sText_PkmnAlreadyConfused[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready confused!"); static const u8 sText_PkmnFellInLove[] = _("{B_DEF_NAME_WITH_PREFIX}\nfell in love!"); static const u8 sText_PkmnInLove[] = _("{B_ATK_NAME_WITH_PREFIX} is in love\nwith {B_SCR_ACTIVE_NAME_WITH_PREFIX2}!"); static const u8 sText_PkmnImmobilizedByLove[] = _("{B_ATK_NAME_WITH_PREFIX} is\nimmobilized by love!"); static const u8 sText_PkmnBlownAway[] = _("{B_DEF_NAME_WITH_PREFIX} was\nblown away!"); //unused -static const u8 sText_PkmnChangedType[] = _("{B_ATK_NAME_WITH_PREFIX} transformed\ninto the {B_BUFF1} type!"); +static const u8 sText_PkmnChangedType[] = _("{B_ATK_NAME_WITH_PREFIX}\ntransformed into the {B_BUFF1} type!"); static const u8 sText_PkmnFlinched[] = _("{B_ATK_NAME_WITH_PREFIX} flinched\nand couldn't move!"); -static const u8 sText_PkmnRegainedHealth[] = _("{B_DEF_NAME_WITH_PREFIX}'s HP was restored."); +static const u8 sText_PkmnRegainedHealth[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nHP was restored."); static const u8 sText_PkmnHPFull[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nHP is full!"); static const u8 sText_PkmnRaisedSpDef[] = _("Light Screen made {B_ATK_TEAM2} team\nstronger against special moves!"); static const u8 sText_PkmnRaisedSpDefALittle[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE}\nraised SP. DEF a little!"); //expansion doesn't use anymore static const u8 sText_PkmnRaisedDef[] = _("Reflect made {B_ATK_TEAM2} team\nstronger against physical moves!"); static const u8 sText_PkmnRaisedDefALittle[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE}\nraised DEFENSE a little!"); //expansion doesn't use anymore static const u8 sText_PkmnCoveredByVeil[] = _("{B_ATK_TEAM1} team cloaked itself\nin a mystical veil!"); -static const u8 sText_PkmnUsedSafeguard[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is protected\nby Safeguard!"); -static const u8 sText_PkmnSafeguardExpired[] = _("{B_ATK_TEAM1} team is no longer protected\nby Safeguard!"); +static const u8 sText_PkmnUsedSafeguard[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is\nprotected by Safeguard!"); +static const u8 sText_PkmnSafeguardExpired[] = _("{B_ATK_TEAM1} team is\nno longer protected by Safeguard!"); static const u8 sText_PkmnWentToSleep[] = _("{B_ATK_NAME_WITH_PREFIX} went\nto sleep!"); //not in gen 5+ static const u8 sText_PkmnSleptHealthy[] = _("{B_ATK_NAME_WITH_PREFIX} slept and\nrestored its HP!"); static const u8 sText_PkmnWhippedWhirlwind[] = _("{B_ATK_NAME_WITH_PREFIX} whipped\nup a whirlwind!"); @@ -156,17 +160,17 @@ static const u8 sText_PkmnFlewHigh[] = _("{B_ATK_NAME_WITH_PREFIX} flew\nup high static const u8 sText_PkmnDugHole[] = _("{B_ATK_NAME_WITH_PREFIX} burrowed\nits way under the ground!"); static const u8 sText_PkmnHidUnderwater[] = _("{B_ATK_NAME_WITH_PREFIX} hid\nunderwater!"); static const u8 sText_PkmnSprangUp[] = _("{B_ATK_NAME_WITH_PREFIX} sprang up!"); -static const u8 sText_PkmnSqueezedByBind[] = _("{B_DEF_NAME_WITH_PREFIX} was squeezed\nby {B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnSqueezedByBind[] = _("{B_DEF_NAME_WITH_PREFIX} was\nsqueezed by\n{B_ATK_NAME_WITH_PREFIX2}!"); static const u8 sText_PkmnInSnapTrap[] = _("{B_DEF_NAME_WITH_PREFIX} got trapped\nby a snap trap!"); -static const u8 sText_PkmnTrappedInVortex[] = _("{B_DEF_NAME_WITH_PREFIX} became trapped\nin the vortex!"); -static const u8 sText_PkmnTrappedBySandTomb[] = _("{B_DEF_NAME_WITH_PREFIX} became trapped\nby the quicksand!"); -static const u8 sText_PkmnWrappedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was wrapped by\n{B_ATK_NAME_WITH_PREFIX2}!"); -static const u8 sText_PkmnClamped[] = _("{B_ATK_NAME_WITH_PREFIX} clamped down\non {B_DEF_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnTrappedInVortex[] = _("{B_DEF_NAME_WITH_PREFIX} became\ntrapped in the vortex!"); +static const u8 sText_PkmnTrappedBySandTomb[] = _("{B_DEF_NAME_WITH_PREFIX} became\ntrapped by the quicksand!"); +static const u8 sText_PkmnWrappedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was\nwrapped by {B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnClamped[] = _("{B_ATK_NAME_WITH_PREFIX} clamped\ndown on {B_DEF_NAME_WITH_PREFIX2}!"); static const u8 sText_PkmnHurtBy[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby {B_BUFF1}!"); static const u8 sText_PkmnFreedFrom[] = _("{B_ATK_NAME_WITH_PREFIX} was freed\nfrom {B_BUFF1}!"); static const u8 sText_PkmnCrashed[] = _("{B_ATK_NAME_WITH_PREFIX} kept going\nand crashed!"); const u8 gText_PkmnShroudedInMist[] = _("{B_ATK_TEAM1} team became\nshrouded in mist!"); -static const u8 sText_PkmnProtectedByMist[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is protected\nby the mist!"); +static const u8 sText_PkmnProtectedByMist[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is\nprotected by the mist!"); const u8 gText_PkmnGettingPumped[] = _("{B_DEF_NAME_WITH_PREFIX} is getting\npumped!"); static const u8 sText_PkmnHitWithRecoil[] = _("{B_ATK_NAME_WITH_PREFIX} was damaged\nby the recoil!"); static const u8 sText_PkmnProtectedItself2[] = _("{B_ATK_NAME_WITH_PREFIX} protected\nitself!"); @@ -179,7 +183,7 @@ static const u8 sText_PkmnSappedByLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX}'s he static const u8 sText_PkmnFastAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} is fast\nasleep."); static const u8 sText_PkmnWokeUp[] = _("{B_ATK_NAME_WITH_PREFIX} woke up!"); static const u8 sText_PkmnUproarKeptAwake[] = _("But the uproar kept\n{B_SCR_ACTIVE_NAME_WITH_PREFIX2} awake!"); -static const u8 sText_PkmnWokeUpInUproar[] = _("The uproar woke {B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnWokeUpInUproar[] = _("The uproar woke\n{B_ATK_NAME_WITH_PREFIX2}!"); static const u8 sText_PkmnCausedUproar[] = _("{B_ATK_NAME_WITH_PREFIX} caused\nan uproar!"); static const u8 sText_PkmnMakingUproar[] = _("{B_ATK_NAME_WITH_PREFIX} is making\nan uproar!"); static const u8 sText_PkmnCalmedDown[] = _("{B_ATK_NAME_WITH_PREFIX}\ncalmed down."); @@ -325,8 +329,8 @@ const u8 gText_DefendersStatRose[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\n{B static const u8 sText_UsingItemTheStatOfPkmnRose[] = _("Using {B_LAST_ITEM}, the {B_BUFF1}\nof {B_SCR_ACTIVE_NAME_WITH_PREFIX2} {B_BUFF2}"); //todo: update this, will require code changes static const u8 sText_AttackersStatFell[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1}\n{B_BUFF2}"); static const u8 sText_DefendersStatFell[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\n{B_BUFF2}"); -static const u8 sText_StatsWontIncrease2[] = _("{B_ATK_NAME_WITH_PREFIX}'s stats won't\ngo any higher!"); -static const u8 sText_StatsWontDecrease2[] = _("{B_DEF_NAME_WITH_PREFIX}'s stats won't\ngo any lower!"); +static const u8 sText_StatsWontIncrease2[] = _("{B_ATK_NAME_WITH_PREFIX}'s stats\nwon't go any higher!"); +static const u8 sText_StatsWontDecrease2[] = _("{B_DEF_NAME_WITH_PREFIX}'s stats\nwon't go any lower!"); static const u8 sText_CriticalHit[] = _("A critical hit!"); static const u8 sText_OneHitKO[] = _("It's a one-hit KO!"); static const u8 sText_123Poof[] = _("One…{PAUSE 10}two…{PAUSE 10}and…{PAUSE 10}{PAUSE 20}{PLAY_SE SE_BALL_BOUNCE_1}ta-da!\p"); diff --git a/test/text.c b/test/text.c index 071e826ab323..dda134fb713a 100644 --- a/test/text.c +++ b/test/text.c @@ -5,6 +5,7 @@ #include "battle_message.h" #include "battle_setup.h" #include "item.h" +#include "malloc.h" #include "string_util.h" #include "text.h" #include "constants/abilities.h" @@ -575,18 +576,24 @@ TEST("Type names fit on Pokedex Search Screen") EXPECT_LE(GetStringWidth(fontId, gTypesInfo[type].name, 0), widthPx); } +extern u16 sBattlerAbilities[MAX_BATTLERS_COUNT]; //* TEST("Battle strings fit on the battle message window") { u32 i, j, strWidth; - u32 start = BATTLESTRINGS_TABLE_START; - u32 end = BATTLESTRINGS_TABLE_START + 20; + u32 start = BATTLESTRINGS_TABLE_START + 51; + u32 end = BATTLESTRINGS_TABLE_START + 100; const u32 fontId = FONT_NORMAL, widthPx = 208; u32 battleStringId = 0; u8 battleString[1000] = {0}; + + s32 twoDigitNines = 99; s32 sixDigitNines = 999999; u8 nickname[POKEMON_NAME_LENGTH + 1] = _("MMMMMMMMMMMM"); u32 longMoveID = MOVE_STOMPING_TANTRUM; + u32 longAbilityID = ABILITY_SUPERSWEET_SYRUP; // 91 pixels. + u32 longStatName = STAT_EVASION; + u32 longTypeName = TYPE_ELECTRIC; RUN_OVERWORLD_SCRIPT( givemon SPECIES_WOBBUFFET, 100; @@ -606,10 +613,22 @@ TEST("Battle strings fit on the battle message window") gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT; gBattlerPositions[2] = B_POSITION_PLAYER_RIGHT; gBattlerPositions[3] = B_POSITION_OPPONENT_RIGHT; + for (j = 0; j < MAX_BATTLERS_COUNT; j++) + { + sBattlerAbilities[j] = longAbilityID; + } + + // Add "The opposing " prefix to all messages. gBattleTypeFlags |= BATTLE_TYPE_TRAINER; - // By default, the add "The opposing" prefix to the attacker. gBattlerAttacker = 1; - gBattlerTarget = 0; + gBattlerTarget = 1; + gBattleScripting.battler = 1; + gEffectBattler = 1; + + gCurrentMove = longMoveID; + + gBattleMsgDataPtr = AllocZeroed(sizeof(struct BattleMsgData)); + gBattleMsgDataPtr->currentMove = longMoveID; switch (battleStringId + BATTLESTRINGS_TABLE_START) { @@ -636,11 +655,33 @@ TEST("Battle strings fit on the battle message window") PREPARE_MOVE_BUFFER(gBattleTextBuff2, longMoveID); break; case STRINGID_PKMNLEARNEDMOVE2: + case STRINGID_TEAMSTOPPEDWORKING: // Unused + case STRINGID_FOESTOPPEDWORKING: // Unused + case STRINGID_PKMNHURTBY: + case STRINGID_PKMNFREEDFROM: PREPARE_MOVE_BUFFER(gBattleTextBuff1, longMoveID); break; - case STRINGID_PKMNPROTECTEDITSELF: - gBattlerAttacker = 0; - gBattlerTarget = 1; + case STRINGID_PLAYERGOTMONEY: + case STRINGID_PLAYERWHITEOUT2: + PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff1, 6, sixDigitNines); + break; + case STRINGID_HITXTIMES: + PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff1, 2, twoDigitNines); + break; + case STRINGID_PKMNMADESLEEP: + case STRINGID_PKMNPOISONEDBY: + case STRINGID_PKMNBURNEDBY: + case STRINGID_PKMNFROZENBY: + case STRINGID_PKMNWASPARALYZEDBY: + PREPARE_ABILITY_BUFFER(gBattleTextBuff1, longAbilityID); + break; + case STRINGID_STATSWONTINCREASE: + case STRINGID_STATSWONTDECREASE: + StringCopy(gBattleTextBuff1, gStatNamesTable[longStatName]); + break; + case STRINGID_PKMNCHANGEDTYPE: + PREPARE_TYPE_BUFFER(gBattleTextBuff1, longTypeName); + break; default: break; } @@ -654,5 +695,6 @@ TEST("Battle strings fit on the battle message window") break; EXPECT_LE(strWidth, widthPx); } + Free(gBattleMsgDataPtr); } //*/ From 9521fc9744e51210092527fa71786dd282595783 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 29 Sep 2024 16:43:50 -0300 Subject: [PATCH 46/68] More messages --- src/battle_message.c | 28 ++++++++++++++-------------- test/text.c | 22 ++++++++++++++++++---- 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index 245afe4112aa..69449440b205 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -188,48 +188,48 @@ static const u8 sText_PkmnCausedUproar[] = _("{B_ATK_NAME_WITH_PREFIX} caused\na static const u8 sText_PkmnMakingUproar[] = _("{B_ATK_NAME_WITH_PREFIX} is making\nan uproar!"); static const u8 sText_PkmnCalmedDown[] = _("{B_ATK_NAME_WITH_PREFIX}\ncalmed down."); static const u8 sText_PkmnCantSleepInUproar[] = _("But {B_DEF_NAME_WITH_PREFIX2} can't\nsleep in an uproar!"); -static const u8 sText_PkmnStockpiled[] = _("{B_ATK_NAME_WITH_PREFIX} stockpiled {B_BUFF1}!"); +static const u8 sText_PkmnStockpiled[] = _("{B_ATK_NAME_WITH_PREFIX}\nstockpiled {B_BUFF1}!"); static const u8 sText_PkmnCantStockpile[] = _("{B_ATK_NAME_WITH_PREFIX} can't\nstockpile any more!"); //I think this was replaced with just "But it failed!" static const u8 sText_PkmnCantSleepInUproar2[] = _("But {B_DEF_NAME_WITH_PREFIX2} can't\nsleep in an uproar!"); static const u8 sText_UproarKeptPkmnAwake[] = _("But the uproar kept\n{B_DEF_NAME_WITH_PREFIX2} awake!"); -static const u8 sText_PkmnStayedAwakeUsing[] = _("{B_DEF_NAME_WITH_PREFIX} stayed awake\nusing its {B_DEF_ABILITY}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnStayedAwakeUsing[] = _("{B_DEF_NAME_WITH_PREFIX} stayed\nawake using its {B_DEF_ABILITY}!"); //not in gen 5+, ability popup static const u8 sText_PkmnStoringEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} is storing\nenergy!"); static const u8 sText_PkmnUnleashedEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} unleashed\nits energy!"); static const u8 sText_PkmnFatigueConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} became\nconfused due to fatigue!"); static const u8 sText_PlayerPickedUpMoney[] = _("You picked up\n¥{B_BUFF1}!\p"); static const u8 sText_PkmnUnaffected[] = _("{B_DEF_NAME_WITH_PREFIX} is\nunaffected!"); -static const u8 sText_PkmnTransformedInto[] = _("{B_ATK_NAME_WITH_PREFIX} transformed\ninto {B_BUFF1}!"); +static const u8 sText_PkmnTransformedInto[] = _("{B_ATK_NAME_WITH_PREFIX}\ntransformed into {B_BUFF1}!"); static const u8 sText_PkmnMadeSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} put in\na substitute!"); static const u8 sText_PkmnHasSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} already\nhas a substitute!"); static const u8 sText_SubstituteDamaged[] = _("The substitute took damage\nfor {B_DEF_NAME_WITH_PREFIX2}!\p"); static const u8 sText_PkmnSubstituteFaded[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nsubstitute faded!\p"); static const u8 sText_PkmnMustRecharge[] = _("{B_ATK_NAME_WITH_PREFIX} must\nrecharge!"); static const u8 sText_PkmnRageBuilding[] = _("{B_DEF_NAME_WITH_PREFIX}'s rage\nis building!"); -static const u8 sText_PkmnMoveWasDisabled[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\nwas disabled!"); +static const u8 sText_PkmnMoveWasDisabled[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_BUFF1} was disabled!"); static const u8 sText_PkmnMoveDisabledNoMore[] = _("{B_ATK_NAME_WITH_PREFIX}'s move is\nno longer disabled!"); static const u8 sText_PkmnGotEncore[] = _("{B_DEF_NAME_WITH_PREFIX} must do\nan encore!"); static const u8 sText_PkmnEncoreEnded[] = _("{B_ATK_NAME_WITH_PREFIX} ended its\nencore!"); static const u8 sText_PkmnTookAim[] = _("{B_ATK_NAME_WITH_PREFIX} took aim at\n{B_DEF_NAME_WITH_PREFIX2}!"); static const u8 sText_PkmnSketchedMove[] = _("{B_ATK_NAME_WITH_PREFIX} sketched\n{B_BUFF1}!"); static const u8 sText_PkmnTryingToTakeFoe[] = _("{B_ATK_NAME_WITH_PREFIX} is hoping to\ntake its attacker down with it!"); -static const u8 sText_PkmnTookFoe[] = _("{B_DEF_NAME_WITH_PREFIX} took its attacker\ndown with it!"); +static const u8 sText_PkmnTookFoe[] = _("{B_DEF_NAME_WITH_PREFIX} took its\nattacker down with it!"); static const u8 sText_PkmnReducedPP[] = _("{B_DEF_NAME_WITH_PREFIX}'s PP\nwas reduced!"); -static const u8 sText_PkmnStoleItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole\n{B_DEF_NAME_WITH_PREFIX2}'s {B_LAST_ITEM}!"); +static const u8 sText_PkmnStoleItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole\n{B_DEF_NAME_WITH_PREFIX2}'s\n{B_LAST_ITEM}!"); static const u8 sText_TargetCantEscapeNow[] = _("{B_DEF_NAME_WITH_PREFIX} can no\nlonger escape!"); -static const u8 sText_PkmnFellIntoNightmare[] = _("{B_DEF_NAME_WITH_PREFIX} began having\na nightmare!"); +static const u8 sText_PkmnFellIntoNightmare[] = _("{B_DEF_NAME_WITH_PREFIX} began\nhaving a nightmare!"); static const u8 sText_PkmnLockedInNightmare[] = _("{B_ATK_NAME_WITH_PREFIX} is locked\nin a nightmare!"); -static const u8 sText_PkmnLaidCurse[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP\nand put a curse on {B_DEF_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnLaidCurse[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own\nHP and put a curse on\n{B_DEF_NAME_WITH_PREFIX2}!"); static const u8 sText_PkmnAfflictedByCurse[] = _("{B_ATK_NAME_WITH_PREFIX} is afflicted\nby the curse!"); static const u8 sText_SpikesScattered[] = _("Spikes were scattered on the ground\nall around {B_DEF_TEAM2} team!"); static const u8 sText_PkmnHurtBySpikes[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was hurt\nby the spikes!"); -static const u8 sText_PkmnIdentified[] = _("{B_DEF_NAME_WITH_PREFIX} was identified!"); -static const u8 sText_PkmnPerishCountFell[] = _("{B_ATK_NAME_WITH_PREFIX}'s perish count\nfell to {B_BUFF1}!"); +static const u8 sText_PkmnIdentified[] = _("{B_DEF_NAME_WITH_PREFIX} was\nidentified!"); +static const u8 sText_PkmnPerishCountFell[] = _("{B_ATK_NAME_WITH_PREFIX}'s perish\ncount fell to {B_BUFF1}!"); static const u8 sText_PkmnBracedItself[] = _("{B_ATK_NAME_WITH_PREFIX} braced\nitself!"); static const u8 sText_PkmnEnduredHit[] = _("{B_DEF_NAME_WITH_PREFIX} endured\nthe hit!"); static const u8 sText_MagnitudeStrength[] = _("Magnitude {B_BUFF1}!"); -static const u8 sText_PkmnCutHPMaxedAttack[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP\nand maximized its Attack!"); -static const u8 sText_PkmnCopiedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX2}'s stat changes!"); -static const u8 sText_PkmnGotFree[] = _("{B_ATK_NAME_WITH_PREFIX} got free of\n{B_DEF_NAME_WITH_PREFIX2}'s {B_BUFF1}!"); //not in gen 5+, generic rapid spin? +static const u8 sText_PkmnCutHPMaxedAttack[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own\nHP and maximized its Attack!"); +static const u8 sText_PkmnCopiedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX2}'s\nstat changes!"); +static const u8 sText_PkmnGotFree[] = _("{B_ATK_NAME_WITH_PREFIX} got free of\n{B_DEF_NAME_WITH_PREFIX2}'s\n{B_BUFF1}!"); //not in gen 5+, generic rapid spin? static const u8 sText_PkmnShedLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX} shed\nLeech Seed!"); //not in gen 5+, generic rapid spin? static const u8 sText_PkmnBlewAwaySpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nSpikes!"); //not in gen 5+, generic rapid spin? static const u8 sText_PkmnFledFromBattle[] = _("{B_ATK_NAME_WITH_PREFIX} fled from\nbattle!"); @@ -277,7 +277,7 @@ static const u8 sText_PkmnWasDraggedOut[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndra static const u8 sText_TheWallShattered[] = _("The wall shattered!"); //not in gen5+, uses "your teams light screen wore off!" etc instead static const u8 sText_ButNoEffect[] = _("But it had no effect!"); static const u8 sText_PkmnHasNoMovesLeft[] = _("{B_ATK_NAME_WITH_PREFIX} has no moves left\nthat it can use!\p"); -static const u8 sText_PkmnMoveIsDisabled[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\nis disabled!\p"); +static const u8 sText_PkmnMoveIsDisabled[] = _("{B_ATK_NAME_WITH_PREFIX}'s\n{B_CURRENT_MOVE} is disabled!\p"); static const u8 sText_PkmnCantUseMoveTorment[] = _("{B_ATK_NAME_WITH_PREFIX} can't use the same move\ntwice in a row due to the torment!\p"); static const u8 sText_PkmnCantUseMoveTaunt[] = _("{B_ATK_NAME_WITH_PREFIX} can't use\n{B_CURRENT_MOVE} after the taunt!\p"); static const u8 sText_PkmnCantUseMoveSealed[] = _("{B_ATK_NAME_WITH_PREFIX} can't use\nits sealed {B_CURRENT_MOVE}!\p"); diff --git a/test/text.c b/test/text.c index dda134fb713a..7eb81c21791b 100644 --- a/test/text.c +++ b/test/text.c @@ -581,19 +581,20 @@ extern u16 sBattlerAbilities[MAX_BATTLERS_COUNT]; TEST("Battle strings fit on the battle message window") { u32 i, j, strWidth; - u32 start = BATTLESTRINGS_TABLE_START + 51; - u32 end = BATTLESTRINGS_TABLE_START + 100; + u32 start = BATTLESTRINGS_TABLE_START + 101; + u32 end = BATTLESTRINGS_TABLE_START + 150; const u32 fontId = FONT_NORMAL, widthPx = 208; u32 battleStringId = 0; u8 battleString[1000] = {0}; - s32 twoDigitNines = 99; s32 sixDigitNines = 999999; u8 nickname[POKEMON_NAME_LENGTH + 1] = _("MMMMMMMMMMMM"); u32 longMoveID = MOVE_STOMPING_TANTRUM; u32 longAbilityID = ABILITY_SUPERSWEET_SYRUP; // 91 pixels. u32 longStatName = STAT_EVASION; u32 longTypeName = TYPE_ELECTRIC; + u32 longSpeciesName = SPECIES_SANDY_SHOCKS; // 47 pixels + u32 longItemName = ITEM_UNREMARKABLE_TEACUP; RUN_OVERWORLD_SCRIPT( givemon SPECIES_WOBBUFFET, 100; @@ -626,6 +627,7 @@ TEST("Battle strings fit on the battle message window") gEffectBattler = 1; gCurrentMove = longMoveID; + gLastUsedItem = longItemName; gBattleMsgDataPtr = AllocZeroed(sizeof(struct BattleMsgData)); gBattleMsgDataPtr->currentMove = longMoveID; @@ -659,14 +661,23 @@ TEST("Battle strings fit on the battle message window") case STRINGID_FOESTOPPEDWORKING: // Unused case STRINGID_PKMNHURTBY: case STRINGID_PKMNFREEDFROM: + case STRINGID_PKMNMOVEWASDISABLED: + case STRINGID_PKMNSKETCHEDMOVE: + case STRINGID_PKMNGOTFREE: PREPARE_MOVE_BUFFER(gBattleTextBuff1, longMoveID); break; case STRINGID_PLAYERGOTMONEY: case STRINGID_PLAYERWHITEOUT2: + case STRINGID_PLAYERPICKEDUPMONEY: PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff1, 6, sixDigitNines); break; case STRINGID_HITXTIMES: - PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff1, 2, twoDigitNines); + case STRINGID_MAGNITUDESTRENGTH: + PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff1, 2, 99); + break; + case STRINGID_PKMNSTOCKPILED: + case STRINGID_PKMNPERISHCOUNTFELL: + PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff1, 1, 9); break; case STRINGID_PKMNMADESLEEP: case STRINGID_PKMNPOISONEDBY: @@ -682,6 +693,9 @@ TEST("Battle strings fit on the battle message window") case STRINGID_PKMNCHANGEDTYPE: PREPARE_TYPE_BUFFER(gBattleTextBuff1, longTypeName); break; + case STRINGID_PKMNTRANSFORMEDINTO: + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, longSpeciesName) + break; default: break; } From 4efdeba49266912b86cef15be7e75f18661d53af Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 29 Sep 2024 17:19:14 -0300 Subject: [PATCH 47/68] More messages --- include/config/general.h | 2 +- src/battle_message.c | 70 ++++++++++++++++++++-------------------- test/text.c | 17 ++++++++-- 3 files changed, 51 insertions(+), 38 deletions(-) diff --git a/include/config/general.h b/include/config/general.h index cff1432bb737..61d5db5c043c 100644 --- a/include/config/general.h +++ b/include/config/general.h @@ -6,7 +6,7 @@ // still has them in the ROM. This is because the developers forgot // to define NDEBUG before release, however this has been changed as // Ruby's actual debug build does not use the AGBPrint features. -#define NDEBUG +//#define NDEBUG // To enable printf debugging, comment out "#define NDEBUG". This allows // the various AGBPrint functions to be used. (See include/gba/isagbprint.h). diff --git a/src/battle_message.c b/src/battle_message.c index 69449440b205..17a88670f1b6 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -95,24 +95,24 @@ static const u8 sText_CantEscape2[] = _("You couldn't get away!\p"); static const u8 sText_AttackerCantEscape[] = _("{B_ATK_NAME_WITH_PREFIX} can't escape!"); static const u8 sText_HitXTimes[] = _("The Pokémon was\nhit {B_BUFF1} time(s)!"); //SV has dynamic plural here static const u8 sText_PkmnFellAsleep[] = _("{B_EFF_NAME_WITH_PREFIX}\nfell asleep!"); -static const u8 sText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_BUFF1} made\n{B_EFF_NAME_WITH_PREFIX2} sleep!"); //not in gen 5+, ability popup +static const u8 sText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_BUFF1} made\l{B_EFF_NAME_WITH_PREFIX2} sleep!"); //not in gen 5+, ability popup static const u8 sText_PkmnAlreadyAsleep[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready asleep!"); static const u8 sText_PkmnAlreadyAsleep2[] = _("{B_ATK_NAME_WITH_PREFIX} is\nalready asleep!"); static const u8 sText_PkmnWasntAffected[] = _("{B_DEF_NAME_WITH_PREFIX}\nwasn't affected!"); //not in gen 5+, ability popup static const u8 sText_PkmnWasPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX}\nwas poisoned!"); -static const u8 sText_PkmnPoisonedBy[] = _("{B_EFF_NAME_WITH_PREFIX}\nwas poisoned by\n{B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s\n{B_BUFF1}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnPoisonedBy[] = _("{B_EFF_NAME_WITH_PREFIX}\nwas poisoned by\l{B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s\l{B_BUFF1}!"); //not in gen 5+, ability popup static const u8 sText_PkmnHurtByPoison[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby its poisoning!"); static const u8 sText_PkmnAlreadyPoisoned[] = _("{B_DEF_NAME_WITH_PREFIX} is already\npoisoned!"); static const u8 sText_PkmnBadlyPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX} was badly\npoisoned!"); static const u8 sText_PkmnEnergyDrained[] = _("{B_DEF_NAME_WITH_PREFIX} had its\nenergy drained!"); static const u8 sText_PkmnWasBurned[] = _("{B_EFF_NAME_WITH_PREFIX} was burned!"); static const u8 sText_PkmnGotFrostbite[] = _("{B_EFF_NAME_WITH_PREFIX} got frostbite!"); -static const u8 sText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_BUFF1} burned\n{B_EFF_NAME_WITH_PREFIX2}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_BUFF1} burned\l{B_EFF_NAME_WITH_PREFIX2}!"); //not in gen 5+, ability popup static const u8 sText_PkmnHurtByBurn[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby its burn!"); static const u8 sText_PkmnHurtByFrostbite[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby its frostbite!"); static const u8 sText_PkmnAlreadyHasBurn[] = _("{B_DEF_NAME_WITH_PREFIX} is already\nburned!"); static const u8 sText_PkmnWasFrozen[] = _("{B_EFF_NAME_WITH_PREFIX} was\nfrozen solid!"); -static const u8 sText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_BUFF1} froze\n{B_EFF_NAME_WITH_PREFIX2} solid!"); //not in gen 5+, ability popup +static const u8 sText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_BUFF1} froze\l{B_EFF_NAME_WITH_PREFIX2} solid!"); //not in gen 5+, ability popup static const u8 sText_PkmnIsFrozen[] = _("{B_ATK_NAME_WITH_PREFIX} is\nfrozen solid!"); static const u8 sText_PkmnWasDefrosted[] = _("{B_DEF_NAME_WITH_PREFIX} thawed out!"); static const u8 sText_PkmnWasDefrosted2[] = _("{B_ATK_NAME_WITH_PREFIX} thawed out!"); @@ -121,7 +121,7 @@ static const u8 sText_PkmnFrostbiteHealed[] = _("{B_DEF_NAME_WITH_PREFIX}'s fros static const u8 sText_PkmnFrostbiteHealed2[] = _("{B_ATK_NAME_WITH_PREFIX}'s frostbite\nwas cured!"); static const u8 sText_PkmnFrostbiteHealedBy[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\ncured its frostbite!"); static const u8 sText_PkmnWasParalyzed[] = _("{B_EFF_NAME_WITH_PREFIX} is\nparalyzed, so it may be unable to move!"); -static const u8 sText_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_BUFF1} paralyzed\n{B_EFF_NAME_WITH_PREFIX2},\lso it may be unable to move!"); //not in gen 5+, ability popup +static const u8 sText_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_BUFF1} paralyzed\l{B_EFF_NAME_WITH_PREFIX2},\lso it may be unable to move!"); //not in gen 5+, ability popup static const u8 sText_PkmnIsParalyzed[] = _("{B_ATK_NAME_WITH_PREFIX} couldn't\nmove because it's paralyzed!"); static const u8 sText_PkmnIsAlreadyParalyzed[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready paralyzed!"); static const u8 sText_PkmnHealedParalysis[] = _("{B_DEF_NAME_WITH_PREFIX} was\ncured of paralysis!"); @@ -160,7 +160,7 @@ static const u8 sText_PkmnFlewHigh[] = _("{B_ATK_NAME_WITH_PREFIX} flew\nup high static const u8 sText_PkmnDugHole[] = _("{B_ATK_NAME_WITH_PREFIX} burrowed\nits way under the ground!"); static const u8 sText_PkmnHidUnderwater[] = _("{B_ATK_NAME_WITH_PREFIX} hid\nunderwater!"); static const u8 sText_PkmnSprangUp[] = _("{B_ATK_NAME_WITH_PREFIX} sprang up!"); -static const u8 sText_PkmnSqueezedByBind[] = _("{B_DEF_NAME_WITH_PREFIX} was\nsqueezed by\n{B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnSqueezedByBind[] = _("{B_DEF_NAME_WITH_PREFIX} was\nsqueezed by\l{B_ATK_NAME_WITH_PREFIX2}!"); static const u8 sText_PkmnInSnapTrap[] = _("{B_DEF_NAME_WITH_PREFIX} got trapped\nby a snap trap!"); static const u8 sText_PkmnTrappedInVortex[] = _("{B_DEF_NAME_WITH_PREFIX} became\ntrapped in the vortex!"); static const u8 sText_PkmnTrappedBySandTomb[] = _("{B_DEF_NAME_WITH_PREFIX} became\ntrapped by the quicksand!"); @@ -214,11 +214,11 @@ static const u8 sText_PkmnSketchedMove[] = _("{B_ATK_NAME_WITH_PREFIX} sketched\ static const u8 sText_PkmnTryingToTakeFoe[] = _("{B_ATK_NAME_WITH_PREFIX} is hoping to\ntake its attacker down with it!"); static const u8 sText_PkmnTookFoe[] = _("{B_DEF_NAME_WITH_PREFIX} took its\nattacker down with it!"); static const u8 sText_PkmnReducedPP[] = _("{B_DEF_NAME_WITH_PREFIX}'s PP\nwas reduced!"); -static const u8 sText_PkmnStoleItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole\n{B_DEF_NAME_WITH_PREFIX2}'s\n{B_LAST_ITEM}!"); +static const u8 sText_PkmnStoleItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole\n{B_DEF_NAME_WITH_PREFIX2}'s\l{B_LAST_ITEM}!"); static const u8 sText_TargetCantEscapeNow[] = _("{B_DEF_NAME_WITH_PREFIX} can no\nlonger escape!"); static const u8 sText_PkmnFellIntoNightmare[] = _("{B_DEF_NAME_WITH_PREFIX} began\nhaving a nightmare!"); static const u8 sText_PkmnLockedInNightmare[] = _("{B_ATK_NAME_WITH_PREFIX} is locked\nin a nightmare!"); -static const u8 sText_PkmnLaidCurse[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own\nHP and put a curse on\n{B_DEF_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnLaidCurse[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own\nHP and put a curse on\l{B_DEF_NAME_WITH_PREFIX2}!"); static const u8 sText_PkmnAfflictedByCurse[] = _("{B_ATK_NAME_WITH_PREFIX} is afflicted\nby the curse!"); static const u8 sText_SpikesScattered[] = _("Spikes were scattered on the ground\nall around {B_DEF_TEAM2} team!"); static const u8 sText_PkmnHurtBySpikes[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was hurt\nby the spikes!"); @@ -228,8 +228,8 @@ static const u8 sText_PkmnBracedItself[] = _("{B_ATK_NAME_WITH_PREFIX} braced\ni static const u8 sText_PkmnEnduredHit[] = _("{B_DEF_NAME_WITH_PREFIX} endured\nthe hit!"); static const u8 sText_MagnitudeStrength[] = _("Magnitude {B_BUFF1}!"); static const u8 sText_PkmnCutHPMaxedAttack[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own\nHP and maximized its Attack!"); -static const u8 sText_PkmnCopiedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX2}'s\nstat changes!"); -static const u8 sText_PkmnGotFree[] = _("{B_ATK_NAME_WITH_PREFIX} got free of\n{B_DEF_NAME_WITH_PREFIX2}'s\n{B_BUFF1}!"); //not in gen 5+, generic rapid spin? +static const u8 sText_PkmnCopiedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX2}'s\lstat changes!"); +static const u8 sText_PkmnGotFree[] = _("{B_ATK_NAME_WITH_PREFIX} got free of\n{B_DEF_NAME_WITH_PREFIX2}'s\l{B_BUFF1}!"); //not in gen 5+, generic rapid spin? static const u8 sText_PkmnShedLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX} shed\nLeech Seed!"); //not in gen 5+, generic rapid spin? static const u8 sText_PkmnBlewAwaySpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nSpikes!"); //not in gen 5+, generic rapid spin? static const u8 sText_PkmnFledFromBattle[] = _("{B_ATK_NAME_WITH_PREFIX} fled from\nbattle!"); @@ -241,8 +241,8 @@ static const u8 sText_PkmnCenterAttention[] = _("{B_DEF_NAME_WITH_PREFIX} became static const u8 sText_PkmnChargingPower[] = _("{B_ATK_NAME_WITH_PREFIX} began\ncharging power!"); static const u8 sText_NaturePowerTurnedInto[] = _("Nature Power turned into\n{B_CURRENT_MOVE}!"); static const u8 sText_PkmnStatusNormal[] = _("{B_ATK_NAME_WITH_PREFIX}'s status\nreturned to normal!"); -static const u8 sText_PkmnSubjectedToTorment[] = _("{B_DEF_NAME_WITH_PREFIX} was subjected\nto torment!"); -static const u8 sText_PkmnTighteningFocus[] = _("{B_ATK_NAME_WITH_PREFIX} is tightening\nits focus!"); +static const u8 sText_PkmnSubjectedToTorment[] = _("{B_DEF_NAME_WITH_PREFIX} was\nsubjected to torment!"); +static const u8 sText_PkmnTighteningFocus[] = _("{B_ATK_NAME_WITH_PREFIX} is\ntightening its focus!"); static const u8 sText_PkmnFellForTaunt[] = _("{B_DEF_NAME_WITH_PREFIX} fell for\nthe taunt!"); static const u8 sText_PkmnReadyToHelp[] = _("{B_ATK_NAME_WITH_PREFIX} is ready to\nhelp {B_DEF_NAME_WITH_PREFIX2}!"); static const u8 sText_PkmnSwitchedItems[] = _("{B_ATK_NAME_WITH_PREFIX} switched\nitems with its target!"); @@ -252,18 +252,18 @@ static const u8 sText_PkmnObtainedXYObtainedZ[] = _("{B_ATK_NAME_WITH_PREFIX} ob static const u8 sText_PkmnCopiedFoe[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX2}'s Ability!"); static const u8 sText_PkmnMadeWish[] = _("{B_ATK_NAME_WITH_PREFIX} made a wish!"); //unused static const u8 sText_PkmnWishCameTrue[] = _("{B_BUFF1}'s wish\ncame true!"); -static const u8 sText_PkmnPlantedRoots[] = _("{B_ATK_NAME_WITH_PREFIX} planted its roots!"); +static const u8 sText_PkmnPlantedRoots[] = _("{B_ATK_NAME_WITH_PREFIX} planted\nits roots!"); static const u8 sText_PkmnAbsorbedNutrients[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed\nnutrients with its roots!"); static const u8 sText_PkmnAnchoredItself[] = _("{B_DEF_NAME_WITH_PREFIX} anchored\nitself with its roots!"); -static const u8 sText_PkmnWasMadeDrowsy[] = _("{B_DEF_NAME_WITH_PREFIX} grew drowsy!"); -static const u8 sText_PkmnKnockedOff[] = _("{B_ATK_NAME_WITH_PREFIX} knocked off\n{B_DEF_NAME_WITH_PREFIX2}'s {B_LAST_ITEM}!"); +static const u8 sText_PkmnWasMadeDrowsy[] = _("{B_DEF_NAME_WITH_PREFIX} grew\ndrowsy!"); +static const u8 sText_PkmnKnockedOff[] = _("{B_ATK_NAME_WITH_PREFIX} knocked off\n{B_DEF_NAME_WITH_PREFIX2}'s\l{B_LAST_ITEM}!"); static const u8 sText_PkmnSwappedAbilities[] = _("{B_ATK_NAME_WITH_PREFIX} swapped\nAbilities with its target!"); -static const u8 sText_PkmnSealedOpponentMove[] = _("{B_ATK_NAME_WITH_PREFIX} sealed any moves\nits target shares with it!"); -static const u8 sText_PkmnWantsGrudge[] = _("{B_ATK_NAME_WITH_PREFIX} wants its target\nto bear a grudge!"); -static const u8 sText_PkmnLostPPGrudge[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} lost all its PP\ndue to the grudge!"); +static const u8 sText_PkmnSealedOpponentMove[] = _("{B_ATK_NAME_WITH_PREFIX} sealed any\nmoves its target shares with it!"); +static const u8 sText_PkmnWantsGrudge[] = _("{B_ATK_NAME_WITH_PREFIX} wants\nits target to bear a grudge!"); +static const u8 sText_PkmnLostPPGrudge[] = _("{B_ATK_NAME_WITH_PREFIX}'s\n{B_BUFF1} lost all its PP\ldue to the grudge!"); static const u8 sText_PkmnShroudedItself[] = _("{B_ATK_NAME_WITH_PREFIX} shrouded\nitself with Magic Coat!"); static const u8 sText_PkmnMoveBounced[] = _("{B_EFF_NAME_WITH_PREFIX}\nbounced the {B_CURRENT_MOVE} back!"); -static const u8 sText_PkmnWaitsForTarget[] = _("{B_ATK_NAME_WITH_PREFIX} waits for a target\nto make a move!"); +static const u8 sText_PkmnWaitsForTarget[] = _("{B_ATK_NAME_WITH_PREFIX} waits\nfor a target to make a move!"); static const u8 sText_PkmnSnatchedMove[] = _("{B_DEF_NAME_WITH_PREFIX} snatched\n{B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s move!"); static const u8 sText_ElectricityWeakened[] = _("Electricity's power was weakened!"); static const u8 sText_FireWeakened[] = _("Fire's power was weakened!"); @@ -276,29 +276,29 @@ static const u8 sText_PkmnLostFocus[] = _("{B_ATK_NAME_WITH_PREFIX} lost its\nfo static const u8 sText_PkmnWasDraggedOut[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndragged out!\p"); static const u8 sText_TheWallShattered[] = _("The wall shattered!"); //not in gen5+, uses "your teams light screen wore off!" etc instead static const u8 sText_ButNoEffect[] = _("But it had no effect!"); -static const u8 sText_PkmnHasNoMovesLeft[] = _("{B_ATK_NAME_WITH_PREFIX} has no moves left\nthat it can use!\p"); +static const u8 sText_PkmnHasNoMovesLeft[] = _("{B_ATK_NAME_WITH_PREFIX} has\nno moves left that it can use!\p"); static const u8 sText_PkmnMoveIsDisabled[] = _("{B_ATK_NAME_WITH_PREFIX}'s\n{B_CURRENT_MOVE} is disabled!\p"); -static const u8 sText_PkmnCantUseMoveTorment[] = _("{B_ATK_NAME_WITH_PREFIX} can't use the same move\ntwice in a row due to the torment!\p"); +static const u8 sText_PkmnCantUseMoveTorment[] = _("{B_ATK_NAME_WITH_PREFIX} can't use\nthe same move twice in a row due\lto the torment!\p"); static const u8 sText_PkmnCantUseMoveTaunt[] = _("{B_ATK_NAME_WITH_PREFIX} can't use\n{B_CURRENT_MOVE} after the taunt!\p"); static const u8 sText_PkmnCantUseMoveSealed[] = _("{B_ATK_NAME_WITH_PREFIX} can't use\nits sealed {B_CURRENT_MOVE}!\p"); static const u8 sText_PkmnCantUseMoveThroatChop[] = _("The effects of Throat Chop prevent\n{B_ATK_NAME_WITH_PREFIX2} from using certain moves!\p"); -static const u8 sText_PkmnMadeItRain[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade it rain!"); //not in gen 5+, ability popup -static const u8 sText_PkmnRaisedSpeed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nraised its Speed!"); //not in gen 5+, ability popup -static const u8 sText_PkmnProtectedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was protected\nby {B_DEF_ABILITY}!"); //not in gen 5+, ability popup -static const u8 sText_PkmnPreventsUsage[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents {B_ATK_NAME_WITH_PREFIX2}\lfrom using {B_CURRENT_MOVE}!"); //I don't see this in SV text +static const u8 sText_PkmnMadeItRain[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} made it rain!"); //not in gen 5+, ability popup +static const u8 sText_PkmnRaisedSpeed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} raised its Speed!"); //not in gen 5+, ability popup +static const u8 sText_PkmnProtectedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was\nprotected by {B_DEF_ABILITY}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnPreventsUsage[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} prevents\l{B_ATK_NAME_WITH_PREFIX2} from\lusing {B_CURRENT_MOVE}!"); //I don't see this in SV text static const u8 sText_PkmnRestoredHPUsing[] = _("{B_DEF_NAME_WITH_PREFIX} restored HP\nusing its {B_DEF_ABILITY}!"); //not in gen 5+, ability popup static const u8 sText_PkmnsXMadeYUseless[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} useless!"); //not in gen 5+, ability popup -static const u8 sText_PkmnChangedTypeWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nmade it the {B_BUFF1} type!"); //not in gen 5+, ability popup -static const u8 sText_PkmnPreventsParalysisWith[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents paralysis!"); //not in gen 5+, ability popup -static const u8 sText_PkmnPreventsRomanceWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents romance!"); //not in gen 5+, ability popup -static const u8 sText_PkmnPreventsPoisoningWith[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents poisoning!"); //not in gen 5+, ability popup -static const u8 sText_PkmnPreventsConfusionWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents confusion!"); //not in gen 5+, ability popup -static const u8 sText_PkmnRaisedFirePowerWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nraised the power of Fire-type moves!"); //not in gen 5+, ability popup +static const u8 sText_PkmnChangedTypeWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} made it the\l{B_BUFF1} type!"); //not in gen 5+, ability popup +static const u8 sText_PkmnPreventsParalysisWith[] = _("{B_EFF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} prevents paralysis!"); //not in gen 5+, ability popup +static const u8 sText_PkmnPreventsRomanceWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} prevents romance!"); //not in gen 5+, ability popup +static const u8 sText_PkmnPreventsPoisoningWith[] = _("{B_EFF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} prevents poisoning!"); //not in gen 5+, ability popup +static const u8 sText_PkmnPreventsConfusionWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} prevents confusion!"); //not in gen 5+, ability popup +static const u8 sText_PkmnRaisedFirePowerWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} raised the power\lof Fire-type moves!"); //not in gen 5+, ability popup static const u8 sText_PkmnAnchorsItselfWith[] = _("{B_DEF_NAME_WITH_PREFIX} anchors\nitself with {B_DEF_ABILITY}!"); //not in gen 5+, ability popup -static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncuts {B_DEF_NAME_WITH_PREFIX2}'s attack!"); //not in gen 5+, ability popup -static const u8 sText_PkmnPreventsStatLossWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents stat loss!"); //not in gen 5+, ability popup -static const u8 sText_PkmnHurtsWith[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt by\n{B_DEF_NAME_WITH_PREFIX2}'s {B_BUFF1}!"); -static const u8 sText_PkmnTraced[] = _("It traced\n{B_BUFF1}'s {B_BUFF2}!"); +static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} cuts\l{B_DEF_NAME_WITH_PREFIX2}'s attack!"); //not in gen 5+, ability popup +static const u8 sText_PkmnPreventsStatLossWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} prevents stat loss!"); //not in gen 5+, ability popup +static const u8 sText_PkmnHurtsWith[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt by\n{B_DEF_NAME_WITH_PREFIX2}'s\l{B_BUFF1}!"); +static const u8 sText_PkmnTraced[] = _("It traced {B_BUFF1}'s\n{B_BUFF2}!"); static const u8 sText_PkmnsXPreventsBurns[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY}\nprevents burns!"); //not in gen 5+, ability popup static const u8 sText_PkmnsXBlocksY[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nblocks {B_CURRENT_MOVE}!"); //not in gen 5+, ability popup static const u8 sText_PkmnsXBlocksY2[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nblocks {B_CURRENT_MOVE}!"); //not in gen 5+, ability popup diff --git a/test/text.c b/test/text.c index 7eb81c21791b..9d62ac583b0d 100644 --- a/test/text.c +++ b/test/text.c @@ -581,8 +581,8 @@ extern u16 sBattlerAbilities[MAX_BATTLERS_COUNT]; TEST("Battle strings fit on the battle message window") { u32 i, j, strWidth; - u32 start = BATTLESTRINGS_TABLE_START + 101; - u32 end = BATTLESTRINGS_TABLE_START + 150; + u32 start = BATTLESTRINGS_TABLE_START; + u32 end = BATTLESTRINGS_COUNT - BATTLESTRINGS_TABLE_START; const u32 fontId = FONT_NORMAL, widthPx = 208; u32 battleStringId = 0; u8 battleString[1000] = {0}; @@ -664,6 +664,7 @@ TEST("Battle strings fit on the battle message window") case STRINGID_PKMNMOVEWASDISABLED: case STRINGID_PKMNSKETCHEDMOVE: case STRINGID_PKMNGOTFREE: + case STRINGID_PKMNLOSTPPGRUDGE: PREPARE_MOVE_BUFFER(gBattleTextBuff1, longMoveID); break; case STRINGID_PLAYERGOTMONEY: @@ -691,11 +692,23 @@ TEST("Battle strings fit on the battle message window") StringCopy(gBattleTextBuff1, gStatNamesTable[longStatName]); break; case STRINGID_PKMNCHANGEDTYPE: + case STRINGID_PKMNCHANGEDTYPEWITH: PREPARE_TYPE_BUFFER(gBattleTextBuff1, longTypeName); break; case STRINGID_PKMNTRANSFORMEDINTO: PREPARE_SPECIES_BUFFER(gBattleTextBuff1, longSpeciesName) break; + case STRINGID_PKMNATTACK: + case STRINGID_PKMNWISHCAMETRUE: + PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, 1, 0); + break; + case STRINGID_PKMNHURTSWITH: + PREPARE_ITEM_BUFFER(gBattleTextBuff1, longItemName); + break; + case STRINGID_PKMNTRACED: + PREPARE_MON_NICK_WITH_PREFIX_LOWER_BUFFER(gBattleTextBuff1, 1, 0); + PREPARE_ABILITY_BUFFER(gBattleTextBuff2, longAbilityID); + break; default: break; } From eaab01050fb650943b01525bf3817eb75192bf69 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 29 Sep 2024 18:01:23 -0300 Subject: [PATCH 48/68] Temp string acotation --- test/text.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/text.c b/test/text.c index 9d62ac583b0d..19fa81fb41a0 100644 --- a/test/text.c +++ b/test/text.c @@ -582,7 +582,7 @@ TEST("Battle strings fit on the battle message window") { u32 i, j, strWidth; u32 start = BATTLESTRINGS_TABLE_START; - u32 end = BATTLESTRINGS_COUNT - BATTLESTRINGS_TABLE_START; + u32 end = BATTLESTRINGS_TABLE_START + 200; const u32 fontId = FONT_NORMAL, widthPx = 208; u32 battleStringId = 0; u8 battleString[1000] = {0}; From 9a101f3eae873c251a78cc5f3cb7f3d0333b927d Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 29 Sep 2024 19:18:29 -0300 Subject: [PATCH 49/68] Up to 312 --- include/battle_message.h | 3 ++ src/battle_message.c | 62 ++++++++++++++++++++-------------------- test/text.c | 34 ++++++++++++++++++++-- 3 files changed, 66 insertions(+), 33 deletions(-) diff --git a/include/battle_message.h b/include/battle_message.h index cbd9fd5a7e90..d3fcc465fa29 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -316,6 +316,9 @@ extern const u8 gText_Loss[]; extern const u8 gText_Draw[]; extern const u8 gText_StatSharply[]; extern const u8 gText_StatRose[]; +extern const u8 sText_StatFell[]; +extern const u8 sText_drastically[]; +extern const u8 sText_severely[]; extern const u8 gText_DefendersStatRose[]; extern const u8 gText_PkmnGettingPumped[]; extern const u8 gText_PkmnShroudedInMist[]; diff --git a/src/battle_message.c b/src/battle_message.c index 17a88670f1b6..fbbadd84f3b6 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -299,16 +299,16 @@ static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}' static const u8 sText_PkmnPreventsStatLossWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} prevents stat loss!"); //not in gen 5+, ability popup static const u8 sText_PkmnHurtsWith[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt by\n{B_DEF_NAME_WITH_PREFIX2}'s\l{B_BUFF1}!"); static const u8 sText_PkmnTraced[] = _("It traced {B_BUFF1}'s\n{B_BUFF2}!"); -static const u8 sText_PkmnsXPreventsBurns[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY}\nprevents burns!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXBlocksY[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nblocks {B_CURRENT_MOVE}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXPreventsBurns[] = _("{B_EFF_NAME_WITH_PREFIX}'s\n{B_EFF_ABILITY} prevents burns!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXBlocksY[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} blocks\l{B_CURRENT_MOVE}!"); //not in gen 5+, ability popup static const u8 sText_PkmnsXBlocksY2[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nblocks {B_CURRENT_MOVE}!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXRestoredHPALittle2[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nrestored its HP a little!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXWhippedUpSandstorm[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nwhipped up a sandstorm!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXRestoredHPALittle2[] = _("{B_ATK_NAME_WITH_PREFIX}'s\n{B_ATK_ABILITY} restored its HP\la little!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXWhippedUpSandstorm[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} whipped up\la sandstorm!"); //not in gen 5+, ability popup static const u8 sText_PkmnsXIntensifiedSun[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nintensified the sun's rays!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXPreventsYLoss[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents {B_BUFF1} loss!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXInfatuatedY[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\ninfatuated {B_ATK_NAME_WITH_PREFIX2}!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXMadeYIneffective[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} ineffective!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXCuredYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXPreventsYLoss[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} prevents\l{B_BUFF1} loss!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXInfatuatedY[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} infatuated\l{B_ATK_NAME_WITH_PREFIX2}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXMadeYIneffective[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} made\l{B_CURRENT_MOVE} ineffective!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXCuredYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} cured\lits {B_BUFF1} problem!"); //not in gen 5+, ability popup static const u8 sText_ItSuckedLiquidOoze[] = _("{B_ATK_NAME_WITH_PREFIX} sucked up\nthe liquid ooze!"); static const u8 sText_PkmnTransformed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} transformed!"); static const u8 sText_PkmnsXTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\ntook the attack!"); //In gen 5+ but without naming the ability @@ -323,12 +323,12 @@ static const u8 sText_PkmnsXHadNoEffectOnY[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX const u8 gText_StatSharply[] = _("sharply "); const u8 gText_StatRose[] = _("rose!"); static const u8 sText_StatHarshly[] = _("harshly "); -static const u8 sText_StatFell[] = _("fell!"); -static const u8 sText_AttackersStatRose[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1}\n{B_BUFF2}"); -const u8 gText_DefendersStatRose[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\n{B_BUFF2}"); +const u8 sText_StatFell[] = _("fell!"); +static const u8 sText_AttackersStatRose[] = _("{B_ATK_NAME_WITH_PREFIX}'s\n{B_BUFF1} {B_BUFF2}"); +const u8 gText_DefendersStatRose[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_BUFF1} {B_BUFF2}"); static const u8 sText_UsingItemTheStatOfPkmnRose[] = _("Using {B_LAST_ITEM}, the {B_BUFF1}\nof {B_SCR_ACTIVE_NAME_WITH_PREFIX2} {B_BUFF2}"); //todo: update this, will require code changes -static const u8 sText_AttackersStatFell[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1}\n{B_BUFF2}"); -static const u8 sText_DefendersStatFell[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\n{B_BUFF2}"); +static const u8 sText_AttackersStatFell[] = _("{B_ATK_NAME_WITH_PREFIX}'s\n{B_BUFF1} {B_BUFF2}"); +static const u8 sText_DefendersStatFell[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_BUFF1} {B_BUFF2}"); static const u8 sText_StatsWontIncrease2[] = _("{B_ATK_NAME_WITH_PREFIX}'s stats\nwon't go any higher!"); static const u8 sText_StatsWontDecrease2[] = _("{B_DEF_NAME_WITH_PREFIX}'s stats\nwon't go any lower!"); static const u8 sText_CriticalHit[] = _("A critical hit!"); @@ -388,12 +388,12 @@ static const u8 sText_BellChimed[] = _("A bell chimed!"); static const u8 sText_FaintInThree[] = _("All Pokémon that heard the song\nwill faint in three turns!"); static const u8 sText_NoPPLeft[] = _("There's no PP left for\nthis move!\p"); //not in gen 5+ static const u8 sText_ButNoPPLeft[] = _("But there was no PP left\nfor the move!"); -static const u8 sText_PkmnIgnoresAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} ignored orders\nand kept sleeping!"); -static const u8 sText_PkmnIgnoredOrders[] = _("{B_ATK_NAME_WITH_PREFIX} ignored orders!"); -static const u8 sText_PkmnBeganToNap[] = _("{B_ATK_NAME_WITH_PREFIX} began to nap!"); +static const u8 sText_PkmnIgnoresAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} ignored\norders and kept sleeping!"); +static const u8 sText_PkmnIgnoredOrders[] = _("{B_ATK_NAME_WITH_PREFIX} ignored\norders!"); +static const u8 sText_PkmnBeganToNap[] = _("{B_ATK_NAME_WITH_PREFIX} began\nto nap!"); static const u8 sText_PkmnLoafing[] = _("{B_ATK_NAME_WITH_PREFIX} is\nloafing around!"); static const u8 sText_PkmnWontObey[] = _("{B_ATK_NAME_WITH_PREFIX} won't obey!"); -static const u8 sText_PkmnTurnedAway[] = _("{B_ATK_NAME_WITH_PREFIX} turned away!"); +static const u8 sText_PkmnTurnedAway[] = _("{B_ATK_NAME_WITH_PREFIX} turned\naway!"); static const u8 sText_PkmnPretendNotNotice[] = _("{B_ATK_NAME_WITH_PREFIX} pretended\nnot to notice!"); static const u8 sText_EnemyAboutToSwitchPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} is\nabout to send out {B_BUFF2}.\pWill you switch your Pokémon?"); static const u8 sText_PkmnLearnedMove2[] = _("{B_ATK_NAME_WITH_PREFIX} learned\n{B_BUFF1}!"); @@ -516,19 +516,19 @@ static const u8 sText_SeemsWeird[] = _("The battlefield seems weird!"); static const u8 sText_BoxIsFull[] = _("The Box is full!\nYou can't catch any more!\p"); static const u8 sText_EnigmaBerry[] = _("ENIGMA BERRY"); //no decapitalize until it is everywhere static const u8 sText_BerrySuffix[] = _(" BERRY"); //no decapitalize until it is everywhere -static const u8 sText_PkmnsItemCuredParalysis[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ncured its paralysis!"); -static const u8 sText_PkmnsItemCuredPoison[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ncured its poison!"); -static const u8 sText_PkmnsItemHealedBurn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ncured its burn!"); -static const u8 sText_PkmnsItemHealedFrostbite[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ncured its frostbite!"); -static const u8 sText_PkmnsItemDefrostedIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ndefrosted it!"); -static const u8 sText_PkmnsItemWokeIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nwoke it up!"); -static const u8 sText_PkmnsItemSnappedOut[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nsnapped it out of its confusion!"); -static const u8 sText_PkmnsItemCuredProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\ncured its {B_BUFF1} problem!"); +static const u8 sText_PkmnsItemCuredParalysis[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_LAST_ITEM} cured\lits paralysis!"); +static const u8 sText_PkmnsItemCuredPoison[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_LAST_ITEM} cured\lits poison!"); +static const u8 sText_PkmnsItemHealedBurn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_LAST_ITEM} cured\lits burn!"); +static const u8 sText_PkmnsItemHealedFrostbite[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_LAST_ITEM} cured\lits frostbite!"); +static const u8 sText_PkmnsItemDefrostedIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_LAST_ITEM} defrosted it!"); +static const u8 sText_PkmnsItemWokeIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_LAST_ITEM} woke it up!"); +static const u8 sText_PkmnsItemSnappedOut[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_LAST_ITEM} snapped it\lout of its confusion!"); +static const u8 sText_PkmnsItemCuredProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_LAST_ITEM} cured\lits {B_BUFF1} problem!"); static const u8 sText_PkmnsItemNormalizedStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nnormalized its status!"); -static const u8 sText_PkmnsItemRestoredHealth[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored its\nhealth using its {B_LAST_ITEM}!"); -static const u8 sText_PkmnsItemRestoredPP[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored PP to\nits move {B_BUFF1} using its\l{B_LAST_ITEM}!"); -static const u8 sText_PkmnsItemRestoredStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} returned its stats\nto normal using its {B_LAST_ITEM}!"); -static const u8 sText_PkmnsItemRestoredHPALittle[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored\na little HP using its {B_LAST_ITEM}!"); +static const u8 sText_PkmnsItemRestoredHealth[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored\nits health using its\l{B_LAST_ITEM}!"); +static const u8 sText_PkmnsItemRestoredPP[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored PP\nto its move {B_BUFF1} using its\l{B_LAST_ITEM}!"); +static const u8 sText_PkmnsItemRestoredStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} returned\nits stats to normal using its\l{B_LAST_ITEM}!"); +static const u8 sText_PkmnsItemRestoredHPALittle[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored\na little HP using its\l{B_LAST_ITEM}!"); static const u8 sText_ItemAllowsOnlyYMove[] = _("{B_LAST_ITEM} only allows\nthe use of {B_CURRENT_MOVE}!\p"); static const u8 sText_PkmnHungOnWithX[] = _("{B_DEF_NAME_WITH_PREFIX} hung on\nusing its {B_LAST_ITEM}!"); const u8 gText_EmptyString3[] = _(""); @@ -682,8 +682,8 @@ static const u8 sText_HealBlockPreventsUsage[] = _("{B_ATK_NAME_WITH_PREFIX} was static const u8 sText_MegaEvoReacting[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ITEM} is\nreacting to {B_ATK_TRAINER_NAME}'s Mega Ring!"); //actually displays the type of mega ring in inventory, but we didnt implement them :( static const u8 sText_FerventWishReached[] = _("{B_ATK_TRAINER_NAME}'s fervent wish\nhas reached {B_ATK_NAME_WITH_PREFIX2}!"); static const u8 sText_MegaEvoEvolved[] = _("{B_ATK_NAME_WITH_PREFIX} has Mega Evolved into\nMega {B_BUFF1}!"); -static const u8 sText_drastically[] = _("drastically "); -static const u8 sText_severely[] = _("severely "); +const u8 sText_drastically[] = _("drastically "); +const u8 sText_severely[] = _("severely "); static const u8 sText_Infestation[] = _("{B_DEF_NAME_WITH_PREFIX} has been afflicted\nwith an infestation by {B_ATK_NAME_WITH_PREFIX2}!"); static const u8 sText_NoEffectOnTarget[] = _("It won't have any effect\non {B_DEF_NAME_WITH_PREFIX2}!"); static const u8 sText_BurstingFlames[] = _("The bursting flames\nhit {B_SCR_ACTIVE_NAME_WITH_PREFIX2}!"); diff --git a/test/text.c b/test/text.c index 19fa81fb41a0..a7dabf9d8f78 100644 --- a/test/text.c +++ b/test/text.c @@ -6,6 +6,7 @@ #include "battle_setup.h" #include "item.h" #include "malloc.h" +#include "main_menu.h" #include "string_util.h" #include "text.h" #include "constants/abilities.h" @@ -582,7 +583,7 @@ TEST("Battle strings fit on the battle message window") { u32 i, j, strWidth; u32 start = BATTLESTRINGS_TABLE_START; - u32 end = BATTLESTRINGS_TABLE_START + 200; + u32 end = BATTLESTRINGS_TABLE_START + 300; const u32 fontId = FONT_NORMAL, widthPx = 208; u32 battleStringId = 0; u8 battleString[1000] = {0}; @@ -596,6 +597,8 @@ TEST("Battle strings fit on the battle message window") u32 longSpeciesName = SPECIES_SANDY_SHOCKS; // 47 pixels u32 longItemName = ITEM_UNREMARKABLE_TEACUP; + NewGameBirchSpeech_SetDefaultPlayerName(10); // JOHNNY + RUN_OVERWORLD_SCRIPT( givemon SPECIES_WOBBUFFET, 100; createmon 1, 0, SPECIES_WOBBUFFET, 100; @@ -619,6 +622,8 @@ TEST("Battle strings fit on the battle message window") sBattlerAbilities[j] = longAbilityID; } + gTrainerBattleOpponent_A = 1; + // Add "The opposing " prefix to all messages. gBattleTypeFlags |= BATTLE_TYPE_TRAINER; gBattlerAttacker = 1; @@ -635,7 +640,7 @@ TEST("Battle strings fit on the battle message window") switch (battleStringId + BATTLESTRINGS_TABLE_START) { case STRINGID_TRAINER1LOSETEXT: - // Out of scope: testing all trainer lose messages. + // Out of current scope: testing all trainer lose messages. break; case STRINGID_PKMNGAINEDEXP: PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, 0, 0); @@ -665,6 +670,7 @@ TEST("Battle strings fit on the battle message window") case STRINGID_PKMNSKETCHEDMOVE: case STRINGID_PKMNGOTFREE: case STRINGID_PKMNLOSTPPGRUDGE: + case STRINGID_PKMNSITEMRESTOREDPP: PREPARE_MOVE_BUFFER(gBattleTextBuff1, longMoveID); break; case STRINGID_PLAYERGOTMONEY: @@ -689,6 +695,7 @@ TEST("Battle strings fit on the battle message window") break; case STRINGID_STATSWONTINCREASE: case STRINGID_STATSWONTDECREASE: + case STRINGID_PKMNSXPREVENTSYLOSS: StringCopy(gBattleTextBuff1, gStatNamesTable[longStatName]); break; case STRINGID_PKMNCHANGEDTYPE: @@ -696,19 +703,42 @@ TEST("Battle strings fit on the battle message window") PREPARE_TYPE_BUFFER(gBattleTextBuff1, longTypeName); break; case STRINGID_PKMNTRANSFORMEDINTO: + case STRINGID_WILDPKMNFLED: PREPARE_SPECIES_BUFFER(gBattleTextBuff1, longSpeciesName) break; case STRINGID_PKMNATTACK: case STRINGID_PKMNWISHCAMETRUE: PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, 1, 0); break; + case STRINGID_ENEMYABOUTTOSWITCHPKMN: + PREPARE_MON_NICK_BUFFER(gBattleTextBuff2, 1, 0); + break; case STRINGID_PKMNHURTSWITH: + case STRINGID_PKMNCURIOUSABOUTX: + case STRINGID_PKMNENTHRALLEDBYX: + case STRINGID_PKMNIGNOREDX: PREPARE_ITEM_BUFFER(gBattleTextBuff1, longItemName); break; case STRINGID_PKMNTRACED: PREPARE_MON_NICK_WITH_PREFIX_LOWER_BUFFER(gBattleTextBuff1, 1, 0); PREPARE_ABILITY_BUFFER(gBattleTextBuff2, longAbilityID); break; + case STRINGID_ATTACKERSSTATROSE: + case STRINGID_DEFENDERSSTATROSE: + StringCopy(gBattleTextBuff1, gStatNamesTable[longStatName]); + StringCopy(gBattleTextBuff2, sText_drastically); + StringAppend(gBattleTextBuff2, gText_StatRose); + break; + case STRINGID_ATTACKERSSTATFELL: + case STRINGID_DEFENDERSSTATFELL: + StringCopy(gBattleTextBuff1, gStatNamesTable[longStatName]); + StringCopy(gBattleTextBuff2, sText_severely); + StringAppend(gBattleTextBuff2, sText_StatFell); + break; + case STRINGID_PKMNSITEMCUREDPROBLEM: + case STRINGID_PKMNSXCUREDYPROBLEM: + StringCopy(gBattleTextBuff1, gText_Paralysis); + break; default: break; } From 95aa98b549596cdc2c70bc20330eedcd3315050d Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Thu, 10 Oct 2024 16:35:25 -0500 Subject: [PATCH 50/68] Merge tests fix --- src/battle_message.c | 4 +-- test/battle/ability/commander.c | 34 ++++++++++---------- test/battle/move_effect/conversion_2.c | 32 +++++++++--------- test/battle/move_effect_secondary/order_up.c | 8 ++--- 4 files changed, 39 insertions(+), 39 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index 8f28cbafb226..d6459ba5a171 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -534,8 +534,8 @@ static const u8 sText_PkmnHungOnWithX[] = _("{B_DEF_NAME_WITH_PREFIX} hung on\nu const u8 gText_EmptyString3[] = _(""); static const u8 sText_PlayedFluteCatchyTune[] = _("{B_PLAYER_NAME} played the {B_LAST_ITEM}.\pNow, that's a catchy tune!"); static const u8 sText_PlayedThe[] = _("{B_PLAYER_NAME} played the\n{B_LAST_ITEM}."); -static const u8 sText_PkmnHearingFluteAwoke[] = _("The POKéMON hearing the FLUTE\nawoke!"); -static const u8 sText_YouThrowABallNowRight[] = _("You throw a BALL now, right?\nI… I'll do my best!"); +static const u8 sText_PkmnHearingFluteAwoke[] = _("The Pokémon hearing the flute\nawoke!"); +static const u8 sText_YouThrowABallNowRight[] = _("You throw a Ball now, right?\nI… I'll do my best!"); // early declaration of strings static const u8 sText_PkmnIncapableOfPower[]; diff --git a/test/battle/ability/commander.c b/test/battle/ability/commander.c index e6a85b06815a..7eca97dacf91 100644 --- a/test/battle/ability/commander.c +++ b/test/battle/ability/commander.c @@ -51,7 +51,7 @@ DOUBLE_BATTLE_TEST("Commander Tatsugiri avoids moves targetted towards it") ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); - MESSAGE("Foe Wobbuffet's attack missed!"); + MESSAGE("The opposing Wobbuffet's attack missed!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_POUND, opponentRight); } } @@ -71,7 +71,7 @@ DOUBLE_BATTLE_TEST("Commander Tatsugiri will still take residual damage from a f ABILITY_POPUP(opponentLeft, ABILITY_SAND_STREAM); MESSAGE("Dondozo is buffeted by the sandstorm!"); MESSAGE("Tatsugiri is buffeted by the sandstorm!"); - MESSAGE("Foe Wobbuffet is buffeted by the sandstorm!"); + MESSAGE("The opposing Wobbuffet is buffeted by the sandstorm!"); } } @@ -87,7 +87,7 @@ DOUBLE_BATTLE_TEST("Commander Tatsugiri will still take poison damage if while i } SCENE { ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); - MESSAGE("Tatsugiri is hurt by poison!"); + MESSAGE("Tatsugiri was hurt by its poisoning!"); } } @@ -104,7 +104,7 @@ DOUBLE_BATTLE_TEST("Commander Tatsugiri still avoids moves even when the attacke ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); - MESSAGE("Foe Machamp's attack missed!"); + MESSAGE("The opposing Machamp's attack missed!"); } } @@ -122,7 +122,7 @@ DOUBLE_BATTLE_TEST("Commander cannot affect a Dondozo that was previously affect } SCENE { ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); - MESSAGE("Tatsugiri is hurt by poison!"); + MESSAGE("Tatsugiri was hurt by its poisoning!"); NONE_OF { ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); @@ -144,9 +144,9 @@ DOUBLE_BATTLE_TEST("Commander prevents Whirlwind from working against Dondozo or } SCENE { ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); - MESSAGE("Foe Wobbuffet used Whirlwind!"); + MESSAGE("The opposing Wobbuffet used Whirlwind!"); MESSAGE("But it failed!"); - MESSAGE("Foe Wobbuffet used Whirlwind!"); + MESSAGE("The opposing Wobbuffet used Whirlwind!"); MESSAGE("But it failed!"); } } @@ -250,7 +250,7 @@ DOUBLE_BATTLE_TEST("Commander doesn't prevent Imposter from working on a Command ABILITY_POPUP(playerRight, ABILITY_COMMANDER); MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); ABILITY_POPUP(opponentRight, ABILITY_IMPOSTER); - MESSAGE("Foe Ditto transformed into Tatsugiri using Imposter!"); + MESSAGE("The opposing Ditto transformed into Tatsugiri using Imposter!"); } } @@ -270,17 +270,17 @@ DOUBLE_BATTLE_TEST("Commander Tatsugiri is still affected by Perish Song while c ABILITY_POPUP(playerRight, ABILITY_COMMANDER); MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_PERISH_SONG, opponentLeft); - MESSAGE("All affected POKéMON will faint in three turns!"); - MESSAGE("Dondozo's PERISH count fell to 0!"); + MESSAGE("All Pokémon that heard the song will faint in three turns!"); + MESSAGE("Dondozo's perish count fell to 0!"); MESSAGE("Dondozo fainted!"); - MESSAGE("Foe Wobbuffet's PERISH count fell to 0!"); - MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet's perish count fell to 0!"); + MESSAGE("The opposing Wobbuffet fainted!"); NONE_OF { - MESSAGE("Tatsugiri's PERISH count fell to 0!"); + MESSAGE("Tatsugiri's perish count fell to 0!"); MESSAGE("Tatsugiri fainted!"); } - MESSAGE("Foe Wynaut's PERISH count fell to 0!"); - MESSAGE("Foe Wynaut fainted!"); + MESSAGE("The opposing Wynaut's perish count fell to 0!"); + MESSAGE("The opposing Wynaut fainted!"); } } @@ -323,7 +323,7 @@ DOUBLE_BATTLE_TEST("Commander Attacker is kept (Dondozo Left Slot)") MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SURF, opponentLeft); HP_BAR(playerLeft); - MESSAGE("Foe Wobbuffet's attack missed!"); + MESSAGE("The opposing Wobbuffet's attack missed!"); HP_BAR(opponentRight); } } @@ -344,7 +344,7 @@ DOUBLE_BATTLE_TEST("Commander Attacker is kept (Dondozo Right Slot)") ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); - MESSAGE("Foe Wobbuffet's attack missed!"); + MESSAGE("The opposing Wobbuffet's attack missed!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SURF, opponentLeft); HP_BAR(playerRight); HP_BAR(opponentRight); diff --git a/test/battle/move_effect/conversion_2.c b/test/battle/move_effect/conversion_2.c index 6c2d4d7f5430..acd21125c3eb 100644 --- a/test/battle/move_effect/conversion_2.c +++ b/test/battle/move_effect/conversion_2.c @@ -16,8 +16,8 @@ SINGLE_BATTLE_TEST("Conversion 2 randomly changes the type of the user to a type MESSAGE("Wobbuffet used Ominous Wind!"); // turn 1 ONE_OF { - MESSAGE("Foe Wobbuffet transformed into the Normal type!"); - MESSAGE("Foe Wobbuffet transformed into the Dark type!"); + MESSAGE("The opposing Wobbuffet transformed into the Normal type!"); + MESSAGE("The opposing Wobbuffet transformed into the Dark type!"); } } } @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Conversion 2's type change considers Struggle to be Normal t TURN { MOVE(player, MOVE_CONVERSION_2); } } SCENE { // turn 1 - MESSAGE("Foe Wobbuffet used Struggle!"); + MESSAGE("The opposing Wobbuffet used Struggle!"); // turn 2 ONE_OF { MESSAGE("Wobbuffet transformed into the Steel type!"); @@ -56,8 +56,8 @@ SINGLE_BATTLE_TEST("Conversion 2 randomly changes the type of the user to a type MESSAGE("Wobbuffet used Ominous Wind!"); // turn 1 ONE_OF { - MESSAGE("Foe Wobbuffet transformed into the Normal type!"); - MESSAGE("Foe Wobbuffet transformed into the Dark type!"); + MESSAGE("The opposing Wobbuffet transformed into the Normal type!"); + MESSAGE("The opposing Wobbuffet transformed into the Dark type!"); } } } @@ -72,7 +72,7 @@ SINGLE_BATTLE_TEST("Conversion 2's type change considers status moves (Gen 5+)") TURN { MOVE(player, MOVE_CONVERSION_2); } } SCENE { // turn 1 - MESSAGE("Foe Wobbuffet used Curse!"); + MESSAGE("The opposing Wobbuffet used Curse!"); // turn 2 ONE_OF { MESSAGE("Wobbuffet transformed into the Normal type!"); @@ -91,7 +91,7 @@ SINGLE_BATTLE_TEST("Conversion 2's type change considers the type of moves calle TURN { MOVE(player, MOVE_CONVERSION_2); } } SCENE { // turn 1 - MESSAGE("Foe Wobbuffet used Mirror Move!"); + MESSAGE("The opposing Wobbuffet used Mirror Move!"); // turn 2 ONE_OF { MESSAGE("Wobbuffet transformed into the Normal type!"); @@ -110,7 +110,7 @@ SINGLE_BATTLE_TEST("Conversion 2's type change considers dynamic type moves") TURN { MOVE(player, MOVE_CONVERSION_2); } } SCENE { // turn 1 - MESSAGE("Foe Wobbuffet used Weather Ball!"); + MESSAGE("The opposing Wobbuffet used Weather Ball!"); // turn 2 ONE_OF { MESSAGE("Wobbuffet transformed into the Steel type!"); @@ -133,7 +133,7 @@ SINGLE_BATTLE_TEST("Conversion 2's type change considers move types changed by N } SCENE { // turn 1 MESSAGE("Wobbuffet used Electrify!"); - MESSAGE("Foe Wobbuffet used Pound!"); + MESSAGE("The opposing Wobbuffet used Pound!"); // turn 2 ONE_OF { MESSAGE("Wobbuffet transformed into the Ground type!"); @@ -144,9 +144,9 @@ SINGLE_BATTLE_TEST("Conversion 2's type change considers move types changed by N // turn 3 MESSAGE("Wobbuffet used Water Gun!"); ONE_OF { - MESSAGE("Foe Wobbuffet transformed into the Steel type!"); - MESSAGE("Foe Wobbuffet transformed into the Rock type!"); - MESSAGE("Foe Wobbuffet transformed into the Ghost type!"); + MESSAGE("The opposing Wobbuffet transformed into the Steel type!"); + MESSAGE("The opposing Wobbuffet transformed into the Rock type!"); + MESSAGE("The opposing Wobbuffet transformed into the Ghost type!"); } } } @@ -161,7 +161,7 @@ SINGLE_BATTLE_TEST("Conversion 2's type change fails targeting Struggle (Gen 5+) TURN { MOVE(player, MOVE_CONVERSION_2); } } SCENE { // turn 1 - MESSAGE("Foe Wobbuffet used Struggle!"); + MESSAGE("The opposing Wobbuffet used Struggle!"); // turn 2 MESSAGE("Wobbuffet used Conversion 2!"); MESSAGE("But it failed!"); @@ -179,9 +179,9 @@ SINGLE_BATTLE_TEST("Conversion 2 fails if the move used is of typeless damage (G TURN { MOVE(player, MOVE_CONVERSION_2); } } SCENE { // turn 1 - MESSAGE("Foe Entei used Burn Up!"); + MESSAGE("The opposing Entei used Burn Up!"); // turn 2 - MESSAGE("Foe Entei used Revelation Dance!"); + MESSAGE("The opposing Entei used Revelation Dance!"); // turn 3 MESSAGE("Wobbuffet used Conversion 2!"); MESSAGE("But it failed!"); @@ -201,7 +201,7 @@ SINGLE_BATTLE_TEST("Conversion 2 fails if the targeted move is Stellar Type") MESSAGE("Wobbuffet used Tera Blast!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player); // turn 1 - MESSAGE("Foe Wobbuffet used Conversion 2!"); + MESSAGE("The opposing Wobbuffet used Conversion 2!"); MESSAGE("But it failed!"); } } diff --git a/test/battle/move_effect_secondary/order_up.c b/test/battle/move_effect_secondary/order_up.c index ea1980062c00..8d286850a28b 100644 --- a/test/battle/move_effect_secondary/order_up.c +++ b/test/battle/move_effect_secondary/order_up.c @@ -73,7 +73,7 @@ DOUBLE_BATTLE_TEST("Order Up increases a stat based on Tatsugiri's form even if ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); - MESSAGE("Tatsugiri is hurt by poison!"); + MESSAGE("Tatsugiri was hurt by its poisoning!"); MESSAGE("Tatsugiri fainted!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_HAZE, opponentRight); // Remove previous stat boosts ANIMATION(ANIM_TYPE_MOVE, MOVE_ORDER_UP, playerRight); @@ -131,7 +131,7 @@ DOUBLE_BATTLE_TEST("Order Up is boosted by Sheer Force without removing the stat } WHEN { TURN { MOVE(opponentRight, MOVE_ENTRAINMENT, target: playerLeft); MOVE(playerLeft, MOVE_ORDER_UP, target: opponentLeft); } } SCENE { - MESSAGE("Foe Tauros used Entrainment!"); + MESSAGE("The opposing Tauros used Entrainment!"); MESSAGE("Dondozo acquired Sheer Force!"); MESSAGE("Dondozo used Order Up!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); @@ -157,10 +157,10 @@ DOUBLE_BATTLE_TEST("Order Up is always boosted by Sheer Force", s16 damage) MOVE(opponentLeft, move, target: playerLeft); MOVE(playerLeft, MOVE_ORDER_UP, target: opponentRight); } } SCENE { - MESSAGE("Foe Wobbuffet used Haze!"); + MESSAGE("The opposing Wobbuffet used Haze!"); if (move == MOVE_ENTRAINMENT) { - MESSAGE("Foe Tauros used Entrainment!"); + MESSAGE("The opposing Tauros used Entrainment!"); MESSAGE("Dondozo acquired Sheer Force!"); } MESSAGE("Dondozo used Order Up!"); From d8e65712ff38b1acd3836485bcfa0c96ce4ba8b5 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 11 Oct 2024 11:03:10 -0300 Subject: [PATCH 51/68] Fix Zero to Hero text --- src/battle_message.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_message.c b/src/battle_message.c index d6459ba5a171..c15d91c15660 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -848,7 +848,7 @@ static const u8 sText_TargetIsBeingSaltCured[] = _("{B_DEF_NAME_WITH_PREFIX} is static const u8 sText_TargetIsHurtBySaltCure[] = _("{B_DEF_NAME_WITH_PREFIX} is hurt by {B_BUFF1}!"); static const u8 sText_TargetCoveredInStickyCandySyrup[] = _("{B_DEF_NAME_WITH_PREFIX} got covered\nin sticky candy syrup!"); static const u8 sText_PkmnTellChillingReceptionJoke[] = _("{B_ATK_NAME_WITH_PREFIX} is preparing\nto tell a chillingly bad joke!"); -static const u8 sText_ZeroToHeroTransformation[] = _("{B_ATK_NAME_WITH_PREFIX} underwent\na heroic transformation!"); +static const u8 sText_ZeroToHeroTransformation[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} underwent\na heroic transformation!"); static const u8 sText_CommanderActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was swallowed by Dondozo\nand became Dondozo's commander!"); static const u8 sText_TheTwoMovesBecomeOne[] = _("The two moves have become one!\nIt's a combined move!{PAUSE 16}"); static const u8 sText_ARainbowAppearedOnSide[] = _("A rainbow appeared in the sky\non {B_ATK_TEAM2} team's side!"); From 0ae8103db03371b41ab64f390c47b338a33ea269 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 11 Oct 2024 13:53:08 -0300 Subject: [PATCH 52/68] 400th string --- src/battle_message.c | 64 ++++++++++++++++++++++---------------------- test/text.c | 41 ++++++++++++++++++++++++---- 2 files changed, 68 insertions(+), 37 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index c15d91c15660..e57a9b72c3f9 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -76,7 +76,7 @@ static const u8 sText_UseNextPkmn[] = _("Use next Pokémon?"); static const u8 sText_AttackMissed[] = _("{B_ATK_NAME_WITH_PREFIX}'s\nattack missed!"); //this is not in SV for some reason? static const u8 sText_PkmnProtectedItself[] = _("{B_DEF_NAME_WITH_PREFIX}\nprotected itself!"); static const u8 sText_AvoidedDamage[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\ndamage with {B_DEF_ABILITY}!"); //not in gen 5+, ability popup -static const u8 sText_PkmnMakesGroundMiss[] = _("{B_DEF_NAME_WITH_PREFIX} makes Ground-type\nmoves miss with {B_DEF_ABILITY}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnMakesGroundMiss[] = _("{B_DEF_NAME_WITH_PREFIX} makes\nGround-type moves miss with\l{B_DEF_ABILITY}!"); //not in gen 5+, ability popup static const u8 sText_PkmnAvoidedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\nthe attack!"); static const u8 sText_ItDoesntAffect[] = _("It doesn't affect\n{B_DEF_NAME_WITH_PREFIX2}…"); static const u8 sText_AttackerFainted[] = _("{B_ATK_NAME_WITH_PREFIX} fainted!\p"); @@ -92,7 +92,7 @@ static const u8 sText_PlayerWhiteout2[] = _("You were overwhelmed\nby your defea #endif static const u8 sText_PreventsEscape[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} prevents\nescape with {B_SCR_ACTIVE_ABILITY}!\p"); static const u8 sText_CantEscape2[] = _("You couldn't get away!\p"); -static const u8 sText_AttackerCantEscape[] = _("{B_ATK_NAME_WITH_PREFIX} can't escape!"); +static const u8 sText_AttackerCantEscape[] = _("{B_ATK_NAME_WITH_PREFIX}\ncan't escape!"); static const u8 sText_HitXTimes[] = _("The Pokémon was\nhit {B_BUFF1} time(s)!"); //SV has dynamic plural here static const u8 sText_PkmnFellAsleep[] = _("{B_EFF_NAME_WITH_PREFIX}\nfell asleep!"); static const u8 sText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_BUFF1} made\l{B_EFF_NAME_WITH_PREFIX2} sleep!"); //not in gen 5+, ability popup @@ -248,7 +248,7 @@ static const u8 sText_PkmnReadyToHelp[] = _("{B_ATK_NAME_WITH_PREFIX} is ready t static const u8 sText_PkmnSwitchedItems[] = _("{B_ATK_NAME_WITH_PREFIX} switched\nitems with its target!"); static const u8 sText_PkmnObtainedX[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}."); static const u8 sText_PkmnObtainedX2[] = _("{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}."); -static const u8 sText_PkmnObtainedXYObtainedZ[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}.\p{B_DEF_NAME_WITH_PREFIX2} obtained\n{B_BUFF2}."); +static const u8 sText_PkmnObtainedXYObtainedZ[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}.\p{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}."); static const u8 sText_PkmnCopiedFoe[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX2}'s Ability!"); static const u8 sText_PkmnMadeWish[] = _("{B_ATK_NAME_WITH_PREFIX} made a wish!"); //unused static const u8 sText_PkmnWishCameTrue[] = _("{B_BUFF1}'s wish\ncame true!"); @@ -287,7 +287,7 @@ static const u8 sText_PkmnRaisedSpeed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n static const u8 sText_PkmnProtectedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was\nprotected by {B_DEF_ABILITY}!"); //not in gen 5+, ability popup static const u8 sText_PkmnPreventsUsage[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} prevents\l{B_ATK_NAME_WITH_PREFIX2} from\lusing {B_CURRENT_MOVE}!"); //I don't see this in SV text static const u8 sText_PkmnRestoredHPUsing[] = _("{B_DEF_NAME_WITH_PREFIX} restored HP\nusing its {B_DEF_ABILITY}!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXMadeYUseless[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} useless!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXMadeYUseless[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} useless!"); //not in gen 5+, ability popup static const u8 sText_PkmnChangedTypeWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} made it the\l{B_BUFF1} type!"); //not in gen 5+, ability popup static const u8 sText_PkmnPreventsParalysisWith[] = _("{B_EFF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} prevents paralysis!"); //not in gen 5+, ability popup static const u8 sText_PkmnPreventsRomanceWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} prevents romance!"); //not in gen 5+, ability popup @@ -301,32 +301,32 @@ static const u8 sText_PkmnHurtsWith[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt by\ static const u8 sText_PkmnTraced[] = _("It traced {B_BUFF1}'s\n{B_BUFF2}!"); static const u8 sText_PkmnsXPreventsBurns[] = _("{B_EFF_NAME_WITH_PREFIX}'s\n{B_EFF_ABILITY} prevents burns!"); //not in gen 5+, ability popup static const u8 sText_PkmnsXBlocksY[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} blocks\l{B_CURRENT_MOVE}!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXBlocksY2[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nblocks {B_CURRENT_MOVE}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXBlocksY2[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} blocks\l{B_CURRENT_MOVE}!"); //not in gen 5+, ability popup static const u8 sText_PkmnsXRestoredHPALittle2[] = _("{B_ATK_NAME_WITH_PREFIX}'s\n{B_ATK_ABILITY} restored its HP\la little!"); //not in gen 5+, ability popup static const u8 sText_PkmnsXWhippedUpSandstorm[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} whipped up\la sandstorm!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXIntensifiedSun[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nintensified the sun's rays!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXIntensifiedSun[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} intensified\lthe sun's rays!"); //not in gen 5+, ability popup static const u8 sText_PkmnsXPreventsYLoss[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} prevents\l{B_BUFF1} loss!"); //not in gen 5+, ability popup static const u8 sText_PkmnsXInfatuatedY[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} infatuated\l{B_ATK_NAME_WITH_PREFIX2}!"); //not in gen 5+, ability popup static const u8 sText_PkmnsXMadeYIneffective[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} made\l{B_CURRENT_MOVE} ineffective!"); //not in gen 5+, ability popup static const u8 sText_PkmnsXCuredYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} cured\lits {B_BUFF1} problem!"); //not in gen 5+, ability popup static const u8 sText_ItSuckedLiquidOoze[] = _("{B_ATK_NAME_WITH_PREFIX} sucked up\nthe liquid ooze!"); -static const u8 sText_PkmnTransformed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} transformed!"); -static const u8 sText_PkmnsXTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\ntook the attack!"); //In gen 5+ but without naming the ability +static const u8 sText_PkmnTransformed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}\ntransformed!"); +static const u8 sText_PkmnsXTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} took the attack!"); //In gen 5+ but without naming the ability const u8 gText_PkmnsXPreventsSwitching[] = _("{B_BUFF1} is preventing switching out\nwith its {B_LAST_ABILITY} Ability!\p"); -static const u8 sText_PreventedFromWorking[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevented {B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s\l{B_BUFF1} from working!"); //unused -static const u8 sText_PkmnsXMadeItIneffective[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nmade it ineffective!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXPreventsFlinching[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY}\nprevents flinching!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXPreventsYsZ[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX2}'s\l{B_DEF_ABILITY} from working!"); +static const u8 sText_PreventedFromWorking[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} prevented\l{B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s\l{B_BUFF1} from working!"); //unused +static const u8 sText_PkmnsXMadeItIneffective[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} made it ineffective!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXPreventsFlinching[] = _("{B_EFF_NAME_WITH_PREFIX}'s\n{B_EFF_ABILITY} prevents flinching!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXPreventsYsZ[] = _("{B_ATK_NAME_WITH_PREFIX}'s\n{B_ATK_ABILITY} prevents\l{B_DEF_NAME_WITH_PREFIX2}'s\l{B_DEF_ABILITY} from working!"); static const u8 sText_PkmnsAbilityPreventsAbility[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX2}'s\l{B_DEF_ABILITY} from working!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXCuredItsYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXHadNoEffectOnY[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nhad no effect on {B_EFF_NAME_WITH_PREFIX2}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXCuredItsYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} cured its\l{B_BUFF1} problem!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXHadNoEffectOnY[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} had no effect on\l{B_EFF_NAME_WITH_PREFIX2}!"); //not in gen 5+, ability popup const u8 gText_StatSharply[] = _("sharply "); const u8 gText_StatRose[] = _("rose!"); static const u8 sText_StatHarshly[] = _("harshly "); const u8 sText_StatFell[] = _("fell!"); static const u8 sText_AttackersStatRose[] = _("{B_ATK_NAME_WITH_PREFIX}'s\n{B_BUFF1} {B_BUFF2}"); const u8 gText_DefendersStatRose[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_BUFF1} {B_BUFF2}"); -static const u8 sText_UsingItemTheStatOfPkmnRose[] = _("Using {B_LAST_ITEM}, the {B_BUFF1}\nof {B_SCR_ACTIVE_NAME_WITH_PREFIX2} {B_BUFF2}"); //todo: update this, will require code changes +static const u8 sText_UsingItemTheStatOfPkmnRose[] = _("Using {B_LAST_ITEM}, the\n{B_BUFF1} of\l{B_SCR_ACTIVE_NAME_WITH_PREFIX2}\n{B_BUFF2}"); //todo: update this, will require code changes static const u8 sText_AttackersStatFell[] = _("{B_ATK_NAME_WITH_PREFIX}'s\n{B_BUFF1} {B_BUFF2}"); static const u8 sText_DefendersStatFell[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_BUFF1} {B_BUFF2}"); static const u8 sText_StatsWontIncrease2[] = _("{B_ATK_NAME_WITH_PREFIX}'s stats\nwon't go any higher!"); @@ -524,7 +524,7 @@ static const u8 sText_PkmnsItemDefrostedIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX static const u8 sText_PkmnsItemWokeIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_LAST_ITEM} woke it up!"); static const u8 sText_PkmnsItemSnappedOut[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_LAST_ITEM} snapped it\lout of its confusion!"); static const u8 sText_PkmnsItemCuredProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_LAST_ITEM} cured\lits {B_BUFF1} problem!"); -static const u8 sText_PkmnsItemNormalizedStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nnormalized its status!"); +static const u8 sText_PkmnsItemNormalizedStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_LAST_ITEM}\lnormalized its status!"); static const u8 sText_PkmnsItemRestoredHealth[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored\nits health using its\l{B_LAST_ITEM}!"); static const u8 sText_PkmnsItemRestoredPP[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored PP\nto its move {B_BUFF1} using its\l{B_LAST_ITEM}!"); static const u8 sText_PkmnsItemRestoredStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} returned\nits stats to normal using its\l{B_LAST_ITEM}!"); @@ -555,11 +555,11 @@ static const u8 sText_Trainer2LoseText[]; // New battle strings. static const u8 sText_EnduredViaSturdy[] = _("{B_DEF_NAME_WITH_PREFIX} endured\nthe hit using {B_DEF_ABILITY}!"); -static const u8 sText_PowerHerbActivation[] = _("{B_ATK_NAME_WITH_PREFIX} became fully charged\ndue to its {B_LAST_ITEM}!"); +static const u8 sText_PowerHerbActivation[] = _("{B_ATK_NAME_WITH_PREFIX} became\nfully charged due to its\l{B_LAST_ITEM}!"); static const u8 sText_HurtByItem[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby the {B_LAST_ITEM}!"); static const u8 sText_BadlyPoisonedByItem[] = _("{B_EFF_NAME_WITH_PREFIX} was badly\npoisoned by the {B_LAST_ITEM}!"); static const u8 sText_BurnedByItem[] = _("{B_EFF_NAME_WITH_PREFIX} was burned\nby the {B_LAST_ITEM}!"); -static const u8 sText_TargetAbilityActivates[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} activates!"); +static const u8 sText_TargetAbilityActivates[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} activates!"); static const u8 sText_GravityIntensified[] = _("Gravity intensified!"); static const u8 sText_TargetIdentified[] = _("{B_DEF_NAME_WITH_PREFIX} was\nidentified!"); static const u8 sText_TargetWokeUp[] = _("{B_DEF_NAME_WITH_PREFIX} woke up!"); @@ -568,21 +568,21 @@ static const u8 sText_TailWindBlew[] = _("The Tailwind blew from\nbehind {B_ATK_ static const u8 sText_PkmnWentBack[] = _("{B_ATK_NAME_WITH_PREFIX} went back\nto {B_ATK_TRAINER_NAME}!"); static const u8 sText_PkmnCantUseItemsAnymore[] = _("{B_DEF_NAME_WITH_PREFIX} can't use\nitems anymore!"); static const u8 sText_PkmnFlung[] = _("{B_ATK_NAME_WITH_PREFIX} flung its\n{B_LAST_ITEM}!"); -static const u8 sText_PkmnPreventedFromHealing[] = _("{B_DEF_NAME_WITH_PREFIX} was prevented\nfrom healing!"); -static const u8 sText_PkmnSwitchedAtkAndDef[] = _("{B_ATK_NAME_WITH_PREFIX} switched its\nAttack and Defense!"); +static const u8 sText_PkmnPreventedFromHealing[] = _("{B_DEF_NAME_WITH_PREFIX} was\nprevented from healing!"); +static const u8 sText_PkmnSwitchedAtkAndDef[] = _("{B_ATK_NAME_WITH_PREFIX} switched\nits Attack and Defense!"); static const u8 sText_PkmnsAbilitySuppressed[] = _("{B_DEF_NAME_WITH_PREFIX}'s Ability\nwas suppressed!"); -static const u8 sText_ShieldedFromCriticalHits[] = _("Lucky Chant shielded {B_ATK_TEAM2} team from critical hits!"); -static const u8 sText_SwitchedAtkAndSpAtk[] = _("{B_ATK_NAME_WITH_PREFIX} switched all changes\nto its Attack and Sp. Atk\pwith its target!"); -static const u8 sText_SwitchedDefAndSpDef[] = _("{B_ATK_NAME_WITH_PREFIX} switched all changes\nto its Defense and Sp. Def\pwith its target!"); +static const u8 sText_ShieldedFromCriticalHits[] = _("Lucky Chant shielded {B_ATK_TEAM2} team\nfrom critical hits!"); +static const u8 sText_SwitchedAtkAndSpAtk[] = _("{B_ATK_NAME_WITH_PREFIX} switched all\nchanges to its Attack and Sp. Atk\pwith its target!"); +static const u8 sText_SwitchedDefAndSpDef[] = _("{B_ATK_NAME_WITH_PREFIX} switched all\nchanges to its Defense and Sp. Def\pwith its target!"); static const u8 sText_PkmnAcquiredAbility[] = _("{B_DEF_NAME_WITH_PREFIX} acquired\n{B_DEF_ABILITY}!"); -static const u8 sText_PoisonSpikesScattered[] = _("Poison spikes were scattered on the ground\nall around {B_DEF_TEAM2} team!"); -static const u8 sText_PkmnSwitchedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} switched stat changes\nwith its target!"); -static const u8 sText_PkmnSurroundedWithVeilOfWater[] = _("{B_ATK_NAME_WITH_PREFIX} surrounded itself\nwith a veil of water!"); +static const u8 sText_PoisonSpikesScattered[] = _("Poison spikes were scattered on the\nground all around {B_DEF_TEAM2} team!"); +static const u8 sText_PkmnSwitchedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} switched\nstat changes with its target!"); +static const u8 sText_PkmnSurroundedWithVeilOfWater[] = _("{B_ATK_NAME_WITH_PREFIX} surrounded\nitself with a veil of water!"); static const u8 sText_PkmnLevitatedOnElectromagnetism[] = _("{B_ATK_NAME_WITH_PREFIX} levitated\nwith electromagnetism!"); static const u8 sText_PkmnTwistedDimensions[] = _("{B_ATK_NAME_WITH_PREFIX} twisted\nthe dimensions!"); static const u8 sText_DimensionsWereTwisted[] = _("The dimensions were\ntwisted!"); static const u8 sText_PointedStonesFloat[] =_("Pointed stones float in the air\naround {B_DEF_TEAM2} team!"); -static const u8 sText_CloakedInMysticalMoonlight[] =_("{B_ATK_NAME_WITH_PREFIX} became cloaked\nin mystical moonlight!"); +static const u8 sText_CloakedInMysticalMoonlight[] =_("{B_ATK_NAME_WITH_PREFIX} became\ncloaked in mystical moonlight!"); static const u8 sText_TrappedBySwirlingMagma[] =_("{B_DEF_NAME_WITH_PREFIX} became\ntrapped by swirling magma!"); static const u8 sText_VanishedInstantly[] =_("{B_ATK_NAME_WITH_PREFIX} vanished\ninstantly!"); static const u8 sText_ProtectedTeam[] =_("{B_CURRENT_MOVE} protected\n{B_ATK_TEAM2} team!"); @@ -2188,11 +2188,11 @@ static const u8 sText_TwoTrainersWantToBattle[] = _("You are challenged by\n{B_T static const u8 sText_InGamePartnerSentOutZGoN[] = _("{B_PARTNER_CLASS} {B_PARTNER_NAME} sent\nout {B_PLAYER_MON2_NAME}!\lGo, {B_PLAYER_MON1_NAME}!"); static const u8 sText_TwoInGameTrainersDefeated[] = _("You defeated\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\land {B_TRAINER2_CLASS} {B_TRAINER2_NAME}!\p"); static const u8 sText_Trainer2LoseText[] = _("{B_TRAINER2_LOSE_TEXT}"); -static const u8 sText_PkmnIncapableOfPower[] = _("{B_ATK_NAME_WITH_PREFIX} appears incapable\nof using its power!"); -static const u8 sText_GlintAppearsInEye[] = _("A glint appears in\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s eyes!"); -static const u8 sText_PkmnGettingIntoPosition[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is getting into\nposition!"); -static const u8 sText_PkmnBeganGrowlingDeeply[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} began growling deeply!"); -static const u8 sText_PkmnEagerForMore[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is eager for more!"); +static const u8 sText_PkmnIncapableOfPower[] = _("{B_ATK_NAME_WITH_PREFIX} appears\nincapable of using its power!"); +static const u8 sText_GlintAppearsInEye[] = _("A glint appears in\n{B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s eyes!"); +static const u8 sText_PkmnGettingIntoPosition[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is getting\ninto position!"); +static const u8 sText_PkmnBeganGrowlingDeeply[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} began\ngrowling deeply!"); +static const u8 sText_PkmnEagerForMore[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is eager\nfor more!"); const u16 gBattlePalaceFlavorTextTable[] = { diff --git a/test/text.c b/test/text.c index a7dabf9d8f78..111ff723622e 100644 --- a/test/text.c +++ b/test/text.c @@ -25,6 +25,7 @@ TEST("Move names fit on Pokemon Summary Screen") { PARAMETRIZE_LABEL("%S", gMovesInfo[i].name) { move = i; } } + //DebugPrintf("Move %d: %S", GetStringWidth(fontId, gMovesInfo[move].name, 0), gMovesInfo[move].name); EXPECT_LE(GetStringWidth(fontId, gMovesInfo[move].name, 0), widthPx); } @@ -98,6 +99,7 @@ TEST("Item names fit on Bag Screen (list)") { PARAMETRIZE_LABEL("%S", gItemsInfo[i].name) { item = i; } } + //DebugPrintf("Item %d: %S", GetStringWidth(fontId, gItemsInfo[item].name, 0), gItemsInfo[item].name); if (gItemsInfo[item].pocket == POCKET_TM_HM || gItemsInfo[item].pocket == POCKET_BERRIES) EXPECT_LE(GetStringWidth(fontId, gItemsInfo[item].name, 0), tmHmBerryWidthPx); else @@ -583,19 +585,20 @@ TEST("Battle strings fit on the battle message window") { u32 i, j, strWidth; u32 start = BATTLESTRINGS_TABLE_START; - u32 end = BATTLESTRINGS_TABLE_START + 300; + u32 end = BATTLESTRINGS_TABLE_START + 400; const u32 fontId = FONT_NORMAL, widthPx = 208; u32 battleStringId = 0; u8 battleString[1000] = {0}; s32 sixDigitNines = 999999; u8 nickname[POKEMON_NAME_LENGTH + 1] = _("MMMMMMMMMMMM"); - u32 longMoveID = MOVE_STOMPING_TANTRUM; + u32 longMoveID = MOVE_NATURES_MADNESS; // 64 pixels. u32 longAbilityID = ABILITY_SUPERSWEET_SYRUP; // 91 pixels. u32 longStatName = STAT_EVASION; u32 longTypeName = TYPE_ELECTRIC; u32 longSpeciesName = SPECIES_SANDY_SHOCKS; // 47 pixels - u32 longItemName = ITEM_UNREMARKABLE_TEACUP; + u32 longItemName = ITEM_UNREMARKABLE_TEACUP; // 73 pixels + u8 boxName[9] = _("MMMMMMMM"); NewGameBirchSpeech_SetDefaultPlayerName(10); // JOHNNY @@ -613,6 +616,10 @@ TEST("Battle strings fit on the battle message window") PREPARE_STRING_BUFFER(gBattleTextBuff1, STRINGID_EMPTYSTRING3); PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_EMPTYSTRING3); PREPARE_STRING_BUFFER(gBattleTextBuff3, STRINGID_EMPTYSTRING3); + *gStringVar1 = EOS; + *gStringVar2 = EOS; + *gStringVar3 = EOS; + gBattlerPositions[0] = B_POSITION_PLAYER_LEFT; gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT; gBattlerPositions[2] = B_POSITION_PLAYER_RIGHT; @@ -623,6 +630,7 @@ TEST("Battle strings fit on the battle message window") } gTrainerBattleOpponent_A = 1; + gTrainerBattleOpponent_B = 1; // Add "The opposing " prefix to all messages. gBattleTypeFlags |= BATTLE_TYPE_TRAINER; @@ -640,7 +648,10 @@ TEST("Battle strings fit on the battle message window") switch (battleStringId + BATTLESTRINGS_TABLE_START) { case STRINGID_TRAINER1LOSETEXT: - // Out of current scope: testing all trainer lose messages. + case STRINGID_TRAINER2LOSETEXT: + case STRINGID_TRAINER1WINTEXT: + case STRINGID_TRAINER2WINTEXT: + // Out of current scope: testing all trainer messages. break; case STRINGID_PKMNGAINEDEXP: PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, 0, 0); @@ -671,6 +682,7 @@ TEST("Battle strings fit on the battle message window") case STRINGID_PKMNGOTFREE: case STRINGID_PKMNLOSTPPGRUDGE: case STRINGID_PKMNSITEMRESTOREDPP: + case STRINGID_PKMNSXWOREOFF: PREPARE_MOVE_BUFFER(gBattleTextBuff1, longMoveID); break; case STRINGID_PLAYERGOTMONEY: @@ -717,14 +729,24 @@ TEST("Battle strings fit on the battle message window") case STRINGID_PKMNCURIOUSABOUTX: case STRINGID_PKMNENTHRALLEDBYX: case STRINGID_PKMNIGNOREDX: + case STRINGID_PREVENTEDFROMWORKING: + case STRINGID_PKMNOBTAINEDX: PREPARE_ITEM_BUFFER(gBattleTextBuff1, longItemName); break; + case STRINGID_PKMNOBTAINEDX2: + PREPARE_ITEM_BUFFER(gBattleTextBuff2, longItemName); + break; + case STRINGID_PKMNOBTAINEDXYOBTAINEDZ: + PREPARE_ITEM_BUFFER(gBattleTextBuff1, longItemName); + PREPARE_ITEM_BUFFER(gBattleTextBuff2, longItemName); + break; case STRINGID_PKMNTRACED: PREPARE_MON_NICK_WITH_PREFIX_LOWER_BUFFER(gBattleTextBuff1, 1, 0); PREPARE_ABILITY_BUFFER(gBattleTextBuff2, longAbilityID); break; case STRINGID_ATTACKERSSTATROSE: case STRINGID_DEFENDERSSTATROSE: + case STRINGID_USINGITEMSTATOFPKMNROSE: StringCopy(gBattleTextBuff1, gStatNamesTable[longStatName]); StringCopy(gBattleTextBuff2, sText_drastically); StringAppend(gBattleTextBuff2, gText_StatRose); @@ -737,7 +759,16 @@ TEST("Battle strings fit on the battle message window") break; case STRINGID_PKMNSITEMCUREDPROBLEM: case STRINGID_PKMNSXCUREDYPROBLEM: - StringCopy(gBattleTextBuff1, gText_Paralysis); + case STRINGID_PKMNSXCUREDITSYPROBLEM: + StringCopy(gBattleTextBuff1, gText_Confusion); + break; + case STRINGID_PKMNTRANSFERREDSOMEONESPC: + case STRINGID_PKMNTRANSFERREDLANETTESPC: + case STRINGID_PKMNBOXSOMEONESPCFULL: + case STRINGID_PKMNBOXLANETTESPCFULL: + StringCopy(gStringVar1, boxName); + StringCopy(gStringVar2, nickname); + StringCopy(gStringVar3, boxName); break; default: break; From 2a7c40a2390185b2832fd5268a96e3c0a7fd375f Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 15 Oct 2024 15:26:03 -0300 Subject: [PATCH 53/68] Initial version of dynamic texts (doesn't handle placeholders well yet) --- gflib/text.c | 22 +++++++++++++----- gflib/text.h | 3 +++ include/battle_message.h | 3 ++- src/battle_message.c | 45 +++++++++++++++++++++++++++++++++--- src/pokemon.c | 2 +- test/battle/terrain/grassy.c | 9 +++++--- test/text.c | 17 +++++++------- 7 files changed, 79 insertions(+), 22 deletions(-) diff --git a/gflib/text.c b/gflib/text.c index b2c7d98e15b9..b83a19453eb8 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -1598,16 +1598,27 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) s32 GetStringLineWidth(u8 fontId, const u8 *str, s16 letterSpacing, u32 lineNum) { u32 strWidth = 0, strLen, currLine; + + for (currLine = 1; currLine <= lineNum; currLine++) + { + strWidth = GetStringWidth(fontId, str, letterSpacing); + strLen = StringLineLength(str); + str += strLen + 1; + } + return strWidth; +} + #ifndef NDEBUG - u8 strCopy[300]; -#endif +s32 Debug_PrintStringLine(u8 fontId, const u8 *str, s16 letterSpacing, u32 lineNum, u32 strSize) +{ + u32 strWidth = 0, strLen, currLine; + u8 strCopy[strSize]; for (currLine = 1; currLine <= lineNum; currLine++) { strWidth = GetStringWidth(fontId, str, letterSpacing); strLen = StringLineLength(str); - #ifndef NDEBUG - memset(strCopy, EOS, 300); + memset(strCopy, EOS, strSize); if (currLine == lineNum && strLen != 0) { StringCopyN(strCopy, str, strLen); @@ -1615,13 +1626,12 @@ s32 GetStringLineWidth(u8 fontId, const u8 *str, s16 letterSpacing, u32 lineNum) strLen = StringLineLength(strCopy); StringAppend(strCopy, gText_EmptyString3); DebugPrintf(" Line %d, len:%d, width:%d, \"%S\"", currLine, strLen, strWidth, strCopy); - //DebugPrintf(" width:%d, \"%S\"", strWidth, strCopy); } - #endif str += strLen + 1; } return strWidth; } +#endif u8 RenderTextHandleBold(u8 *pixels, u8 fontId, u8 *str) { diff --git a/gflib/text.h b/gflib/text.h index 1f19bcbe38a3..78651a96e453 100644 --- a/gflib/text.h +++ b/gflib/text.h @@ -159,6 +159,9 @@ bool32 TextPrinterWait(struct TextPrinter *textPrinter); void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool32 drawArrow, u8 *counter, u8 *yCoordIndex); s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing); s32 GetStringLineWidth(u8 fontId, const u8 *str, s16 letterSpacing, u32 lineNum); +#ifndef NDEBUG +s32 Debug_PrintStringLine(u8 fontId, const u8 *str, s16 letterSpacing, u32 lineNum, u32 strSize); +#endif u8 RenderTextHandleBold(u8 *pixels, u8 fontId, u8 *str); u8 DrawKeypadIcon(u8 windowId, u8 keypadIconId, u16 x, u16 y); u8 GetKeypadIconTileOffset(u8 keypadIconId); diff --git a/include/battle_message.h b/include/battle_message.h index d3fcc465fa29..5af31a459ff1 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -9,6 +9,7 @@ max(MOVE_NAME_LENGTH + 2, /* +2 to hold the "!" and EOS. */ \ max(POKEMON_NAME_LENGTH + 1, \ ABILITY_NAME_LENGTH + 1))) +#define BATTLE_MSG_MAX_WIDTH 208 // for 0xFD #define B_TXT_BUFF1 0x0 @@ -257,7 +258,7 @@ enum void BufferStringBattle(u16 stringID, u32 battler); u32 BattleStringExpandPlaceholdersToDisplayedString(const u8 *src); -u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst); +u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize); void BattlePutTextOnWindow(const u8 *text, u8 windowId); void SetPpNumbersPaletteInMoveSelection(u32 battler); u8 GetCurrentPpToMaxPpState(u8 currentPp, u8 maxPp); diff --git a/src/battle_message.c b/src/battle_message.c index e57a9b72c3f9..8c8b7b89193d 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -700,7 +700,7 @@ static const u8 sText_BelchCantUse[] = _("{B_ATK_NAME_WITH_PREFIX} hasn't eaten\ static const u8 sText_SpectralThiefSteal[] = _("{B_ATK_NAME_WITH_PREFIX} stole the target's\nboosted stats!"); static const u8 sText_GravityGrounding[] = _("{B_DEF_NAME_WITH_PREFIX} fell from the sky\ndue to the gravity!"); static const u8 sText_MistyTerrainPreventsStatus[] = _("{B_DEF_NAME_WITH_PREFIX} surrounds itself\nwith a protective mist!"); -static const u8 sText_GrassyTerrainHeals[] = _("{B_ATK_NAME_WITH_PREFIX} is healed\nby the grassy terrain!"); +static const u8 sText_GrassyTerrainHeals[] = _("{B_ATK_NAME_WITH_PREFIX} is healed by the grassy terrain!"); static const u8 sText_ElectricTerrainPreventsSleep[] = _("{B_DEF_NAME_WITH_PREFIX} surrounds itself\nwith electrified terrain!"); static const u8 sText_PsychicTerrainPreventsPriority[] = _("{B_DEF_NAME_WITH_PREFIX} surrounds itself\nwith psychic terrain!"); static const u8 sText_SafetyGogglesProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is not affected\nthanks to its {B_LAST_ITEM}!"); @@ -3092,7 +3092,7 @@ void BufferStringBattle(u16 stringID, u32 battler) u32 BattleStringExpandPlaceholdersToDisplayedString(const u8 *src) { - return BattleStringExpandPlaceholders(src, gDisplayedStringBattle); + return BattleStringExpandPlaceholders(src, gDisplayedStringBattle, sizeof(gDisplayedStringBattle)); } static const u8 *TryGetStatusString(u8 *src) @@ -3313,22 +3313,53 @@ static const u8 *BattleStringGetOpponentClassByTrainerId(u16 trainerId) // This ensures that custom Enigma Berry names will fit in the text buffer at the top of BattleStringExpandPlaceholders. STATIC_ASSERT(BERRY_NAME_LENGTH + ARRAY_COUNT(sText_BerrySuffix) <= ITEM_NAME_LENGTH, BerryNameTooLong); -u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) +u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) { u32 dstID = 0; // if they used dstID, why not use srcID as well? const u8 *toCpy = NULL; + u32 lastValidSkip = 0; + u32 lastLineBreakID = 0; + u32 toCpyWidth = 0; + u32 dstWidth = 0; // This buffer may hold either the name of a trainer, Pokémon, or item. u8 text[max(max(max(32, TRAINER_NAME_LENGTH + 1), POKEMON_NAME_LENGTH + 1), ITEM_NAME_LENGTH)]; u8 multiplayerId; + u32 strWidth = 0; + u8 fontId = FONT_NORMAL; + s16 letterSpacing = 0; + u32 lineNum = 1; if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK) multiplayerId = gRecordedBattleMultiplayerId; else multiplayerId = GetMultiplayerId(); + // Clear destination first + while (dstID < dstSize) + { + dst[dstID] = EOS; + dstID++; + } + + dstID = 0; + DebugPrintf("BEGIN: src:\"%S\"", src); while (*src != EOS) { toCpy = NULL; + dstWidth = GetStringLineWidth(fontId, dst, letterSpacing, lineNum); + DebugPrintf(" line:%d, dstWidth:%d, strWidth:%d, checkWidth:%d, lastLB:%d, lastSkip:%d, \"%S\"", lineNum, dstWidth, strWidth, dstWidth - strWidth, lastLineBreakID, lastValidSkip, dst); + switch (*src) + { + case CHAR_NEWLINE: + case CHAR_PROMPT_SCROLL: + case CHAR_PROMPT_CLEAR: + lastLineBreakID = dstID; + //fallthrough + case CHAR_SPACE: + lastValidSkip = dstID; + break; + } + if (*src == PLACEHOLDER_BEGIN) { src++; @@ -3719,6 +3750,8 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) if (toCpy != NULL) { + toCpyWidth = GetStringLineWidth(fontId, toCpy, letterSpacing, lineNum); + DebugPrintf(" toCpy width:%d, \"%S\"", toCpyWidth, toCpy); while (*toCpy != EOS) { dst[dstID] = *toCpy; @@ -3739,6 +3772,12 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) else { dst[dstID] = *src; + if (dstWidth > BATTLE_MSG_MAX_WIDTH) + { + dst[lastValidSkip] = lineNum == 1 ? CHAR_NEWLINE : CHAR_PROMPT_SCROLL; + lineNum++; + dstWidth = 0; + } dstID++; } src++; diff --git a/src/pokemon.c b/src/pokemon.c index 84e0688c6b06..df6f6dad27cd 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5923,7 +5923,7 @@ void SetMonPreventsSwitchingString(void) PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff2, gBattlerInMenuId, GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[gBattlerInMenuId])) - BattleStringExpandPlaceholders(gText_PkmnsXPreventsSwitching, gStringVar4); + BattleStringExpandPlaceholders(gText_PkmnsXPreventsSwitching, gStringVar4, sizeof(gStringVar4)); } static s32 GetWildMonTableIdInAlteringCave(u16 species) diff --git a/test/battle/terrain/grassy.c b/test/battle/terrain/grassy.c index d6b1fda69f58..b247933dd2f1 100644 --- a/test/battle/terrain/grassy.c +++ b/test/battle/terrain/grassy.c @@ -5,13 +5,16 @@ SINGLE_BATTLE_TEST("Grassy Terrain recovers 1/16th HP at end of turn") { GIVEN { PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(1); } - OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { MaxHP(100); HP(1); }; } WHEN { TURN { MOVE(player, MOVE_GRASSY_TERRAIN); } } SCENE { - s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + s32 maxHPPlayer = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + s32 maxHPOpponent = GetMonData(&OPPONENT_PARTY[0], MON_DATA_MAX_HP); MESSAGE("Wobbuffet is healed by the grassy terrain!"); - HP_BAR(player, damage: -maxHP / 16); + HP_BAR(player, damage: -maxHPPlayer / 16); + MESSAGE("The opposing Wobbuffet is healed by the grassy terrain!"); + HP_BAR(opponent, damage: -maxHPOpponent / 16); } } diff --git a/test/text.c b/test/text.c index 111ff723622e..c9c8849906fc 100644 --- a/test/text.c +++ b/test/text.c @@ -584,8 +584,10 @@ extern u16 sBattlerAbilities[MAX_BATTLERS_COUNT]; TEST("Battle strings fit on the battle message window") { u32 i, j, strWidth; - u32 start = BATTLESTRINGS_TABLE_START; - u32 end = BATTLESTRINGS_TABLE_START + 400; + //u32 start = BATTLESTRINGS_TABLE_START + 401; + //u32 end = BATTLESTRINGS_TABLE_START + 500; + u32 start = STRINGID_GRASSYTERRAINHEALS; + u32 end = STRINGID_GRASSYTERRAINHEALS; const u32 fontId = FONT_NORMAL, widthPx = 208; u32 battleStringId = 0; u8 battleString[1000] = {0}; @@ -634,10 +636,7 @@ TEST("Battle strings fit on the battle message window") // Add "The opposing " prefix to all messages. gBattleTypeFlags |= BATTLE_TYPE_TRAINER; - gBattlerAttacker = 1; - gBattlerTarget = 1; - gBattleScripting.battler = 1; - gEffectBattler = 1; + gBattlerAttacker = gBattlerTarget = gBattleScripting.battler = gEffectBattler = 1; gCurrentMove = longMoveID; gLastUsedItem = longItemName; @@ -773,14 +772,16 @@ TEST("Battle strings fit on the battle message window") default: break; } - memset(battleString, EOS, 1000); - BattleStringExpandPlaceholders(gBattleStringsTable[battleStringId], battleString); + BattleStringExpandPlaceholders(gBattleStringsTable[battleStringId], battleString, sizeof(battleString)); DebugPrintf("Battle String ID %d: %S", battleStringId + BATTLESTRINGS_TABLE_START, battleString); for (j = 1;; j++) { strWidth = GetStringLineWidth(fontId, battleString, 0, j); if (strWidth == 0) break; + #ifndef NDEBUG + Debug_PrintStringLine(fontId, battleString, 0, j, sizeof(battleString)); + #endif EXPECT_LE(strWidth, widthPx); } Free(gBattleMsgDataPtr); From 23cc2b305b8d792e8cdafeb152acec09acb69a2e Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 16 Oct 2024 08:14:23 -0300 Subject: [PATCH 54/68] Fix linebreaks with placeholders --- src/battle_message.c | 30 +++++++++++++++++++----------- test/text.c | 2 +- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index 8c8b7b89193d..fbb444093e83 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -3348,17 +3348,6 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) toCpy = NULL; dstWidth = GetStringLineWidth(fontId, dst, letterSpacing, lineNum); DebugPrintf(" line:%d, dstWidth:%d, strWidth:%d, checkWidth:%d, lastLB:%d, lastSkip:%d, \"%S\"", lineNum, dstWidth, strWidth, dstWidth - strWidth, lastLineBreakID, lastValidSkip, dst); - switch (*src) - { - case CHAR_NEWLINE: - case CHAR_PROMPT_SCROLL: - case CHAR_PROMPT_CLEAR: - lastLineBreakID = dstID; - //fallthrough - case CHAR_SPACE: - lastValidSkip = dstID; - break; - } if (*src == PLACEHOLDER_BEGIN) { @@ -3752,6 +3741,12 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) { toCpyWidth = GetStringLineWidth(fontId, toCpy, letterSpacing, lineNum); DebugPrintf(" toCpy width:%d, \"%S\"", toCpyWidth, toCpy); + if (dstWidth + toCpyWidth > BATTLE_MSG_MAX_WIDTH) + { + dst[lastValidSkip] = lineNum == 1 ? CHAR_NEWLINE : CHAR_PROMPT_SCROLL; + dstWidth = GetStringLineWidth(fontId, dst, letterSpacing, lineNum); + lineNum++; + } while (*toCpy != EOS) { dst[dstID] = *toCpy; @@ -3778,6 +3773,19 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) lineNum++; dstWidth = 0; } + switch (*src) + { + case CHAR_NEWLINE: + case CHAR_PROMPT_SCROLL: + case CHAR_PROMPT_CLEAR: + lastLineBreakID = dstID; + lineNum++; + dstWidth = 0; + //fallthrough + case CHAR_SPACE: + lastValidSkip = dstID; + break; + } dstID++; } src++; diff --git a/test/text.c b/test/text.c index c9c8849906fc..46c1cebe8381 100644 --- a/test/text.c +++ b/test/text.c @@ -594,7 +594,7 @@ TEST("Battle strings fit on the battle message window") s32 sixDigitNines = 999999; u8 nickname[POKEMON_NAME_LENGTH + 1] = _("MMMMMMMMMMMM"); - u32 longMoveID = MOVE_NATURES_MADNESS; // 64 pixels. + u32 longMoveID = MOVE_NATURES_MADNESS; // 89 pixels. u32 longAbilityID = ABILITY_SUPERSWEET_SYRUP; // 91 pixels. u32 longStatName = STAT_EVASION; u32 longTypeName = TYPE_ELECTRIC; From 469496fddf6c66f243f1290d666d5dfdcaa914dd Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Wed, 16 Oct 2024 12:37:41 -0500 Subject: [PATCH 55/68] Upcoming merge and fix tests --- src/battle_message.c | 4 ++-- test/battle/ability/contrary.c | 6 +++--- test/battle/ability/costar.c | 4 ++-- test/battle/move_effect/belly_drum.c | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index 1eac22299b41..60bd407aee57 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -658,7 +658,7 @@ static const u8 sText_HealingWishCameTrue[] = _("The healing wish came true\nfor static const u8 sText_HealingWishHealed[] = _("{B_ATK_NAME_WITH_PREFIX} regained health!"); static const u8 sText_LunarDanceCameTrue[] = _("{B_ATK_NAME_WITH_PREFIX} became cloaked\nin mystical moonlight!"); static const u8 sText_CursedBodyDisabled[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} was disabled\nby {B_DEF_NAME_WITH_PREFIX2}'s {B_DEF_ABILITY}!"); -static const u8 sText_AttackerAcquiredAbility[] = _("{B_ATK_NAME_WITH_PREFIX} acquired\n{B_LAST_ABILITY}!"); +static const u8 sText_AttackerAcquiredAbility[] = _("{B_ATK_NAME_WITH_PREFIX} acquired\n{B_ATK_ABILITY}!"); static const u8 sText_TargetStatWontGoHigher[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\nwon't go any higher!"); static const u8 sText_PkmnMoveBouncedViaAbility[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE} was\nbounced back by {B_DEF_NAME_WITH_PREFIX2}'s\l{B_DEF_ABILITY}!"); static const u8 sText_ImposterTransform[] = _("{B_ATK_NAME_WITH_PREFIX} transformed into\n{B_DEF_NAME_WITH_PREFIX2} using {B_LAST_ABILITY}!"); @@ -848,7 +848,7 @@ static const u8 sText_TargetIsBeingSaltCured[] = _("{B_DEF_NAME_WITH_PREFIX} is static const u8 sText_TargetIsHurtBySaltCure[] = _("{B_DEF_NAME_WITH_PREFIX} is hurt by {B_BUFF1}!"); static const u8 sText_TargetCoveredInStickyCandySyrup[] = _("{B_DEF_NAME_WITH_PREFIX} got covered\nin sticky candy syrup!"); static const u8 sText_PkmnTellChillingReceptionJoke[] = _("{B_ATK_NAME_WITH_PREFIX} is preparing\nto tell a chillingly bad joke!"); -static const u8 sText_ZeroToHeroTransformation[] = _("{B_ATK_NAME_WITH_PREFIX} underwent\na heroic transformation!"); +static const u8 sText_ZeroToHeroTransformation[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} underwent\na heroic transformation!"); static const u8 sText_CommanderActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was swallowed by Dondozo\nand became Dondozo's commander!"); static const u8 sText_TheTwoMovesBecomeOne[] = _("The two moves have become one!\nIt's a combined move!{PAUSE 16}"); static const u8 sText_ARainbowAppearedOnSide[] = _("A rainbow appeared in the sky\non {B_ATK_TEAM2} team's side!"); diff --git a/test/battle/ability/contrary.c b/test/battle/ability/contrary.c index f666fed8eda8..5e44b12b48ce 100644 --- a/test/battle/ability/contrary.c +++ b/test/battle/ability/contrary.c @@ -234,10 +234,10 @@ SINGLE_BATTLE_TEST("Sticky Web raises Speed by 1 for Contrary mon on switch-in") TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); - MESSAGE("A sticky web spreads out on the ground around the opposing team!"); + MESSAGE("A sticky web has been laid out on the ground around the opposing team!"); MESSAGE("2 sent out Snivy!"); - MESSAGE("Foe Snivy was caught in a Sticky Web!"); + MESSAGE("The opposing Snivy was caught in a sticky web!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); - MESSAGE("Foe Snivy's Speed rose!"); + MESSAGE("The opposing Snivy's Speed rose!"); } } diff --git a/test/battle/ability/costar.c b/test/battle/ability/costar.c index c42871bb45b2..7107b00d61a7 100644 --- a/test/battle/ability/costar.c +++ b/test/battle/ability/costar.c @@ -14,12 +14,12 @@ DOUBLE_BATTLE_TEST("Costar copies an ally's stat stages upon entering battle") TURN { SWITCH(opponentRight, 2); MOVE(playerLeft, MOVE_CELEBRATE); } } SCENE { // Turn 1 - buff up - MESSAGE("Foe Wobbuffet used Swords Dance!"); + MESSAGE("The opposing Wobbuffet used Swords Dance!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); // Turn 2 - Switch into Flamigo MESSAGE("2 sent out Flamigo!"); ABILITY_POPUP(opponentRight, ABILITY_COSTAR); - MESSAGE("Foe Flamigo copied Foe Wobbuffet's stat changes!"); + MESSAGE("The opposing Flamigo copied the opposing Wobbuffet's stat changes!"); } THEN { EXPECT_EQ(opponentRight->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2); } diff --git a/test/battle/move_effect/belly_drum.c b/test/battle/move_effect/belly_drum.c index 00eca9bbaeef..bfc558a982db 100644 --- a/test/battle/move_effect/belly_drum.c +++ b/test/battle/move_effect/belly_drum.c @@ -121,7 +121,7 @@ SINGLE_BATTLE_TEST("Belly Drum minimizes the user's Attack stat with Contrary", if (raiseAttack) { ANIMATION(ANIM_TYPE_MOVE, MOVE_BELLY_DRUM, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Wobbuffet cut its own HP and maximized ATTACK!"); // Message unaffected by Contrary + MESSAGE("Wobbuffet cut its own HP and maximized its Attack!"); // Message unaffected by Contrary } ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); HP_BAR(opponent, captureDamage: &results[i].damage); From aceab2b94bc821386eafcf4118a5266d9a26ca5f Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 16 Oct 2024 16:13:31 -0300 Subject: [PATCH 56/68] Fixed placeholder replace in lines 2+ --- src/battle_message.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/battle_message.c b/src/battle_message.c index fbb444093e83..e8ab9304fae6 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -3092,7 +3092,20 @@ void BufferStringBattle(u16 stringID, u32 battler) u32 BattleStringExpandPlaceholdersToDisplayedString(const u8 *src) { +#ifndef NDEBUG + u32 j, strWidth; + u32 dstID = BattleStringExpandPlaceholders(src, gDisplayedStringBattle, sizeof(gDisplayedStringBattle)); + for (j = 1;; j++) + { + strWidth = GetStringLineWidth(0, gDisplayedStringBattle, 0, j); + if (strWidth == 0) + break; + Debug_PrintStringLine(0, gDisplayedStringBattle, 0, j, sizeof(gDisplayedStringBattle)); + } + return dstID; +#else return BattleStringExpandPlaceholders(src, gDisplayedStringBattle, sizeof(gDisplayedStringBattle)); +#endif } static const u8 *TryGetStatusString(u8 *src) @@ -3739,7 +3752,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) if (toCpy != NULL) { - toCpyWidth = GetStringLineWidth(fontId, toCpy, letterSpacing, lineNum); + toCpyWidth = GetStringLineWidth(fontId, toCpy, letterSpacing, 1); DebugPrintf(" toCpy width:%d, \"%S\"", toCpyWidth, toCpy); if (dstWidth + toCpyWidth > BATTLE_MSG_MAX_WIDTH) { From f9f689ba0bb9f923dd806ec22b6e65585171ff51 Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Fri, 18 Oct 2024 09:22:58 -0500 Subject: [PATCH 57/68] Update mini_printf.c --- src/mini_printf.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mini_printf.c b/src/mini_printf.c index 57ae3e58b068..c5b1e09bdc56 100644 --- a/src/mini_printf.c +++ b/src/mini_printf.c @@ -37,6 +37,7 @@ #include "gba/defines.h" #include "config/general.h" #include "constants/characters.h" +#include "string_util.h" #ifndef NDEBUG From 27e238e6365e27cc2ce1b45bc35aa4b05500cf7e Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 18 Oct 2024 12:55:09 -0300 Subject: [PATCH 58/68] Better handling of debug text --- include/text.h | 5 +---- src/battle_message.c | 9 ++++----- src/text.c | 20 +++----------------- test/text.c | 5 +---- 4 files changed, 9 insertions(+), 30 deletions(-) diff --git a/include/text.h b/include/text.h index a95315639bb7..9526d267a76a 100644 --- a/include/text.h +++ b/include/text.h @@ -158,10 +158,7 @@ bool32 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter); bool32 TextPrinterWait(struct TextPrinter *textPrinter); void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool32 drawArrow, u8 *counter, u8 *yCoordIndex); s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing); -s32 GetStringLineWidth(u8 fontId, const u8 *str, s16 letterSpacing, u32 lineNum); -#ifndef NDEBUG -s32 Debug_PrintStringLine(u8 fontId, const u8 *str, s16 letterSpacing, u32 lineNum, u32 strSize); -#endif +s32 GetStringLineWidth(u8 fontId, const u8 *str, s16 letterSpacing, u32 lineNum, u32 strSize, bool32 printDebug); u8 RenderTextHandleBold(u8 *pixels, u8 fontId, u8 *str); u8 DrawKeypadIcon(u8 windowId, u8 keypadIconId, u16 x, u16 y); u8 GetKeypadIconTileOffset(u8 keypadIconId); diff --git a/src/battle_message.c b/src/battle_message.c index 6b39f47f5cfa..e13501f09a65 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -3097,10 +3097,9 @@ u32 BattleStringExpandPlaceholdersToDisplayedString(const u8 *src) u32 dstID = BattleStringExpandPlaceholders(src, gDisplayedStringBattle, sizeof(gDisplayedStringBattle)); for (j = 1;; j++) { - strWidth = GetStringLineWidth(0, gDisplayedStringBattle, 0, j); + strWidth = GetStringLineWidth(0, gDisplayedStringBattle, 0, j, sizeof(gDisplayedStringBattle), TRUE); if (strWidth == 0) break; - Debug_PrintStringLine(0, gDisplayedStringBattle, 0, j, sizeof(gDisplayedStringBattle)); } return dstID; #else @@ -3357,7 +3356,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) while (*src != EOS) { toCpy = NULL; - dstWidth = GetStringLineWidth(fontId, dst, letterSpacing, lineNum); + dstWidth = GetStringLineWidth(fontId, dst, letterSpacing, lineNum, dstSize, FALSE); DebugPrintf(" line:%d, dstWidth:%d, lastSkip:%d, \"%S\"", lineNum, dstWidth, lastValidSkip, dst); if (*src == PLACEHOLDER_BEGIN) @@ -3750,12 +3749,12 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) if (toCpy != NULL) { - toCpyWidth = GetStringLineWidth(fontId, toCpy, letterSpacing, 1); + toCpyWidth = GetStringLineWidth(fontId, toCpy, letterSpacing, 1, dstSize, FALSE); DebugPrintf(" toCpy width:%d, \"%S\"", toCpyWidth, toCpy); if (dstWidth + toCpyWidth > BATTLE_MSG_MAX_WIDTH) { dst[lastValidSkip] = lineNum == 1 ? CHAR_NEWLINE : CHAR_PROMPT_SCROLL; - dstWidth = GetStringLineWidth(fontId, dst, letterSpacing, lineNum); + dstWidth = GetStringLineWidth(fontId, dst, letterSpacing, lineNum, dstSize, FALSE); lineNum++; } while (*toCpy != EOS) diff --git a/src/text.c b/src/text.c index cfaf85520285..0a2e0306ef0e 100644 --- a/src/text.c +++ b/src/text.c @@ -1595,21 +1595,7 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) return width; } -s32 GetStringLineWidth(u8 fontId, const u8 *str, s16 letterSpacing, u32 lineNum) -{ - u32 strWidth = 0, strLen, currLine; - - for (currLine = 1; currLine <= lineNum; currLine++) - { - strWidth = GetStringWidth(fontId, str, letterSpacing); - strLen = StringLineLength(str); - str += strLen + 1; - } - return strWidth; -} - -#ifndef NDEBUG -s32 Debug_PrintStringLine(u8 fontId, const u8 *str, s16 letterSpacing, u32 lineNum, u32 strSize) +s32 GetStringLineWidth(u8 fontId, const u8 *str, s16 letterSpacing, u32 lineNum, u32 strSize, bool32 printDebug) { u32 strWidth = 0, strLen, currLine; u8 strCopy[strSize]; @@ -1625,13 +1611,13 @@ s32 Debug_PrintStringLine(u8 fontId, const u8 *str, s16 letterSpacing, u32 lineN strWidth = GetStringWidth(fontId, strCopy, letterSpacing); strLen = StringLineLength(strCopy); StringAppend(strCopy, gText_EmptyString3); - DebugPrintf(" Line %d, len:%d, width:%d, \"%S\"", currLine, strLen, strWidth, strCopy); + if (printDebug && strWidth != 0) + DebugPrintf(" Line %d, len:%d, width:%d, \"%S\"", currLine, strLen, strWidth, strCopy); } str += strLen + 1; } return strWidth; } -#endif u8 RenderTextHandleBold(u8 *pixels, u8 fontId, u8 *str) { diff --git a/test/text.c b/test/text.c index f67c2d1cbca5..b3a52455b8d2 100644 --- a/test/text.c +++ b/test/text.c @@ -827,12 +827,9 @@ TEST("Battle strings fit on the battle message window") DebugPrintf("Battle String ID %d: %S", battleStringId + BATTLESTRINGS_TABLE_START, battleString); for (j = 1;; j++) { - strWidth = GetStringLineWidth(fontId, battleString, 0, j); + strWidth = GetStringLineWidth(fontId, battleString, 0, j, sizeof(battleString), TRUE); if (strWidth == 0) break; - #ifndef NDEBUG - Debug_PrintStringLine(fontId, battleString, 0, j, sizeof(battleString)); - #endif EXPECT_LE(strWidth, widthPx); } Free(gBattleMsgDataPtr); From 3dc3fe46fa386317426509cb387927d7cca2ee69 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 18 Oct 2024 13:54:48 -0300 Subject: [PATCH 59/68] Fixed edge case where the last character of a battle string wouldn't fit the text box --- include/config/general.h | 2 +- include/text.h | 1 + src/battle_message.c | 9 +++++---- src/text.c | 10 ++++++++++ test/text.c | 6 ++---- 5 files changed, 19 insertions(+), 9 deletions(-) diff --git a/include/config/general.h b/include/config/general.h index cff1432bb737..61d5db5c043c 100644 --- a/include/config/general.h +++ b/include/config/general.h @@ -6,7 +6,7 @@ // still has them in the ROM. This is because the developers forgot // to define NDEBUG before release, however this has been changed as // Ruby's actual debug build does not use the AGBPrint features. -#define NDEBUG +//#define NDEBUG // To enable printf debugging, comment out "#define NDEBUG". This allows // the various AGBPrint functions to be used. (See include/gba/isagbprint.h). diff --git a/include/text.h b/include/text.h index 9526d267a76a..1791ae401fa9 100644 --- a/include/text.h +++ b/include/text.h @@ -157,6 +157,7 @@ bool32 TextPrinterWaitAutoMode(struct TextPrinter *textPrinter); bool32 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter); bool32 TextPrinterWait(struct TextPrinter *textPrinter); void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool32 drawArrow, u8 *counter, u8 *yCoordIndex); +s32 GetGlyphWidth(u16 glyphId, bool32 isJapanese, u8 fontId); s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing); s32 GetStringLineWidth(u8 fontId, const u8 *str, s16 letterSpacing, u32 lineNum, u32 strSize, bool32 printDebug); u8 RenderTextHandleBold(u8 *pixels, u8 fontId, u8 *str); diff --git a/src/battle_message.c b/src/battle_message.c index e13501f09a65..50fe72dc86fc 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -3352,12 +3352,12 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) } dstID = 0; - DebugPrintf("BEGIN: src:\"%S\"", src); + //DebugPrintf("BEGIN: src:\"%S\"", src); while (*src != EOS) { toCpy = NULL; dstWidth = GetStringLineWidth(fontId, dst, letterSpacing, lineNum, dstSize, FALSE); - DebugPrintf(" line:%d, dstWidth:%d, lastSkip:%d, \"%S\"", lineNum, dstWidth, lastValidSkip, dst); + //DebugPrintf(" line:%d, dstWidth:%d, lastSkip:%d, \"%S\"", lineNum, dstWidth, lastValidSkip, dst); if (*src == PLACEHOLDER_BEGIN) { @@ -3750,7 +3750,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) if (toCpy != NULL) { toCpyWidth = GetStringLineWidth(fontId, toCpy, letterSpacing, 1, dstSize, FALSE); - DebugPrintf(" toCpy width:%d, \"%S\"", toCpyWidth, toCpy); + //DebugPrintf(" toCpy width:%d, \"%S\"", toCpyWidth, toCpy); if (dstWidth + toCpyWidth > BATTLE_MSG_MAX_WIDTH) { dst[lastValidSkip] = lineNum == 1 ? CHAR_NEWLINE : CHAR_PROMPT_SCROLL; @@ -3776,8 +3776,9 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) } else { + toCpyWidth = GetGlyphWidth(dst[dstID + 1], FALSE, fontId); dst[dstID] = *src; - if (dstWidth > BATTLE_MSG_MAX_WIDTH) + if (dstWidth + toCpyWidth > BATTLE_MSG_MAX_WIDTH) { dst[lastValidSkip] = lineNum == 1 ? CHAR_NEWLINE : CHAR_PROMPT_SCROLL; lineNum++; diff --git a/src/text.c b/src/text.c index 0a2e0306ef0e..13afdc9061c7 100644 --- a/src/text.c +++ b/src/text.c @@ -1423,6 +1423,16 @@ static u32 (*GetFontWidthFunc(u8 fontId))(u16, bool32) return NULL; } +s32 GetGlyphWidth(u16 glyphId, bool32 isJapanese, u8 fontId) +{ + u32 (*func)(u16 fontId, bool32 isJapanese); + + func = GetFontWidthFunc(fontId); + if (func == NULL) + return 0; + return func(glyphId, isJapanese); +} + s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) { bool32 isJapanese; diff --git a/test/text.c b/test/text.c index b3a52455b8d2..2da73d733294 100644 --- a/test/text.c +++ b/test/text.c @@ -635,10 +635,8 @@ extern u16 sBattlerAbilities[MAX_BATTLERS_COUNT]; TEST("Battle strings fit on the battle message window") { u32 i, j, strWidth; - //u32 start = BATTLESTRINGS_TABLE_START + 401; - //u32 end = BATTLESTRINGS_TABLE_START + 500; - u32 start = STRINGID_GRASSYTERRAINHEALS; - u32 end = STRINGID_GRASSYTERRAINHEALS; + u32 start = BATTLESTRINGS_TABLE_START + 0; + u32 end = BATTLESTRINGS_TABLE_START + 100; const u32 fontId = FONT_NORMAL, widthPx = 208; u32 battleStringId = 0; u8 battleString[1000] = {0}; From ee652bd034e79e88933aa819babdf488e2d29eab Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 19 Oct 2024 13:49:16 -0300 Subject: [PATCH 60/68] 500th string --- test/text.c | 60 +++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 51 insertions(+), 9 deletions(-) diff --git a/test/text.c b/test/text.c index 2da73d733294..60666bf53be0 100644 --- a/test/text.c +++ b/test/text.c @@ -635,8 +635,8 @@ extern u16 sBattlerAbilities[MAX_BATTLERS_COUNT]; TEST("Battle strings fit on the battle message window") { u32 i, j, strWidth; - u32 start = BATTLESTRINGS_TABLE_START + 0; - u32 end = BATTLESTRINGS_TABLE_START + 100; + u32 start = BATTLESTRINGS_TABLE_START + 451; + u32 end = BATTLESTRINGS_TABLE_START + 500; // BATTLESTRINGS_COUNT const u32 fontId = FONT_NORMAL, widthPx = 208; u32 battleStringId = 0; u8 battleString[1000] = {0}; @@ -651,6 +651,7 @@ TEST("Battle strings fit on the battle message window") u32 longItemName = ITEM_UNREMARKABLE_TEACUP; // 73 pixels u8 boxName[9] = _("MMMMMMMM"); + // Set longest default player name, JOHNNY NewGameBirchSpeech_SetDefaultPlayerName(10); // JOHNNY RUN_OVERWORLD_SCRIPT( @@ -660,10 +661,12 @@ TEST("Battle strings fit on the battle message window") SetMonData(&gPlayerParty[0], MON_DATA_NICKNAME, nickname); SetMonData(&gEnemyParty[0], MON_DATA_NICKNAME, nickname); - for (i = start; i <= end; i++) // BATTLESTRINGS_COUNT + for (i = start; i <= end; i++) { PARAMETRIZE_LABEL("%S", gBattleStringsTable[i - BATTLESTRINGS_TABLE_START]) { battleStringId = i - BATTLESTRINGS_TABLE_START; } } + + // Clear buffers PREPARE_STRING_BUFFER(gBattleTextBuff1, STRINGID_EMPTYSTRING3); PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_EMPTYSTRING3); PREPARE_STRING_BUFFER(gBattleTextBuff3, STRINGID_EMPTYSTRING3); @@ -671,45 +674,54 @@ TEST("Battle strings fit on the battle message window") *gStringVar2 = EOS; *gStringVar3 = EOS; + // Set positions gBattlerPositions[0] = B_POSITION_PLAYER_LEFT; gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT; gBattlerPositions[2] = B_POSITION_PLAYER_RIGHT; gBattlerPositions[3] = B_POSITION_OPPONENT_RIGHT; + + // Set abilities + gLastUsedAbility = longAbilityID; for (j = 0; j < MAX_BATTLERS_COUNT; j++) - { sBattlerAbilities[j] = longAbilityID; - } + // Set Trainers gTrainerBattleOpponent_A = 1; gTrainerBattleOpponent_B = 1; - // Add "The opposing " prefix to all messages. + // Set battler to 1, so "The opposing " is prefixed when refering to battlers. gBattleTypeFlags |= BATTLE_TYPE_TRAINER; gBattlerAttacker = gBattlerTarget = gBattleScripting.battler = gEffectBattler = 1; + // Set moves gCurrentMove = longMoveID; - gLastUsedItem = longItemName; - gBattleMsgDataPtr = AllocZeroed(sizeof(struct BattleMsgData)); gBattleMsgDataPtr->currentMove = longMoveID; + // Set Items + gLastUsedItem = longItemName; + + // Buffer specific strings for each Battle String switch (battleStringId + BATTLESTRINGS_TABLE_START) { + // Testing Trainer messages is out of the current scope for this test. case STRINGID_TRAINER1LOSETEXT: case STRINGID_TRAINER2LOSETEXT: case STRINGID_TRAINER1WINTEXT: case STRINGID_TRAINER2WINTEXT: - // Out of current scope: testing all trainer messages. break; + // Buffer Nickname with prefix to B_BUFF1, " a boosted" to B_BUFF2, "999999" to B_BUFF3 case STRINGID_PKMNGAINEDEXP: PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, 0, 0); PREPARE_STRING_BUFFER(gBattleTextBuff2, STRINGID_ABOOSTED); // 'gained a boosted' PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff3, 6, sixDigitNines); break; + // Buffer Nickname with prefix to B_BUFF1, "100" to B_BUFF2 case STRINGID_PKMNGREWTOLV: PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, 0, 0); PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff2, 3, 100); break; + // Buffer Nickname with prefix to B_BUFF1, move name to B_BUFF2 case STRINGID_PKMNLEARNEDMOVE: case STRINGID_TRYTOLEARNMOVE1: case STRINGID_TRYTOLEARNMOVE2: @@ -720,6 +732,7 @@ TEST("Battle strings fit on the battle message window") PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, 0, 0); PREPARE_MOVE_BUFFER(gBattleTextBuff2, longMoveID); break; + // Buffer Move name to B_BUFF1 case STRINGID_PKMNLEARNEDMOVE2: case STRINGID_TEAMSTOPPEDWORKING: // Unused case STRINGID_FOESTOPPEDWORKING: // Unused @@ -731,21 +744,28 @@ TEST("Battle strings fit on the battle message window") case STRINGID_PKMNLOSTPPGRUDGE: case STRINGID_PKMNSITEMRESTOREDPP: case STRINGID_PKMNSXWOREOFF: + case STRINGID_BUFFERENDS: + case STRINGID_FOREWARNACTIVATES: + case STRINGID_CUSEDBODYDISABLED: PREPARE_MOVE_BUFFER(gBattleTextBuff1, longMoveID); break; + // Buffer "999999" to B_BUFF1 case STRINGID_PLAYERGOTMONEY: case STRINGID_PLAYERWHITEOUT2: case STRINGID_PLAYERPICKEDUPMONEY: PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff1, 6, sixDigitNines); break; + // Buffer "99" to B_BUFF1 case STRINGID_HITXTIMES: case STRINGID_MAGNITUDESTRENGTH: PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff1, 2, 99); break; + // Buffer "9" to B_BUFF1 case STRINGID_PKMNSTOCKPILED: case STRINGID_PKMNPERISHCOUNTFELL: PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff1, 1, 9); break; + // Buffer Ability name to B_BUFF1 case STRINGID_PKMNMADESLEEP: case STRINGID_PKMNPOISONEDBY: case STRINGID_PKMNBURNEDBY: @@ -753,26 +773,41 @@ TEST("Battle strings fit on the battle message window") case STRINGID_PKMNWASPARALYZEDBY: PREPARE_ABILITY_BUFFER(gBattleTextBuff1, longAbilityID); break; + // Buffer Stat name to B_BUFF1 case STRINGID_STATSWONTINCREASE: case STRINGID_STATSWONTDECREASE: case STRINGID_PKMNSXPREVENTSYLOSS: + case STRINGID_TARGETABILITYSTATRAISE: + case STRINGID_TARGETSSTATWASMAXEDOUT: + case STRINGID_ATTACKERABILITYSTATRAISE: + case STRINGID_LASTABILITYRAISEDSTAT: + case STRINGID_TARGETABILITYSTATLOWER: StringCopy(gBattleTextBuff1, gStatNamesTable[longStatName]); break; + // Buffer Type name to B_BUFF1 case STRINGID_PKMNCHANGEDTYPE: case STRINGID_PKMNCHANGEDTYPEWITH: + case STRINGID_TARGETCHANGEDTYPE: + case STRINGID_PROTEANTYPECHANGE: + case STRINGID_THIRDTYPEADDED: PREPARE_TYPE_BUFFER(gBattleTextBuff1, longTypeName); break; + // Buffer Species name to B_BUFF1 case STRINGID_PKMNTRANSFORMEDINTO: case STRINGID_WILDPKMNFLED: + case STRINGID_MEGAEVOEVOLVED: PREPARE_SPECIES_BUFFER(gBattleTextBuff1, longSpeciesName) break; + // Buffer nickname with prefix to B_BUFF1, Move name to B_BUFF2 case STRINGID_PKMNATTACK: case STRINGID_PKMNWISHCAMETRUE: PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, 1, 0); break; + // Buffer nickname to B_BUFF2 case STRINGID_ENEMYABOUTTOSWITCHPKMN: PREPARE_MON_NICK_BUFFER(gBattleTextBuff2, 1, 0); break; + // Buffer Item name to B_BUFF1 case STRINGID_PKMNHURTSWITH: case STRINGID_PKMNCURIOUSABOUTX: case STRINGID_PKMNENTHRALLEDBYX: @@ -781,17 +816,21 @@ TEST("Battle strings fit on the battle message window") case STRINGID_PKMNOBTAINEDX: PREPARE_ITEM_BUFFER(gBattleTextBuff1, longItemName); break; + // Buffer Item name to B_BUFF2 case STRINGID_PKMNOBTAINEDX2: PREPARE_ITEM_BUFFER(gBattleTextBuff2, longItemName); break; + // Buffer Item name to B_BUFF1 and B_BUFF2 case STRINGID_PKMNOBTAINEDXYOBTAINEDZ: PREPARE_ITEM_BUFFER(gBattleTextBuff1, longItemName); PREPARE_ITEM_BUFFER(gBattleTextBuff2, longItemName); break; + // Buffer nickname with prefix to B_BUFF1, Ability name to B_BUFF2 case STRINGID_PKMNTRACED: PREPARE_MON_NICK_WITH_PREFIX_LOWER_BUFFER(gBattleTextBuff1, 1, 0); PREPARE_ABILITY_BUFFER(gBattleTextBuff2, longAbilityID); break; + // Buffer Stat name to B_BUFF1, "drastically rose" to B_BUFF2 case STRINGID_ATTACKERSSTATROSE: case STRINGID_DEFENDERSSTATROSE: case STRINGID_USINGITEMSTATOFPKMNROSE: @@ -799,17 +838,20 @@ TEST("Battle strings fit on the battle message window") StringCopy(gBattleTextBuff2, sText_drastically); StringAppend(gBattleTextBuff2, gText_StatRose); break; + // Buffer Stat name to B_BUFF1, "severely fell" to B_BUFF2 case STRINGID_ATTACKERSSTATFELL: case STRINGID_DEFENDERSSTATFELL: StringCopy(gBattleTextBuff1, gStatNamesTable[longStatName]); StringCopy(gBattleTextBuff2, sText_severely); StringAppend(gBattleTextBuff2, sText_StatFell); break; + // Buffer Status name to B_BUFF2 case STRINGID_PKMNSITEMCUREDPROBLEM: case STRINGID_PKMNSXCUREDYPROBLEM: case STRINGID_PKMNSXCUREDITSYPROBLEM: StringCopy(gBattleTextBuff1, gText_Confusion); break; + // Buffer Box name to STR_VAR_1 and STR_VAR_3, Nickname to STR_VAR_2 case STRINGID_PKMNTRANSFERREDSOMEONESPC: case STRINGID_PKMNTRANSFERREDLANETTESPC: case STRINGID_PKMNBOXSOMEONESPCFULL: From 2115d180366db32230474ca761eca07ac288886a Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 19 Oct 2024 14:35:26 -0300 Subject: [PATCH 61/68] 600th string --- test/text.c | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/test/text.c b/test/text.c index 60666bf53be0..af5221522e78 100644 --- a/test/text.c +++ b/test/text.c @@ -635,21 +635,21 @@ extern u16 sBattlerAbilities[MAX_BATTLERS_COUNT]; TEST("Battle strings fit on the battle message window") { u32 i, j, strWidth; - u32 start = BATTLESTRINGS_TABLE_START + 451; - u32 end = BATTLESTRINGS_TABLE_START + 500; // BATTLESTRINGS_COUNT - const u32 fontId = FONT_NORMAL, widthPx = 208; + u32 start = BATTLESTRINGS_TABLE_START; + u32 end = BATTLESTRINGS_TABLE_START + 600; // BATTLESTRINGS_COUNT + const u32 fontId = FONT_NORMAL; u32 battleStringId = 0; u8 battleString[1000] = {0}; - s32 sixDigitNines = 999999; - u8 nickname[POKEMON_NAME_LENGTH + 1] = _("MMMMMMMMMMMM"); - u32 longMoveID = MOVE_NATURES_MADNESS; // 89 pixels. - u32 longAbilityID = ABILITY_SUPERSWEET_SYRUP; // 91 pixels. - u32 longStatName = STAT_EVASION; - u32 longTypeName = TYPE_ELECTRIC; - u32 longSpeciesName = SPECIES_SANDY_SHOCKS; // 47 pixels - u32 longItemName = ITEM_UNREMARKABLE_TEACUP; // 73 pixels - u8 boxName[9] = _("MMMMMMMM"); + s32 sixDigitNines = 999999; // 36 pixels. + u8 nickname[POKEMON_NAME_LENGTH + 1] = _("MMMMMMMMMMMM"); // 72 pixels. + u32 longMoveID = MOVE_NATURES_MADNESS; // 89 pixels. + u32 longAbilityID = ABILITY_SUPERSWEET_SYRUP; // 91 pixels. + u32 longStatName = STAT_EVASION; // 40 pixels. + u32 longTypeName = TYPE_ELECTRIC; // 43 pixels. + u32 longSpeciesName = SPECIES_SANDY_SHOCKS; // 47 pixels. + u32 longItemName = ITEM_UNREMARKABLE_TEACUP; // 73 pixels. + u8 boxName[9] = _("MMMMMMMM"); // 54 pixels. // Set longest default player name, JOHNNY NewGameBirchSpeech_SetDefaultPlayerName(10); // JOHNNY @@ -701,7 +701,10 @@ TEST("Battle strings fit on the battle message window") // Set Items gLastUsedItem = longItemName; - // Buffer specific strings for each Battle String + // Buffer specific strings for each Battle String. + // In cases where a buffer is used with multiple contexts, the widest string is used. + // Eg. STRINGID_CANACTFASTERTHANKSTO is used for both with abilities and items, + // so ability is chosen because it's longer. switch (battleStringId + BATTLESTRINGS_TABLE_START) { // Testing Trainer messages is out of the current scope for this test. @@ -771,6 +774,7 @@ TEST("Battle strings fit on the battle message window") case STRINGID_PKMNBURNEDBY: case STRINGID_PKMNFROZENBY: case STRINGID_PKMNWASPARALYZEDBY: + case STRINGID_CANACTFASTERTHANKSTO: PREPARE_ABILITY_BUFFER(gBattleTextBuff1, longAbilityID); break; // Buffer Stat name to B_BUFF1 @@ -782,6 +786,9 @@ TEST("Battle strings fit on the battle message window") case STRINGID_ATTACKERABILITYSTATRAISE: case STRINGID_LASTABILITYRAISEDSTAT: case STRINGID_TARGETABILITYSTATLOWER: + case STRINGID_SCRIPTINGABILITYSTATRAISE: + case STRINGID_BATTLERABILITYRAISEDSTAT: + case STRINGID_ABILITYRAISEDSTATDRASTICALLY: StringCopy(gBattleTextBuff1, gStatNamesTable[longStatName]); break; // Buffer Type name to B_BUFF1 @@ -798,11 +805,15 @@ TEST("Battle strings fit on the battle message window") case STRINGID_MEGAEVOEVOLVED: PREPARE_SPECIES_BUFFER(gBattleTextBuff1, longSpeciesName) break; - // Buffer nickname with prefix to B_BUFF1, Move name to B_BUFF2 + // Buffer nickname with prefix to B_BUFF1 case STRINGID_PKMNATTACK: case STRINGID_PKMNWISHCAMETRUE: PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, 1, 0); break; + // Buffer nickname with prefix in lower case to B_BUFF1 + case STRINGID_USEDINSTRUCTEDMOVE: + PREPARE_MON_NICK_WITH_PREFIX_LOWER_BUFFER(gBattleTextBuff1, 1, 0); + break; // Buffer nickname to B_BUFF2 case STRINGID_ENEMYABOUTTOSWITCHPKMN: PREPARE_MON_NICK_BUFFER(gBattleTextBuff2, 1, 0); @@ -814,6 +825,7 @@ TEST("Battle strings fit on the battle message window") case STRINGID_PKMNIGNOREDX: case STRINGID_PREVENTEDFROMWORKING: case STRINGID_PKMNOBTAINEDX: + case STRINGID_ABOUTTOUSEPOLTERGEIST: PREPARE_ITEM_BUFFER(gBattleTextBuff1, longItemName); break; // Buffer Item name to B_BUFF2 @@ -870,7 +882,7 @@ TEST("Battle strings fit on the battle message window") strWidth = GetStringLineWidth(fontId, battleString, 0, j, sizeof(battleString), TRUE); if (strWidth == 0) break; - EXPECT_LE(strWidth, widthPx); + EXPECT_LE(strWidth, BATTLE_MSG_MAX_WIDTH); } Free(gBattleMsgDataPtr); } From b4fb0bd87a069a2da5e96f38d45a6bf0ab29f650 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 19 Oct 2024 15:03:56 -0300 Subject: [PATCH 62/68] Finished the test! --- test/text.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/test/text.c b/test/text.c index af5221522e78..236c1466d3fe 100644 --- a/test/text.c +++ b/test/text.c @@ -636,7 +636,7 @@ TEST("Battle strings fit on the battle message window") { u32 i, j, strWidth; u32 start = BATTLESTRINGS_TABLE_START; - u32 end = BATTLESTRINGS_TABLE_START + 600; // BATTLESTRINGS_COUNT + u32 end = BATTLESTRINGS_COUNT - 1; const u32 fontId = FONT_NORMAL; u32 battleStringId = 0; u8 battleString[1000] = {0}; @@ -750,12 +750,15 @@ TEST("Battle strings fit on the battle message window") case STRINGID_BUFFERENDS: case STRINGID_FOREWARNACTIVATES: case STRINGID_CUSEDBODYDISABLED: + case STRINGID_CURRENTMOVECANTSELECT: + case STRINGID_TARGETISHURTBYSALTCURE: PREPARE_MOVE_BUFFER(gBattleTextBuff1, longMoveID); break; // Buffer "999999" to B_BUFF1 case STRINGID_PLAYERGOTMONEY: case STRINGID_PLAYERWHITEOUT2: case STRINGID_PLAYERPICKEDUPMONEY: + case STRINGID_PLAYERPAIDPRIZEMONEY: PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff1, 6, sixDigitNines); break; // Buffer "99" to B_BUFF1 @@ -789,6 +792,7 @@ TEST("Battle strings fit on the battle message window") case STRINGID_SCRIPTINGABILITYSTATRAISE: case STRINGID_BATTLERABILITYRAISEDSTAT: case STRINGID_ABILITYRAISEDSTATDRASTICALLY: + case STRINGID_STATWASHEIGHTENED: StringCopy(gBattleTextBuff1, gStatNamesTable[longStatName]); break; // Buffer Type name to B_BUFF1 @@ -797,12 +801,18 @@ TEST("Battle strings fit on the battle message window") case STRINGID_TARGETCHANGEDTYPE: case STRINGID_PROTEANTYPECHANGE: case STRINGID_THIRDTYPEADDED: + case STRINGID_ATTACKERLOSTITSTYPE: + case STRINGID_PKMNTERASTALLIZEDINTO: PREPARE_TYPE_BUFFER(gBattleTextBuff1, longTypeName); break; // Buffer Species name to B_BUFF1 case STRINGID_PKMNTRANSFORMEDINTO: case STRINGID_WILDPKMNFLED: case STRINGID_MEGAEVOEVOLVED: + case STRINGID_PKMNREVIVEDREADYTOFIGHT: + case STRINGID_ITEMRESTOREDSPECIESHEALTH: // Should probably use nickname instead? + case STRINGID_ITEMCUREDSPECIESSTATUS: // Should probably use nickname instead? + case STRINGID_ITEMRESTOREDSPECIESPP: // Should probably use nickname instead? PREPARE_SPECIES_BUFFER(gBattleTextBuff1, longSpeciesName) break; // Buffer nickname with prefix to B_BUFF1 From 173af9d58843ce19226845f6c4d103387c09e571 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 19 Oct 2024 15:38:33 -0300 Subject: [PATCH 63/68] Removed linebreaks from battle strings --- include/config/general.h | 2 +- src/battle_message.c | 1206 +++++++++++++++++++------------------- test/text.c | 2 +- 3 files changed, 605 insertions(+), 605 deletions(-) diff --git a/include/config/general.h b/include/config/general.h index 61d5db5c043c..cff1432bb737 100644 --- a/include/config/general.h +++ b/include/config/general.h @@ -6,7 +6,7 @@ // still has them in the ROM. This is because the developers forgot // to define NDEBUG before release, however this has been changed as // Ruby's actual debug build does not use the AGBPrint features. -//#define NDEBUG +#define NDEBUG // To enable printf debugging, comment out "#define NDEBUG". This allows // the various AGBPrint functions to be used. (See include/gba/isagbprint.h). diff --git a/src/battle_message.c b/src/battle_message.c index 50fe72dc86fc..27583718f751 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -61,296 +61,296 @@ EWRAM_DATA struct BattleMsgData *gBattleMsgDataPtr = NULL; // todo: make some of those names less vague: attacker/target vs pkmn, etc. static const u8 sText_Trainer1LoseText[] = _("{B_TRAINER1_LOSE_TEXT}"); -static const u8 sText_PkmnGainedEXP[] = _("{B_BUFF1} gained{B_BUFF2}\n{B_BUFF3} Exp. Points!\p"); +static const u8 sText_PkmnGainedEXP[] = _("{B_BUFF1} gained{B_BUFF2} {B_BUFF3} Exp. Points!\p"); static const u8 sText_EmptyString4[] = _(""); static const u8 sText_ABoosted[] = _(" a boosted"); -static const u8 sText_PkmnGrewToLv[] = _("{B_BUFF1} grew to\nLv. {B_BUFF2}!{WAIT_SE}\p"); -static const u8 sText_PkmnLearnedMove[] = _("{B_BUFF1} learned\n{B_BUFF2}!{WAIT_SE}\p"); -static const u8 sText_TryToLearnMove1[] = _("{B_BUFF1} wants to learn the\nmove {B_BUFF2}.\p"); -static const u8 sText_TryToLearnMove2[] = _("However, {B_BUFF1} already\nknows four moves.\p"); -static const u8 sText_TryToLearnMove3[] = _("Should another move be forgotten\nand replaced with {B_BUFF2}?"); -static const u8 sText_PkmnForgotMove[] = _("{B_BUFF1} forgot\n{B_BUFF2}…\p"); -static const u8 sText_StopLearningMove[] = _("{PAUSE 32}Do you want to give up\non having {B_BUFF1}\llearn {B_BUFF2}?"); -static const u8 sText_DidNotLearnMove[] = _("{B_BUFF1} did not learn\n{B_BUFF2}.\p"); +static const u8 sText_PkmnGrewToLv[] = _("{B_BUFF1} grew to Lv. {B_BUFF2}!{WAIT_SE}\p"); +static const u8 sText_PkmnLearnedMove[] = _("{B_BUFF1} learned {B_BUFF2}!{WAIT_SE}\p"); +static const u8 sText_TryToLearnMove1[] = _("{B_BUFF1} wants to learn the move {B_BUFF2}.\p"); +static const u8 sText_TryToLearnMove2[] = _("However, {B_BUFF1} already knows four moves.\p"); +static const u8 sText_TryToLearnMove3[] = _("Should another move be forgotten and replaced with {B_BUFF2}?"); +static const u8 sText_PkmnForgotMove[] = _("{B_BUFF1} forgot {B_BUFF2}…\p"); +static const u8 sText_StopLearningMove[] = _("{PAUSE 32}Do you want to give up on having {B_BUFF1} learn {B_BUFF2}?"); +static const u8 sText_DidNotLearnMove[] = _("{B_BUFF1} did not learn {B_BUFF2}.\p"); static const u8 sText_UseNextPkmn[] = _("Use next Pokémon?"); -static const u8 sText_AttackMissed[] = _("{B_ATK_NAME_WITH_PREFIX}'s\nattack missed!"); //this is not in SV for some reason? -static const u8 sText_PkmnProtectedItself[] = _("{B_DEF_NAME_WITH_PREFIX}\nprotected itself!"); -static const u8 sText_AvoidedDamage[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\ndamage with {B_DEF_ABILITY}!"); //not in gen 5+, ability popup -static const u8 sText_PkmnMakesGroundMiss[] = _("{B_DEF_NAME_WITH_PREFIX} makes\nGround-type moves miss with\l{B_DEF_ABILITY}!"); //not in gen 5+, ability popup -static const u8 sText_PkmnAvoidedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\nthe attack!"); -static const u8 sText_ItDoesntAffect[] = _("It doesn't affect\n{B_DEF_NAME_WITH_PREFIX2}…"); +static const u8 sText_AttackMissed[] = _("{B_ATK_NAME_WITH_PREFIX}'s attack missed!"); //this is not in SV for some reason? +static const u8 sText_PkmnProtectedItself[] = _("{B_DEF_NAME_WITH_PREFIX} protected itself!"); +static const u8 sText_AvoidedDamage[] = _("{B_DEF_NAME_WITH_PREFIX} avoided damage with {B_DEF_ABILITY}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnMakesGroundMiss[] = _("{B_DEF_NAME_WITH_PREFIX} makes Ground-type moves miss with {B_DEF_ABILITY}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnAvoidedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} avoided the attack!"); +static const u8 sText_ItDoesntAffect[] = _("It doesn't affect {B_DEF_NAME_WITH_PREFIX2}…"); static const u8 sText_AttackerFainted[] = _("{B_ATK_NAME_WITH_PREFIX} fainted!\p"); static const u8 sText_TargetFainted[] = _("{B_DEF_NAME_WITH_PREFIX} fainted!\p"); -static const u8 sText_PlayerGotMoney[] = _("You got ¥{B_BUFF1}\nfor winning!\p"); -static const u8 sText_PlayerLostToEnemyTrainer[] = _("You have no more\nPokémon that can fight!\pYou lost to\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!{PAUSE_UNTIL_PRESS}"); -static const u8 sText_PlayerPaidPrizeMoney[] = _("You gave ¥{B_BUFF1}\nto the winner…\pYou were overwhelmed\nby your defeat!{PAUSE_UNTIL_PRESS}"); -static const u8 sText_PlayerWhiteout[] = _("You have no more\nPokémon that can fight!\p"); +static const u8 sText_PlayerGotMoney[] = _("You got ¥{B_BUFF1} for winning!\p"); +static const u8 sText_PlayerLostToEnemyTrainer[] = _("You have no more Pokémon that can fight!\pYou lost to {B_TRAINER1_CLASS} {B_TRAINER1_NAME}!{PAUSE_UNTIL_PRESS}"); +static const u8 sText_PlayerPaidPrizeMoney[] = _("You gave ¥{B_BUFF1} to the winner…\pYou were overwhelmed by your defeat!{PAUSE_UNTIL_PRESS}"); +static const u8 sText_PlayerWhiteout[] = _("You have no more Pokémon that can fight!\p"); #if B_WHITEOUT_MONEY >= GEN_4 -static const u8 sText_PlayerWhiteout2[] = _("You panicked\nand dropped ¥{B_BUFF1}…\pYou were overwhelmed\nby your defeat!{PAUSE_UNTIL_PRESS}"); +static const u8 sText_PlayerWhiteout2[] = _("You panicked and dropped ¥{B_BUFF1}…\pYou were overwhelmed by your defeat!{PAUSE_UNTIL_PRESS}"); #else -static const u8 sText_PlayerWhiteout2[] = _("You were overwhelmed\nby your defeat!{PAUSE_UNTIL_PRESS}"); +static const u8 sText_PlayerWhiteout2[] = _("You were overwhelmed by your defeat!{PAUSE_UNTIL_PRESS}"); #endif -static const u8 sText_PreventsEscape[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} prevents\nescape with {B_SCR_ACTIVE_ABILITY}!\p"); +static const u8 sText_PreventsEscape[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} prevents escape with {B_SCR_ACTIVE_ABILITY}!\p"); static const u8 sText_CantEscape2[] = _("You couldn't get away!\p"); -static const u8 sText_AttackerCantEscape[] = _("{B_ATK_NAME_WITH_PREFIX}\ncan't escape!"); -static const u8 sText_HitXTimes[] = _("The Pokémon was\nhit {B_BUFF1} time(s)!"); //SV has dynamic plural here -static const u8 sText_PkmnFellAsleep[] = _("{B_EFF_NAME_WITH_PREFIX}\nfell asleep!"); -static const u8 sText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_BUFF1} made\l{B_EFF_NAME_WITH_PREFIX2} sleep!"); //not in gen 5+, ability popup -static const u8 sText_PkmnAlreadyAsleep[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready asleep!"); -static const u8 sText_PkmnAlreadyAsleep2[] = _("{B_ATK_NAME_WITH_PREFIX} is\nalready asleep!"); -static const u8 sText_PkmnWasntAffected[] = _("{B_DEF_NAME_WITH_PREFIX}\nwasn't affected!"); //not in gen 5+, ability popup -static const u8 sText_PkmnWasPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX}\nwas poisoned!"); -static const u8 sText_PkmnPoisonedBy[] = _("{B_EFF_NAME_WITH_PREFIX}\nwas poisoned by\l{B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s\l{B_BUFF1}!"); //not in gen 5+, ability popup -static const u8 sText_PkmnHurtByPoison[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby its poisoning!"); -static const u8 sText_PkmnAlreadyPoisoned[] = _("{B_DEF_NAME_WITH_PREFIX} is already\npoisoned!"); -static const u8 sText_PkmnBadlyPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX} was badly\npoisoned!"); -static const u8 sText_PkmnEnergyDrained[] = _("{B_DEF_NAME_WITH_PREFIX} had its\nenergy drained!"); +static const u8 sText_AttackerCantEscape[] = _("{B_ATK_NAME_WITH_PREFIX} can't escape!"); +static const u8 sText_HitXTimes[] = _("The Pokémon was hit {B_BUFF1} time(s)!"); //SV has dynamic plural here +static const u8 sText_PkmnFellAsleep[] = _("{B_EFF_NAME_WITH_PREFIX} fell asleep!"); +static const u8 sText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1} made {B_EFF_NAME_WITH_PREFIX2} sleep!"); //not in gen 5+, ability popup +static const u8 sText_PkmnAlreadyAsleep[] = _("{B_DEF_NAME_WITH_PREFIX} is already asleep!"); +static const u8 sText_PkmnAlreadyAsleep2[] = _("{B_ATK_NAME_WITH_PREFIX} is already asleep!"); +static const u8 sText_PkmnWasntAffected[] = _("{B_DEF_NAME_WITH_PREFIX} wasn't affected!"); //not in gen 5+, ability popup +static const u8 sText_PkmnWasPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX} was poisoned!"); +static const u8 sText_PkmnPoisonedBy[] = _("{B_EFF_NAME_WITH_PREFIX} was poisoned by {B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s {B_BUFF1}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnHurtByPoison[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt by its poisoning!"); +static const u8 sText_PkmnAlreadyPoisoned[] = _("{B_DEF_NAME_WITH_PREFIX} is already poisoned!"); +static const u8 sText_PkmnBadlyPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX} was badly poisoned!"); +static const u8 sText_PkmnEnergyDrained[] = _("{B_DEF_NAME_WITH_PREFIX} had its energy drained!"); static const u8 sText_PkmnWasBurned[] = _("{B_EFF_NAME_WITH_PREFIX} was burned!"); static const u8 sText_PkmnGotFrostbite[] = _("{B_EFF_NAME_WITH_PREFIX} got frostbite!"); -static const u8 sText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_BUFF1} burned\l{B_EFF_NAME_WITH_PREFIX2}!"); //not in gen 5+, ability popup -static const u8 sText_PkmnHurtByBurn[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby its burn!"); -static const u8 sText_PkmnHurtByFrostbite[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby its frostbite!"); -static const u8 sText_PkmnAlreadyHasBurn[] = _("{B_DEF_NAME_WITH_PREFIX} is already\nburned!"); -static const u8 sText_PkmnWasFrozen[] = _("{B_EFF_NAME_WITH_PREFIX} was\nfrozen solid!"); -static const u8 sText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_BUFF1} froze\l{B_EFF_NAME_WITH_PREFIX2} solid!"); //not in gen 5+, ability popup -static const u8 sText_PkmnIsFrozen[] = _("{B_ATK_NAME_WITH_PREFIX} is\nfrozen solid!"); +static const u8 sText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1} burned {B_EFF_NAME_WITH_PREFIX2}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnHurtByBurn[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt by its burn!"); +static const u8 sText_PkmnHurtByFrostbite[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt by its frostbite!"); +static const u8 sText_PkmnAlreadyHasBurn[] = _("{B_DEF_NAME_WITH_PREFIX} is already burned!"); +static const u8 sText_PkmnWasFrozen[] = _("{B_EFF_NAME_WITH_PREFIX} was frozen solid!"); +static const u8 sText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1} froze {B_EFF_NAME_WITH_PREFIX2} solid!"); //not in gen 5+, ability popup +static const u8 sText_PkmnIsFrozen[] = _("{B_ATK_NAME_WITH_PREFIX} is frozen solid!"); static const u8 sText_PkmnWasDefrosted[] = _("{B_DEF_NAME_WITH_PREFIX} thawed out!"); static const u8 sText_PkmnWasDefrosted2[] = _("{B_ATK_NAME_WITH_PREFIX} thawed out!"); -static const u8 sText_PkmnWasDefrostedBy[] = _("{B_ATK_NAME_WITH_PREFIX}'s\n{B_CURRENT_MOVE} melted the ice!"); -static const u8 sText_PkmnFrostbiteHealed[] = _("{B_DEF_NAME_WITH_PREFIX}'s frostbite\nwas cured!"); -static const u8 sText_PkmnFrostbiteHealed2[] = _("{B_ATK_NAME_WITH_PREFIX}'s frostbite\nwas cured!"); -static const u8 sText_PkmnFrostbiteHealedBy[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE}\ncured its frostbite!"); -static const u8 sText_PkmnWasParalyzed[] = _("{B_EFF_NAME_WITH_PREFIX} is\nparalyzed, so it may be unable to move!"); -static const u8 sText_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_BUFF1} paralyzed\l{B_EFF_NAME_WITH_PREFIX2},\lso it may be unable to move!"); //not in gen 5+, ability popup -static const u8 sText_PkmnIsParalyzed[] = _("{B_ATK_NAME_WITH_PREFIX} couldn't\nmove because it's paralyzed!"); -static const u8 sText_PkmnIsAlreadyParalyzed[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready paralyzed!"); -static const u8 sText_PkmnHealedParalysis[] = _("{B_DEF_NAME_WITH_PREFIX} was\ncured of paralysis!"); -static const u8 sText_PkmnDreamEaten[] = _("{B_DEF_NAME_WITH_PREFIX}'s\ndream was eaten!"); //not in gen 5+, expansion doesn't use anymore -static const u8 sText_StatsWontIncrease[] = _("{B_ATK_NAME_WITH_PREFIX}'s\n{B_BUFF1} won't go any higher!"); -static const u8 sText_StatsWontDecrease[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_BUFF1} won't go any lower!"); -static const u8 sText_TeamStoppedWorking[] = _("Your team's {B_BUFF1}\nstopped working!"); //unused -static const u8 sText_FoeStoppedWorking[] = _("The foe's {B_BUFF1}\nstopped working!"); //unused -static const u8 sText_PkmnIsConfused[] = _("{B_ATK_NAME_WITH_PREFIX} is\nconfused!"); -static const u8 sText_PkmnHealedConfusion[] = _("{B_ATK_NAME_WITH_PREFIX}\nsnapped out of its confusion!"); -static const u8 sText_PkmnWasConfused[] = _("{B_EFF_NAME_WITH_PREFIX} became\nconfused!"); -static const u8 sText_PkmnAlreadyConfused[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready confused!"); -static const u8 sText_PkmnFellInLove[] = _("{B_DEF_NAME_WITH_PREFIX}\nfell in love!"); -static const u8 sText_PkmnInLove[] = _("{B_ATK_NAME_WITH_PREFIX} is in love\nwith {B_SCR_ACTIVE_NAME_WITH_PREFIX2}!"); -static const u8 sText_PkmnImmobilizedByLove[] = _("{B_ATK_NAME_WITH_PREFIX} is\nimmobilized by love!"); -static const u8 sText_PkmnBlownAway[] = _("{B_DEF_NAME_WITH_PREFIX} was\nblown away!"); //unused -static const u8 sText_PkmnChangedType[] = _("{B_ATK_NAME_WITH_PREFIX}\ntransformed into the {B_BUFF1} type!"); -static const u8 sText_PkmnFlinched[] = _("{B_ATK_NAME_WITH_PREFIX} flinched\nand couldn't move!"); -static const u8 sText_PkmnRegainedHealth[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nHP was restored."); -static const u8 sText_PkmnHPFull[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nHP is full!"); -static const u8 sText_PkmnRaisedSpDef[] = _("Light Screen made {B_ATK_TEAM2} team\nstronger against special moves!"); -static const u8 sText_PkmnRaisedSpDefALittle[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE}\nraised SP. DEF a little!"); //expansion doesn't use anymore -static const u8 sText_PkmnRaisedDef[] = _("Reflect made {B_ATK_TEAM2} team\nstronger against physical moves!"); -static const u8 sText_PkmnRaisedDefALittle[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE}\nraised DEFENSE a little!"); //expansion doesn't use anymore -static const u8 sText_PkmnCoveredByVeil[] = _("{B_ATK_TEAM1} team cloaked itself\nin a mystical veil!"); -static const u8 sText_PkmnUsedSafeguard[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is\nprotected by Safeguard!"); -static const u8 sText_PkmnSafeguardExpired[] = _("{B_ATK_TEAM1} team is\nno longer protected by Safeguard!"); -static const u8 sText_PkmnWentToSleep[] = _("{B_ATK_NAME_WITH_PREFIX} went\nto sleep!"); //not in gen 5+ -static const u8 sText_PkmnSleptHealthy[] = _("{B_ATK_NAME_WITH_PREFIX} slept and\nrestored its HP!"); -static const u8 sText_PkmnWhippedWhirlwind[] = _("{B_ATK_NAME_WITH_PREFIX} whipped\nup a whirlwind!"); -static const u8 sText_PkmnTookSunlight[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed\nlight!"); -static const u8 sText_PkmnLoweredHead[] = _("{B_ATK_NAME_WITH_PREFIX} tucked in\nits head!"); -static const u8 sText_PkmnIsGlowing[] = _("{B_ATK_NAME_WITH_PREFIX} became\ncloaked in a harsh light!"); -static const u8 sText_PkmnIsCloakedInAHarshLight[] = _("{B_ATK_NAME_WITH_PREFIX} became\ncloaked in a harsh light!"); -static const u8 sText_PkmnFlewHigh[] = _("{B_ATK_NAME_WITH_PREFIX} flew\nup high!"); -static const u8 sText_PkmnDugHole[] = _("{B_ATK_NAME_WITH_PREFIX} burrowed\nits way under the ground!"); -static const u8 sText_PkmnHidUnderwater[] = _("{B_ATK_NAME_WITH_PREFIX} hid\nunderwater!"); +static const u8 sText_PkmnWasDefrostedBy[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE} melted the ice!"); +static const u8 sText_PkmnFrostbiteHealed[] = _("{B_DEF_NAME_WITH_PREFIX}'s frostbite was cured!"); +static const u8 sText_PkmnFrostbiteHealed2[] = _("{B_ATK_NAME_WITH_PREFIX}'s frostbite was cured!"); +static const u8 sText_PkmnFrostbiteHealedBy[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE} cured its frostbite!"); +static const u8 sText_PkmnWasParalyzed[] = _("{B_EFF_NAME_WITH_PREFIX} is paralyzed, so it may be unable to move!"); +static const u8 sText_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1} paralyzed {B_EFF_NAME_WITH_PREFIX2}, so it may be unable to move!"); //not in gen 5+, ability popup +static const u8 sText_PkmnIsParalyzed[] = _("{B_ATK_NAME_WITH_PREFIX} couldn't move because it's paralyzed!"); +static const u8 sText_PkmnIsAlreadyParalyzed[] = _("{B_DEF_NAME_WITH_PREFIX} is already paralyzed!"); +static const u8 sText_PkmnHealedParalysis[] = _("{B_DEF_NAME_WITH_PREFIX} was cured of paralysis!"); +static const u8 sText_PkmnDreamEaten[] = _("{B_DEF_NAME_WITH_PREFIX}'s dream was eaten!"); //not in gen 5+, expansion doesn't use anymore +static const u8 sText_StatsWontIncrease[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} won't go any higher!"); +static const u8 sText_StatsWontDecrease[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1} won't go any lower!"); +static const u8 sText_TeamStoppedWorking[] = _("Your team's {B_BUFF1} stopped working!"); //unused +static const u8 sText_FoeStoppedWorking[] = _("The foe's {B_BUFF1} stopped working!"); //unused +static const u8 sText_PkmnIsConfused[] = _("{B_ATK_NAME_WITH_PREFIX} is confused!"); +static const u8 sText_PkmnHealedConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} snapped out of its confusion!"); +static const u8 sText_PkmnWasConfused[] = _("{B_EFF_NAME_WITH_PREFIX} became confused!"); +static const u8 sText_PkmnAlreadyConfused[] = _("{B_DEF_NAME_WITH_PREFIX} is already confused!"); +static const u8 sText_PkmnFellInLove[] = _("{B_DEF_NAME_WITH_PREFIX} fell in love!"); +static const u8 sText_PkmnInLove[] = _("{B_ATK_NAME_WITH_PREFIX} is in love with {B_SCR_ACTIVE_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnImmobilizedByLove[] = _("{B_ATK_NAME_WITH_PREFIX} is immobilized by love!"); +static const u8 sText_PkmnBlownAway[] = _("{B_DEF_NAME_WITH_PREFIX} was blown away!"); //unused +static const u8 sText_PkmnChangedType[] = _("{B_ATK_NAME_WITH_PREFIX} transformed into the {B_BUFF1} type!"); +static const u8 sText_PkmnFlinched[] = _("{B_ATK_NAME_WITH_PREFIX} flinched and couldn't move!"); +static const u8 sText_PkmnRegainedHealth[] = _("{B_DEF_NAME_WITH_PREFIX}'s HP was restored."); +static const u8 sText_PkmnHPFull[] = _("{B_DEF_NAME_WITH_PREFIX}'s HP is full!"); +static const u8 sText_PkmnRaisedSpDef[] = _("Light Screen made {B_ATK_TEAM2} team stronger against special moves!"); +static const u8 sText_PkmnRaisedSpDefALittle[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE} raised SP. DEF a little!"); //expansion doesn't use anymore +static const u8 sText_PkmnRaisedDef[] = _("Reflect made {B_ATK_TEAM2} team stronger against physical moves!"); +static const u8 sText_PkmnRaisedDefALittle[] = _("{B_ATK_PREFIX1}'s {B_CURRENT_MOVE} raised DEFENSE a little!"); //expansion doesn't use anymore +static const u8 sText_PkmnCoveredByVeil[] = _("{B_ATK_TEAM1} team cloaked itself in a mystical veil!"); +static const u8 sText_PkmnUsedSafeguard[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is protected by Safeguard!"); +static const u8 sText_PkmnSafeguardExpired[] = _("{B_ATK_TEAM1} team is no longer protected by Safeguard!"); +static const u8 sText_PkmnWentToSleep[] = _("{B_ATK_NAME_WITH_PREFIX} went to sleep!"); //not in gen 5+ +static const u8 sText_PkmnSleptHealthy[] = _("{B_ATK_NAME_WITH_PREFIX} slept and restored its HP!"); +static const u8 sText_PkmnWhippedWhirlwind[] = _("{B_ATK_NAME_WITH_PREFIX} whipped up a whirlwind!"); +static const u8 sText_PkmnTookSunlight[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed light!"); +static const u8 sText_PkmnLoweredHead[] = _("{B_ATK_NAME_WITH_PREFIX} tucked in its head!"); +static const u8 sText_PkmnIsGlowing[] = _("{B_ATK_NAME_WITH_PREFIX} became cloaked in a harsh light!"); +static const u8 sText_PkmnIsCloakedInAHarshLight[] = _("{B_ATK_NAME_WITH_PREFIX} became cloaked in a harsh light!"); +static const u8 sText_PkmnFlewHigh[] = _("{B_ATK_NAME_WITH_PREFIX} flew up high!"); +static const u8 sText_PkmnDugHole[] = _("{B_ATK_NAME_WITH_PREFIX} burrowed its way under the ground!"); +static const u8 sText_PkmnHidUnderwater[] = _("{B_ATK_NAME_WITH_PREFIX} hid underwater!"); static const u8 sText_PkmnSprangUp[] = _("{B_ATK_NAME_WITH_PREFIX} sprang up!"); -static const u8 sText_PkmnSqueezedByBind[] = _("{B_DEF_NAME_WITH_PREFIX} was\nsqueezed by\l{B_ATK_NAME_WITH_PREFIX2}!"); -static const u8 sText_PkmnInSnapTrap[] = _("{B_DEF_NAME_WITH_PREFIX} got trapped\nby a snap trap!"); -static const u8 sText_PkmnTrappedInVortex[] = _("{B_DEF_NAME_WITH_PREFIX} became\ntrapped in the vortex!"); -static const u8 sText_PkmnTrappedBySandTomb[] = _("{B_DEF_NAME_WITH_PREFIX} became\ntrapped by the quicksand!"); -static const u8 sText_PkmnWrappedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was\nwrapped by {B_ATK_NAME_WITH_PREFIX2}!"); -static const u8 sText_PkmnClamped[] = _("{B_ATK_NAME_WITH_PREFIX} clamped\ndown on {B_DEF_NAME_WITH_PREFIX2}!"); -static const u8 sText_PkmnHurtBy[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby {B_BUFF1}!"); -static const u8 sText_PkmnFreedFrom[] = _("{B_ATK_NAME_WITH_PREFIX} was freed\nfrom {B_BUFF1}!"); -static const u8 sText_PkmnCrashed[] = _("{B_ATK_NAME_WITH_PREFIX} kept going\nand crashed!"); +static const u8 sText_PkmnSqueezedByBind[] = _("{B_DEF_NAME_WITH_PREFIX} was squeezed by {B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnInSnapTrap[] = _("{B_DEF_NAME_WITH_PREFIX} got trapped by a snap trap!"); +static const u8 sText_PkmnTrappedInVortex[] = _("{B_DEF_NAME_WITH_PREFIX} became trapped in the vortex!"); +static const u8 sText_PkmnTrappedBySandTomb[] = _("{B_DEF_NAME_WITH_PREFIX} became trapped by the quicksand!"); +static const u8 sText_PkmnWrappedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was wrapped by {B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnClamped[] = _("{B_ATK_NAME_WITH_PREFIX} clamped down on {B_DEF_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnHurtBy[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt by {B_BUFF1}!"); +static const u8 sText_PkmnFreedFrom[] = _("{B_ATK_NAME_WITH_PREFIX} was freed from {B_BUFF1}!"); +static const u8 sText_PkmnCrashed[] = _("{B_ATK_NAME_WITH_PREFIX} kept going and crashed!"); const u8 gText_PkmnShroudedInMist[] = _("{B_ATK_TEAM1} team became\nshrouded in mist!"); -static const u8 sText_PkmnProtectedByMist[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is\nprotected by the mist!"); +static const u8 sText_PkmnProtectedByMist[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is protected by the mist!"); const u8 gText_PkmnGettingPumped[] = _("{B_DEF_NAME_WITH_PREFIX} is getting\npumped!"); -static const u8 sText_PkmnHitWithRecoil[] = _("{B_ATK_NAME_WITH_PREFIX} was damaged\nby the recoil!"); -static const u8 sText_PkmnProtectedItself2[] = _("{B_ATK_NAME_WITH_PREFIX} protected\nitself!"); -static const u8 sText_PkmnBuffetedBySandstorm[] = _("{B_ATK_NAME_WITH_PREFIX} is buffeted\nby the sandstorm!"); -static const u8 sText_PkmnPeltedByHail[] = _("{B_ATK_NAME_WITH_PREFIX} is buffeted\nby the hail!"); -static const u8 sText_PkmnsXWoreOff[] = _("{B_ATK_TEAM1} team's {B_BUFF1}\nwore off!"); +static const u8 sText_PkmnHitWithRecoil[] = _("{B_ATK_NAME_WITH_PREFIX} was damaged by the recoil!"); +static const u8 sText_PkmnProtectedItself2[] = _("{B_ATK_NAME_WITH_PREFIX} protected itself!"); +static const u8 sText_PkmnBuffetedBySandstorm[] = _("{B_ATK_NAME_WITH_PREFIX} is buffeted by the sandstorm!"); +static const u8 sText_PkmnPeltedByHail[] = _("{B_ATK_NAME_WITH_PREFIX} is buffeted by the hail!"); +static const u8 sText_PkmnsXWoreOff[] = _("{B_ATK_TEAM1} team's {B_BUFF1} wore off!"); static const u8 sText_PkmnSeeded[] = _("{B_DEF_NAME_WITH_PREFIX} was seeded!"); -static const u8 sText_PkmnEvadedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\nthe attack!"); -static const u8 sText_PkmnSappedByLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX}'s health is\nsapped by Leech Seed!"); -static const u8 sText_PkmnFastAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} is fast\nasleep."); +static const u8 sText_PkmnEvadedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} avoided the attack!"); +static const u8 sText_PkmnSappedByLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX}'s health is sapped by Leech Seed!"); +static const u8 sText_PkmnFastAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} is fast asleep."); static const u8 sText_PkmnWokeUp[] = _("{B_ATK_NAME_WITH_PREFIX} woke up!"); -static const u8 sText_PkmnUproarKeptAwake[] = _("But the uproar kept\n{B_SCR_ACTIVE_NAME_WITH_PREFIX2} awake!"); -static const u8 sText_PkmnWokeUpInUproar[] = _("The uproar woke\n{B_ATK_NAME_WITH_PREFIX2}!"); -static const u8 sText_PkmnCausedUproar[] = _("{B_ATK_NAME_WITH_PREFIX} caused\nan uproar!"); -static const u8 sText_PkmnMakingUproar[] = _("{B_ATK_NAME_WITH_PREFIX} is making\nan uproar!"); -static const u8 sText_PkmnCalmedDown[] = _("{B_ATK_NAME_WITH_PREFIX}\ncalmed down."); -static const u8 sText_PkmnCantSleepInUproar[] = _("But {B_DEF_NAME_WITH_PREFIX2} can't\nsleep in an uproar!"); -static const u8 sText_PkmnStockpiled[] = _("{B_ATK_NAME_WITH_PREFIX}\nstockpiled {B_BUFF1}!"); -static const u8 sText_PkmnCantStockpile[] = _("{B_ATK_NAME_WITH_PREFIX} can't\nstockpile any more!"); //I think this was replaced with just "But it failed!" -static const u8 sText_PkmnCantSleepInUproar2[] = _("But {B_DEF_NAME_WITH_PREFIX2} can't\nsleep in an uproar!"); -static const u8 sText_UproarKeptPkmnAwake[] = _("But the uproar kept\n{B_DEF_NAME_WITH_PREFIX2} awake!"); -static const u8 sText_PkmnStayedAwakeUsing[] = _("{B_DEF_NAME_WITH_PREFIX} stayed\nawake using its {B_DEF_ABILITY}!"); //not in gen 5+, ability popup -static const u8 sText_PkmnStoringEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} is storing\nenergy!"); -static const u8 sText_PkmnUnleashedEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} unleashed\nits energy!"); -static const u8 sText_PkmnFatigueConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} became\nconfused due to fatigue!"); -static const u8 sText_PlayerPickedUpMoney[] = _("You picked up\n¥{B_BUFF1}!\p"); -static const u8 sText_PkmnUnaffected[] = _("{B_DEF_NAME_WITH_PREFIX} is\nunaffected!"); -static const u8 sText_PkmnTransformedInto[] = _("{B_ATK_NAME_WITH_PREFIX}\ntransformed into {B_BUFF1}!"); -static const u8 sText_PkmnMadeSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} put in\na substitute!"); -static const u8 sText_PkmnHasSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} already\nhas a substitute!"); -static const u8 sText_SubstituteDamaged[] = _("The substitute took damage\nfor {B_DEF_NAME_WITH_PREFIX2}!\p"); -static const u8 sText_PkmnSubstituteFaded[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nsubstitute faded!\p"); -static const u8 sText_PkmnMustRecharge[] = _("{B_ATK_NAME_WITH_PREFIX} must\nrecharge!"); -static const u8 sText_PkmnRageBuilding[] = _("{B_DEF_NAME_WITH_PREFIX}'s rage\nis building!"); -static const u8 sText_PkmnMoveWasDisabled[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_BUFF1} was disabled!"); -static const u8 sText_PkmnMoveDisabledNoMore[] = _("{B_ATK_NAME_WITH_PREFIX}'s move is\nno longer disabled!"); -static const u8 sText_PkmnGotEncore[] = _("{B_DEF_NAME_WITH_PREFIX} must do\nan encore!"); -static const u8 sText_PkmnEncoreEnded[] = _("{B_ATK_NAME_WITH_PREFIX} ended its\nencore!"); -static const u8 sText_PkmnTookAim[] = _("{B_ATK_NAME_WITH_PREFIX} took aim at\n{B_DEF_NAME_WITH_PREFIX2}!"); -static const u8 sText_PkmnSketchedMove[] = _("{B_ATK_NAME_WITH_PREFIX} sketched\n{B_BUFF1}!"); -static const u8 sText_PkmnTryingToTakeFoe[] = _("{B_ATK_NAME_WITH_PREFIX} is hoping to\ntake its attacker down with it!"); -static const u8 sText_PkmnTookFoe[] = _("{B_DEF_NAME_WITH_PREFIX} took its\nattacker down with it!"); -static const u8 sText_PkmnReducedPP[] = _("{B_DEF_NAME_WITH_PREFIX}'s PP\nwas reduced!"); -static const u8 sText_PkmnStoleItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole\n{B_DEF_NAME_WITH_PREFIX2}'s\l{B_LAST_ITEM}!"); -static const u8 sText_TargetCantEscapeNow[] = _("{B_DEF_NAME_WITH_PREFIX} can no\nlonger escape!"); -static const u8 sText_PkmnFellIntoNightmare[] = _("{B_DEF_NAME_WITH_PREFIX} began\nhaving a nightmare!"); -static const u8 sText_PkmnLockedInNightmare[] = _("{B_ATK_NAME_WITH_PREFIX} is locked\nin a nightmare!"); -static const u8 sText_PkmnLaidCurse[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own\nHP and put a curse on\l{B_DEF_NAME_WITH_PREFIX2}!"); -static const u8 sText_PkmnAfflictedByCurse[] = _("{B_ATK_NAME_WITH_PREFIX} is afflicted\nby the curse!"); -static const u8 sText_SpikesScattered[] = _("Spikes were scattered on the ground\nall around {B_DEF_TEAM2} team!"); -static const u8 sText_PkmnHurtBySpikes[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was hurt\nby the spikes!"); -static const u8 sText_PkmnIdentified[] = _("{B_DEF_NAME_WITH_PREFIX} was\nidentified!"); -static const u8 sText_PkmnPerishCountFell[] = _("{B_ATK_NAME_WITH_PREFIX}'s perish\ncount fell to {B_BUFF1}!"); -static const u8 sText_PkmnBracedItself[] = _("{B_ATK_NAME_WITH_PREFIX} braced\nitself!"); -static const u8 sText_PkmnEnduredHit[] = _("{B_DEF_NAME_WITH_PREFIX} endured\nthe hit!"); +static const u8 sText_PkmnUproarKeptAwake[] = _("But the uproar kept {B_SCR_ACTIVE_NAME_WITH_PREFIX2} awake!"); +static const u8 sText_PkmnWokeUpInUproar[] = _("The uproar woke {B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnCausedUproar[] = _("{B_ATK_NAME_WITH_PREFIX} caused an uproar!"); +static const u8 sText_PkmnMakingUproar[] = _("{B_ATK_NAME_WITH_PREFIX} is making an uproar!"); +static const u8 sText_PkmnCalmedDown[] = _("{B_ATK_NAME_WITH_PREFIX} calmed down."); +static const u8 sText_PkmnCantSleepInUproar[] = _("But {B_DEF_NAME_WITH_PREFIX2} can't sleep in an uproar!"); +static const u8 sText_PkmnStockpiled[] = _("{B_ATK_NAME_WITH_PREFIX} stockpiled {B_BUFF1}!"); +static const u8 sText_PkmnCantStockpile[] = _("{B_ATK_NAME_WITH_PREFIX} can't stockpile any more!"); //I think this was replaced with just "But it failed!" +static const u8 sText_PkmnCantSleepInUproar2[] = _("But {B_DEF_NAME_WITH_PREFIX2} can't sleep in an uproar!"); +static const u8 sText_UproarKeptPkmnAwake[] = _("But the uproar kept {B_DEF_NAME_WITH_PREFIX2} awake!"); +static const u8 sText_PkmnStayedAwakeUsing[] = _("{B_DEF_NAME_WITH_PREFIX} stayed awake using its {B_DEF_ABILITY}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnStoringEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} is storing energy!"); +static const u8 sText_PkmnUnleashedEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} unleashed its energy!"); +static const u8 sText_PkmnFatigueConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} became confused due to fatigue!"); +static const u8 sText_PlayerPickedUpMoney[] = _("You picked up ¥{B_BUFF1}!\p"); +static const u8 sText_PkmnUnaffected[] = _("{B_DEF_NAME_WITH_PREFIX} is unaffected!"); +static const u8 sText_PkmnTransformedInto[] = _("{B_ATK_NAME_WITH_PREFIX} transformed into {B_BUFF1}!"); +static const u8 sText_PkmnMadeSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} put in a substitute!"); +static const u8 sText_PkmnHasSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} already has a substitute!"); +static const u8 sText_SubstituteDamaged[] = _("The substitute took damage for {B_DEF_NAME_WITH_PREFIX2}!\p"); +static const u8 sText_PkmnSubstituteFaded[] = _("{B_DEF_NAME_WITH_PREFIX}'s substitute faded!\p"); +static const u8 sText_PkmnMustRecharge[] = _("{B_ATK_NAME_WITH_PREFIX} must recharge!"); +static const u8 sText_PkmnRageBuilding[] = _("{B_DEF_NAME_WITH_PREFIX}'s rage is building!"); +static const u8 sText_PkmnMoveWasDisabled[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1} was disabled!"); +static const u8 sText_PkmnMoveDisabledNoMore[] = _("{B_ATK_NAME_WITH_PREFIX}'s move is no longer disabled!"); +static const u8 sText_PkmnGotEncore[] = _("{B_DEF_NAME_WITH_PREFIX} must do an encore!"); +static const u8 sText_PkmnEncoreEnded[] = _("{B_ATK_NAME_WITH_PREFIX} ended its encore!"); +static const u8 sText_PkmnTookAim[] = _("{B_ATK_NAME_WITH_PREFIX} took aim at {B_DEF_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnSketchedMove[] = _("{B_ATK_NAME_WITH_PREFIX} sketched {B_BUFF1}!"); +static const u8 sText_PkmnTryingToTakeFoe[] = _("{B_ATK_NAME_WITH_PREFIX} is hoping to take its attacker down with it!"); +static const u8 sText_PkmnTookFoe[] = _("{B_DEF_NAME_WITH_PREFIX} took its attacker down with it!"); +static const u8 sText_PkmnReducedPP[] = _("{B_DEF_NAME_WITH_PREFIX}'s PP was reduced!"); +static const u8 sText_PkmnStoleItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole {B_DEF_NAME_WITH_PREFIX2}'s {B_LAST_ITEM}!"); +static const u8 sText_TargetCantEscapeNow[] = _("{B_DEF_NAME_WITH_PREFIX} can no longer escape!"); +static const u8 sText_PkmnFellIntoNightmare[] = _("{B_DEF_NAME_WITH_PREFIX} began having a nightmare!"); +static const u8 sText_PkmnLockedInNightmare[] = _("{B_ATK_NAME_WITH_PREFIX} is locked in a nightmare!"); +static const u8 sText_PkmnLaidCurse[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP and put a curse on {B_DEF_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnAfflictedByCurse[] = _("{B_ATK_NAME_WITH_PREFIX} is afflicted by the curse!"); +static const u8 sText_SpikesScattered[] = _("Spikes were scattered on the ground all around {B_DEF_TEAM2} team!"); +static const u8 sText_PkmnHurtBySpikes[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was hurt by the spikes!"); +static const u8 sText_PkmnIdentified[] = _("{B_DEF_NAME_WITH_PREFIX} was identified!"); +static const u8 sText_PkmnPerishCountFell[] = _("{B_ATK_NAME_WITH_PREFIX}'s perish count fell to {B_BUFF1}!"); +static const u8 sText_PkmnBracedItself[] = _("{B_ATK_NAME_WITH_PREFIX} braced itself!"); +static const u8 sText_PkmnEnduredHit[] = _("{B_DEF_NAME_WITH_PREFIX} endured the hit!"); static const u8 sText_MagnitudeStrength[] = _("Magnitude {B_BUFF1}!"); -static const u8 sText_PkmnCutHPMaxedAttack[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own\nHP and maximized its Attack!"); -static const u8 sText_PkmnCopiedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX2}'s\lstat changes!"); -static const u8 sText_PkmnGotFree[] = _("{B_ATK_NAME_WITH_PREFIX} got free of\n{B_DEF_NAME_WITH_PREFIX2}'s\l{B_BUFF1}!"); //not in gen 5+, generic rapid spin? -static const u8 sText_PkmnShedLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX} shed\nLeech Seed!"); //not in gen 5+, generic rapid spin? -static const u8 sText_PkmnBlewAwaySpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nSpikes!"); //not in gen 5+, generic rapid spin? -static const u8 sText_PkmnFledFromBattle[] = _("{B_ATK_NAME_WITH_PREFIX} fled from\nbattle!"); -static const u8 sText_PkmnForesawAttack[] = _("{B_ATK_NAME_WITH_PREFIX} foresaw\nan attack!"); -static const u8 sText_PkmnTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX} took the\n{B_BUFF1} attack!"); -static const u8 sText_PkmnChoseXAsDestiny[] = _("{B_ATK_NAME_WITH_PREFIX} chose\nDoom Desire as its destiny!"); +static const u8 sText_PkmnCutHPMaxedAttack[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP and maximized its Attack!"); +static const u8 sText_PkmnCopiedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} copied {B_DEF_NAME_WITH_PREFIX2}'s stat changes!"); +static const u8 sText_PkmnGotFree[] = _("{B_ATK_NAME_WITH_PREFIX} got free of {B_DEF_NAME_WITH_PREFIX2}'s {B_BUFF1}!"); //not in gen 5+, generic rapid spin? +static const u8 sText_PkmnShedLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX} shed Leech Seed!"); //not in gen 5+, generic rapid spin? +static const u8 sText_PkmnBlewAwaySpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away Spikes!"); //not in gen 5+, generic rapid spin? +static const u8 sText_PkmnFledFromBattle[] = _("{B_ATK_NAME_WITH_PREFIX} fled from battle!"); +static const u8 sText_PkmnForesawAttack[] = _("{B_ATK_NAME_WITH_PREFIX} foresaw an attack!"); +static const u8 sText_PkmnTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX} took the {B_BUFF1} attack!"); +static const u8 sText_PkmnChoseXAsDestiny[] = _("{B_ATK_NAME_WITH_PREFIX} chose Doom Desire as its destiny!"); static const u8 sText_PkmnAttack[] = _("{B_BUFF1}'s attack!"); //not in gen 5+, expansion doesn't use anymore -static const u8 sText_PkmnCenterAttention[] = _("{B_DEF_NAME_WITH_PREFIX} became\nthe center of attention!"); -static const u8 sText_PkmnChargingPower[] = _("{B_ATK_NAME_WITH_PREFIX} began\ncharging power!"); -static const u8 sText_NaturePowerTurnedInto[] = _("Nature Power turned into\n{B_CURRENT_MOVE}!"); -static const u8 sText_PkmnStatusNormal[] = _("{B_ATK_NAME_WITH_PREFIX}'s status\nreturned to normal!"); -static const u8 sText_PkmnSubjectedToTorment[] = _("{B_DEF_NAME_WITH_PREFIX} was\nsubjected to torment!"); -static const u8 sText_PkmnTighteningFocus[] = _("{B_ATK_NAME_WITH_PREFIX} is\ntightening its focus!"); -static const u8 sText_PkmnFellForTaunt[] = _("{B_DEF_NAME_WITH_PREFIX} fell for\nthe taunt!"); -static const u8 sText_PkmnReadyToHelp[] = _("{B_ATK_NAME_WITH_PREFIX} is ready to\nhelp {B_DEF_NAME_WITH_PREFIX2}!"); -static const u8 sText_PkmnSwitchedItems[] = _("{B_ATK_NAME_WITH_PREFIX} switched\nitems with its target!"); -static const u8 sText_PkmnObtainedX[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}."); -static const u8 sText_PkmnObtainedX2[] = _("{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}."); -static const u8 sText_PkmnObtainedXYObtainedZ[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}.\p{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}."); -static const u8 sText_PkmnCopiedFoe[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX2}'s Ability!"); +static const u8 sText_PkmnCenterAttention[] = _("{B_DEF_NAME_WITH_PREFIX} became the center of attention!"); +static const u8 sText_PkmnChargingPower[] = _("{B_ATK_NAME_WITH_PREFIX} began charging power!"); +static const u8 sText_NaturePowerTurnedInto[] = _("Nature Power turned into {B_CURRENT_MOVE}!"); +static const u8 sText_PkmnStatusNormal[] = _("{B_ATK_NAME_WITH_PREFIX}'s status returned to normal!"); +static const u8 sText_PkmnSubjectedToTorment[] = _("{B_DEF_NAME_WITH_PREFIX} was subjected to torment!"); +static const u8 sText_PkmnTighteningFocus[] = _("{B_ATK_NAME_WITH_PREFIX} is tightening its focus!"); +static const u8 sText_PkmnFellForTaunt[] = _("{B_DEF_NAME_WITH_PREFIX} fell for the taunt!"); +static const u8 sText_PkmnReadyToHelp[] = _("{B_ATK_NAME_WITH_PREFIX} is ready to help {B_DEF_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnSwitchedItems[] = _("{B_ATK_NAME_WITH_PREFIX} switched items with its target!"); +static const u8 sText_PkmnObtainedX[] = _("{B_ATK_NAME_WITH_PREFIX} obtained {B_BUFF1}."); +static const u8 sText_PkmnObtainedX2[] = _("{B_DEF_NAME_WITH_PREFIX} obtained {B_BUFF2}."); +static const u8 sText_PkmnObtainedXYObtainedZ[] = _("{B_ATK_NAME_WITH_PREFIX} obtained {B_BUFF1}.\p{B_DEF_NAME_WITH_PREFIX} obtained {B_BUFF2}."); +static const u8 sText_PkmnCopiedFoe[] = _("{B_ATK_NAME_WITH_PREFIX} copied {B_DEF_NAME_WITH_PREFIX2}'s Ability!"); static const u8 sText_PkmnMadeWish[] = _("{B_ATK_NAME_WITH_PREFIX} made a wish!"); //unused -static const u8 sText_PkmnWishCameTrue[] = _("{B_BUFF1}'s wish\ncame true!"); -static const u8 sText_PkmnPlantedRoots[] = _("{B_ATK_NAME_WITH_PREFIX} planted\nits roots!"); -static const u8 sText_PkmnAbsorbedNutrients[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed\nnutrients with its roots!"); -static const u8 sText_PkmnAnchoredItself[] = _("{B_DEF_NAME_WITH_PREFIX} anchored\nitself with its roots!"); -static const u8 sText_PkmnWasMadeDrowsy[] = _("{B_DEF_NAME_WITH_PREFIX} grew\ndrowsy!"); -static const u8 sText_PkmnKnockedOff[] = _("{B_ATK_NAME_WITH_PREFIX} knocked off\n{B_DEF_NAME_WITH_PREFIX2}'s\l{B_LAST_ITEM}!"); -static const u8 sText_PkmnSwappedAbilities[] = _("{B_ATK_NAME_WITH_PREFIX} swapped\nAbilities with its target!"); -static const u8 sText_PkmnSealedOpponentMove[] = _("{B_ATK_NAME_WITH_PREFIX} sealed any\nmoves its target shares with it!"); -static const u8 sText_PkmnWantsGrudge[] = _("{B_ATK_NAME_WITH_PREFIX} wants\nits target to bear a grudge!"); -static const u8 sText_PkmnLostPPGrudge[] = _("{B_ATK_NAME_WITH_PREFIX}'s\n{B_BUFF1} lost all its PP\ldue to the grudge!"); -static const u8 sText_PkmnShroudedItself[] = _("{B_ATK_NAME_WITH_PREFIX} shrouded\nitself with Magic Coat!"); -static const u8 sText_PkmnMoveBounced[] = _("{B_EFF_NAME_WITH_PREFIX}\nbounced the {B_CURRENT_MOVE} back!"); -static const u8 sText_PkmnWaitsForTarget[] = _("{B_ATK_NAME_WITH_PREFIX} waits\nfor a target to make a move!"); -static const u8 sText_PkmnSnatchedMove[] = _("{B_DEF_NAME_WITH_PREFIX} snatched\n{B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s move!"); +static const u8 sText_PkmnWishCameTrue[] = _("{B_BUFF1}'s wish came true!"); +static const u8 sText_PkmnPlantedRoots[] = _("{B_ATK_NAME_WITH_PREFIX} planted its roots!"); +static const u8 sText_PkmnAbsorbedNutrients[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed nutrients with its roots!"); +static const u8 sText_PkmnAnchoredItself[] = _("{B_DEF_NAME_WITH_PREFIX} anchored itself with its roots!"); +static const u8 sText_PkmnWasMadeDrowsy[] = _("{B_DEF_NAME_WITH_PREFIX} grew drowsy!"); +static const u8 sText_PkmnKnockedOff[] = _("{B_ATK_NAME_WITH_PREFIX} knocked off {B_DEF_NAME_WITH_PREFIX2}'s {B_LAST_ITEM}!"); +static const u8 sText_PkmnSwappedAbilities[] = _("{B_ATK_NAME_WITH_PREFIX} swapped Abilities with its target!"); +static const u8 sText_PkmnSealedOpponentMove[] = _("{B_ATK_NAME_WITH_PREFIX} sealed any moves its target shares with it!"); +static const u8 sText_PkmnWantsGrudge[] = _("{B_ATK_NAME_WITH_PREFIX} wants its target to bear a grudge!"); +static const u8 sText_PkmnLostPPGrudge[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} lost all its PP due to the grudge!"); +static const u8 sText_PkmnShroudedItself[] = _("{B_ATK_NAME_WITH_PREFIX} shrouded itself with Magic Coat!"); +static const u8 sText_PkmnMoveBounced[] = _("{B_EFF_NAME_WITH_PREFIX} bounced the {B_CURRENT_MOVE} back!"); +static const u8 sText_PkmnWaitsForTarget[] = _("{B_ATK_NAME_WITH_PREFIX} waits for a target to make a move!"); +static const u8 sText_PkmnSnatchedMove[] = _("{B_DEF_NAME_WITH_PREFIX} snatched {B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s move!"); static const u8 sText_ElectricityWeakened[] = _("Electricity's power was weakened!"); static const u8 sText_FireWeakened[] = _("Fire's power was weakened!"); -static const u8 sText_XFoundOneY[] = _("{B_ATK_NAME_WITH_PREFIX} found\none {B_LAST_ITEM}!"); -static const u8 sText_SoothingAroma[] = _("A soothing aroma wafted\nthrough the area!"); +static const u8 sText_XFoundOneY[] = _("{B_ATK_NAME_WITH_PREFIX} found one {B_LAST_ITEM}!"); +static const u8 sText_SoothingAroma[] = _("A soothing aroma wafted through the area!"); static const u8 sText_ItemsCantBeUsedNow[] = _("Items can't be used now.{PAUSE 64}"); //not in gen 5+, i think -static const u8 sText_ForXCommaYZ[] = _("For {B_SCR_ACTIVE_NAME_WITH_PREFIX2},\n{B_LAST_ITEM} {B_BUFF1}"); //not in gen 5+, expansion doesn't use anymore -static const u8 sText_PkmnUsedXToGetPumped[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used\nthe {B_LAST_ITEM} to get pumped!"); -static const u8 sText_PkmnLostFocus[] = _("{B_ATK_NAME_WITH_PREFIX} lost its\nfocus and couldn't move!"); -static const u8 sText_PkmnWasDraggedOut[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndragged out!\p"); +static const u8 sText_ForXCommaYZ[] = _("For {B_SCR_ACTIVE_NAME_WITH_PREFIX2}, {B_LAST_ITEM} {B_BUFF1}"); //not in gen 5+, expansion doesn't use anymore +static const u8 sText_PkmnUsedXToGetPumped[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used the {B_LAST_ITEM} to get pumped!"); +static const u8 sText_PkmnLostFocus[] = _("{B_ATK_NAME_WITH_PREFIX} lost its focus and couldn't move!"); +static const u8 sText_PkmnWasDraggedOut[] = _("{B_DEF_NAME_WITH_PREFIX} was dragged out!\p"); static const u8 sText_TheWallShattered[] = _("The wall shattered!"); //not in gen5+, uses "your teams light screen wore off!" etc instead static const u8 sText_ButNoEffect[] = _("But it had no effect!"); -static const u8 sText_PkmnHasNoMovesLeft[] = _("{B_ATK_NAME_WITH_PREFIX} has\nno moves left that it can use!\p"); -static const u8 sText_PkmnMoveIsDisabled[] = _("{B_ATK_NAME_WITH_PREFIX}'s\n{B_CURRENT_MOVE} is disabled!\p"); -static const u8 sText_PkmnCantUseMoveTorment[] = _("{B_ATK_NAME_WITH_PREFIX} can't use\nthe same move twice in a row due\lto the torment!\p"); -static const u8 sText_PkmnCantUseMoveTaunt[] = _("{B_ATK_NAME_WITH_PREFIX} can't use\n{B_CURRENT_MOVE} after the taunt!\p"); -static const u8 sText_PkmnCantUseMoveSealed[] = _("{B_ATK_NAME_WITH_PREFIX} can't use\nits sealed {B_CURRENT_MOVE}!\p"); -static const u8 sText_PkmnCantUseMoveThroatChop[] = _("The effects of Throat Chop prevent\n{B_ATK_NAME_WITH_PREFIX2} from using certain moves!\p"); -static const u8 sText_PkmnMadeItRain[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} made it rain!"); //not in gen 5+, ability popup -static const u8 sText_PkmnRaisedSpeed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} raised its Speed!"); //not in gen 5+, ability popup -static const u8 sText_PkmnProtectedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was\nprotected by {B_DEF_ABILITY}!"); //not in gen 5+, ability popup -static const u8 sText_PkmnPreventsUsage[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} prevents\l{B_ATK_NAME_WITH_PREFIX2} from\lusing {B_CURRENT_MOVE}!"); //I don't see this in SV text -static const u8 sText_PkmnRestoredHPUsing[] = _("{B_DEF_NAME_WITH_PREFIX} restored HP\nusing its {B_DEF_ABILITY}!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXMadeYUseless[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} useless!"); //not in gen 5+, ability popup -static const u8 sText_PkmnChangedTypeWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} made it the\l{B_BUFF1} type!"); //not in gen 5+, ability popup -static const u8 sText_PkmnPreventsParalysisWith[] = _("{B_EFF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} prevents paralysis!"); //not in gen 5+, ability popup -static const u8 sText_PkmnPreventsRomanceWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} prevents romance!"); //not in gen 5+, ability popup -static const u8 sText_PkmnPreventsPoisoningWith[] = _("{B_EFF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} prevents poisoning!"); //not in gen 5+, ability popup -static const u8 sText_PkmnPreventsConfusionWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} prevents confusion!"); //not in gen 5+, ability popup -static const u8 sText_PkmnRaisedFirePowerWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} raised the power\lof Fire-type moves!"); //not in gen 5+, ability popup -static const u8 sText_PkmnAnchorsItselfWith[] = _("{B_DEF_NAME_WITH_PREFIX} anchors\nitself with {B_DEF_ABILITY}!"); //not in gen 5+, ability popup -static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} cuts\l{B_DEF_NAME_WITH_PREFIX2}'s attack!"); //not in gen 5+, ability popup -static const u8 sText_PkmnPreventsStatLossWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} prevents stat loss!"); //not in gen 5+, ability popup -static const u8 sText_PkmnHurtsWith[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt by\n{B_DEF_NAME_WITH_PREFIX2}'s\l{B_BUFF1}!"); -static const u8 sText_PkmnTraced[] = _("It traced {B_BUFF1}'s\n{B_BUFF2}!"); -static const u8 sText_PkmnsXPreventsBurns[] = _("{B_EFF_NAME_WITH_PREFIX}'s\n{B_EFF_ABILITY} prevents burns!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXBlocksY[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} blocks\l{B_CURRENT_MOVE}!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXBlocksY2[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} blocks\l{B_CURRENT_MOVE}!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXRestoredHPALittle2[] = _("{B_ATK_NAME_WITH_PREFIX}'s\n{B_ATK_ABILITY} restored its HP\la little!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXWhippedUpSandstorm[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} whipped up\la sandstorm!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXIntensifiedSun[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} intensified\lthe sun's rays!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXPreventsYLoss[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} prevents\l{B_BUFF1} loss!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXInfatuatedY[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} infatuated\l{B_ATK_NAME_WITH_PREFIX2}!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXMadeYIneffective[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} made\l{B_CURRENT_MOVE} ineffective!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXCuredYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} cured\lits {B_BUFF1} problem!"); //not in gen 5+, ability popup -static const u8 sText_ItSuckedLiquidOoze[] = _("{B_ATK_NAME_WITH_PREFIX} sucked up\nthe liquid ooze!"); -static const u8 sText_PkmnTransformed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}\ntransformed!"); -static const u8 sText_PkmnsXTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} took the attack!"); //In gen 5+ but without naming the ability +static const u8 sText_PkmnHasNoMovesLeft[] = _("{B_ATK_NAME_WITH_PREFIX} has no moves left that it can use!\p"); +static const u8 sText_PkmnMoveIsDisabled[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE} is disabled!\p"); +static const u8 sText_PkmnCantUseMoveTorment[] = _("{B_ATK_NAME_WITH_PREFIX} can't use the same move twice in a row due to the torment!\p"); +static const u8 sText_PkmnCantUseMoveTaunt[] = _("{B_ATK_NAME_WITH_PREFIX} can't use {B_CURRENT_MOVE} after the taunt!\p"); +static const u8 sText_PkmnCantUseMoveSealed[] = _("{B_ATK_NAME_WITH_PREFIX} can't use its sealed {B_CURRENT_MOVE}!\p"); +static const u8 sText_PkmnCantUseMoveThroatChop[] = _("The effects of Throat Chop prevent {B_ATK_NAME_WITH_PREFIX2} from using certain moves!\p"); +static const u8 sText_PkmnMadeItRain[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} made it rain!"); //not in gen 5+, ability popup +static const u8 sText_PkmnRaisedSpeed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} raised its Speed!"); //not in gen 5+, ability popup +static const u8 sText_PkmnProtectedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was protected by {B_DEF_ABILITY}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnPreventsUsage[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} prevents {B_ATK_NAME_WITH_PREFIX2} from using {B_CURRENT_MOVE}!"); //I don't see this in SV text +static const u8 sText_PkmnRestoredHPUsing[] = _("{B_DEF_NAME_WITH_PREFIX} restored HP using its {B_DEF_ABILITY}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXMadeYUseless[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} made {B_CURRENT_MOVE} useless!"); //not in gen 5+, ability popup +static const u8 sText_PkmnChangedTypeWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} made it the {B_BUFF1} type!"); //not in gen 5+, ability popup +static const u8 sText_PkmnPreventsParalysisWith[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} prevents paralysis!"); //not in gen 5+, ability popup +static const u8 sText_PkmnPreventsRomanceWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} prevents romance!"); //not in gen 5+, ability popup +static const u8 sText_PkmnPreventsPoisoningWith[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} prevents poisoning!"); //not in gen 5+, ability popup +static const u8 sText_PkmnPreventsConfusionWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} prevents confusion!"); //not in gen 5+, ability popup +static const u8 sText_PkmnRaisedFirePowerWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} raised the power of Fire-type moves!"); //not in gen 5+, ability popup +static const u8 sText_PkmnAnchorsItselfWith[] = _("{B_DEF_NAME_WITH_PREFIX} anchors itself with {B_DEF_ABILITY}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} cuts {B_DEF_NAME_WITH_PREFIX2}'s attack!"); //not in gen 5+, ability popup +static const u8 sText_PkmnPreventsStatLossWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} prevents stat loss!"); //not in gen 5+, ability popup +static const u8 sText_PkmnHurtsWith[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt by {B_DEF_NAME_WITH_PREFIX2}'s {B_BUFF1}!"); +static const u8 sText_PkmnTraced[] = _("It traced {B_BUFF1}'s {B_BUFF2}!"); +static const u8 sText_PkmnsXPreventsBurns[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY} prevents burns!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXBlocksY[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} blocks {B_CURRENT_MOVE}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXBlocksY2[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} blocks {B_CURRENT_MOVE}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXRestoredHPALittle2[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} restored its HP a little!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXWhippedUpSandstorm[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} whipped up a sandstorm!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXIntensifiedSun[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} intensified the sun's rays!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXPreventsYLoss[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} prevents {B_BUFF1} loss!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXInfatuatedY[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} infatuated {B_ATK_NAME_WITH_PREFIX2}!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXMadeYIneffective[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} made {B_CURRENT_MOVE} ineffective!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXCuredYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} cured its {B_BUFF1} problem!"); //not in gen 5+, ability popup +static const u8 sText_ItSuckedLiquidOoze[] = _("{B_ATK_NAME_WITH_PREFIX} sucked up the liquid ooze!"); +static const u8 sText_PkmnTransformed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} transformed!"); +static const u8 sText_PkmnsXTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} took the attack!"); //In gen 5+ but without naming the ability const u8 gText_PkmnsXPreventsSwitching[] = _("{B_BUFF1} is preventing switching out\nwith its {B_LAST_ABILITY} Ability!\p"); -static const u8 sText_PreventedFromWorking[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} prevented\l{B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s\l{B_BUFF1} from working!"); //unused -static const u8 sText_PkmnsXMadeItIneffective[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} made it ineffective!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXPreventsFlinching[] = _("{B_EFF_NAME_WITH_PREFIX}'s\n{B_EFF_ABILITY} prevents flinching!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXPreventsYsZ[] = _("{B_ATK_NAME_WITH_PREFIX}'s\n{B_ATK_ABILITY} prevents\l{B_DEF_NAME_WITH_PREFIX2}'s\l{B_DEF_ABILITY} from working!"); -static const u8 sText_PkmnsAbilityPreventsAbility[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX2}'s\l{B_DEF_ABILITY} from working!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXCuredItsYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} cured its\l{B_BUFF1} problem!"); //not in gen 5+, ability popup -static const u8 sText_PkmnsXHadNoEffectOnY[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_SCR_ACTIVE_ABILITY} had no effect on\l{B_EFF_NAME_WITH_PREFIX2}!"); //not in gen 5+, ability popup +static const u8 sText_PreventedFromWorking[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} prevented {B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s {B_BUFF1} from working!"); //unused +static const u8 sText_PkmnsXMadeItIneffective[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} made it ineffective!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXPreventsFlinching[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_EFF_ABILITY} prevents flinching!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXPreventsYsZ[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} prevents {B_DEF_NAME_WITH_PREFIX2}'s {B_DEF_ABILITY} from working!"); +static const u8 sText_PkmnsAbilityPreventsAbility[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} prevents {B_DEF_NAME_WITH_PREFIX2}'s {B_DEF_ABILITY} from working!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXCuredItsYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} cured its {B_BUFF1} problem!"); //not in gen 5+, ability popup +static const u8 sText_PkmnsXHadNoEffectOnY[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} had no effect on {B_EFF_NAME_WITH_PREFIX2}!"); //not in gen 5+, ability popup const u8 gText_StatSharply[] = _("sharply "); const u8 gText_StatRose[] = _("rose!"); static const u8 sText_StatHarshly[] = _("harshly "); const u8 sText_StatFell[] = _("fell!"); -static const u8 sText_AttackersStatRose[] = _("{B_ATK_NAME_WITH_PREFIX}'s\n{B_BUFF1} {B_BUFF2}"); +static const u8 sText_AttackersStatRose[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} {B_BUFF2}"); const u8 gText_DefendersStatRose[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_BUFF1} {B_BUFF2}"); -static const u8 sText_UsingItemTheStatOfPkmnRose[] = _("Using {B_LAST_ITEM}, the\n{B_BUFF1} of\l{B_SCR_ACTIVE_NAME_WITH_PREFIX2}\n{B_BUFF2}"); //todo: update this, will require code changes -static const u8 sText_AttackersStatFell[] = _("{B_ATK_NAME_WITH_PREFIX}'s\n{B_BUFF1} {B_BUFF2}"); -static const u8 sText_DefendersStatFell[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_BUFF1} {B_BUFF2}"); -static const u8 sText_StatsWontIncrease2[] = _("{B_ATK_NAME_WITH_PREFIX}'s stats\nwon't go any higher!"); -static const u8 sText_StatsWontDecrease2[] = _("{B_DEF_NAME_WITH_PREFIX}'s stats\nwon't go any lower!"); +static const u8 sText_UsingItemTheStatOfPkmnRose[] = _("Using {B_LAST_ITEM}, the {B_BUFF1} of {B_SCR_ACTIVE_NAME_WITH_PREFIX2} {B_BUFF2}"); //todo: update this, will require code changes +static const u8 sText_AttackersStatFell[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} {B_BUFF2}"); +static const u8 sText_DefendersStatFell[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1} {B_BUFF2}"); +static const u8 sText_StatsWontIncrease2[] = _("{B_ATK_NAME_WITH_PREFIX}'s stats won't go any higher!"); +static const u8 sText_StatsWontDecrease2[] = _("{B_DEF_NAME_WITH_PREFIX}'s stats won't go any lower!"); static const u8 sText_CriticalHit[] = _("A critical hit!"); static const u8 sText_OneHitKO[] = _("It's a one-hit KO!"); static const u8 sText_123Poof[] = _("One…{PAUSE 10}two…{PAUSE 10}and…{PAUSE 10}{PAUSE 20}{PLAY_SE SE_BALL_BOUNCE_1}ta-da!\p"); static const u8 sText_AndEllipsis[] = _("And…\p"); -static const u8 sText_HMMovesCantBeForgotten[] = _("HM moves can't be\nforgotten now.\p"); +static const u8 sText_HMMovesCantBeForgotten[] = _("HM moves can't be forgotten now.\p"); static const u8 sText_NotVeryEffective[] = _("It's not very effective…"); static const u8 sText_SuperEffective[] = _("It's super effective!"); static const u8 sText_GotAwaySafely[] = _("{PLAY_SE SE_FLEE}You got away safely!\p"); -static const u8 sText_PkmnFledUsingIts[] = _("{PLAY_SE SE_FLEE}{B_ATK_NAME_WITH_PREFIX} fled\nusing its {B_LAST_ITEM}!\p"); -static const u8 sText_PkmnFledUsing[] = _("{PLAY_SE SE_FLEE}{B_ATK_NAME_WITH_PREFIX} fled\nusing {B_ATK_ABILITY}!\p"); //not in gen 5+ +static const u8 sText_PkmnFledUsingIts[] = _("{PLAY_SE SE_FLEE}{B_ATK_NAME_WITH_PREFIX} fled using its {B_LAST_ITEM}!\p"); +static const u8 sText_PkmnFledUsing[] = _("{PLAY_SE SE_FLEE}{B_ATK_NAME_WITH_PREFIX} fled using {B_ATK_ABILITY}!\p"); //not in gen 5+ static const u8 sText_WildPkmnFled[] = _("{PLAY_SE SE_FLEE}The wild {B_BUFF1} fled!"); -static const u8 sText_PlayerDefeatedLinkTrainer[] = _("You defeated\n{B_LINK_OPPONENT1_NAME}!"); -static const u8 sText_TwoLinkTrainersDefeated[] = _("You defeated {B_LINK_OPPONENT1_NAME}\nand {B_LINK_OPPONENT2_NAME}!"); -static const u8 sText_PlayerLostAgainstLinkTrainer[] = _("You lost against\n{B_LINK_OPPONENT1_NAME}!"); -static const u8 sText_PlayerLostToTwo[] = _("You lost to {B_LINK_OPPONENT1_NAME}\nand {B_LINK_OPPONENT2_NAME}!"); -static const u8 sText_PlayerBattledToDrawLinkTrainer[] = _("You battled to a draw against\n{B_LINK_OPPONENT1_NAME}!"); -static const u8 sText_PlayerBattledToDrawVsTwo[] = _("You battled to a draw against\n{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}!"); +static const u8 sText_PlayerDefeatedLinkTrainer[] = _("You defeated {B_LINK_OPPONENT1_NAME}!"); +static const u8 sText_TwoLinkTrainersDefeated[] = _("You defeated {B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}!"); +static const u8 sText_PlayerLostAgainstLinkTrainer[] = _("You lost against {B_LINK_OPPONENT1_NAME}!"); +static const u8 sText_PlayerLostToTwo[] = _("You lost to {B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}!"); +static const u8 sText_PlayerBattledToDrawLinkTrainer[] = _("You battled to a draw against {B_LINK_OPPONENT1_NAME}!"); +static const u8 sText_PlayerBattledToDrawVsTwo[] = _("You battled to a draw against {B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}!"); static const u8 sText_WildFled[] = _("{PLAY_SE SE_FLEE}{B_LINK_OPPONENT1_NAME} fled!"); //not in gen 5+, replaced with match was forfeited text -static const u8 sText_TwoWildFled[] = _("{PLAY_SE SE_FLEE}{B_LINK_OPPONENT1_NAME} and\n{B_LINK_OPPONENT2_NAME} fled!"); //not in gen 5+, replaced with match was forfeited text -static const u8 sText_NoRunningFromTrainers[] = _("No! There's no running\nfrom a Trainer battle!\p"); +static const u8 sText_TwoWildFled[] = _("{PLAY_SE SE_FLEE}{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME} fled!"); //not in gen 5+, replaced with match was forfeited text +static const u8 sText_NoRunningFromTrainers[] = _("No! There's no running from a Trainer battle!\p"); static const u8 sText_CantEscape[] = _("You can't escape!\p"); static const u8 sText_DontLeaveBirch[] = _("PROF. BIRCH: Don't leave me like this!\p"); //no decapitalize until it is everywhere static const u8 sText_ButNothingHappened[] = _("But nothing happened!"); @@ -377,67 +377,67 @@ static const u8 sText_SnowStopped[] = _("The snow stopped."); static const u8 sText_FogCreptUp[] = _("Fog crept up as thick as soup!"); static const u8 sText_FogIsDeep[] = _("The fog is deep…"); static const u8 sText_FogLifted[] = _("The fog lifted."); -static const u8 sText_FailedToSpitUp[] = _("But it failed to spit up\na thing!"); //not in gen 5+, uses "but it failed" -static const u8 sText_FailedToSwallow[] = _("But it failed to swallow\na thing!"); //not in gen 5+, uses "but it failed" -static const u8 sText_WindBecameHeatWave[] = _("The wind turned into a\nHeat Wave!"); //unused +static const u8 sText_FailedToSpitUp[] = _("But it failed to spit up a thing!"); //not in gen 5+, uses "but it failed" +static const u8 sText_FailedToSwallow[] = _("But it failed to swallow a thing!"); //not in gen 5+, uses "but it failed" +static const u8 sText_WindBecameHeatWave[] = _("The wind turned into a Heat Wave!"); //unused static const u8 sText_StatChangesGone[] = _("All stat changes were eliminated!"); static const u8 sText_CoinsScattered[] = _("Coins were scattered everywhere!"); -static const u8 sText_TooWeakForSubstitute[] = _("But it does not have enough\nHP left to make a substitute!"); -static const u8 sText_SharedPain[] = _("The battlers shared\ntheir pain!"); +static const u8 sText_TooWeakForSubstitute[] = _("But it does not have enough HP left to make a substitute!"); +static const u8 sText_SharedPain[] = _("The battlers shared their pain!"); static const u8 sText_BellChimed[] = _("A bell chimed!"); -static const u8 sText_FaintInThree[] = _("All Pokémon that heard the song\nwill faint in three turns!"); -static const u8 sText_NoPPLeft[] = _("There's no PP left for\nthis move!\p"); //not in gen 5+ -static const u8 sText_ButNoPPLeft[] = _("But there was no PP left\nfor the move!"); -static const u8 sText_PkmnIgnoresAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} ignored\norders and kept sleeping!"); -static const u8 sText_PkmnIgnoredOrders[] = _("{B_ATK_NAME_WITH_PREFIX} ignored\norders!"); -static const u8 sText_PkmnBeganToNap[] = _("{B_ATK_NAME_WITH_PREFIX} began\nto nap!"); -static const u8 sText_PkmnLoafing[] = _("{B_ATK_NAME_WITH_PREFIX} is\nloafing around!"); +static const u8 sText_FaintInThree[] = _("All Pokémon that heard the song will faint in three turns!"); +static const u8 sText_NoPPLeft[] = _("There's no PP left for this move!\p"); //not in gen 5+ +static const u8 sText_ButNoPPLeft[] = _("But there was no PP left for the move!"); +static const u8 sText_PkmnIgnoresAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} ignored orders and kept sleeping!"); +static const u8 sText_PkmnIgnoredOrders[] = _("{B_ATK_NAME_WITH_PREFIX} ignored orders!"); +static const u8 sText_PkmnBeganToNap[] = _("{B_ATK_NAME_WITH_PREFIX} began to nap!"); +static const u8 sText_PkmnLoafing[] = _("{B_ATK_NAME_WITH_PREFIX} is loafing around!"); static const u8 sText_PkmnWontObey[] = _("{B_ATK_NAME_WITH_PREFIX} won't obey!"); -static const u8 sText_PkmnTurnedAway[] = _("{B_ATK_NAME_WITH_PREFIX} turned\naway!"); -static const u8 sText_PkmnPretendNotNotice[] = _("{B_ATK_NAME_WITH_PREFIX} pretended\nnot to notice!"); -static const u8 sText_EnemyAboutToSwitchPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} is\nabout to send out {B_BUFF2}.\pWill you switch your Pokémon?"); -static const u8 sText_PkmnLearnedMove2[] = _("{B_ATK_NAME_WITH_PREFIX} learned\n{B_BUFF1}!"); -static const u8 sText_PlayerDefeatedLinkTrainerTrainer1[] = _("You defeated\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p"); -static const u8 sText_CreptCloser[] = _("{B_PLAYER_NAME} crept closer to\n{B_OPPONENT_MON1_NAME}!"); //safari +static const u8 sText_PkmnTurnedAway[] = _("{B_ATK_NAME_WITH_PREFIX} turned away!"); +static const u8 sText_PkmnPretendNotNotice[] = _("{B_ATK_NAME_WITH_PREFIX} pretended not to notice!"); +static const u8 sText_EnemyAboutToSwitchPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} is about to send out {B_BUFF2}.\pWill you switch your Pokémon?"); +static const u8 sText_PkmnLearnedMove2[] = _("{B_ATK_NAME_WITH_PREFIX} learned {B_BUFF1}!"); +static const u8 sText_PlayerDefeatedLinkTrainerTrainer1[] = _("You defeated {B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p"); +static const u8 sText_CreptCloser[] = _("{B_PLAYER_NAME} crept closer to {B_OPPONENT_MON1_NAME}!"); //safari static const u8 sText_CantGetCloser[] = _("{B_PLAYER_NAME} can't get any closer!"); //safari -static const u8 sText_PkmnWatchingCarefully[] = _("{B_OPPONENT_MON1_NAME} is watching\ncarefully!"); //safari -static const u8 sText_PkmnCuriousAboutX[] = _("{B_OPPONENT_MON1_NAME} is curious about\nthe {B_BUFF1}!"); //safari -static const u8 sText_PkmnEnthralledByX[] = _("{B_OPPONENT_MON1_NAME} is enthralled by\nthe {B_BUFF1}!"); //safari -static const u8 sText_PkmnIgnoredX[] = _("{B_OPPONENT_MON1_NAME} completely ignored\nthe {B_BUFF1}!"); //safari -static const u8 sText_ThrewPokeblockAtPkmn[] = _("{B_PLAYER_NAME} threw a {POKEBLOCK}\nat the {B_OPPONENT_MON1_NAME}!"); //safari -static const u8 sText_OutOfSafariBalls[] = _("{PLAY_SE SE_DING_DONG}ANNOUNCER: You're out of\nSafari Balls! Game over!\p"); //safari +static const u8 sText_PkmnWatchingCarefully[] = _("{B_OPPONENT_MON1_NAME} is watching carefully!"); //safari +static const u8 sText_PkmnCuriousAboutX[] = _("{B_OPPONENT_MON1_NAME} is curious about the {B_BUFF1}!"); //safari +static const u8 sText_PkmnEnthralledByX[] = _("{B_OPPONENT_MON1_NAME} is enthralled by the {B_BUFF1}!"); //safari +static const u8 sText_PkmnIgnoredX[] = _("{B_OPPONENT_MON1_NAME} completely ignored the {B_BUFF1}!"); //safari +static const u8 sText_ThrewPokeblockAtPkmn[] = _("{B_PLAYER_NAME} threw a {POKEBLOCK} at the {B_OPPONENT_MON1_NAME}!"); //safari +static const u8 sText_OutOfSafariBalls[] = _("{PLAY_SE SE_DING_DONG}ANNOUNCER: You're out of Safari Balls! Game over!\p"); //safari static const u8 sText_OpponentMon1Appeared[] = _("{B_OPPONENT_MON1_NAME} appeared!\p"); static const u8 sText_WildPkmnAppeared[] = _("You encountered a wild {B_OPPONENT_MON1_NAME}!\p"); static const u8 sText_LegendaryPkmnAppeared[] = _("You encountered a wild {B_OPPONENT_MON1_NAME}!\p"); static const u8 sText_WildPkmnAppearedPause[] = _("You encountered a wild {B_OPPONENT_MON1_NAME}!{PAUSE 127}"); -static const u8 sText_TwoWildPkmnAppeared[] = _("Oh! A wild {B_OPPONENT_MON1_NAME} and\n{B_OPPONENT_MON2_NAME} appeared!\p"); -static const u8 sText_Trainer1WantsToBattle[] = _("You are challenged by\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p"); -static const u8 sText_LinkTrainerWantsToBattle[] = _("You are challenged by\n{B_LINK_OPPONENT1_NAME}!"); -static const u8 sText_TwoLinkTrainersWantToBattle[] = _("You are challenged by\n{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}!"); -static const u8 sText_Trainer1SentOutPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME}!"); -static const u8 sText_Trainer1SentOutTwoPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!"); -static const u8 sText_Trainer1SentOutPkmn2[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_BUFF1}!"); -static const u8 sText_LinkTrainerSentOutPkmn[] = _("{B_LINK_OPPONENT1_NAME} sent out\n{B_OPPONENT_MON1_NAME}!"); -static const u8 sText_LinkTrainerSentOutTwoPkmn[] = _("{B_LINK_OPPONENT1_NAME} sent out\n{B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!"); -static const u8 sText_TwoLinkTrainersSentOutPkmn[] = _("{B_LINK_OPPONENT1_NAME} sent out {B_LINK_OPPONENT_MON1_NAME}!\n{B_LINK_OPPONENT2_NAME} sent out {B_LINK_OPPONENT_MON2_NAME}!"); -static const u8 sText_LinkTrainerSentOutPkmn2[] = _("{B_LINK_OPPONENT1_NAME} sent out\n{B_BUFF1}!"); -static const u8 sText_LinkTrainerMultiSentOutPkmn[] = _("{B_LINK_SCR_TRAINER_NAME} sent out\n{B_BUFF1}!"); +static const u8 sText_TwoWildPkmnAppeared[] = _("Oh! A wild {B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME} appeared!\p"); +static const u8 sText_Trainer1WantsToBattle[] = _("You are challenged by {B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p"); +static const u8 sText_LinkTrainerWantsToBattle[] = _("You are challenged by {B_LINK_OPPONENT1_NAME}!"); +static const u8 sText_TwoLinkTrainersWantToBattle[] = _("You are challenged by {B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}!"); +static const u8 sText_Trainer1SentOutPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent out {B_OPPONENT_MON1_NAME}!"); +static const u8 sText_Trainer1SentOutTwoPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent out {B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!"); +static const u8 sText_Trainer1SentOutPkmn2[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent out {B_BUFF1}!"); +static const u8 sText_LinkTrainerSentOutPkmn[] = _("{B_LINK_OPPONENT1_NAME} sent out {B_OPPONENT_MON1_NAME}!"); +static const u8 sText_LinkTrainerSentOutTwoPkmn[] = _("{B_LINK_OPPONENT1_NAME} sent out {B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!"); +static const u8 sText_TwoLinkTrainersSentOutPkmn[] = _("{B_LINK_OPPONENT1_NAME} sent out {B_LINK_OPPONENT_MON1_NAME}! {B_LINK_OPPONENT2_NAME} sent out {B_LINK_OPPONENT_MON2_NAME}!"); +static const u8 sText_LinkTrainerSentOutPkmn2[] = _("{B_LINK_OPPONENT1_NAME} sent out {B_BUFF1}!"); +static const u8 sText_LinkTrainerMultiSentOutPkmn[] = _("{B_LINK_SCR_TRAINER_NAME} sent out {B_BUFF1}!"); static const u8 sText_GoPkmn[] = _("Go! {B_PLAYER_MON1_NAME}!"); -static const u8 sText_GoTwoPkmn[] = _("Go! {B_PLAYER_MON1_NAME} and\n{B_PLAYER_MON2_NAME}!"); +static const u8 sText_GoTwoPkmn[] = _("Go! {B_PLAYER_MON1_NAME} and {B_PLAYER_MON2_NAME}!"); static const u8 sText_GoPkmn2[] = _("Go! {B_BUFF1}!"); static const u8 sText_DoItPkmn[] = _("You're in charge, {B_BUFF1}!"); static const u8 sText_GoForItPkmn[] = _("Go for it, {B_BUFF1}!"); -static const u8 sText_JustALittleMorePkmn[] = _("Just a little more!\nHang in there, {B_BUFF1}!"); //currently unused, will require code changes -static const u8 sText_YourFoesWeakGetEmPkmn[] = _("Your opponent's weak!\nGet 'em, {B_BUFF1}!"); -static const u8 sText_LinkPartnerSentOutPkmnGoPkmn[] = _("{B_LINK_PARTNER_NAME} sent out {B_LINK_PLAYER_MON2_NAME}!\nGo! {B_LINK_PLAYER_MON1_NAME}!"); -static const u8 sText_PkmnSwitchOut[] = _("{B_BUFF1}, switch out!\nCome back!"); //currently unused, I believe its used for when you switch on a pokemon in shift mode -static const u8 sText_PkmnThatsEnough[] = _("{B_BUFF1}, that's enough!\nCome back!"); +static const u8 sText_JustALittleMorePkmn[] = _("Just a little more! Hang in there, {B_BUFF1}!"); //currently unused, will require code changes +static const u8 sText_YourFoesWeakGetEmPkmn[] = _("Your opponent's weak! Get 'em, {B_BUFF1}!"); +static const u8 sText_LinkPartnerSentOutPkmnGoPkmn[] = _("{B_LINK_PARTNER_NAME} sent out {B_LINK_PLAYER_MON2_NAME}! Go! {B_LINK_PLAYER_MON1_NAME}!"); +static const u8 sText_PkmnSwitchOut[] = _("{B_BUFF1}, switch out! Come back!"); //currently unused, I believe its used for when you switch on a pokemon in shift mode +static const u8 sText_PkmnThatsEnough[] = _("{B_BUFF1}, that's enough! Come back!"); static const u8 sText_PkmnComeBack[] = _("{B_BUFF1}, come back!"); -static const u8 sText_PkmnOkComeBack[] = _("OK, {B_BUFF1}!\nCome back!"); -static const u8 sText_PkmnGoodComeBack[] = _("Good job, {B_BUFF1}!\nCome back!"); -static const u8 sText_Trainer1WithdrewPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwithdrew {B_BUFF1}!"); -static const u8 sText_LinkTrainer1WithdrewPkmn[] = _("{B_LINK_OPPONENT1_NAME} withdrew\n{B_BUFF1}!"); -static const u8 sText_LinkTrainer2WithdrewPkmn[] = _("{B_LINK_SCR_TRAINER_NAME} withdrew\n{B_BUFF1}!"); +static const u8 sText_PkmnOkComeBack[] = _("OK, {B_BUFF1}! Come back!"); +static const u8 sText_PkmnGoodComeBack[] = _("Good job, {B_BUFF1}! Come back!"); +static const u8 sText_Trainer1WithdrewPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} withdrew {B_BUFF1}!"); +static const u8 sText_LinkTrainer1WithdrewPkmn[] = _("{B_LINK_OPPONENT1_NAME} withdrew {B_BUFF1}!"); +static const u8 sText_LinkTrainer2WithdrewPkmn[] = _("{B_LINK_SCR_TRAINER_NAME} withdrew {B_BUFF1}!"); static const u8 sText_WildPkmnPrefix[] = _("The wild "); static const u8 sText_FoePkmnPrefix[] = _("The opposing "); static const u8 sText_WildPkmnPrefixLower[] = _("the wild "); @@ -449,7 +449,7 @@ static const u8 sText_FoePkmnPrefix3[] = _("Opposing"); static const u8 sText_AllyPkmnPrefix2[] = _("Ally"); static const u8 sText_FoePkmnPrefix4[] = _("Opposing"); static const u8 sText_AllyPkmnPrefix3[] = _("Ally"); -static const u8 sText_AttackerUsedX[] = _("{B_ATK_NAME_WITH_PREFIX} used\n{B_BUFF3}!"); +static const u8 sText_AttackerUsedX[] = _("{B_ATK_NAME_WITH_PREFIX} used {B_BUFF3}!"); static const u8 sText_ExclamationMark[] = _("!"); static const u8 sText_ExclamationMark2[] = _("!"); static const u8 sText_ExclamationMark3[] = _("!"); @@ -486,56 +486,56 @@ const u8 *const gPokeblockWasTooXStringTable[FLAVOR_COUNT] = [FLAVOR_SOUR] = sText_PokeblockWasTooSour }; -static const u8 sText_PlayerUsedItem[] = _("You used\n{B_LAST_ITEM}!"); -static const u8 sText_WallyUsedItem[] = _("WALLY used\n{B_LAST_ITEM}!"); //no decapitalize until it is everywhere -static const u8 sText_Trainer1UsedItem[] = _("{B_ATK_TRAINER_CLASS} {B_ATK_TRAINER_NAME}\nused {B_LAST_ITEM}!"); -static const u8 sText_TrainerBlockedBall[] = _("The Trainer blocked\nyour Poké Ball!"); +static const u8 sText_PlayerUsedItem[] = _("You used {B_LAST_ITEM}!"); +static const u8 sText_WallyUsedItem[] = _("WALLY used {B_LAST_ITEM}!"); //no decapitalize until it is everywhere +static const u8 sText_Trainer1UsedItem[] = _("{B_ATK_TRAINER_CLASS} {B_ATK_TRAINER_NAME} used {B_LAST_ITEM}!"); +static const u8 sText_TrainerBlockedBall[] = _("The Trainer blocked your Poké Ball!"); static const u8 sText_DontBeAThief[] = _("Don't be a thief!"); -static const u8 sText_ItDodgedBall[] = _("It dodged your thrown Poké Ball!\nThis Pokémon can't be caught!"); +static const u8 sText_ItDodgedBall[] = _("It dodged your thrown Poké Ball! This Pokémon can't be caught!"); static const u8 sText_YouMissedPkmn[] = _("You missed the Pokémon!"); -static const u8 sText_PkmnBrokeFree[] = _("Oh no!\nThe Pokémon broke free!"); -static const u8 sText_ItAppearedCaught[] = _("Aww!\nIt appeared to be caught!"); -static const u8 sText_AarghAlmostHadIt[] = _("Aargh!\nAlmost had it!"); -static const u8 sText_ShootSoClose[] = _("Gah!\nIt was so close, too!"); -static const u8 sText_GotchaPkmnCaughtPlayer[] = _("Gotcha!\n{B_DEF_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}\p"); -static const u8 sText_GotchaPkmnCaughtWally[] = _("Gotcha!\n{B_DEF_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}{PAUSE 127}"); -static const u8 sText_GiveNicknameCaptured[] = _("Would you like to give\n{B_DEF_NAME} a nickname?"); -static const u8 sText_PkmnSentToPC[] = _("{B_DEF_NAME} has been sent\nto {B_PC_CREATOR_NAME} PC!"); //Still used lanette's pc since terminology is different +static const u8 sText_PkmnBrokeFree[] = _("Oh no! The Pokémon broke free!"); +static const u8 sText_ItAppearedCaught[] = _("Aww! It appeared to be caught!"); +static const u8 sText_AarghAlmostHadIt[] = _("Aargh! Almost had it!"); +static const u8 sText_ShootSoClose[] = _("Gah! It was so close, too!"); +static const u8 sText_GotchaPkmnCaughtPlayer[] = _("Gotcha! {B_DEF_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}\p"); +static const u8 sText_GotchaPkmnCaughtWally[] = _("Gotcha! {B_DEF_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}{PAUSE 127}"); +static const u8 sText_GiveNicknameCaptured[] = _("Would you like to give {B_DEF_NAME} a nickname?"); +static const u8 sText_PkmnSentToPC[] = _("{B_DEF_NAME} has been sent to {B_PC_CREATOR_NAME} PC!"); //Still used lanette's pc since terminology is different static const u8 sText_Someones[] = _("someone's"); static const u8 sText_Lanettes[] = _("LANETTE's"); //no decapitalize until it is everywhere -static const u8 sText_PkmnDataAddedToDex[] = _("{B_DEF_NAME}'s data has\nbeen added to the Pokédex!\p"); +static const u8 sText_PkmnDataAddedToDex[] = _("{B_DEF_NAME}'s data has been added to the Pokédex!\p"); static const u8 sText_ItIsRaining[] = _("It's raining!"); static const u8 sText_SandstormIsRaging[] = _("The sandstorm is raging!"); static const u8 sText_SunlightIsHarsh[] = _("The sunlight is harsh!"); static const u8 sText_ItIsHailing[] = _("It's hailing!"); static const u8 sText_ItIsSnowing[] = _("It's snowing!"); -static const u8 sText_IsCoveredWithGrass[] = _("The battlefield\nis covered with grass!"); -static const u8 sText_MistSwirlsAround[] = _("Mist swirls around\nthe battlefield!"); -static const u8 sText_ElectricCurrentIsRunning[] = _("An electric current is running\nacross the battlefield!"); +static const u8 sText_IsCoveredWithGrass[] = _("The battlefield is covered with grass!"); +static const u8 sText_MistSwirlsAround[] = _("Mist swirls around the battlefield!"); +static const u8 sText_ElectricCurrentIsRunning[] = _("An electric current is running across the battlefield!"); static const u8 sText_SeemsWeird[] = _("The battlefield seems weird!"); -static const u8 sText_BoxIsFull[] = _("The Box is full!\nYou can't catch any more!\p"); +static const u8 sText_BoxIsFull[] = _("The Box is full! You can't catch any more!\p"); static const u8 sText_EnigmaBerry[] = _("ENIGMA BERRY"); //no decapitalize until it is everywhere static const u8 sText_BerrySuffix[] = _(" BERRY"); //no decapitalize until it is everywhere -static const u8 sText_PkmnsItemCuredParalysis[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_LAST_ITEM} cured\lits paralysis!"); -static const u8 sText_PkmnsItemCuredPoison[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_LAST_ITEM} cured\lits poison!"); -static const u8 sText_PkmnsItemHealedBurn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_LAST_ITEM} cured\lits burn!"); -static const u8 sText_PkmnsItemHealedFrostbite[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_LAST_ITEM} cured\lits frostbite!"); -static const u8 sText_PkmnsItemDefrostedIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_LAST_ITEM} defrosted it!"); -static const u8 sText_PkmnsItemWokeIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_LAST_ITEM} woke it up!"); -static const u8 sText_PkmnsItemSnappedOut[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_LAST_ITEM} snapped it\lout of its confusion!"); -static const u8 sText_PkmnsItemCuredProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_LAST_ITEM} cured\lits {B_BUFF1} problem!"); -static const u8 sText_PkmnsItemNormalizedStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s\n{B_LAST_ITEM}\lnormalized its status!"); -static const u8 sText_PkmnsItemRestoredHealth[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored\nits health using its\l{B_LAST_ITEM}!"); -static const u8 sText_PkmnsItemRestoredPP[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored PP\nto its move {B_BUFF1} using its\l{B_LAST_ITEM}!"); -static const u8 sText_PkmnsItemRestoredStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} returned\nits stats to normal using its\l{B_LAST_ITEM}!"); -static const u8 sText_PkmnsItemRestoredHPALittle[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored\na little HP using its\l{B_LAST_ITEM}!"); -static const u8 sText_ItemAllowsOnlyYMove[] = _("{B_LAST_ITEM} only allows\nthe use of {B_CURRENT_MOVE}!\p"); -static const u8 sText_PkmnHungOnWithX[] = _("{B_DEF_NAME_WITH_PREFIX} hung on\nusing its {B_LAST_ITEM}!"); +static const u8 sText_PkmnsItemCuredParalysis[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM} cured its paralysis!"); +static const u8 sText_PkmnsItemCuredPoison[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM} cured its poison!"); +static const u8 sText_PkmnsItemHealedBurn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM} cured its burn!"); +static const u8 sText_PkmnsItemHealedFrostbite[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM} cured its frostbite!"); +static const u8 sText_PkmnsItemDefrostedIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM} defrosted it!"); +static const u8 sText_PkmnsItemWokeIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM} woke it up!"); +static const u8 sText_PkmnsItemSnappedOut[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM} snapped it out of its confusion!"); +static const u8 sText_PkmnsItemCuredProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM} cured its {B_BUFF1} problem!"); +static const u8 sText_PkmnsItemNormalizedStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ITEM} normalized its status!"); +static const u8 sText_PkmnsItemRestoredHealth[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored its health using its {B_LAST_ITEM}!"); +static const u8 sText_PkmnsItemRestoredPP[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored PP to its move {B_BUFF1} using its {B_LAST_ITEM}!"); +static const u8 sText_PkmnsItemRestoredStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} returned its stats to normal using its {B_LAST_ITEM}!"); +static const u8 sText_PkmnsItemRestoredHPALittle[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored a little HP using its {B_LAST_ITEM}!"); +static const u8 sText_ItemAllowsOnlyYMove[] = _("{B_LAST_ITEM} only allows the use of {B_CURRENT_MOVE}!\p"); +static const u8 sText_PkmnHungOnWithX[] = _("{B_DEF_NAME_WITH_PREFIX} hung on using its {B_LAST_ITEM}!"); const u8 gText_EmptyString3[] = _(""); static const u8 sText_PlayedFluteCatchyTune[] = _("{B_PLAYER_NAME} played the {B_LAST_ITEM}.\pNow, that's a catchy tune!"); -static const u8 sText_PlayedThe[] = _("{B_PLAYER_NAME} played the\n{B_LAST_ITEM}."); -static const u8 sText_PkmnHearingFluteAwoke[] = _("The Pokémon hearing the flute\nawoke!"); -static const u8 sText_YouThrowABallNowRight[] = _("You throw a Ball now, right?\nI… I'll do my best!"); +static const u8 sText_PlayedThe[] = _("{B_PLAYER_NAME} played the {B_LAST_ITEM}."); +static const u8 sText_PkmnHearingFluteAwoke[] = _("The Pokémon hearing the flute awoke!"); +static const u8 sText_YouThrowABallNowRight[] = _("You throw a Ball now, right? I… I'll do my best!"); // early declaration of strings static const u8 sText_PkmnIncapableOfPower[]; @@ -554,33 +554,33 @@ static const u8 sText_TwoInGameTrainersDefeated[]; static const u8 sText_Trainer2LoseText[]; // New battle strings. -static const u8 sText_EnduredViaSturdy[] = _("{B_DEF_NAME_WITH_PREFIX} endured\nthe hit using {B_DEF_ABILITY}!"); -static const u8 sText_PowerHerbActivation[] = _("{B_ATK_NAME_WITH_PREFIX} became\nfully charged due to its\l{B_LAST_ITEM}!"); -static const u8 sText_HurtByItem[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby the {B_LAST_ITEM}!"); -static const u8 sText_BadlyPoisonedByItem[] = _("{B_EFF_NAME_WITH_PREFIX} was badly\npoisoned by the {B_LAST_ITEM}!"); -static const u8 sText_BurnedByItem[] = _("{B_EFF_NAME_WITH_PREFIX} was burned\nby the {B_LAST_ITEM}!"); -static const u8 sText_TargetAbilityActivates[] = _("{B_DEF_NAME_WITH_PREFIX}'s\n{B_DEF_ABILITY} activates!"); +static const u8 sText_EnduredViaSturdy[] = _("{B_DEF_NAME_WITH_PREFIX} endured the hit using {B_DEF_ABILITY}!"); +static const u8 sText_PowerHerbActivation[] = _("{B_ATK_NAME_WITH_PREFIX} became fully charged due to its {B_LAST_ITEM}!"); +static const u8 sText_HurtByItem[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt by the {B_LAST_ITEM}!"); +static const u8 sText_BadlyPoisonedByItem[] = _("{B_EFF_NAME_WITH_PREFIX} was badly poisoned by the {B_LAST_ITEM}!"); +static const u8 sText_BurnedByItem[] = _("{B_EFF_NAME_WITH_PREFIX} was burned by the {B_LAST_ITEM}!"); +static const u8 sText_TargetAbilityActivates[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} activates!"); static const u8 sText_GravityIntensified[] = _("Gravity intensified!"); -static const u8 sText_TargetIdentified[] = _("{B_DEF_NAME_WITH_PREFIX} was\nidentified!"); +static const u8 sText_TargetIdentified[] = _("{B_DEF_NAME_WITH_PREFIX} was identified!"); static const u8 sText_TargetWokeUp[] = _("{B_DEF_NAME_WITH_PREFIX} woke up!"); -static const u8 sText_PkmnStoleAndAteItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole and\nate its target's {B_LAST_ITEM}!"); -static const u8 sText_TailWindBlew[] = _("The Tailwind blew from\nbehind {B_ATK_TEAM2} team!"); -static const u8 sText_PkmnWentBack[] = _("{B_ATK_NAME_WITH_PREFIX} went back\nto {B_ATK_TRAINER_NAME}!"); -static const u8 sText_PkmnCantUseItemsAnymore[] = _("{B_DEF_NAME_WITH_PREFIX} can't use\nitems anymore!"); -static const u8 sText_PkmnFlung[] = _("{B_ATK_NAME_WITH_PREFIX} flung its\n{B_LAST_ITEM}!"); -static const u8 sText_PkmnPreventedFromHealing[] = _("{B_DEF_NAME_WITH_PREFIX} was\nprevented from healing!"); -static const u8 sText_PkmnSwitchedAtkAndDef[] = _("{B_ATK_NAME_WITH_PREFIX} switched\nits Attack and Defense!"); -static const u8 sText_PkmnsAbilitySuppressed[] = _("{B_DEF_NAME_WITH_PREFIX}'s Ability\nwas suppressed!"); -static const u8 sText_ShieldedFromCriticalHits[] = _("Lucky Chant shielded {B_ATK_TEAM2} team\nfrom critical hits!"); -static const u8 sText_SwitchedAtkAndSpAtk[] = _("{B_ATK_NAME_WITH_PREFIX} switched all\nchanges to its Attack and Sp. Atk\pwith its target!"); -static const u8 sText_SwitchedDefAndSpDef[] = _("{B_ATK_NAME_WITH_PREFIX} switched all\nchanges to its Defense and Sp. Def\pwith its target!"); -static const u8 sText_PkmnAcquiredAbility[] = _("{B_DEF_NAME_WITH_PREFIX} acquired\n{B_DEF_ABILITY}!"); -static const u8 sText_PoisonSpikesScattered[] = _("Poison spikes were scattered on the\nground all around {B_DEF_TEAM2} team!"); -static const u8 sText_PkmnSwitchedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} switched\nstat changes with its target!"); -static const u8 sText_PkmnSurroundedWithVeilOfWater[] = _("{B_ATK_NAME_WITH_PREFIX} surrounded\nitself with a veil of water!"); -static const u8 sText_PkmnLevitatedOnElectromagnetism[] = _("{B_ATK_NAME_WITH_PREFIX} levitated\nwith electromagnetism!"); -static const u8 sText_PkmnTwistedDimensions[] = _("{B_ATK_NAME_WITH_PREFIX} twisted\nthe dimensions!"); -static const u8 sText_DimensionsWereTwisted[] = _("The dimensions were\ntwisted!"); +static const u8 sText_PkmnStoleAndAteItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole and ate its target's {B_LAST_ITEM}!"); +static const u8 sText_TailWindBlew[] = _("The Tailwind blew from behind {B_ATK_TEAM2} team!"); +static const u8 sText_PkmnWentBack[] = _("{B_ATK_NAME_WITH_PREFIX} went back to {B_ATK_TRAINER_NAME}!"); +static const u8 sText_PkmnCantUseItemsAnymore[] = _("{B_DEF_NAME_WITH_PREFIX} can't use items anymore!"); +static const u8 sText_PkmnFlung[] = _("{B_ATK_NAME_WITH_PREFIX} flung its {B_LAST_ITEM}!"); +static const u8 sText_PkmnPreventedFromHealing[] = _("{B_DEF_NAME_WITH_PREFIX} was prevented from healing!"); +static const u8 sText_PkmnSwitchedAtkAndDef[] = _("{B_ATK_NAME_WITH_PREFIX} switched its Attack and Defense!"); +static const u8 sText_PkmnsAbilitySuppressed[] = _("{B_DEF_NAME_WITH_PREFIX}'s Ability was suppressed!"); +static const u8 sText_ShieldedFromCriticalHits[] = _("Lucky Chant shielded {B_ATK_TEAM2} team from critical hits!"); +static const u8 sText_SwitchedAtkAndSpAtk[] = _("{B_ATK_NAME_WITH_PREFIX} switched all changes to its Attack and Sp. Atk\pwith its target!"); +static const u8 sText_SwitchedDefAndSpDef[] = _("{B_ATK_NAME_WITH_PREFIX} switched all changes to its Defense and Sp. Def\pwith its target!"); +static const u8 sText_PkmnAcquiredAbility[] = _("{B_DEF_NAME_WITH_PREFIX} acquired {B_DEF_ABILITY}!"); +static const u8 sText_PoisonSpikesScattered[] = _("Poison spikes were scattered on the ground all around {B_DEF_TEAM2} team!"); +static const u8 sText_PkmnSwitchedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} switched stat changes with its target!"); +static const u8 sText_PkmnSurroundedWithVeilOfWater[] = _("{B_ATK_NAME_WITH_PREFIX} surrounded itself with a veil of water!"); +static const u8 sText_PkmnLevitatedOnElectromagnetism[] = _("{B_ATK_NAME_WITH_PREFIX} levitated with electromagnetism!"); +static const u8 sText_PkmnTwistedDimensions[] = _("{B_ATK_NAME_WITH_PREFIX} twisted the dimensions!"); +static const u8 sText_DimensionsWereTwisted[] = _("The dimensions were twisted!"); static const u8 sText_PointedStonesFloat[] =_("Pointed stones float in the air\naround {B_DEF_TEAM2} team!"); static const u8 sText_CloakedInMysticalMoonlight[] =_("{B_ATK_NAME_WITH_PREFIX} became\ncloaked in mystical moonlight!"); static const u8 sText_TrappedBySwirlingMagma[] =_("{B_DEF_NAME_WITH_PREFIX} became\ntrapped by swirling magma!"); @@ -606,269 +606,269 @@ static const u8 sText_FreedFromSkyDrop[] =_("{B_DEF_NAME_WITH_PREFIX} was freed\ static const u8 sText_PostponeTargetMove[] =_("{B_DEF_NAME_WITH_PREFIX}'s move\nwas postponed!"); static const u8 sText_ReflectTargetsType[] =_("{B_ATK_NAME_WITH_PREFIX} became the\nsame type as {B_DEF_NAME_WITH_PREFIX2}!"); static const u8 sText_TransferHeldItem[] =_("{B_DEF_NAME_WITH_PREFIX} received {B_LAST_ITEM}\nfrom {B_ATK_NAME_WITH_PREFIX2}"); -static const u8 sText_EmbargoEnds[] = _("{B_ATK_NAME_WITH_PREFIX} can\nuse items again!"); +static const u8 sText_EmbargoEnds[] = _("{B_ATK_NAME_WITH_PREFIX} can use items again!"); static const u8 sText_Electromagnetism[] = _("electromagnetism"); -static const u8 sText_BufferEnds[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1}\nwore off!"); -static const u8 sText_ThroatChopEnds[] = _("{B_ATK_NAME_WITH_PREFIX} can\nuse sound-based moves again!"); -static const u8 sText_TelekinesisEnds[] = _("{B_ATK_NAME_WITH_PREFIX} was freed\nfrom the telekinesis!"); -static const u8 sText_TailwindEnds[] = _("{B_ATK_TEAM1} team's Tailwind\npetered out!"); -static const u8 sText_LuckyChantEnds[] = _("{B_ATK_TEAM1} team's Lucky Chant\nwore off!"); -static const u8 sText_TrickRoomEnds[] = _("The twisted dimensions returned to\nnormal!"); -static const u8 sText_WonderRoomEnds[] = _("Wonder Room wore off, and\nDefense and Sp. Def stats returned to normal!"); -static const u8 sText_MagicRoomEnds[] = _("Magic Room wore off, and held items'\neffects returned to normal!"); +static const u8 sText_BufferEnds[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} wore off!"); +static const u8 sText_ThroatChopEnds[] = _("{B_ATK_NAME_WITH_PREFIX} can use sound-based moves again!"); +static const u8 sText_TelekinesisEnds[] = _("{B_ATK_NAME_WITH_PREFIX} was freed from the telekinesis!"); +static const u8 sText_TailwindEnds[] = _("{B_ATK_TEAM1} team's Tailwind petered out!"); +static const u8 sText_LuckyChantEnds[] = _("{B_ATK_TEAM1} team's Lucky Chant wore off!"); +static const u8 sText_TrickRoomEnds[] = _("The twisted dimensions returned to normal!"); +static const u8 sText_WonderRoomEnds[] = _("Wonder Room wore off, and Defense and Sp. Def stats returned to normal!"); +static const u8 sText_MagicRoomEnds[] = _("Magic Room wore off, and held items' effects returned to normal!"); static const u8 sText_MudSportEnds[] = _("The effects of Mud Sport have faded."); static const u8 sText_WaterSportEnds[] = _("The effects of Water Sport have faded."); static const u8 sText_GravityEnds[] = _("Gravity returned to normal!"); -static const u8 sText_AquaRingHeal[] = _("A veil of water restored\n{B_ATK_NAME_WITH_PREFIX2}'s HP!"); -static const u8 sText_TargetAbilityRaisedStat[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nraised its {B_BUFF1}!"); -static const u8 sText_TargetAbilityLoweredStat[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nlowered its {B_BUFF1}!"); -static const u8 sText_AttackerAbilityRaisedStat[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nraised its {B_BUFF1}!"); -static const u8 sText_ScriptingAbilityRaisedStat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nraised its {B_BUFF1}!"); -static const u8 sText_ElectricTerrainEnds[] = _("The electricity disappeared\nfrom the battlefield."); -static const u8 sText_MistyTerrainEnds[] = _("The mist disappeared\nfrom the battlefield."); -static const u8 sText_PsychicTerrainEnds[] = _("The weirdness disappeared\nfrom the battlefield!"); -static const u8 sText_GrassyTerrainEnds[] = _("The grass disappeared\nfrom the battlefield."); -static const u8 sText_TargetsStatWasMaxedOut[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} maxed\nits {B_BUFF1}!"); -static const u8 sText_PoisonHealHpUp[] = _("The poisoning healed {B_ATK_NAME_WITH_PREFIX2}\na little bit!"); //don't think this message is displayed anymore +static const u8 sText_AquaRingHeal[] = _("A veil of water restored {B_ATK_NAME_WITH_PREFIX2}'s HP!"); +static const u8 sText_TargetAbilityRaisedStat[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} raised its {B_BUFF1}!"); +static const u8 sText_TargetAbilityLoweredStat[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} lowered its {B_BUFF1}!"); +static const u8 sText_AttackerAbilityRaisedStat[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} raised its {B_BUFF1}!"); +static const u8 sText_ScriptingAbilityRaisedStat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} raised its {B_BUFF1}!"); +static const u8 sText_ElectricTerrainEnds[] = _("The electricity disappeared from the battlefield."); +static const u8 sText_MistyTerrainEnds[] = _("The mist disappeared from the battlefield."); +static const u8 sText_PsychicTerrainEnds[] = _("The weirdness disappeared from the battlefield!"); +static const u8 sText_GrassyTerrainEnds[] = _("The grass disappeared from the battlefield."); +static const u8 sText_TargetsStatWasMaxedOut[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY} maxed its {B_BUFF1}!"); +static const u8 sText_PoisonHealHpUp[] = _("The poisoning healed {B_ATK_NAME_WITH_PREFIX2} a little bit!"); //don't think this message is displayed anymore static const u8 sText_BadDreamsDmg[] = _("{B_DEF_NAME_WITH_PREFIX} is tormented!"); static const u8 sText_MoldBreakerEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} breaks the mold!"); -static const u8 sText_TeravoltEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating\na bursting aura!"); -static const u8 sText_TurboblazeEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating\na blazing aura!"); -static const u8 sText_SlowStartEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is slow\nto get going!"); -static const u8 sText_SlowStartEnd[] = _("{B_ATK_NAME_WITH_PREFIX} finally got\nits act together!"); -static const u8 sText_SolarPowerHpDrop[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\ntakes its toll!"); //don't think this message is displayed anymore +static const u8 sText_TeravoltEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating a bursting aura!"); +static const u8 sText_TurboblazeEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating a blazing aura!"); +static const u8 sText_SlowStartEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is slow to get going!"); +static const u8 sText_SlowStartEnd[] = _("{B_ATK_NAME_WITH_PREFIX} finally got its act together!"); +static const u8 sText_SolarPowerHpDrop[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} takes its toll!"); //don't think this message is displayed anymore static const u8 sText_AftermathDmg[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt!"); static const u8 sText_AnticipationActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} shuddered!"); -static const u8 sText_ForewarnActivates[] = _("{B_SCR_ACTIVE_ABILITY} alerted {B_SCR_ACTIVE_NAME_WITH_PREFIX2}\nto {B_DEF_NAME_WITH_PREFIX2}'s {B_BUFF1}!"); -static const u8 sText_IceBodyHpGain[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nhealed it a little bit!"); //don't think this message is displayed anymore +static const u8 sText_ForewarnActivates[] = _("{B_SCR_ACTIVE_ABILITY} alerted {B_SCR_ACTIVE_NAME_WITH_PREFIX2} to {B_DEF_NAME_WITH_PREFIX2}'s {B_BUFF1}!"); +static const u8 sText_IceBodyHpGain[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} healed it a little bit!"); //don't think this message is displayed anymore static const u8 sText_SnowWarningHail[] = _("It started to hail!"); static const u8 sText_SnowWarningSnow[] = _("It started to snow!"); -static const u8 sText_FriskActivates[] = _("{B_ATK_NAME_WITH_PREFIX} frisked {B_DEF_NAME_WITH_PREFIX2} and\nfound its {B_LAST_ITEM}!"); -static const u8 sText_UnnerveEnters[] = _("{B_DEF_TEAM1} team is too nervous\nto eat Berries!"); -static const u8 sText_HarvestBerry[] = _("{B_ATK_NAME_WITH_PREFIX} harvested\nits {B_LAST_ITEM}!"); -static const u8 sText_LastAbilityRaisedBuff1[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ABILITY}\nraised its {B_BUFF1}!"); -static const u8 sText_MagicBounceActivates[] = _("{B_DEF_NAME_WITH_PREFIX} bounced the\n{B_ATK_NAME_WITH_PREFIX2} back!"); -static const u8 sText_ProteanTypeChange[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} transformed\nit into the {B_BUFF1} type!"); -static const u8 sText_SymbiosisItemPass[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} passed its {B_LAST_ITEM}\nto {B_ATK_NAME_WITH_PREFIX2} through {B_LAST_ABILITY}!"); -static const u8 sText_StealthRockDmg[] = _("Pointed stones dug into\n{B_SCR_ACTIVE_NAME_WITH_PREFIX2}!"); -static const u8 sText_ToxicSpikesAbsorbed[] = _("The poison spikes disappeared from\nthe ground around {B_ATK_TEAM2} team!"); +static const u8 sText_FriskActivates[] = _("{B_ATK_NAME_WITH_PREFIX} frisked {B_DEF_NAME_WITH_PREFIX2} and found its {B_LAST_ITEM}!"); +static const u8 sText_UnnerveEnters[] = _("{B_DEF_TEAM1} team is too nervous to eat Berries!"); +static const u8 sText_HarvestBerry[] = _("{B_ATK_NAME_WITH_PREFIX} harvested its {B_LAST_ITEM}!"); +static const u8 sText_LastAbilityRaisedBuff1[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ABILITY} raised its {B_BUFF1}!"); +static const u8 sText_MagicBounceActivates[] = _("{B_DEF_NAME_WITH_PREFIX} bounced the {B_ATK_NAME_WITH_PREFIX2} back!"); +static const u8 sText_ProteanTypeChange[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} transformed it into the {B_BUFF1} type!"); +static const u8 sText_SymbiosisItemPass[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} passed its {B_LAST_ITEM} to {B_ATK_NAME_WITH_PREFIX2} through {B_LAST_ABILITY}!"); +static const u8 sText_StealthRockDmg[] = _("Pointed stones dug into {B_SCR_ACTIVE_NAME_WITH_PREFIX2}!"); +static const u8 sText_ToxicSpikesAbsorbed[] = _("The poison spikes disappeared from the ground around {B_ATK_TEAM2} team!"); static const u8 sText_ToxicSpikesPoisoned[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was poisoned!"); -static const u8 sText_StickyWebSwitchIn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was\ncaught in a sticky web!"); -static const u8 sText_HealingWishCameTrue[] = _("The healing wish came true\nfor {B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_StickyWebSwitchIn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was caught in a sticky web!"); +static const u8 sText_HealingWishCameTrue[] = _("The healing wish came true for {B_ATK_NAME_WITH_PREFIX2}!"); static const u8 sText_HealingWishHealed[] = _("{B_ATK_NAME_WITH_PREFIX} regained health!"); -static const u8 sText_LunarDanceCameTrue[] = _("{B_ATK_NAME_WITH_PREFIX} became cloaked\nin mystical moonlight!"); -static const u8 sText_CursedBodyDisabled[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} was disabled\nby {B_DEF_NAME_WITH_PREFIX2}'s {B_DEF_ABILITY}!"); -static const u8 sText_AttackerAcquiredAbility[] = _("{B_ATK_NAME_WITH_PREFIX} acquired\n{B_ATK_ABILITY}!"); -static const u8 sText_TargetStatWontGoHigher[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}\nwon't go any higher!"); -static const u8 sText_PkmnMoveBouncedViaAbility[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE} was\nbounced back by {B_DEF_NAME_WITH_PREFIX2}'s\l{B_DEF_ABILITY}!"); -static const u8 sText_ImposterTransform[] = _("{B_ATK_NAME_WITH_PREFIX} transformed into\n{B_DEF_NAME_WITH_PREFIX2} using {B_LAST_ABILITY}!"); +static const u8 sText_LunarDanceCameTrue[] = _("{B_ATK_NAME_WITH_PREFIX} became cloaked in mystical moonlight!"); +static const u8 sText_CursedBodyDisabled[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_BUFF1} was disabled by {B_DEF_NAME_WITH_PREFIX2}'s {B_DEF_ABILITY}!"); +static const u8 sText_AttackerAcquiredAbility[] = _("{B_ATK_NAME_WITH_PREFIX} acquired {B_ATK_ABILITY}!"); +static const u8 sText_TargetStatWontGoHigher[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1} won't go any higher!"); +static const u8 sText_PkmnMoveBouncedViaAbility[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_CURRENT_MOVE} was bounced back by {B_DEF_NAME_WITH_PREFIX2}'s {B_DEF_ABILITY}!"); +static const u8 sText_ImposterTransform[] = _("{B_ATK_NAME_WITH_PREFIX} transformed into {B_DEF_NAME_WITH_PREFIX2} using {B_LAST_ABILITY}!"); static const u8 sText_NotDoneYet[] = _("This move effect is not done yet!\p"); -static const u8 sText_PkmnBlewAwayToxicSpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nToxic Spikes!"); -static const u8 sText_PkmnBlewAwayStickyWeb[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nSticky Web!"); -static const u8 sText_PkmnBlewAwayStealthRock[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nStealth Rock!"); -static const u8 sText_SpikesDisappearedFromTeam[] = _("The spikes disappeared from\nthe ground around {B_ATK_TEAM2} team!"); -static const u8 sText_ToxicSpikesDisappearedFromTeam[] = _("The poison spikes disappeared from\nthe ground around {B_ATK_TEAM2} team!"); -static const u8 sText_StealthRockDisappearedFromTeam[] = _("The pointed stones disappeared\nfrom around {B_ATK_TEAM2} team!"); -static const u8 sText_StickyWebDisappearedFromTeam[] = _("The sticky web has disappeared from\nthe ground around {B_ATK_TEAM2} team!"); -static const u8 sText_StickyWebUsed[] = _("A sticky web has been laid out\non the ground around {B_DEF_TEAM2} team!"); -static const u8 sText_QuashSuccess[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nmove was postponed!"); -static const u8 sText_IonDelugeOn[] = _("A deluge of ions showers\nthe battlefield!"); -static const u8 sText_TopsyTurvySwitchedStats[] = _("All stat changes on\n{B_DEF_NAME_WITH_PREFIX2} were inverted!"); -static const u8 sText_TerrainBecomesMisty[] = _("Mist swirled around\nthe battlefield!"); -static const u8 sText_TerrainBecomesGrassy[] = _("Grass grew to cover\nthe battlefield!"); -static const u8 sText_TerrainBecomesElectric[] = _("An electric current ran across\nthe battlefield!"); +static const u8 sText_PkmnBlewAwayToxicSpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away Toxic Spikes!"); +static const u8 sText_PkmnBlewAwayStickyWeb[] = _("{B_ATK_NAME_WITH_PREFIX} blew away Sticky Web!"); +static const u8 sText_PkmnBlewAwayStealthRock[] = _("{B_ATK_NAME_WITH_PREFIX} blew away Stealth Rock!"); +static const u8 sText_SpikesDisappearedFromTeam[] = _("The spikes disappeared from the ground around {B_ATK_TEAM2} team!"); +static const u8 sText_ToxicSpikesDisappearedFromTeam[] = _("The poison spikes disappeared from the ground around {B_ATK_TEAM2} team!"); +static const u8 sText_StealthRockDisappearedFromTeam[] = _("The pointed stones disappeared from around {B_ATK_TEAM2} team!"); +static const u8 sText_StickyWebDisappearedFromTeam[] = _("The sticky web has disappeared from the ground around {B_ATK_TEAM2} team!"); +static const u8 sText_StickyWebUsed[] = _("A sticky web has been laid out on the ground around {B_DEF_TEAM2} team!"); +static const u8 sText_QuashSuccess[] = _("{B_DEF_NAME_WITH_PREFIX}'s move was postponed!"); +static const u8 sText_IonDelugeOn[] = _("A deluge of ions showers the battlefield!"); +static const u8 sText_TopsyTurvySwitchedStats[] = _("All stat changes on {B_DEF_NAME_WITH_PREFIX2} were inverted!"); +static const u8 sText_TerrainBecomesMisty[] = _("Mist swirled around the battlefield!"); +static const u8 sText_TerrainBecomesGrassy[] = _("Grass grew to cover the battlefield!"); +static const u8 sText_TerrainBecomesElectric[] = _("An electric current ran across the battlefield!"); static const u8 sText_TerrainBecomesPsychic[] = _("The battlefield got weird!"); -static const u8 sText_TargetElectrified[] = _("{B_DEF_NAME_WITH_PREFIX}'s moves\nhave been electrified!"); -static const u8 sText_AssaultVestDoesntAllow[] = _("The effects of the {B_LAST_ITEM}\nprevent status moves from being used!\p"); -static const u8 sText_GravityPreventsUsage[] = _("{B_ATK_NAME_WITH_PREFIX} can't use {B_CURRENT_MOVE}\nbecause of gravity!\p"); -static const u8 sText_HealBlockPreventsUsage[] = _("{B_ATK_NAME_WITH_PREFIX} was\nprevented from healing!\p"); -static const u8 sText_MegaEvoReacting[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ITEM} is\nreacting to {B_ATK_TRAINER_NAME}'s Mega Ring!"); //actually displays the type of mega ring in inventory, but we didnt implement them :( -static const u8 sText_FerventWishReached[] = _("{B_ATK_TRAINER_NAME}'s fervent wish\nhas reached {B_ATK_NAME_WITH_PREFIX2}!"); -static const u8 sText_MegaEvoEvolved[] = _("{B_ATK_NAME_WITH_PREFIX} has Mega Evolved into\nMega {B_BUFF1}!"); +static const u8 sText_TargetElectrified[] = _("{B_DEF_NAME_WITH_PREFIX}'s moves have been electrified!"); +static const u8 sText_AssaultVestDoesntAllow[] = _("The effects of the {B_LAST_ITEM} prevent status moves from being used!\p"); +static const u8 sText_GravityPreventsUsage[] = _("{B_ATK_NAME_WITH_PREFIX} can't use {B_CURRENT_MOVE} because of gravity!\p"); +static const u8 sText_HealBlockPreventsUsage[] = _("{B_ATK_NAME_WITH_PREFIX} was prevented from healing!\p"); +static const u8 sText_MegaEvoReacting[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ITEM} is reacting to {B_ATK_TRAINER_NAME}'s Mega Ring!"); //actually displays the type of mega ring in inventory, but we didnt implement them :( +static const u8 sText_FerventWishReached[] = _("{B_ATK_TRAINER_NAME}'s fervent wish has reached {B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_MegaEvoEvolved[] = _("{B_ATK_NAME_WITH_PREFIX} has Mega Evolved into Mega {B_BUFF1}!"); const u8 sText_drastically[] = _("drastically "); const u8 sText_severely[] = _("severely "); -static const u8 sText_Infestation[] = _("{B_DEF_NAME_WITH_PREFIX} has been afflicted\nwith an infestation by {B_ATK_NAME_WITH_PREFIX2}!"); -static const u8 sText_NoEffectOnTarget[] = _("It won't have any effect\non {B_DEF_NAME_WITH_PREFIX2}!"); -static const u8 sText_BurstingFlames[] = _("The bursting flames\nhit {B_SCR_ACTIVE_NAME_WITH_PREFIX2}!"); -static const u8 sText_BestowItemGiving[] = _("{B_DEF_NAME_WITH_PREFIX} received {B_LAST_ITEM}\nfrom {B_ATK_NAME_WITH_PREFIX2}!"); -static const u8 sText_ThirdTypeAdded[] = _("{B_BUFF1} type was added to\n{B_DEF_NAME_WITH_PREFIX2}!"); -static const u8 sText_FellForFeint[] = _("{B_DEF_NAME_WITH_PREFIX} fell for\nthe feint!"); -static const u8 sText_PokemonCannotUseMove[] = _("{B_ATK_NAME_WITH_PREFIX} cannot\nuse {B_CURRENT_MOVE}!"); +static const u8 sText_Infestation[] = _("{B_DEF_NAME_WITH_PREFIX} has been afflicted with an infestation by {B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_NoEffectOnTarget[] = _("It won't have any effect on {B_DEF_NAME_WITH_PREFIX2}!"); +static const u8 sText_BurstingFlames[] = _("The bursting flames hit {B_SCR_ACTIVE_NAME_WITH_PREFIX2}!"); +static const u8 sText_BestowItemGiving[] = _("{B_DEF_NAME_WITH_PREFIX} received {B_LAST_ITEM} from {B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_ThirdTypeAdded[] = _("{B_BUFF1} type was added to {B_DEF_NAME_WITH_PREFIX2}!"); +static const u8 sText_FellForFeint[] = _("{B_DEF_NAME_WITH_PREFIX} fell for the feint!"); +static const u8 sText_PokemonCannotUseMove[] = _("{B_ATK_NAME_WITH_PREFIX} cannot use {B_CURRENT_MOVE}!"); static const u8 sText_CoveredInPowder[] = _("{B_DEF_NAME_WITH_PREFIX} is covered in powder!"); -static const u8 sText_PowderExplodes[] = _("When the flame touched the powder\non the Pokémon, it exploded!"); -static const u8 sText_BelchCantUse[] = _("{B_ATK_NAME_WITH_PREFIX} hasn't eaten\nany held Berries, so it can't possibly belch!\p"); -static const u8 sText_SpectralThiefSteal[] = _("{B_ATK_NAME_WITH_PREFIX} stole the target's\nboosted stats!"); -static const u8 sText_GravityGrounding[] = _("{B_DEF_NAME_WITH_PREFIX} fell from the sky\ndue to the gravity!"); -static const u8 sText_MistyTerrainPreventsStatus[] = _("{B_DEF_NAME_WITH_PREFIX} surrounds itself\nwith a protective mist!"); +static const u8 sText_PowderExplodes[] = _("When the flame touched the powder on the Pokémon, it exploded!"); +static const u8 sText_BelchCantUse[] = _("{B_ATK_NAME_WITH_PREFIX} hasn't eaten any held Berries, so it can't possibly belch!\p"); +static const u8 sText_SpectralThiefSteal[] = _("{B_ATK_NAME_WITH_PREFIX} stole the target's boosted stats!"); +static const u8 sText_GravityGrounding[] = _("{B_DEF_NAME_WITH_PREFIX} fell from the sky due to the gravity!"); +static const u8 sText_MistyTerrainPreventsStatus[] = _("{B_DEF_NAME_WITH_PREFIX} surrounds itself with a protective mist!"); static const u8 sText_GrassyTerrainHeals[] = _("{B_ATK_NAME_WITH_PREFIX} is healed by the grassy terrain!"); -static const u8 sText_ElectricTerrainPreventsSleep[] = _("{B_DEF_NAME_WITH_PREFIX} surrounds itself\nwith electrified terrain!"); -static const u8 sText_PsychicTerrainPreventsPriority[] = _("{B_DEF_NAME_WITH_PREFIX} surrounds itself\nwith psychic terrain!"); -static const u8 sText_SafetyGogglesProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is not affected\nthanks to its {B_LAST_ITEM}!"); -static const u8 sText_FlowerVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} surrounded itself\nwith a veil of petals!"); -static const u8 sText_SweetVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} can't fall asleep\ndue to a veil of sweetness!"); -static const u8 sText_AromaVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is protected\nby an aromatic veil!"); +static const u8 sText_ElectricTerrainPreventsSleep[] = _("{B_DEF_NAME_WITH_PREFIX} surrounds itself with electrified terrain!"); +static const u8 sText_PsychicTerrainPreventsPriority[] = _("{B_DEF_NAME_WITH_PREFIX} surrounds itself with psychic terrain!"); +static const u8 sText_SafetyGogglesProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is not affected thanks to its {B_LAST_ITEM}!"); +static const u8 sText_FlowerVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} surrounded itself with a veil of petals!"); +static const u8 sText_SweetVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} can't fall asleep due to a veil of sweetness!"); +static const u8 sText_AromaVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is protected by an aromatic veil!"); static const u8 sText_CelebrateMessage[] = _("Congratulations, {B_PLAYER_NAME}!"); -static const u8 sText_UsedInstructedMove[] = _("{B_ATK_NAME_WITH_PREFIX} followed\n {B_BUFF1}'s instructions!"); -static const u8 sText_LaserFocusMessage[] = _("{B_ATK_NAME_WITH_PREFIX}\nconcentrated intensely!"); -static const u8 sText_GemActivates[] = _("The {B_LAST_ITEM} strengthened\n{B_ATK_NAME_WITH_PREFIX2}'s power!"); -static const u8 sText_BerryDmgReducing[] = _("The {B_LAST_ITEM} weakened the damage\nto {B_DEF_NAME_WITH_PREFIX2}!"); +static const u8 sText_UsedInstructedMove[] = _("{B_ATK_NAME_WITH_PREFIX} followed {B_BUFF1}'s instructions!"); +static const u8 sText_LaserFocusMessage[] = _("{B_ATK_NAME_WITH_PREFIX} concentrated intensely!"); +static const u8 sText_GemActivates[] = _("The {B_LAST_ITEM} strengthened {B_ATK_NAME_WITH_PREFIX2}'s power!"); +static const u8 sText_BerryDmgReducing[] = _("The {B_LAST_ITEM} weakened the damage to {B_DEF_NAME_WITH_PREFIX2}!"); static const u8 sText_TargetAteItem[] = _("{B_DEF_NAME_WITH_PREFIX} ate its {B_LAST_ITEM}!"); -static const u8 sText_AirBalloonFloat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} floats in the air\nwith its Air Balloon!"); +static const u8 sText_AirBalloonFloat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} floats in the air with its Air Balloon!"); static const u8 sText_AirBalloonPop[] = _("{B_DEF_NAME_WITH_PREFIX}'s Air Balloon popped!"); -static const u8 sText_IncinerateBurn[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}\nwas burnt up!"); -static const u8 sText_BugBite[] = _("{B_ATK_NAME_WITH_PREFIX} stole and ate\nits target's {B_LAST_ITEM}!"); +static const u8 sText_IncinerateBurn[] = _("{B_EFF_NAME_WITH_PREFIX}'s {B_LAST_ITEM} was burnt up!"); +static const u8 sText_BugBite[] = _("{B_ATK_NAME_WITH_PREFIX} stole and ate its target's {B_LAST_ITEM}!"); static const u8 sText_IllusionWoreOff[] = _("{B_DEF_NAME_WITH_PREFIX}'s illusion wore off!"); -static const u8 sText_AttackerCuredTargetStatus[] = _("{B_ATK_NAME_WITH_PREFIX} cured\n{B_DEF_NAME_WITH_PREFIX2}'s problem!"); +static const u8 sText_AttackerCuredTargetStatus[] = _("{B_ATK_NAME_WITH_PREFIX} cured {B_DEF_NAME_WITH_PREFIX2}'s problem!"); static const u8 sText_AttackerLostFireType[] = _("{B_ATK_NAME_WITH_PREFIX} burned itself out!"); -static const u8 sText_HealerCure[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ABILITY}\ncured {B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s problem!"); -static const u8 sText_ReceiverAbilityTakeOver[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nwas taken over!"); +static const u8 sText_HealerCure[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_LAST_ABILITY} cured {B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s problem!"); +static const u8 sText_ReceiverAbilityTakeOver[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} was taken over!"); static const u8 sText_PkmnAbsorbingPower[] = _("{B_ATK_NAME_WITH_PREFIX} is absorbing power!"); -static const u8 sText_NoOneWillBeAbleToRun[] = _("No one will be able to run away\nduring the next turn!"); -static const u8 sText_DestinyKnotActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} fell in love\nbecause of the {B_LAST_ITEM}!"); -static const u8 sText_CloakedInAFreezingLight[] = _("{B_ATK_NAME_WITH_PREFIX} became cloaked\nin a freezing light!"); -static const u8 sText_ClearAmuletWontLowerStats[] = _("The effects of the {B_LAST_ITEM}\nheld by {B_DEF_NAME_WITH_PREFIX2} prevents\lits stats from being lowered!"); +static const u8 sText_NoOneWillBeAbleToRun[] = _("No one will be able to run away during the next turn!"); +static const u8 sText_DestinyKnotActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} fell in love because of the {B_LAST_ITEM}!"); +static const u8 sText_CloakedInAFreezingLight[] = _("{B_ATK_NAME_WITH_PREFIX} became cloaked in a freezing light!"); +static const u8 sText_ClearAmuletWontLowerStats[] = _("The effects of the {B_LAST_ITEM} held by {B_DEF_NAME_WITH_PREFIX2} prevents its stats from being lowered!"); static const u8 sText_AuraFlaredToLife[] = _("{B_DEF_NAME_WITH_PREFIX}'s aura flared to life!"); -static const u8 sText_AirLockActivates[] = _("The effects of the weather\ndisappeared."); -static const u8 sText_PressureActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is exerting its\npressure!"); -static const u8 sText_DarkAuraActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating\na dark aura!"); -static const u8 sText_FairyAuraActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating\na fairy aura!"); -static const u8 sText_AuraBreakActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} reversed all\nother Pokémon's auras!"); +static const u8 sText_AirLockActivates[] = _("The effects of the weather disappeared."); +static const u8 sText_PressureActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is exerting its pressure!"); +static const u8 sText_DarkAuraActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating a dark aura!"); +static const u8 sText_FairyAuraActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is radiating a fairy aura!"); +static const u8 sText_AuraBreakActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} reversed all other Pokémon's auras!"); static const u8 sText_ComatoseActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is drowsing!"); -static const u8 sText_ScreenCleanerActivates[] = _("All screens on the field were\ncleansed!"); -static const u8 sText_FetchedPokeBall[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} found\na {B_LAST_ITEM}!"); -static const u8 sText_BattlerAbilityRaisedStat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nraised its {B_BUFF1}!"); +static const u8 sText_ScreenCleanerActivates[] = _("All screens on the field were cleansed!"); +static const u8 sText_FetchedPokeBall[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} found a {B_LAST_ITEM}!"); +static const u8 sText_BattlerAbilityRaisedStat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} raised its {B_BUFF1}!"); static const u8 sText_ASandstormKickedUp[] = _("A sandstorm kicked up!"); -static const u8 sText_PkmnsWillPerishIn3Turns[] = _("Both Pokémon will perish\nin three turns!"); //don't think this message is displayed anymore -static const u8 sText_AbilityRaisedStatDrastically[] = _("{B_DEF_ABILITY} raised {B_DEF_NAME_WITH_PREFIX2}'s\n{B_BUFF1} drastically!"); +static const u8 sText_PkmnsWillPerishIn3Turns[] = _("Both Pokémon will perish in three turns!"); //don't think this message is displayed anymore +static const u8 sText_AbilityRaisedStatDrastically[] = _("{B_DEF_ABILITY} raised {B_DEF_NAME_WITH_PREFIX2}'s {B_BUFF1} drastically!"); static const u8 sText_AsOneEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} has two Abilities!"); -static const u8 sText_PkmnMadeShellGleam[] = _("{B_DEF_NAME_WITH_PREFIX} made its shell gleam!\nIt's distorting type matchups!"); -static const u8 sText_CuriousMedicineEnters[] = _("{B_EFF_NAME_WITH_PREFIX}'s\nstat changes were removed!"); -static const u8 sText_CanActFaster[] = _("{B_ATK_NAME_WITH_PREFIX} can act faster\nthan normal, thanks to its {B_BUFF1}!"); -static const u8 sText_MicleBerryActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted the accuracy of\nits next move using {B_LAST_ITEM}!"); -static const u8 sText_PkmnShookOffTheTaunt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} shook off\nthe taunt!"); -static const u8 sText_PkmnGotOverItsInfatuation[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} got over\nits infatuation!"); -static const u8 sText_ZPowerSurrounds[] = _("{B_ATK_NAME_WITH_PREFIX} surrounded\nitself with its Z-Power!"); -static const u8 sText_ZPowerUnleashed[] = _("{B_ATK_NAME_WITH_PREFIX} unleashes\nits full-force Z-Move!"); -static const u8 sText_ZMoveResetsStats[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} returned\nits decreased stats to normal\lusing its Z-Power!"); -static const u8 sText_ZMoveAllStatsUp[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted\nits stats using its Z-Power!"); -static const u8 sText_ZMoveBoostCrit[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted\nits critical-hit ratio using its Z-Power!"); -static const u8 sText_ZMoveRestoreHp[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored\nits HP using its Z-Power!"); -static const u8 sText_ZMoveStatUp[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted\nits stats using its Z-Power!"); -static const u8 sText_ZMoveHpSwitchInTrap[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s HP\nwas restored by the Z-Power!"); -static const u8 sText_TerrainReturnedToNormal[] = _("The terrain returned to\nnormal!"); +static const u8 sText_PkmnMadeShellGleam[] = _("{B_DEF_NAME_WITH_PREFIX} made its shell gleam! It's distorting type matchups!"); +static const u8 sText_CuriousMedicineEnters[] = _("{B_EFF_NAME_WITH_PREFIX}'s stat changes were removed!"); +static const u8 sText_CanActFaster[] = _("{B_ATK_NAME_WITH_PREFIX} can act faster than normal, thanks to its {B_BUFF1}!"); +static const u8 sText_MicleBerryActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted the accuracy of its next move using {B_LAST_ITEM}!"); +static const u8 sText_PkmnShookOffTheTaunt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} shook off the taunt!"); +static const u8 sText_PkmnGotOverItsInfatuation[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} got over its infatuation!"); +static const u8 sText_ZPowerSurrounds[] = _("{B_ATK_NAME_WITH_PREFIX} surrounded itself with its Z-Power!"); +static const u8 sText_ZPowerUnleashed[] = _("{B_ATK_NAME_WITH_PREFIX} unleashes its full-force Z-Move!"); +static const u8 sText_ZMoveResetsStats[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} returned its decreased stats to normal using its Z-Power!"); +static const u8 sText_ZMoveAllStatsUp[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted its stats using its Z-Power!"); +static const u8 sText_ZMoveBoostCrit[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted its critical-hit ratio using its Z-Power!"); +static const u8 sText_ZMoveRestoreHp[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} restored its HP using its Z-Power!"); +static const u8 sText_ZMoveStatUp[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted its stats using its Z-Power!"); +static const u8 sText_ZMoveHpSwitchInTrap[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s HP was restored by the Z-Power!"); +static const u8 sText_TerrainReturnedToNormal[] = _("The terrain returned to normal!"); static const u8 sText_ItemCannotBeRemoved[] = _("{B_ATK_NAME_WITH_PREFIX}'s item cannot be removed!"); -static const u8 sText_StickyBarbTransfer[] = _("The {B_LAST_ITEM} attached itself to\n{B_ATK_NAME_WITH_PREFIX2}!"); -static const u8 sText_PkmnBurnHealed[] = _("{B_DEF_NAME_WITH_PREFIX}'s\nburn was cured!"); -static const u8 sText_RedCardActivate[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} held up its Red Card\nagainst {B_ATK_NAME_WITH_PREFIX2}!"); -static const u8 sText_EjectButtonActivate[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is switched\nout with the {B_LAST_ITEM}!"); +static const u8 sText_StickyBarbTransfer[] = _("The {B_LAST_ITEM} attached itself to {B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnBurnHealed[] = _("{B_DEF_NAME_WITH_PREFIX}'s burn was cured!"); +static const u8 sText_RedCardActivate[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} held up its Red Card against {B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_EjectButtonActivate[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is switched out with the {B_LAST_ITEM}!"); static const u8 sText_AttackerGotOverInfatuation[] =_("{B_ATK_NAME_WITH_PREFIX} got over\nits infatuation!"); -static const u8 sText_TormentedNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is\nno longer tormented!"); -static const u8 sText_HealBlockedNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is cured of\nits heal block!"); -static const u8 sText_AttackerBecameFullyCharged[] = _("{B_ATK_NAME_WITH_PREFIX} became fully charged\ndue to its bond with its trainer!\p"); +static const u8 sText_TormentedNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is no longer tormented!"); +static const u8 sText_HealBlockedNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is cured of its heal block!"); +static const u8 sText_AttackerBecameFullyCharged[] = _("{B_ATK_NAME_WITH_PREFIX} became fully charged due to its bond with its trainer!\p"); static const u8 sText_AttackerBecameAshSpecies[] = _("{B_ATK_NAME_WITH_PREFIX} became Ash-Greninja!\p"); static const u8 sText_ExtremelyHarshSunlight[] = _("The sunlight turned extremely harsh!"); static const u8 sText_ExtremeSunlightFaded[] = _("The extremely harsh sunlight faded!{PAUSE 64}"); -static const u8 sText_MoveEvaporatedInTheHarshSunlight[] = _("The Water-type attack evaporated\nin the extremely harsh sunlight!"); -static const u8 sText_ExtremelyHarshSunlightWasNotLessened[] = _("The extremely harsh sunlight\nwas not lessened at all!"); +static const u8 sText_MoveEvaporatedInTheHarshSunlight[] = _("The Water-type attack evaporated in the extremely harsh sunlight!"); +static const u8 sText_ExtremelyHarshSunlightWasNotLessened[] = _("The extremely harsh sunlight was not lessened at all!"); static const u8 sText_HeavyRain[] = _("A heavy rain began to fall!"); static const u8 sText_HeavyRainLifted[] = _("The heavy rain has lifted!{PAUSE 64}"); -static const u8 sText_MoveFizzledOutInTheHeavyRain[] = _("The Fire-type attack fizzled out\nin the heavy rain!"); -static const u8 sText_NoReliefFromHeavyRain[] = _("There is no relief from\nthis heavy rain!"); -static const u8 sText_MysteriousAirCurrent[] = _("Mysterious strong winds are\nprotecting Flying-type Pokémon!"); -static const u8 sText_StrongWindsDissipated[] = _("The mysterious strong winds\nhave dissipated!{PAUSE 64}"); -static const u8 sText_MysteriousAirCurrentBlowsOn[] = _("The mysterious strong winds\nblow on regardless!"); -static const u8 sText_AttackWeakenedByStrongWinds[] = _("The mysterious strong winds\nweakened the attack!!"); -static const u8 sText_StuffCheeksCantSelect[] = _("It can't use the move\nbecause it doesn't have a Berry!\p"); -static const u8 sText_PkmnRevertedToPrimal[] = _("{B_ATK_NAME_WITH_PREFIX}’s Primal Reversion!\nIt reverted to its primal state!"); -static const u8 sText_ButPokemonCantUseTheMove[] = _("But {B_ATK_NAME_WITH_PREFIX2} can't\nuse the move!"); -static const u8 sText_ButHoopaCantUseIt[] = _("But {B_ATK_NAME_WITH_PREFIX2} can't use it\nthe way it is now!"); -static const u8 sText_BrokeThroughProtection[] = _("It broke through\n{B_DEF_NAME_WITH_PREFIX2}'s protection!"); -static const u8 sText_AbilityAllowsOnlyMove[] = _("{B_ATK_ABILITY} only allows\nthe use of {B_CURRENT_MOVE}!\p"); -static const u8 sText_SwappedAbilities[] = _("{B_DEF_NAME_WITH_PREFIX} swapped Abilities\nwith its target!"); -static const u8 sText_PastelVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is protected\nby a pastel veil!"); -static const u8 sText_PastelVeilEnters[] = _("{B_DEF_NAME_WITH_PREFIX} was cured\nof its poisoning!"); -static const u8 sText_BattlerTypeChangedTo[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s type\nchanged to {B_BUFF1}!"); +static const u8 sText_MoveFizzledOutInTheHeavyRain[] = _("The Fire-type attack fizzled out in the heavy rain!"); +static const u8 sText_NoReliefFromHeavyRain[] = _("There is no relief from this heavy rain!"); +static const u8 sText_MysteriousAirCurrent[] = _("Mysterious strong winds are protecting Flying-type Pokémon!"); +static const u8 sText_StrongWindsDissipated[] = _("The mysterious strong winds have dissipated!{PAUSE 64}"); +static const u8 sText_MysteriousAirCurrentBlowsOn[] = _("The mysterious strong winds blow on regardless!"); +static const u8 sText_AttackWeakenedByStrongWinds[] = _("The mysterious strong winds weakened the attack!!"); +static const u8 sText_StuffCheeksCantSelect[] = _("It can't use the move because it doesn't have a Berry!\p"); +static const u8 sText_PkmnRevertedToPrimal[] = _("{B_ATK_NAME_WITH_PREFIX}’s Primal Reversion! It reverted to its primal state!"); +static const u8 sText_ButPokemonCantUseTheMove[] = _("But {B_ATK_NAME_WITH_PREFIX2} can't use the move!"); +static const u8 sText_ButHoopaCantUseIt[] = _("But {B_ATK_NAME_WITH_PREFIX2} can't use it the way it is now!"); +static const u8 sText_BrokeThroughProtection[] = _("It broke through {B_DEF_NAME_WITH_PREFIX2}'s protection!"); +static const u8 sText_AbilityAllowsOnlyMove[] = _("{B_ATK_ABILITY} only allows the use of {B_CURRENT_MOVE}!\p"); +static const u8 sText_SwappedAbilities[] = _("{B_DEF_NAME_WITH_PREFIX} swapped Abilities with its target!"); +static const u8 sText_PastelVeilProtected[] = _("{B_DEF_NAME_WITH_PREFIX} is protected by a pastel veil!"); +static const u8 sText_PastelVeilEnters[] = _("{B_DEF_NAME_WITH_PREFIX} was cured of its poisoning!"); +static const u8 sText_BattlerTypeChangedTo[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s type changed to {B_BUFF1}!"); static const u8 sText_BothCanNoLongerEscape[] = _("Neither Pokémon can run away!"); -static const u8 sText_CantEscapeDueToUsedMove[] = _("{B_ATK_NAME_WITH_PREFIX} can no longer escape\nbecause it used No Retreat!"); -static const u8 sText_PkmnBecameWeakerToFire[] = _("{B_DEF_NAME_WITH_PREFIX} became\nweaker to fire!"); -static const u8 sText_PkmnAboutToBeAttackedByItsItem[] = _("{B_DEF_NAME_WITH_PREFIX} is about\nto be attacked by its {B_BUFF1}!"); -static const u8 sText_CantEscapeBecauseOfCurrentMove[] = _("{B_DEF_NAME_WITH_PREFIX} can no longer escape\nbecause of Octolock!"); +static const u8 sText_CantEscapeDueToUsedMove[] = _("{B_ATK_NAME_WITH_PREFIX} can no longer escape because it used No Retreat!"); +static const u8 sText_PkmnBecameWeakerToFire[] = _("{B_DEF_NAME_WITH_PREFIX} became weaker to fire!"); +static const u8 sText_PkmnAboutToBeAttackedByItsItem[] = _("{B_DEF_NAME_WITH_PREFIX} is about to be attacked by its {B_BUFF1}!"); +static const u8 sText_CantEscapeBecauseOfCurrentMove[] = _("{B_DEF_NAME_WITH_PREFIX} can no longer escape because of Octolock!"); static const u8 sText_NeutralizingGasEnters[] = _("Neutralizing gas filled the area!"); -static const u8 sText_NeutralizingGasOver[] = _("The effects of the\nneutralizing gas wore off!"); -static const u8 sText_PkmnTookTargetHigh[] = _("{B_ATK_NAME_WITH_PREFIX} took {B_DEF_NAME_WITH_PREFIX2}\ninto the sky!"); +static const u8 sText_NeutralizingGasOver[] = _("The effects of the neutralizing gas wore off!"); +static const u8 sText_PkmnTookTargetHigh[] = _("{B_ATK_NAME_WITH_PREFIX} took {B_DEF_NAME_WITH_PREFIX2} into the sky!"); static const u8 sText_TargetTooHeavy[] = _("{B_DEF_NAME_WITH_PREFIX} is too heavy to be lifted!"); -static const u8 sText_MeteorBeamCharging[] = _("{B_ATK_NAME_WITH_PREFIX} is overflowing\nwith space power!"); -static const u8 sText_HeatingUpBeak[] = _("{B_ATK_NAME_WITH_PREFIX} started\nheating up its beak!"); -static const u8 sText_CourtChange[] = _("{B_ATK_NAME_WITH_PREFIX} swapped the battle effects\naffecting each side of the field!"); -static const u8 sText_AttackerExpelledThePoison[] = _("{B_ATK_NAME_WITH_PREFIX} managed to\nexpel the poison so you\lwouldn't worry!"); -static const u8 sText_AttackerShookItselfAwake[] = _("{B_ATK_NAME_WITH_PREFIX} shook itself awake\nso you wouldn't worry!"); -static const u8 sText_AttackerBrokeThroughParalysis[] = _("{B_ATK_NAME_WITH_PREFIX} gathered all its energy\nto break through its paralysis\lso you wouldn't worry!"); -static const u8 sText_AttackerHealedItsBurn[] = _("{B_ATK_NAME_WITH_PREFIX} cured its burn\nthrough sheer determination so you\lwouldn't worry!"); -static const u8 sText_AttackerHealedItsFrostbite[] = _("{B_ATK_NAME_WITH_PREFIX} cured its frostbite\nthrough sheer determination so you\lwouldn't worry!"); -static const u8 sText_AttackerMeltedTheIce[] = _("{B_ATK_NAME_WITH_PREFIX} melted the ice\nwith its fiery determination so you\lwouldn't worry!"); -static const u8 sText_TargetToughedItOut[] = _("{B_DEF_NAME_WITH_PREFIX} toughed it out\nso you wouldn't feel sad!"); -static const u8 sText_AttackerLostElectricType[] = _("{B_ATK_NAME_WITH_PREFIX} used up\nall its electricity!"); -static const u8 sText_AttackerSwitchedStatWithTarget[] = _("{B_ATK_NAME_WITH_PREFIX} switched {B_BUFF1}\nwith its target!"); -static const u8 sText_BeingHitChargedPkmnWithPower[] = _("Being hit by {B_CURRENT_MOVE}\ncharged {B_DEF_NAME_WITH_PREFIX2} with power!"); -static const u8 sText_SunlightActivatedAbility[] = _("The harsh sunlight activated\n{B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s Protosynthesis!"); +static const u8 sText_MeteorBeamCharging[] = _("{B_ATK_NAME_WITH_PREFIX} is overflowing with space power!"); +static const u8 sText_HeatingUpBeak[] = _("{B_ATK_NAME_WITH_PREFIX} started heating up its beak!"); +static const u8 sText_CourtChange[] = _("{B_ATK_NAME_WITH_PREFIX} swapped the battle effects affecting each side of the field!"); +static const u8 sText_AttackerExpelledThePoison[] = _("{B_ATK_NAME_WITH_PREFIX} managed to expel the poison so you wouldn't worry!"); +static const u8 sText_AttackerShookItselfAwake[] = _("{B_ATK_NAME_WITH_PREFIX} shook itself awake so you wouldn't worry!"); +static const u8 sText_AttackerBrokeThroughParalysis[] = _("{B_ATK_NAME_WITH_PREFIX} gathered all its energy to break through its paralysis so you wouldn't worry!"); +static const u8 sText_AttackerHealedItsBurn[] = _("{B_ATK_NAME_WITH_PREFIX} cured its burn through sheer determination so you wouldn't worry!"); +static const u8 sText_AttackerHealedItsFrostbite[] = _("{B_ATK_NAME_WITH_PREFIX} cured its frostbite through sheer determination so you wouldn't worry!"); +static const u8 sText_AttackerMeltedTheIce[] = _("{B_ATK_NAME_WITH_PREFIX} melted the ice with its fiery determination so you wouldn't worry!"); +static const u8 sText_TargetToughedItOut[] = _("{B_DEF_NAME_WITH_PREFIX} toughed it out so you wouldn't feel sad!"); +static const u8 sText_AttackerLostElectricType[] = _("{B_ATK_NAME_WITH_PREFIX} used up all its electricity!"); +static const u8 sText_AttackerSwitchedStatWithTarget[] = _("{B_ATK_NAME_WITH_PREFIX} switched {B_BUFF1} with its target!"); +static const u8 sText_BeingHitChargedPkmnWithPower[] = _("Being hit by {B_CURRENT_MOVE} charged {B_DEF_NAME_WITH_PREFIX2} with power!"); +static const u8 sText_SunlightActivatedAbility[] = _("The harsh sunlight activated {B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s Protosynthesis!"); static const u8 sText_StatWasHeightened[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1} was heightened!"); -static const u8 sText_BoosterEnergyActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used its\n{B_LAST_ITEM} to activate\l{B_SCR_ACTIVE_ABILITY}!"); -static const u8 sText_ElectricTerrainActivatedAbility[] = _("The Electric Terrain activated\n{B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s Quark Drive!"); -static const u8 sText_AbilityWeakenedSurroundingMonsStat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nweakened the {B_BUFF1} of\lall surrounding Pokémon!\p"); -static const u8 sText_AttackerGainedStrengthFromTheFallen[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} gained strength\nfrom the fallen!"); +static const u8 sText_BoosterEnergyActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used its {B_LAST_ITEM} to activate {B_SCR_ACTIVE_ABILITY}!"); +static const u8 sText_ElectricTerrainActivatedAbility[] = _("The Electric Terrain activated {B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s Quark Drive!"); +static const u8 sText_AbilityWeakenedSurroundingMonsStat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY} weakened the {B_BUFF1} of all surrounding Pokémon!\p"); +static const u8 sText_AttackerGainedStrengthFromTheFallen[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} gained strength from the fallen!"); static const u8 sText_PrepareShellTrap[] = _("{B_ATK_NAME_WITH_PREFIX} set a shell trap!"); static const u8 sText_ShellTrapDidntWork[] = _("{B_ATK_NAME_WITH_PREFIX}'s shell trap didn't work!"); -static const u8 sText_SharpSteelFloats[] = _("Sharp-pointed pieces of steel started\nfloating around {B_DEF_TEAM2} Pokémon!"); -static const u8 sText_SharpSteelDmg[] = _("The sharp steel bit into\n{B_DEF_NAME_WITH_PREFIX2}!"); -static const u8 sText_PkmnBlewAwaySharpSteel[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nsharp steel!"); -static const u8 sText_SharpSteelDisappearedFromTeam[] = _("The pieces of steel surrounding\n{B_ATK_TEAM2} Pokémon disappeared!"); -static const u8 sText_TeamTrappedWithVines[] = _("{B_DEF_TEAM1} Pokémon got trapped\nwith vines!"); -static const u8 sText_PkmnHurtByVines[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt by\nG-Max Vine Lash's ferocious beating!"); -static const u8 sText_TeamCaughtInVortex[] = _("{B_DEF_TEAM1} Pokémon got caught\nin a vortex of water!"); -static const u8 sText_PkmnHurtByVortex[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt by\nG-Max Cannonade's vortex!"); -static const u8 sText_TeamSurroundedByFire[] = _("{B_DEF_TEAM1} Pokémon were\nsurrounded by fire!"); -static const u8 sText_PkmnBurningUp[] = _("{B_ATK_NAME_WITH_PREFIX} is burning up\nwithin G-Max Wildfire's flames!"); -static const u8 sText_TeamSurroundedByRocks[] = _("{B_DEF_TEAM1} Pokémon became\nsurrounded by rocks!"); -static const u8 sText_PkmnHurtByRocksThrown[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt by\nrocks thrown out by G-Max Volcalith!"); -static const u8 sText_CouldntFullyProtect[] = _("{B_DEF_NAME_WITH_PREFIX} couldn't fully protect\nitself and got hurt!"); -static const u8 sText_StockpiledEffectWoreOff[] = _("{B_ATK_NAME_WITH_PREFIX}'s stockpiled\neffect wore off!"); -static const u8 sText_MoveBlockedByDynamax[] = _("The move was blocked by\nthe power of Dynamax!"); -static const u8 sText_PkmnRevivedReadyToFight[] = _("{B_BUFF1} was revived\nand is ready to fight again!"); -static const u8 sText_ItemRestoredSpeciesHealth[] = _("{B_BUFF1} had its\nHP restored."); -static const u8 sText_ItemCuredSpeciesStatus[] = _("{B_BUFF1} had\nits status healed!"); -static const u8 sText_ItemRestoredSpeciesPP[] = _("{B_BUFF1} had its\nPP restored!"); -static const u8 sText_AtkTrappedDef[] = _("{B_ATK_NAME_WITH_PREFIX} trapped\n{B_DEF_NAME_WITH_PREFIX2}!"); -static const u8 sText_MirrorHerbCopied[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used its Mirror Herb\nto mirror its opponent's stat changes!"); -static const u8 sText_PkmnItemMelted[] = _("{B_ATK_NAME_WITH_PREFIX} corroded\n{B_DEF_NAME_WITH_PREFIX2}'s {B_LAST_ITEM}!"); -static const u8 sText_UltraBurstReacting[] = _("Bright light is about to\nburst out of {B_ATK_NAME_WITH_PREFIX2}!"); -static const u8 sText_UltraBurstCompleted[] = _("{B_ATK_NAME_WITH_PREFIX} regained its\ntrue power through Ultra Burst!"); -static const u8 sText_TeamGainedEXP[] = _("The rest of your team gained Exp.\nPoints thanks to the Exp. Share!\p"); +static const u8 sText_SharpSteelFloats[] = _("Sharp-pointed pieces of steel started floating around {B_DEF_TEAM2} Pokémon!"); +static const u8 sText_SharpSteelDmg[] = _("The sharp steel bit into {B_DEF_NAME_WITH_PREFIX2}!"); +static const u8 sText_PkmnBlewAwaySharpSteel[] = _("{B_ATK_NAME_WITH_PREFIX} blew away sharp steel!"); +static const u8 sText_SharpSteelDisappearedFromTeam[] = _("The pieces of steel surrounding {B_ATK_TEAM2} Pokémon disappeared!"); +static const u8 sText_TeamTrappedWithVines[] = _("{B_DEF_TEAM1} Pokémon got trapped with vines!"); +static const u8 sText_PkmnHurtByVines[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt by G-Max Vine Lash's ferocious beating!"); +static const u8 sText_TeamCaughtInVortex[] = _("{B_DEF_TEAM1} Pokémon got caught in a vortex of water!"); +static const u8 sText_PkmnHurtByVortex[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt by G-Max Cannonade's vortex!"); +static const u8 sText_TeamSurroundedByFire[] = _("{B_DEF_TEAM1} Pokémon were surrounded by fire!"); +static const u8 sText_PkmnBurningUp[] = _("{B_ATK_NAME_WITH_PREFIX} is burning up within G-Max Wildfire's flames!"); +static const u8 sText_TeamSurroundedByRocks[] = _("{B_DEF_TEAM1} Pokémon became surrounded by rocks!"); +static const u8 sText_PkmnHurtByRocksThrown[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt by rocks thrown out by G-Max Volcalith!"); +static const u8 sText_CouldntFullyProtect[] = _("{B_DEF_NAME_WITH_PREFIX} couldn't fully protect itself and got hurt!"); +static const u8 sText_StockpiledEffectWoreOff[] = _("{B_ATK_NAME_WITH_PREFIX}'s stockpiled effect wore off!"); +static const u8 sText_MoveBlockedByDynamax[] = _("The move was blocked by the power of Dynamax!"); +static const u8 sText_PkmnRevivedReadyToFight[] = _("{B_BUFF1} was revived and is ready to fight again!"); +static const u8 sText_ItemRestoredSpeciesHealth[] = _("{B_BUFF1} had its HP restored."); +static const u8 sText_ItemCuredSpeciesStatus[] = _("{B_BUFF1} had its status healed!"); +static const u8 sText_ItemRestoredSpeciesPP[] = _("{B_BUFF1} had its PP restored!"); +static const u8 sText_AtkTrappedDef[] = _("{B_ATK_NAME_WITH_PREFIX} trapped {B_DEF_NAME_WITH_PREFIX2}!"); +static const u8 sText_MirrorHerbCopied[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used its Mirror Herb to mirror its opponent's stat changes!"); +static const u8 sText_PkmnItemMelted[] = _("{B_ATK_NAME_WITH_PREFIX} corroded {B_DEF_NAME_WITH_PREFIX2}'s {B_LAST_ITEM}!"); +static const u8 sText_UltraBurstReacting[] = _("Bright light is about to burst out of {B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_UltraBurstCompleted[] = _("{B_ATK_NAME_WITH_PREFIX} regained its true power through Ultra Burst!"); +static const u8 sText_TeamGainedEXP[] = _("The rest of your team gained Exp. Points thanks to the Exp. Share!\p"); static const u8 sText_CurrentMoveCantSelect[] = _("{B_BUFF1} cannot be used!\p"); static const u8 sText_TargetIsBeingSaltCured[] = _("{B_DEF_NAME_WITH_PREFIX} is being salt cured!"); static const u8 sText_TargetIsHurtBySaltCure[] = _("{B_DEF_NAME_WITH_PREFIX} is hurt by {B_BUFF1}!"); -static const u8 sText_TargetCoveredInStickyCandySyrup[] = _("{B_DEF_NAME_WITH_PREFIX} got covered\nin sticky candy syrup!"); -static const u8 sText_PkmnTellChillingReceptionJoke[] = _("{B_ATK_NAME_WITH_PREFIX} is preparing\nto tell a chillingly bad joke!"); -static const u8 sText_ZeroToHeroTransformation[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} underwent\na heroic transformation!"); -static const u8 sText_CommanderActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was swallowed by Dondozo\nand became Dondozo's commander!"); -static const u8 sText_TheTwoMovesBecomeOne[] = _("The two moves have become one!\nIt's a combined move!{PAUSE 16}"); -static const u8 sText_ARainbowAppearedOnSide[] = _("A rainbow appeared in the sky\non {B_ATK_TEAM2} team's side!"); -static const u8 sText_TheRainbowDisappeared[] = _("The rainbow on {B_ATK_TEAM2} team's\nside disappeared!"); -static const u8 sText_WaitingForPartnersMove[] = _("{B_ATK_NAME_WITH_PREFIX} is waiting\nfor {B_ATK_PARTNER_NAME}'s move…{PAUSE 16}"); -static const u8 sText_SeaOfFireEnvelopedSide[] = _("A sea of fire enveloped\n{B_DEF_TEAM2} team!"); -static const u8 sText_HurtByTheSeaOfFire[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt\nby the sea of fire!"); -static const u8 sText_TheSeaOfFireDisappeared[] = _("The sea of fire around {B_ATK_TEAM2}\nteam disappeared!"); -static const u8 sText_SwampEnvelopedSide[] = _("A swamp enveloped\n{B_DEF_TEAM2} team!"); -static const u8 sText_TheSwampDisappeared[] = _("The swamp around {B_ATK_TEAM2}\nteam disappeared!"); -static const u8 sText_HospitalityRestoration[] = _("{B_ATK_PARTNER_NAME} drank down all the\nmatcha that {B_ATK_NAME_WITH_PREFIX2} made!"); -static const u8 sText_ElectroShotCharging[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed\nelectricity!"); -static const u8 sText_ItemWasUsedUp[] = _("The {B_LAST_ITEM}\nwas used up…"); -static const u8 sText_AttackerLostItsType[] = _("{B_ATK_NAME_WITH_PREFIX} lost\nits {B_BUFF1} type!"); -static const u8 sText_ShedItsTail[] = _("{B_ATK_NAME_WITH_PREFIX} shed its tail\nto create a decoy!"); -static const u8 sText_PkmnTerastallizedInto[] = _("{B_ATK_NAME_WITH_PREFIX} terastallized\ninto the {B_BUFF1} type!"); -static const u8 sText_SupersweetAromaWafts[] = _("A supersweet aroma is wafting from\nthe syrup covering {B_ATK_NAME_WITH_PREFIX2}!"); +static const u8 sText_TargetCoveredInStickyCandySyrup[] = _("{B_DEF_NAME_WITH_PREFIX} got covered in sticky candy syrup!"); +static const u8 sText_PkmnTellChillingReceptionJoke[] = _("{B_ATK_NAME_WITH_PREFIX} is preparing to tell a chillingly bad joke!"); +static const u8 sText_ZeroToHeroTransformation[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} underwent a heroic transformation!"); +static const u8 sText_CommanderActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} was swallowed by Dondozo and became Dondozo's commander!"); +static const u8 sText_TheTwoMovesBecomeOne[] = _("The two moves have become one! It's a combined move!{PAUSE 16}"); +static const u8 sText_ARainbowAppearedOnSide[] = _("A rainbow appeared in the sky on {B_ATK_TEAM2} team's side!"); +static const u8 sText_TheRainbowDisappeared[] = _("The rainbow on {B_ATK_TEAM2} team's side disappeared!"); +static const u8 sText_WaitingForPartnersMove[] = _("{B_ATK_NAME_WITH_PREFIX} is waiting for {B_ATK_PARTNER_NAME}'s move…{PAUSE 16}"); +static const u8 sText_SeaOfFireEnvelopedSide[] = _("A sea of fire enveloped {B_DEF_TEAM2} team!"); +static const u8 sText_HurtByTheSeaOfFire[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt by the sea of fire!"); +static const u8 sText_TheSeaOfFireDisappeared[] = _("The sea of fire around {B_ATK_TEAM2} team disappeared!"); +static const u8 sText_SwampEnvelopedSide[] = _("A swamp enveloped {B_DEF_TEAM2} team!"); +static const u8 sText_TheSwampDisappeared[] = _("The swamp around {B_ATK_TEAM2} team disappeared!"); +static const u8 sText_HospitalityRestoration[] = _("{B_ATK_PARTNER_NAME} drank down all the matcha that {B_ATK_NAME_WITH_PREFIX2} made!"); +static const u8 sText_ElectroShotCharging[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed electricity!"); +static const u8 sText_ItemWasUsedUp[] = _("The {B_LAST_ITEM} was used up…"); +static const u8 sText_AttackerLostItsType[] = _("{B_ATK_NAME_WITH_PREFIX} lost its {B_BUFF1} type!"); +static const u8 sText_ShedItsTail[] = _("{B_ATK_NAME_WITH_PREFIX} shed its tail to create a decoy!"); +static const u8 sText_PkmnTerastallizedInto[] = _("{B_ATK_NAME_WITH_PREFIX} terastallized into the {B_BUFF1} type!"); +static const u8 sText_SupersweetAromaWafts[] = _("A supersweet aroma is wafting from the syrup covering {B_ATK_NAME_WITH_PREFIX2}!"); static const u8 sText_TidyingUpComplete[] = _("Tidying up complete!"); -static const u8 sText_FickleBeamDoubled[] = _("{B_ATK_NAME_WITH_PREFIX} is going all\nout for this attack!"); -static const u8 sText_WagglingAFinger[] = _("Waggling a finger let it use\n{B_CURRENT_MOVE}!"); +static const u8 sText_FickleBeamDoubled[] = _("{B_ATK_NAME_WITH_PREFIX} is going all out for this attack!"); +static const u8 sText_WagglingAFinger[] = _("Waggling a finger let it use {B_CURRENT_MOVE}!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { @@ -2182,17 +2182,17 @@ const u8 gText_Mind[] = _("Mind"); const u8 gText_Skill[] = _("Skill"); const u8 gText_Body[] = _("Body"); const u8 gText_Judgment[] = _("{B_BUFF1}{CLEAR 13}Judgment{CLEAR 13}{B_BUFF2}"); -static const u8 sText_TwoTrainersSentPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME}!\p{B_TRAINER2_CLASS} {B_TRAINER2_NAME} sent\nout {B_OPPONENT_MON2_NAME}!"); -static const u8 sText_Trainer2SentOutPkmn[] = _("{B_TRAINER2_CLASS} {B_TRAINER2_NAME} sent\nout {B_BUFF1}!"); -static const u8 sText_TwoTrainersWantToBattle[] = _("You are challenged by\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME} and\l{B_TRAINER2_CLASS} {B_TRAINER2_NAME}!\p"); -static const u8 sText_InGamePartnerSentOutZGoN[] = _("{B_PARTNER_CLASS} {B_PARTNER_NAME} sent\nout {B_PLAYER_MON2_NAME}!\lGo, {B_PLAYER_MON1_NAME}!"); -static const u8 sText_TwoInGameTrainersDefeated[] = _("You defeated\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\land {B_TRAINER2_CLASS} {B_TRAINER2_NAME}!\p"); +static const u8 sText_TwoTrainersSentPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent out {B_OPPONENT_MON1_NAME}!\p{B_TRAINER2_CLASS} {B_TRAINER2_NAME} sent out {B_OPPONENT_MON2_NAME}!"); +static const u8 sText_Trainer2SentOutPkmn[] = _("{B_TRAINER2_CLASS} {B_TRAINER2_NAME} sent out {B_BUFF1}!"); +static const u8 sText_TwoTrainersWantToBattle[] = _("You are challenged by {B_TRAINER1_CLASS} {B_TRAINER1_NAME} and {B_TRAINER2_CLASS} {B_TRAINER2_NAME}!\p"); +static const u8 sText_InGamePartnerSentOutZGoN[] = _("{B_PARTNER_CLASS} {B_PARTNER_NAME} sent out {B_PLAYER_MON2_NAME}! Go, {B_PLAYER_MON1_NAME}!"); +static const u8 sText_TwoInGameTrainersDefeated[] = _("You defeated {B_TRAINER1_CLASS} {B_TRAINER1_NAME} and {B_TRAINER2_CLASS} {B_TRAINER2_NAME}!\p"); static const u8 sText_Trainer2LoseText[] = _("{B_TRAINER2_LOSE_TEXT}"); -static const u8 sText_PkmnIncapableOfPower[] = _("{B_ATK_NAME_WITH_PREFIX} appears\nincapable of using its power!"); -static const u8 sText_GlintAppearsInEye[] = _("A glint appears in\n{B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s eyes!"); -static const u8 sText_PkmnGettingIntoPosition[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is getting\ninto position!"); -static const u8 sText_PkmnBeganGrowlingDeeply[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} began\ngrowling deeply!"); -static const u8 sText_PkmnEagerForMore[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is eager\nfor more!"); +static const u8 sText_PkmnIncapableOfPower[] = _("{B_ATK_NAME_WITH_PREFIX} appears incapable of using its power!"); +static const u8 sText_GlintAppearsInEye[] = _("A glint appears in {B_SCR_ACTIVE_NAME_WITH_PREFIX2}'s eyes!"); +static const u8 sText_PkmnGettingIntoPosition[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is getting into position!"); +static const u8 sText_PkmnBeganGrowlingDeeply[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} began growling deeply!"); +static const u8 sText_PkmnEagerForMore[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is eager for more!"); const u16 gBattlePalaceFlavorTextTable[] = { @@ -2202,18 +2202,18 @@ const u16 gBattlePalaceFlavorTextTable[] = [B_MSG_EAGER_FOR_MORE] = STRINGID_PKMNEAGERFORMORE, }; -static const u8 sText_RefIfNothingIsDecided[] = _("REFEREE: If nothing is decided in\n3 turns, we will go to judging!"); -static const u8 sText_RefThatsIt[] = _("REFEREE: That's it! We will now go to\njudging to determine the winner!"); -static const u8 sText_RefJudgeMind[] = _("REFEREE: Judging category 1, Mind!\nThe POKéMON showing the most guts!\p"); -static const u8 sText_RefJudgeSkill[] = _("REFEREE: Judging category 2, Skill!\nThe POKéMON using moves the best!\p"); -static const u8 sText_RefJudgeBody[] = _("REFEREE: Judging category 3, Body!\nThe POKéMON with the most vitality!\p"); -static const u8 sText_RefPlayerWon[] = _("REFEREE: Judgment: {B_BUFF1} to {B_BUFF2}!\nThe winner is {B_PLAYER_NAME}'s {B_PLAYER_MON1_NAME}!\p"); -static const u8 sText_RefOpponentWon[] = _("REFEREE: Judgment: {B_BUFF1} to {B_BUFF2}!\nThe winner is {B_TRAINER1_NAME}'s {B_OPPONENT_MON1_NAME}!\p"); -static const u8 sText_RefDraw[] = _("REFEREE: Judgment: 3 to 3!\nWe have a draw!\p"); -static const u8 sText_DefeatedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} defeated the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE's decision!"); -static const u8 sText_LostToOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} lost to the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE's decision!"); -static const u8 sText_TiedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} tied the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE's decision!"); -static const u8 sText_RefCommenceBattle[] = _("REFEREE: {B_PLAYER_MON1_NAME} VS {B_OPPONENT_MON1_NAME}!\nCommence battling!"); +static const u8 sText_RefIfNothingIsDecided[] = _("REFEREE: If nothing is decided in 3 turns, we will go to judging!"); +static const u8 sText_RefThatsIt[] = _("REFEREE: That's it! We will now go to judging to determine the winner!"); +static const u8 sText_RefJudgeMind[] = _("REFEREE: Judging category 1, Mind! The POKéMON showing the most guts!\p"); +static const u8 sText_RefJudgeSkill[] = _("REFEREE: Judging category 2, Skill! The POKéMON using moves the best!\p"); +static const u8 sText_RefJudgeBody[] = _("REFEREE: Judging category 3, Body! The POKéMON with the most vitality!\p"); +static const u8 sText_RefPlayerWon[] = _("REFEREE: Judgment: {B_BUFF1} to {B_BUFF2}! The winner is {B_PLAYER_NAME}'s {B_PLAYER_MON1_NAME}!\p"); +static const u8 sText_RefOpponentWon[] = _("REFEREE: Judgment: {B_BUFF1} to {B_BUFF2}! The winner is {B_TRAINER1_NAME}'s {B_OPPONENT_MON1_NAME}!\p"); +static const u8 sText_RefDraw[] = _("REFEREE: Judgment: 3 to 3! We have a draw!\p"); +static const u8 sText_DefeatedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} defeated the opponent {B_OPPONENT_MON1_NAME} in a REFEREE's decision!"); +static const u8 sText_LostToOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} lost to the opponent {B_OPPONENT_MON1_NAME} in a REFEREE's decision!"); +static const u8 sText_TiedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} tied the opponent {B_OPPONENT_MON1_NAME} in a REFEREE's decision!"); +static const u8 sText_RefCommenceBattle[] = _("REFEREE: {B_PLAYER_MON1_NAME} VS {B_OPPONENT_MON1_NAME}! Commence battling!"); const u8 *const gRefereeStringsTable[] = { @@ -2228,17 +2228,17 @@ const u8 *const gRefereeStringsTable[] = [B_MSG_REF_COMMENCE_BATTLE] = sText_RefCommenceBattle, }; -static const u8 sText_QuestionForfeitMatch[] = _("Would you like to forfeit the match\nand quit now?"); +static const u8 sText_QuestionForfeitMatch[] = _("Would you like to forfeit the match and quit now?"); static const u8 sText_ForfeitedMatch[] = _("The match was forfeited."); static const u8 sText_Trainer1WinText[] = _("{B_TRAINER1_WIN_TEXT}"); static const u8 sText_Trainer2WinText[] = _("{B_TRAINER2_WIN_TEXT}"); static const u8 sText_Trainer1Fled[] = _( "{PLAY_SE SE_FLEE}{B_TRAINER1_CLASS} {B_TRAINER1_NAME} fled!"); -static const u8 sText_PlayerLostAgainstTrainer1[] = _("You lost to\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!"); -static const u8 sText_PlayerBattledToDrawTrainer1[] = _("You battled to a draw against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!"); +static const u8 sText_PlayerLostAgainstTrainer1[] = _("You lost to {B_TRAINER1_CLASS} {B_TRAINER1_NAME}!"); +static const u8 sText_PlayerBattledToDrawTrainer1[] = _("You battled to a draw against {B_TRAINER1_CLASS} {B_TRAINER1_NAME}!"); const u8 gText_RecordBattleToPass[] = _("Would you like to record your battle\non your Frontier Pass?"); const u8 gText_BattleRecordedOnPass[] = _("{B_PLAYER_NAME}'s battle result was recorded\non the Frontier Pass."); -static const u8 sText_LinkTrainerWantsToBattlePause[] = _("You are challenged by\n{B_LINK_OPPONENT1_NAME}!\p"); -static const u8 sText_TwoLinkTrainersWantToBattlePause[] = _("You are challenged by\n{B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}!\p"); +static const u8 sText_LinkTrainerWantsToBattlePause[] = _("You are challenged by {B_LINK_OPPONENT1_NAME}!\p"); +static const u8 sText_TwoLinkTrainersWantToBattlePause[] = _("You are challenged by {B_LINK_OPPONENT1_NAME} and {B_LINK_OPPONENT2_NAME}!\p"); static const u8 sText_Your1[] = _("Your"); static const u8 sText_Opposing1[] = _("The opposing"); static const u8 sText_Your2[] = _("your"); diff --git a/test/text.c b/test/text.c index 236c1466d3fe..8a4a1b9febf5 100644 --- a/test/text.c +++ b/test/text.c @@ -892,7 +892,7 @@ TEST("Battle strings fit on the battle message window") strWidth = GetStringLineWidth(fontId, battleString, 0, j, sizeof(battleString), TRUE); if (strWidth == 0) break; - EXPECT_LE(strWidth, BATTLE_MSG_MAX_WIDTH); + EXPECT_LE(strWidth - 1, BATTLE_MSG_MAX_WIDTH); // -1 because there's a pixel-wide space that doesn't visually look like it's out of frame when using FONT_NORMAL. } Free(gBattleMsgDataPtr); } From b1464b4b75fe85597a12ce8f0cc4255af81904ec Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 19 Oct 2024 16:06:33 -0300 Subject: [PATCH 64/68] CI fix attempt --- src/text.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/text.c b/src/text.c index 13afdc9061c7..8a5b7b0cd395 100644 --- a/src/text.c +++ b/src/text.c @@ -1621,8 +1621,10 @@ s32 GetStringLineWidth(u8 fontId, const u8 *str, s16 letterSpacing, u32 lineNum, strWidth = GetStringWidth(fontId, strCopy, letterSpacing); strLen = StringLineLength(strCopy); StringAppend(strCopy, gText_EmptyString3); + #ifndef NDEBUG if (printDebug && strWidth != 0) DebugPrintf(" Line %d, len:%d, width:%d, \"%S\"", currLine, strLen, strWidth, strCopy); + #endif } str += strLen + 1; } From aa313d73abc75c3bee42b4e4cd79dcea6a0002e3 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 19 Oct 2024 18:58:37 -0300 Subject: [PATCH 65/68] Changed test to use alloc --- test/text.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/test/text.c b/test/text.c index 8a4a1b9febf5..996549ab1bc2 100644 --- a/test/text.c +++ b/test/text.c @@ -632,6 +632,7 @@ TEST("Type names fit on Pokedex Search Screen") extern u16 sBattlerAbilities[MAX_BATTLERS_COUNT]; //* +#define BATTLE_STRING_BUFFER_SIZE 1000 TEST("Battle strings fit on the battle message window") { u32 i, j, strWidth; @@ -639,7 +640,7 @@ TEST("Battle strings fit on the battle message window") u32 end = BATTLESTRINGS_COUNT - 1; const u32 fontId = FONT_NORMAL; u32 battleStringId = 0; - u8 battleString[1000] = {0}; + u8 *battleString = Alloc(BATTLE_STRING_BUFFER_SIZE); s32 sixDigitNines = 999999; // 36 pixels. u8 nickname[POKEMON_NAME_LENGTH + 1] = _("MMMMMMMMMMMM"); // 72 pixels. @@ -885,15 +886,16 @@ TEST("Battle strings fit on the battle message window") default: break; } - BattleStringExpandPlaceholders(gBattleStringsTable[battleStringId], battleString, sizeof(battleString)); + BattleStringExpandPlaceholders(gBattleStringsTable[battleStringId], battleString, BATTLE_STRING_BUFFER_SIZE); DebugPrintf("Battle String ID %d: %S", battleStringId + BATTLESTRINGS_TABLE_START, battleString); for (j = 1;; j++) { - strWidth = GetStringLineWidth(fontId, battleString, 0, j, sizeof(battleString), TRUE); + strWidth = GetStringLineWidth(fontId, battleString, 0, j, BATTLE_STRING_BUFFER_SIZE, TRUE); if (strWidth == 0) break; EXPECT_LE(strWidth - 1, BATTLE_MSG_MAX_WIDTH); // -1 because there's a pixel-wide space that doesn't visually look like it's out of frame when using FONT_NORMAL. } Free(gBattleMsgDataPtr); + Free(battleString); } //*/ From d759fdfa7a8ca76ef032d032875ddd36f6f48cee Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 19 Oct 2024 18:58:56 -0300 Subject: [PATCH 66/68] Fixed test messages that expected line breaks --- test/battle/ability/primordial_sea.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/battle/ability/primordial_sea.c b/test/battle/ability/primordial_sea.c index 1d90a63c770c..643dca161cef 100644 --- a/test/battle/ability/primordial_sea.c +++ b/test/battle/ability/primordial_sea.c @@ -18,11 +18,11 @@ SINGLE_BATTLE_TEST("Primordial Sea blocks damaging Fire-type moves") } SCENE { MESSAGE("The opposing Wobbuffet used Ember!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, opponent); - MESSAGE("The Fire-type attack fizzled out\nin the heavy rain!"); + MESSAGE("The Fire-type attack fizzled out in the heavy rain!"); NOT HP_BAR(player); MESSAGE("The opposing Wobbuffet used Ember!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, opponent); - MESSAGE("The Fire-type attack fizzled out\nin the heavy rain!"); + MESSAGE("The Fire-type attack fizzled out in the heavy rain!"); NOT HP_BAR(player); } THEN { EXPECT_EQ(player->hp, player->maxHP); @@ -44,8 +44,8 @@ DOUBLE_BATTLE_TEST("Primordial Sea blocks damaging Fire-type moves and prints th } SCENE { MESSAGE("The opposing Wobbuffet used Eruption!"); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_ERUPTION, opponentLeft); - MESSAGE("The Fire-type attack fizzled out\nin the heavy rain!"); - NOT MESSAGE("The Fire-type attack fizzled out\nin the heavy rain!"); + MESSAGE("The Fire-type attack fizzled out in the heavy rain!"); + NOT MESSAGE("The Fire-type attack fizzled out in the heavy rain!"); } THEN { EXPECT_EQ(playerLeft->hp, playerLeft->maxHP); EXPECT_EQ(playerRight->hp, playerRight->maxHP); @@ -60,7 +60,7 @@ SINGLE_BATTLE_TEST("Primordial Sea does not block a move if pokemon is asleep an } WHEN { TURN { MOVE(opponent, MOVE_EMBER); } } SCENE { - NOT MESSAGE("The Fire-type attack fizzled out\nin the heavy rain!"); + NOT MESSAGE("The Fire-type attack fizzled out in the heavy rain!"); MESSAGE("The opposing Wobbuffet is fast asleep."); } } \ No newline at end of file From 2a7e1636e9a75b22841b23ca480f9d64bdd244eb Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Mon, 21 Oct 2024 11:38:57 -0500 Subject: [PATCH 67/68] Update curious_medicine.c --- test/battle/ability/curious_medicine.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/battle/ability/curious_medicine.c b/test/battle/ability/curious_medicine.c index 5ee336262bca..3844170eb004 100644 --- a/test/battle/ability/curious_medicine.c +++ b/test/battle/ability/curious_medicine.c @@ -19,14 +19,14 @@ DOUBLE_BATTLE_TEST("Curious Medicine resets ally's stat stages upon entering bat TURN { SWITCH(opponentRight, 2); MOVE(playerLeft, MOVE_CELEBRATE); } } SCENE { // Turn 1 - buff up - MESSAGE("Foe Scolipede used Quiver Dance!"); + MESSAGE("The opposing Scolipede used Quiver Dance!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); // Turn 2 - Switch into Slowking MESSAGE("2 sent out Slowking!"); if (ability == ABILITY_CURIOUS_MEDICINE) { ABILITY_POPUP(opponentRight, ABILITY_CURIOUS_MEDICINE); - MESSAGE("Foe Scolipede's stat changes were reset!"); + MESSAGE("The opposing Scolipede's stat changes were removed!"); } } THEN { EXPECT_EQ(opponentLeft->statStages[STAT_ATK], (ability == ABILITY_CURIOUS_MEDICINE) ? DEFAULT_STAT_STAGE : DEFAULT_STAT_STAGE - 2); From 646da773173192309bf47d14341353eba3a16c9f Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Mon, 21 Oct 2024 11:42:00 -0500 Subject: [PATCH 68/68] Cleanup --- data/battle_scripts_1.s | 6 ++---- src/battle_message.c | 8 +++----- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 291cd1a71ba3..52c21dc68a76 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -9083,8 +9083,7 @@ BattleScript_BerryConfuseHealEnd2_Anim: orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_SCRIPTING datahpupdate BS_SCRIPTING - setmoveeffect MOVE_EFFECT_CONFUSION | MOVE_EFFECT_AFFECTS_USER - seteffectprimary + seteffectprimary MOVE_EFFECT_CONFUSION | MOVE_EFFECT_AFFECTS_USER removeitem BS_SCRIPTING end2 @@ -9100,8 +9099,7 @@ BattleScript_BerryConfuseHealRet_Anim: orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_SCRIPTING datahpupdate BS_SCRIPTING - setmoveeffect MOVE_EFFECT_CONFUSION | MOVE_EFFECT_CERTAIN - seteffectprimary + seteffectprimary MOVE_EFFECT_CONFUSION | MOVE_EFFECT_CERTAIN removeitem BS_TARGET return diff --git a/src/battle_message.c b/src/battle_message.c index 27583718f751..518cd1c218d4 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -1567,7 +1567,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_PKMNFROSTBITEHEALED - BATTLESTRINGS_TABLE_START] = sText_PkmnFrostbiteHealed, [STRINGID_PKMNFROSTBITEHEALED2 - BATTLESTRINGS_TABLE_START] = sText_PkmnFrostbiteHealed2, [STRINGID_PKMNFROSTBITEHEALEDBY - BATTLESTRINGS_TABLE_START] = sText_PkmnFrostbiteHealedBy, - [STRINGID_ULTRABURSTREACTING - BATTLESTRINGS_TABLE_START] = sText_UltraBurstReacting, + [STRINGID_ULTRABURSTREACTING - BATTLESTRINGS_TABLE_START] = sText_UltraBurstReacting, [STRINGID_ULTRABURSTCOMPLETED - BATTLESTRINGS_TABLE_START] = sText_UltraBurstCompleted, [STRINGID_TEAMGAINEDEXP - BATTLESTRINGS_TABLE_START] = sText_TeamGainedEXP, [STRINGID_TARGETCOVEREDINSTICKYCANDYSYRUP - BATTLESTRINGS_TABLE_START] = sText_TargetCoveredInStickyCandySyrup, @@ -1577,7 +1577,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_POKEFLUTECATCHY - BATTLESTRINGS_TABLE_START] = sText_PlayedFluteCatchyTune, [STRINGID_POKEFLUTE - BATTLESTRINGS_TABLE_START] = sText_PlayedThe, [STRINGID_MONHEARINGFLUTEAWOKE - BATTLESTRINGS_TABLE_START] = sText_PkmnHearingFluteAwoke, - [STRINGID_SUNLIGHTISHARSH - BATTLESTRINGS_TABLE_START] = sText_SunlightIsHarsh, + [STRINGID_SUNLIGHTISHARSH - BATTLESTRINGS_TABLE_START] = sText_SunlightIsHarsh, [STRINGID_ITISHAILING - BATTLESTRINGS_TABLE_START] = sText_ItIsHailing, [STRINGID_ITISSNOWING - BATTLESTRINGS_TABLE_START] = sText_ItIsSnowing, [STRINGID_ISCOVEREDWITHGRASS - BATTLESTRINGS_TABLE_START] = sText_IsCoveredWithGrass, @@ -3352,12 +3352,10 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) } dstID = 0; - //DebugPrintf("BEGIN: src:\"%S\"", src); while (*src != EOS) { toCpy = NULL; dstWidth = GetStringLineWidth(fontId, dst, letterSpacing, lineNum, dstSize, FALSE); - //DebugPrintf(" line:%d, dstWidth:%d, lastSkip:%d, \"%S\"", lineNum, dstWidth, lastValidSkip, dst); if (*src == PLACEHOLDER_BEGIN) { @@ -3750,7 +3748,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) if (toCpy != NULL) { toCpyWidth = GetStringLineWidth(fontId, toCpy, letterSpacing, 1, dstSize, FALSE); - //DebugPrintf(" toCpy width:%d, \"%S\"", toCpyWidth, toCpy); + if (dstWidth + toCpyWidth > BATTLE_MSG_MAX_WIDTH) { dst[lastValidSkip] = lineNum == 1 ? CHAR_NEWLINE : CHAR_PROMPT_SCROLL;