From 07255a2237902b7a64252eb7b65897489aa505db Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Fri, 10 Jan 2025 11:55:02 +0100 Subject: [PATCH 001/115] extern void * const gNullScriptPtr; --- src/script.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/script.c b/src/script.c index c252c95f04..6594809813 100644 --- a/src/script.c +++ b/src/script.c @@ -29,7 +29,7 @@ static bool8 sLockFieldControls; extern ScrCmdFunc gScriptCmdTable[]; extern ScrCmdFunc gScriptCmdTableEnd[]; -extern void *gNullScriptPtr; +extern void * const gNullScriptPtr; void InitScriptContext(struct ScriptContext *ctx, void *cmdTable, void *cmdTableEnd) { From 453bb29b735a7852ce55df02680a1976275d451f Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 12 Jan 2025 07:43:57 -0300 Subject: [PATCH 002/115] Fixed Gen 1/2's Transform "pink color" reference --- src/battle_gfx_sfx_util.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 2deced13c0..63a466af25 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -619,7 +619,7 @@ void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId) LoadPalette(gBattleStruct->castformPalette[gBattleMonForms[battlerId]], paletteOffset, PLTT_SIZE_4BPP); } - // transform's pink color + // transform's white color if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE) { BlendPalette(paletteOffset, 16, 6, RGB_WHITE); From 9bf7a772d0d09f2e5126a2c0a859d9eae4ae38f5 Mon Sep 17 00:00:00 2001 From: Hedara Date: Tue, 14 Jan 2025 09:50:08 +0100 Subject: [PATCH 003/115] Fixed potential unaligned issue in PC screen --- src/pokemon_storage_system.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 48eefd66fd..b9caa364b1 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -432,7 +432,7 @@ struct PokemonStorageSystemData u16 scrollUnused5; // Never read u16 scrollUnused6; // Never read u8 filler1[22]; - u8 boxTitleTiles[1024]; + u8 ALIGNED(2) boxTitleTiles[1024]; u8 boxTitleCycleId; u8 wallpaperLoadState; // Written to, but never read. u8 wallpaperLoadBoxId; From a0a8434e2620c7fd9af07ec512c0b58ab37d2fb8 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 13 Feb 2025 12:12:18 -0500 Subject: [PATCH 004/115] Converted apprenctice IDs from hex to decimal --- src/data/battle_frontier/apprentice.h | 32 +++++++++++++-------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/data/battle_frontier/apprentice.h b/src/data/battle_frontier/apprentice.h index c190ea09b5..6a378b2464 100644 --- a/src/data/battle_frontier/apprentice.h +++ b/src/data/battle_frontier/apprentice.h @@ -298,7 +298,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] = { { .name = {_("サダヒロ"), _("ALANN"), _("ALAIN"), _("ADELFO"), _("CLAUS"), _("TEO")}, - .otId = 0xBDC9, + .otId = 48585, .facilityClass = FACILITY_CLASS_BUG_CATCHER, .species = {SPECIES_BEAUTIFLY, SPECIES_DUSTOX, SPECIES_ILLUMISE, SPECIES_SHIFTRY, SPECIES_BRELOOM, SPECIES_NINJASK, SPECIES_SHEDINJA, SPECIES_PINSIR, SPECIES_HERACROSS, SPECIES_VOLBEAT}, .id = 0, @@ -306,7 +306,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] = }, { .name = {_("ヒロオ"), _("LIONEL"), _("LIONEL"), _("CAIO"), _("LUDWIG"), _("LEO")}, - .otId = 0xCF09, + .otId = 53001, .facilityClass = FACILITY_CLASS_YOUNGSTER, .species = {SPECIES_SWELLOW, SPECIES_SWALOT, SPECIES_SHUCKLE, SPECIES_MANECTRIC, SPECIES_TORKOAL, SPECIES_HARIYAMA, SPECIES_MIGHTYENA, SPECIES_LUDICOLO, SPECIES_CRAWDAUNT, SPECIES_WHISCASH}, .id = 1, @@ -314,7 +314,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] = }, { .name = {_("ケイジ"), _("SONNY"), _("HERVE"), _("FEDRO"), _("WENZEL"), _("SANTI")}, - .otId = 0x2E34, + .otId = 11828, .facilityClass = FACILITY_CLASS_SCHOOL_KID_M, .species = {SPECIES_LINOONE, SPECIES_MIGHTYENA, SPECIES_WHISCASH, SPECIES_ZANGOOSE, SPECIES_SEVIPER, SPECIES_NINETALES, SPECIES_KECLEON, SPECIES_SHUCKLE, SPECIES_MANECTRIC, SPECIES_MACHAMP}, .id = 2, @@ -322,7 +322,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] = }, { .name = {_("ユラ"), _("LAYLA"), _("LAYLA"), _("ASTRID"), _("SONJA"), _("LOLA")}, - .otId = 0x84EF, + .otId = 34031, .facilityClass = FACILITY_CLASS_LASS, .species = {SPECIES_SWALOT, SPECIES_XATU, SPECIES_ALTARIA, SPECIES_GOLDUCK, SPECIES_FLYGON, SPECIES_ALAKAZAM, SPECIES_GARDEVOIR, SPECIES_WAILORD, SPECIES_GRUMPIG, SPECIES_MIGHTYENA}, .id = 3, @@ -330,7 +330,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] = }, { .name = {_("ヨウカ"), _("MACY"), _("AMELIE"), _("CLEO"), _("MARIA"), _("ELISA")}, - .otId = 0x1E43, + .otId = 7747, .facilityClass = FACILITY_CLASS_SCHOOL_KID_F, .species = {SPECIES_WIGGLYTUFF, SPECIES_LINOONE, SPECIES_KINGDRA, SPECIES_DELCATTY, SPECIES_RAICHU, SPECIES_FEAROW, SPECIES_STARMIE, SPECIES_MEDICHAM, SPECIES_SHIFTRY, SPECIES_BEAUTIFLY}, .id = 4, @@ -338,7 +338,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] = }, { .name = {_("ヤスシ"), _("DONTE"), _("BRAHIM"), _("GLAUCO"), _("JOSEF"), _("ROQUE")}, - .otId = 0x379F, + .otId = 14239, .facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_M, .species = {SPECIES_STARMIE, SPECIES_DODRIO, SPECIES_AGGRON, SPECIES_MAGNETON, SPECIES_MACHAMP, SPECIES_ARMALDO, SPECIES_HERACROSS, SPECIES_NOSEPASS, SPECIES_EXPLOUD, SPECIES_MIGHTYENA}, .id = 5, @@ -346,7 +346,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] = }, { .name = {_("ミサオ"), _("AMIRA"), _("LAURE"), _("DAFNE"), _("AMELIE"), _("LARA")}, - .otId = 0xF555, + .otId = 62805, .facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_F, .species = {SPECIES_STARMIE, SPECIES_DODRIO, SPECIES_MAGNETON, SPECIES_MEDICHAM, SPECIES_MIGHTYENA, SPECIES_GLALIE, SPECIES_GOLEM, SPECIES_ELECTRODE, SPECIES_PELIPPER, SPECIES_SHARPEDO}, .id = 6, @@ -354,7 +354,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] = }, { .name = {_("カズサ"), _("KALI"), _("JODIE"), _("ILENIA"), _("KARO"), _("ELSA")}, - .otId = 0x8D26, + .otId = 36134, .facilityClass = FACILITY_CLASS_BEAUTY, .species = {SPECIES_NINETALES, SPECIES_ALAKAZAM, SPECIES_SCEPTILE, SPECIES_SALAMENCE, SPECIES_GOLDUCK, SPECIES_MAWILE, SPECIES_WEEZING, SPECIES_LANTURN, SPECIES_GARDEVOIR, SPECIES_MILOTIC}, .id = 7, @@ -362,7 +362,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] = }, { .name = {_("スミレ"), _("ANNIE"), _("ANNIE"), _("IMELDA"), _("INES"), _("ROSA")}, - .otId = 0x800C, + .otId = 32780, .facilityClass = FACILITY_CLASS_AROMA_LADY, .species = {SPECIES_SCEPTILE, SPECIES_VILEPLUME, SPECIES_BELLOSSOM, SPECIES_ROSELIA, SPECIES_CORSOLA, SPECIES_FLYGON, SPECIES_BRELOOM, SPECIES_MILOTIC, SPECIES_ALTARIA, SPECIES_CRADILY}, .id = 8, @@ -370,7 +370,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] = }, { .name = {_("アキノリ"), _("DILLEN"), _("RENE"), _("INDRO"), _("DETLEF"), _("PEDRO")}, - .otId = 0x469f, + .otId = 18079, .facilityClass = FACILITY_CLASS_HIKER, .species = {SPECIES_SKARMORY, SPECIES_GOLEM, SPECIES_BLAZIKEN, SPECIES_CAMERUPT, SPECIES_DONPHAN, SPECIES_MUK, SPECIES_SALAMENCE, SPECIES_TROPIUS, SPECIES_SOLROCK, SPECIES_RHYDON}, .id = 9, @@ -378,7 +378,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] = }, { .name = {_("トウゾウ"), _("DALLAS"), _("BRUNO"), _("LEARCO"), _("ANSGAR"), _("MANOLO")}, - .otId = 0x71FC, + .otId = 29180, .facilityClass = FACILITY_CLASS_FISHERMAN, .species = {SPECIES_SEAKING, SPECIES_STARMIE, SPECIES_GOLDUCK, SPECIES_TENTACRUEL, SPECIES_OCTILLERY, SPECIES_GOREBYSS, SPECIES_GLALIE, SPECIES_WAILORD, SPECIES_SHARPEDO, SPECIES_KINGDRA}, .id = 10, @@ -386,7 +386,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] = }, { .name = {_("セイヤ"), _("FRANK"), _("FRANK"), _("OLINDO"), _("FRANK"), _("MAURO")}, - .otId = 0xA39E, + .otId = 41886, .facilityClass = FACILITY_CLASS_SAILOR, .species = {SPECIES_QUAGSIRE, SPECIES_STARMIE, SPECIES_PELIPPER, SPECIES_CRAWDAUNT, SPECIES_WAILORD, SPECIES_GYARADOS, SPECIES_SWAMPERT, SPECIES_LANTURN, SPECIES_WHISCASH, SPECIES_SHUCKLE}, .id = 11, @@ -394,7 +394,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] = }, { .name = {_("リュウジ"), _("LAMONT"), _("XAV"), _("ORFEO"), _("JÜRGEN"), _("JORGE")}, - .otId = 0xE590, + .otId = 58768, .facilityClass = FACILITY_CLASS_GUITARIST, .species = {SPECIES_ABSOL, SPECIES_CROBAT, SPECIES_EXPLOUD, SPECIES_MAGNETON, SPECIES_SHARPEDO, SPECIES_MANECTRIC, SPECIES_METAGROSS, SPECIES_ELECTRODE, SPECIES_NOSEPASS, SPECIES_WEEZING}, .id = 12, @@ -402,7 +402,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] = }, { .name = {_("カツアキ"), _("TYRESE"), _("ANDY"), _("PARIDE"), _("DAVID"), _("CHICHO")}, - .otId = 0xD018, + .otId = 53272, .facilityClass = FACILITY_CLASS_BLACK_BELT, .species = {SPECIES_BLAZIKEN, SPECIES_GOLEM, SPECIES_MACHAMP, SPECIES_RHYDON, SPECIES_HARIYAMA, SPECIES_AGGRON, SPECIES_MEDICHAM, SPECIES_ZANGOOSE, SPECIES_VIGOROTH, SPECIES_SLAKING}, .id = 13, @@ -410,7 +410,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] = }, { .name = {_("トシミツ"), _("DANTE"), _("DANTE"), _("RAOUL"), _("LOTHAR"), _("PABLO")}, - .otId = 0xBC75, + .otId = 48245, .facilityClass = FACILITY_CLASS_RUIN_MANIAC, .species = {SPECIES_SCEPTILE, SPECIES_SANDSLASH, SPECIES_FLYGON, SPECIES_CLAYDOL, SPECIES_ARMALDO, SPECIES_CROBAT, SPECIES_CRADILY, SPECIES_SOLROCK, SPECIES_LUNATONE, SPECIES_GOLEM}, .id = 14, @@ -418,7 +418,7 @@ const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] = }, { .name = {_("ローウェン"), _("ARTURO"), _("ARTURO"), _("ROMOLO"), _("BRIAN"), _("ARTURO")}, - .otId = 0xFA02, + .otId = 64002, .facilityClass = FACILITY_CLASS_GENTLEMAN, .species = {SPECIES_ABSOL, SPECIES_MIGHTYENA, SPECIES_ALAKAZAM, SPECIES_BANETTE, SPECIES_NINETALES, SPECIES_CLAYDOL, SPECIES_MUK, SPECIES_SALAMENCE, SPECIES_WALREIN, SPECIES_DUSCLOPS}, .id = 15, From 2b3589b44f7afeafc18bcfbecbe2876786fa1c9a Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Thu, 27 Feb 2025 12:46:14 -0300 Subject: [PATCH 005/115] =?UTF-8?q?Moved=20Pok=C3=A9mon=20Jump=20types=20t?= =?UTF-8?q?o=20gSpeciesInfo=20(#5602)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/constants/pokemon.h | 8 + include/pokemon.h | 2 +- src/data/pokemon/species_info.h | 2 + .../pokemon/species_info/gen_1_families.h | 273 +++++++++++ .../pokemon/species_info/gen_2_families.h | 112 +++++ .../pokemon/species_info/gen_3_families.h | 172 +++++++ .../pokemon/species_info/gen_4_families.h | 98 ++++ .../pokemon/species_info/gen_5_families.h | 188 ++++++++ .../pokemon/species_info/gen_6_families.h | 91 ++++ .../pokemon/species_info/gen_7_families.h | 113 +++++ .../pokemon/species_info/gen_8_families.h | 123 +++++ .../pokemon/species_info/gen_9_families.h | 125 +++++ src/pokemon_jump.c | 450 +----------------- 13 files changed, 1329 insertions(+), 428 deletions(-) diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index dc6d399acf..45204d6062 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -313,6 +313,14 @@ enum EvolutionMode { EVO_MODE_BATTLE_ONLY, // This mode is only used in battles to support Tandemaus' unique requirement }; + +enum PokemonJumpType{ + PKMN_JUMP_TYPE_NONE, // Not allowed in Pokémon Jump + PKMN_JUMP_TYPE_NORMAL, + PKMN_JUMP_TYPE_FAST, + PKMN_JUMP_TYPE_SLOW, +}; + #define MON_PIC_WIDTH 64 #define MON_PIC_HEIGHT 64 #define MON_PIC_SIZE (MON_PIC_WIDTH * MON_PIC_HEIGHT / 2) diff --git a/include/pokemon.h b/include/pokemon.h index 1326e81329..c259266da8 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -428,7 +428,7 @@ struct SpeciesInfo /*0xC4*/ #else u8 paddingF:3; #endif //P_GENDER_DIFFERENCES - u8 padding3:2; + u8 pokemonJumpType:2; // According to the clerk, the Pokémon allowed in Pokémon Jump are all <= 28 inches/71 cm, and do not only swim, burrow, or fly. u8 enemyMonElevation; // This determines how much higher above the usual position the enemy Pokémon is during battle. Species that float or fly have nonzero values. // Flags u32 isLegendary:1; diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h index 5b3d31786e..7bd9e9f1f9 100644 --- a/src/data/pokemon/species_info.h +++ b/src/data/pokemon/species_info.h @@ -122,7 +122,9 @@ const struct SpeciesInfo gSpeciesInfo[] = .shinyPalette = gMonShinyPalette_CircledQuestionMark, .iconSprite = gMonIcon_QuestionMark, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, FOOTPRINT(QuestionMark) + SHADOW(-1, 0, SHADOW_SIZE_M) #if OW_POKEMON_OBJECT_EVENTS .overworldData = { .tileTag = TAG_NONE, diff --git a/src/data/pokemon/species_info/gen_1_families.h b/src/data/pokemon/species_info/gen_1_families.h index 05bad13974..b1b58928e5 100644 --- a/src/data/pokemon/species_info/gen_1_families.h +++ b/src/data/pokemon/species_info/gen_1_families.h @@ -55,6 +55,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Bulbasaur, .iconSprite = gMonIcon_Bulbasaur, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 4, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(1, -1, SHADOW_SIZE_S) FOOTPRINT(Bulbasaur) OVERWORLD( @@ -124,6 +125,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Ivysaur, .iconSprite = gMonIcon_Ivysaur, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 4, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 3, SHADOW_SIZE_L) FOOTPRINT(Ivysaur) OVERWORLD( @@ -204,6 +206,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .backPicFemale = gMonBackPic_VenusaurF, .backPicSizeFemale = MON_COORDS_SIZE(64, 48), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Venusaur) OVERWORLD( @@ -276,6 +279,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_VenusaurMega, .iconSprite = gMonIcon_VenusaurMega, .iconPalIndex = 4, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Venusaur) #if OW_BATTLE_ONLY_FORMS @@ -346,6 +350,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_VenusaurGmax, .iconSprite = gMonIcon_VenusaurGmax, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 4, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Venusaur) .isGigantamax = TRUE, @@ -409,6 +414,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Charmander, .iconSprite = gMonIcon_Charmander, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-2, 3, SHADOW_SIZE_S) FOOTPRINT(Charmander) OVERWORLD( @@ -478,6 +484,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Charmeleon, .iconSprite = gMonIcon_Charmeleon, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 5, SHADOW_SIZE_M) FOOTPRINT(Charmeleon) OVERWORLD( @@ -550,6 +557,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Charizard, .iconSprite = gMonIcon_Charizard, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 13, SHADOW_SIZE_L) FOOTPRINT(Charizard) OVERWORLD( @@ -614,6 +622,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_CharizardMegaX, .iconSprite = gMonIcon_CharizardMegaX, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 13, SHADOW_SIZE_L) FOOTPRINT(Charizard) #if OW_BATTLE_ONLY_FORMS @@ -681,6 +690,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_CharizardMegaY, .iconSprite = gMonIcon_CharizardMegaY, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 14, SHADOW_SIZE_L) FOOTPRINT(Charizard) #if OW_BATTLE_ONLY_FORMS @@ -750,6 +760,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_CharizardGmax, .iconSprite = gMonIcon_CharizardGmax, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 13, SHADOW_SIZE_L) FOOTPRINT(Charizard) .isGigantamax = TRUE, @@ -814,6 +825,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Squirtle, .iconSprite = gMonIcon_Squirtle, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-3, 2, SHADOW_SIZE_S) FOOTPRINT(Squirtle) OVERWORLD( @@ -883,6 +895,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Wartortle, .iconSprite = gMonIcon_Wartortle, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 6, SHADOW_SIZE_M) FOOTPRINT(Wartortle) OVERWORLD( @@ -958,6 +971,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Blastoise, .iconSprite = gMonIcon_Blastoise, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Blastoise) OVERWORLD( @@ -1023,6 +1037,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_BlastoiseMega, .iconSprite = gMonIcon_BlastoiseMega, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 11, SHADOW_SIZE_L) FOOTPRINT(Blastoise) #if OW_BATTLE_ONLY_FORMS @@ -1092,6 +1107,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_BlastoiseGmax, .iconSprite = gMonIcon_BlastoiseGmax, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Blastoise) .isGigantamax = TRUE, @@ -1160,6 +1176,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Caterpie, .iconSprite = gMonIcon_Caterpie, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(4, 1, SHADOW_SIZE_S) FOOTPRINT(Caterpie) OVERWORLD( @@ -1227,6 +1244,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Metapod, .iconSprite = gMonIcon_Metapod, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(3, 0, SHADOW_SIZE_S) FOOTPRINT(Metapod) OVERWORLD( @@ -1324,6 +1342,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .backPicFemale = gMonBackPic_ButterfreeF, .backPicSizeFemale = MON_COORDS_SIZE(64, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 13, SHADOW_SIZE_S) FOOTPRINT(Butterfree) OVERWORLD( @@ -1399,6 +1418,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_ButterfreeGmax, .iconSprite = gMonIcon_ButterfreeGmax, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-4, 15, SHADOW_SIZE_S) FOOTPRINT(Butterfree) .isGigantamax = TRUE, @@ -1467,6 +1487,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Weedle, .iconSprite = gMonIcon_Weedle, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 2, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Weedle) OVERWORLD( @@ -1544,6 +1565,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Kakuna, .iconSprite = gMonIcon_Kakuna, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Kakuna) OVERWORLD( @@ -1629,6 +1651,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Beedrill, .iconSprite = gMonIcon_Beedrill, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 15, SHADOW_SIZE_M) FOOTPRINT(Beedrill) OVERWORLD( @@ -1697,6 +1720,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_BeedrillMega, .iconSprite = gMonIcon_BeedrillMega, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 14, SHADOW_SIZE_S) FOOTPRINT(Beedrill) #if OW_BATTLE_ONLY_FORMS @@ -1776,6 +1800,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Pidgey, .iconSprite = gMonIcon_Pidgey, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, -1, SHADOW_SIZE_S) FOOTPRINT(Pidgey) OVERWORLD( @@ -1851,6 +1876,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Pidgeotto, .iconSprite = gMonIcon_Pidgeotto, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-4, 6, SHADOW_SIZE_M) FOOTPRINT(Pidgeotto) OVERWORLD( @@ -1932,6 +1958,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Pidgeot, .iconSprite = gMonIcon_Pidgeot, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-7, 14, SHADOW_SIZE_M) FOOTPRINT(Pidgeot) OVERWORLD( @@ -1997,6 +2024,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PidgeotMega, .iconSprite = gMonIcon_PidgeotMega, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-7, 19, SHADOW_SIZE_M) FOOTPRINT(Pidgeot) #if OW_BATTLE_ONLY_FORMS @@ -2078,6 +2106,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .backPicFemale = gMonBackPic_RattataF, .backPicSizeFemale = MON_COORDS_SIZE(64, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(1, -3, SHADOW_SIZE_S) FOOTPRINT(Rattata) OVERWORLD( @@ -2169,6 +2198,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .backPicFemale = gMonBackPic_RaticateF, .backPicSizeFemale = MON_COORDS_SIZE(64, 48), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(0, 8, SHADOW_SIZE_L) FOOTPRINT(Raticate) OVERWORLD( @@ -2241,6 +2271,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_RattataAlola, .iconSprite = gMonIcon_RattataAlola, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-3, 2, SHADOW_SIZE_S) FOOTPRINT(Rattata) OVERWORLD( @@ -2305,6 +2336,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_RaticateAlola, .iconSprite = gMonIcon_RaticateAlola, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-4, 3, SHADOW_SIZE_L) FOOTPRINT(Raticate) OVERWORLD( @@ -2366,6 +2398,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_RaticateAlola, .iconSprite = gMonIcon_RaticateAlola, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-4, 3, SHADOW_SIZE_L) FOOTPRINT(Raticate) OVERWORLD( @@ -2441,6 +2474,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Spearow, .iconSprite = gMonIcon_Spearow, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Spearow) OVERWORLD( @@ -2517,6 +2551,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Fearow, .iconSprite = gMonIcon_Fearow, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 17, SHADOW_SIZE_M) FOOTPRINT(Fearow) OVERWORLD( @@ -2589,6 +2624,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Ekans, .iconSprite = gMonIcon_Ekans, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 2, SHADOW_SIZE_M) FOOTPRINT(Ekans) OVERWORLD( @@ -2663,6 +2699,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Arbok, .iconSprite = gMonIcon_Arbok, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Arbok) OVERWORLD( @@ -2731,6 +2768,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Pichu, .iconSprite = gMonIcon_Pichu, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Pichu) OVERWORLD( @@ -2801,6 +2839,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PichuSpikyEared, .iconSprite = gMonIcon_PichuSpikyEared, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(2, 0, SHADOW_SIZE_S) FOOTPRINT(Pichu) OVERWORLD( @@ -2887,6 +2926,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .iconPalIndexFemale = 2, #endif //P_CUSTOM_GENDER_DIFF_ICONS #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-3, 5, SHADOW_SIZE_M) OVERWORLD( sPicTable_Pikachu, @@ -2958,6 +2998,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuCosplay, .iconSprite = gMonIcon_PikachuCosplay, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, @@ -3009,6 +3050,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuRockStar, .iconSprite = gMonIcon_PikachuRockStar, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, @@ -3061,6 +3103,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuBelle, .iconSprite = gMonIcon_PikachuBelle, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, @@ -3113,6 +3156,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuPopStar, .iconSprite = gMonIcon_PikachuPopStar, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, @@ -3164,6 +3208,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuPhD, .iconSprite = gMonIcon_PikachuPhD, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, @@ -3215,6 +3260,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuLibre, .iconSprite = gMonIcon_PikachuLibre, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, @@ -3274,6 +3320,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuOriginal, .iconSprite = gMonIcon_PikachuOriginal, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, @@ -3329,6 +3376,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuHoenn, .iconSprite = gMonIcon_PikachuHoenn, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, @@ -3384,6 +3432,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuSinnoh, .iconSprite = gMonIcon_PikachuSinnoh, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, @@ -3439,6 +3488,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuUnova, .iconSprite = gMonIcon_PikachuUnova, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, @@ -3494,6 +3544,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuKalos, .iconSprite = gMonIcon_PikachuKalos, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, @@ -3549,6 +3600,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuAlola, .iconSprite = gMonIcon_PikachuAlola, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, @@ -3605,6 +3657,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuPartner, .iconSprite = gMonIcon_PikachuPartner, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, @@ -3660,6 +3713,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuWorld, .iconSprite = gMonIcon_PikachuWorld, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, @@ -3718,6 +3772,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuGmax, .iconSprite = gMonIcon_PikachuGmax, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Pikachu) .isGigantamax = TRUE, @@ -3788,6 +3843,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .iconPalIndexFemale = 2, #endif #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) OVERWORLD( @@ -3875,6 +3931,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .frontPicFemale = gMonFrontPic_RaichuF, .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 10, SHADOW_SIZE_M) FOOTPRINT(Raichu) OVERWORLD( @@ -3947,6 +4004,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_RaichuAlola, .iconSprite = gMonIcon_RaichuAlola, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 15, SHADOW_SIZE_M) FOOTPRINT(Raichu) OVERWORLD( @@ -4021,6 +4079,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Sandshrew, .iconSprite = gMonIcon_Sandshrew, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(0, 1, SHADOW_SIZE_M) FOOTPRINT(Sandshrew) OVERWORLD( @@ -4093,6 +4152,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Sandslash, .iconSprite = gMonIcon_Sandslash, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 4, SHADOW_SIZE_L) FOOTPRINT(Sandslash) OVERWORLD( @@ -4158,6 +4218,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_SandshrewAlola, .iconSprite = gMonIcon_SandshrewAlola, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-2, -1, SHADOW_SIZE_M) FOOTPRINT(Sandshrew) OVERWORLD( @@ -4225,6 +4286,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_SandslashAlola, .iconSprite = gMonIcon_SandslashAlola, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 9, SHADOW_SIZE_L) FOOTPRINT(Sandslash) OVERWORLD( @@ -4307,6 +4369,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_NidoranF, .iconSprite = gMonIcon_NidoranF, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(1, 0, SHADOW_SIZE_S) FOOTPRINT(NidoranF) OVERWORLD( @@ -4378,6 +4441,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Nidorina, .iconSprite = gMonIcon_Nidorina, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 5, SHADOW_SIZE_M) FOOTPRINT(Nidorina) OVERWORLD( @@ -4456,6 +4520,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Nidoqueen, .iconSprite = gMonIcon_Nidoqueen, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Nidoqueen) OVERWORLD( @@ -4526,6 +4591,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_NidoranM, .iconSprite = gMonIcon_NidoranM, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(1, 0, SHADOW_SIZE_S) FOOTPRINT(NidoranM) OVERWORLD( @@ -4598,6 +4664,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Nidorino, .iconSprite = gMonIcon_Nidorino, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 1, SHADOW_SIZE_L) FOOTPRINT(Nidorino) OVERWORLD( @@ -4679,6 +4746,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Nidoking, .iconSprite = gMonIcon_Nidoking, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Nidoking) OVERWORLD( @@ -4761,6 +4829,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Cleffa, .iconSprite = gMonIcon_Cleffa, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(0, -4, SHADOW_SIZE_S) FOOTPRINT(Cleffa) OVERWORLD( @@ -4836,6 +4905,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Clefairy, .iconSprite = gMonIcon_Clefairy, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(1, 1, SHADOW_SIZE_S) FOOTPRINT(Clefairy) OVERWORLD( @@ -4917,6 +4987,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Clefable, .iconSprite = gMonIcon_Clefable, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(Clefable) OVERWORLD( @@ -4988,6 +5059,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Vulpix, .iconSprite = gMonIcon_Vulpix, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 5, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(0, 2, SHADOW_SIZE_M) FOOTPRINT(Vulpix) OVERWORLD( @@ -5061,6 +5133,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Ninetales, .iconSprite = gMonIcon_Ninetales, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 3, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 7, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Ninetales) OVERWORLD( @@ -5126,6 +5199,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_VulpixAlola, .iconSprite = gMonIcon_VulpixAlola, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-2, 3, SHADOW_SIZE_M) FOOTPRINT(Vulpix) OVERWORLD( @@ -5194,6 +5268,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_NinetalesAlola, .iconSprite = gMonIcon_NinetalesAlola, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Ninetales) OVERWORLD( @@ -5279,6 +5354,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Igglybuff, .iconSprite = gMonIcon_Igglybuff, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(0, -3, SHADOW_SIZE_S) FOOTPRINT(Igglybuff) OVERWORLD( @@ -5356,6 +5432,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Jigglypuff, .iconSprite = gMonIcon_Jigglypuff, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-1, -1, SHADOW_SIZE_S) FOOTPRINT(Jigglypuff) OVERWORLD( @@ -5439,6 +5516,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Wigglytuff, .iconSprite = gMonIcon_Wigglytuff, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Wigglytuff) OVERWORLD( @@ -5524,6 +5602,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .backPicFemale = gMonBackPic_ZubatF, .backPicSizeFemale = MON_COORDS_SIZE(56, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-4, 11, SHADOW_SIZE_S) FOOTPRINT(Zubat) OVERWORLD( @@ -5622,6 +5701,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .backPicFemale = gMonBackPic_GolbatF, .backPicSizeFemale = MON_COORDS_SIZE(56, 40), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 14, SHADOW_SIZE_M) FOOTPRINT(Golbat) OVERWORLD( @@ -5718,6 +5798,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Crobat, .iconSprite = gMonIcon_Crobat, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 14, SHADOW_SIZE_M) FOOTPRINT(Crobat) OVERWORLD( @@ -5792,6 +5873,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Oddish, .iconSprite = gMonIcon_Oddish, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 4, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(0, -2, SHADOW_SIZE_S) FOOTPRINT(Oddish) OVERWORLD( @@ -5868,6 +5950,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .backPicFemale = gMonBackPic_GloomF, .backPicSizeFemale = MON_COORDS_SIZE(64, 48), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 3, SHADOW_SIZE_M) FOOTPRINT(Gloom) OVERWORLD( @@ -5957,6 +6040,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .backPicFemale = gMonBackPic_VileplumeF, .backPicSizeFemale = MON_COORDS_SIZE(64, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 7, SHADOW_SIZE_L) FOOTPRINT(Vileplume) OVERWORLD( @@ -6053,6 +6137,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Bellossom, .iconSprite = gMonIcon_Bellossom, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Bellossom) OVERWORLD( @@ -6142,6 +6227,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Paras, .iconSprite = gMonIcon_Paras, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(7, -11, SHADOW_SIZE_M) FOOTPRINT(Paras) OVERWORLD( @@ -6221,6 +6307,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Parasect, .iconSprite = gMonIcon_Parasect, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(5, 2, SHADOW_SIZE_L) FOOTPRINT(Parasect) OVERWORLD( @@ -6297,6 +6384,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Venonat, .iconSprite = gMonIcon_Venonat, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 5, SHADOW_SIZE_M) FOOTPRINT(Venonat) OVERWORLD( @@ -6391,6 +6479,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Venomoth, .iconSprite = gMonIcon_Venomoth, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-5, 18, SHADOW_SIZE_M) FOOTPRINT(Venomoth) OVERWORLD( @@ -6472,6 +6561,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Diglett, .iconSprite = gMonIcon_Diglett, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, NO_SHADOW FOOTPRINT(Diglett) OVERWORLD( @@ -6550,6 +6640,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Dugtrio, .iconSprite = gMonIcon_Dugtrio, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, NO_SHADOW FOOTPRINT(Dugtrio) OVERWORLD( @@ -6615,6 +6706,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_DiglettAlola, .iconSprite = gMonIcon_DiglettAlola, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, NO_SHADOW FOOTPRINT(Diglett) OVERWORLD( @@ -6683,6 +6775,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_DugtrioAlola, .iconSprite = gMonIcon_DugtrioAlola, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, NO_SHADOW FOOTPRINT(Dugtrio) OVERWORLD( @@ -6763,6 +6856,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Meowth, .iconSprite = gMonIcon_Meowth, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(0, 3, SHADOW_SIZE_S) FOOTPRINT(Meowth) OVERWORLD( @@ -6838,6 +6932,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Persian, .iconSprite = gMonIcon_Persian, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Persian) OVERWORLD( @@ -6903,6 +6998,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MeowthAlola, .iconSprite = gMonIcon_MeowthAlola, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-2, 5, SHADOW_SIZE_M) FOOTPRINT(Meowth) OVERWORLD( @@ -6970,6 +7066,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PersianAlola, .iconSprite = gMonIcon_PersianAlola, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 9, SHADOW_SIZE_L) FOOTPRINT(Persian) OVERWORLD( @@ -7036,6 +7133,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MeowthGalar, .iconSprite = gMonIcon_MeowthGalar, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(1, 4, SHADOW_SIZE_M) FOOTPRINT(Meowth) OVERWORLD( @@ -7101,6 +7199,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Perrserker, .iconSprite = gMonIcon_Perrserker, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(Perrserker) OVERWORLD( @@ -7166,6 +7265,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MeowthGmax, .iconSprite = gMonIcon_MeowthGmax, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Meowth) .isGigantamax = TRUE, @@ -7232,6 +7332,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Psyduck, .iconSprite = gMonIcon_Psyduck, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(1, 2, SHADOW_SIZE_M) FOOTPRINT(Psyduck) OVERWORLD( @@ -7302,6 +7403,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Golduck, .iconSprite = gMonIcon_Golduck, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 6, SHADOW_SIZE_M) FOOTPRINT(Golduck) OVERWORLD( @@ -7378,6 +7480,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Mankey, .iconSprite = gMonIcon_Mankey, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-1, 1, SHADOW_SIZE_M) FOOTPRINT(Mankey) OVERWORLD( @@ -7454,6 +7557,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Primeape, .iconSprite = gMonIcon_Primeape, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 7, SHADOW_SIZE_L) FOOTPRINT(Primeape) OVERWORLD( @@ -7518,6 +7622,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Annihilape, .iconSprite = gMonIcon_Annihilape, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Annihilape) OVERWORLD( @@ -7591,6 +7696,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Growlithe, .iconSprite = gMonIcon_Growlithe, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 3, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(0, 4, SHADOW_SIZE_M) FOOTPRINT(Growlithe) OVERWORLD( @@ -7660,6 +7766,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Arcanine, .iconSprite = gMonIcon_Arcanine, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 3, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-4, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Arcanine) OVERWORLD( @@ -7724,6 +7831,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_GrowlitheHisui, .iconSprite = gMonIcon_GrowlitheHisui, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, -2, SHADOW_SIZE_M) FOOTPRINT(Growlithe) OVERWORLD( @@ -7789,6 +7897,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_ArcanineHisui, .iconSprite = gMonIcon_ArcanineHisui, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Arcanine) OVERWORLD( @@ -7861,6 +7970,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Poliwag, .iconSprite = gMonIcon_Poliwag, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-3, 0, SHADOW_SIZE_S) FOOTPRINT(Poliwag) OVERWORLD( @@ -7934,6 +8044,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Poliwhirl, .iconSprite = gMonIcon_Poliwhirl, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 4, SHADOW_SIZE_M) FOOTPRINT(Poliwhirl) OVERWORLD( @@ -8012,6 +8123,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Poliwrath, .iconSprite = gMonIcon_Poliwrath, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 7, SHADOW_SIZE_L) FOOTPRINT(Poliwrath) OVERWORLD( @@ -8097,6 +8209,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .backPicFemale = gMonBackPic_PolitoedF, .backPicSizeFemale = MON_COORDS_SIZE(56, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 9, SHADOW_SIZE_M) FOOTPRINT(Politoed) OVERWORLD( @@ -8182,6 +8295,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Abra, .iconSprite = gMonIcon_Abra, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 0, SHADOW_SIZE_L) FOOTPRINT(Abra) OVERWORLD( @@ -8258,6 +8372,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .backPicFemale = gMonBackPic_KadabraF, .backPicSizeFemale = MON_COORDS_SIZE(64, 48), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 6, SHADOW_SIZE_L) FOOTPRINT(Kadabra) OVERWORLD( @@ -8350,6 +8465,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .backPicFemale = gMonBackPic_AlakazamF, .backPicSizeFemale = MON_COORDS_SIZE(64, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 9, SHADOW_SIZE_L) FOOTPRINT(Alakazam) OVERWORLD( @@ -8423,6 +8539,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_AlakazamMega, .iconSprite = gMonIcon_AlakazamMega, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 18, SHADOW_SIZE_L) FOOTPRINT(Alakazam) #if OW_BATTLE_ONLY_FORMS @@ -8510,6 +8627,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Machop, .iconSprite = gMonIcon_Machop, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 3, SHADOW_SIZE_S) FOOTPRINT(Machop) OVERWORLD( @@ -8584,6 +8702,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Machoke, .iconSprite = gMonIcon_Machoke, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 9, SHADOW_SIZE_M) FOOTPRINT(Machoke) OVERWORLD( @@ -8669,6 +8788,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Machamp, .iconSprite = gMonIcon_Machamp, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(7, 13, SHADOW_SIZE_L) FOOTPRINT(Machamp) OVERWORLD( @@ -8739,6 +8859,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MachampGmax, .iconSprite = gMonIcon_MachampGmax, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(7, 13, SHADOW_SIZE_L) FOOTPRINT(Machamp) .isGigantamax = TRUE, @@ -8802,6 +8923,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Bellsprout, .iconSprite = gMonIcon_Bellsprout, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-2, 3, SHADOW_SIZE_S) FOOTPRINT(Bellsprout) OVERWORLD( @@ -8875,6 +8997,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Weepinbell, .iconSprite = gMonIcon_Weepinbell, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 3, SHADOW_SIZE_M) FOOTPRINT(Weepinbell) OVERWORLD( @@ -8954,6 +9077,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Victreebel, .iconSprite = gMonIcon_Victreebel, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 8, SHADOW_SIZE_M) FOOTPRINT(Victreebel) OVERWORLD( @@ -9025,6 +9149,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Tentacool, .iconSprite = gMonIcon_Tentacool, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 6, SHADOW_SIZE_M) FOOTPRINT(Tentacool) OVERWORLD( @@ -9096,6 +9221,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Tentacruel, .iconSprite = gMonIcon_Tentacruel, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Tentacruel) OVERWORLD( @@ -9187,6 +9313,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Geodude, .iconSprite = gMonIcon_Geodude, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 2, SHADOW_SIZE_M) FOOTPRINT(Geodude) OVERWORLD( @@ -9259,6 +9386,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Graveler, .iconSprite = gMonIcon_Graveler, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 3, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Graveler) OVERWORLD( @@ -9331,6 +9459,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Golem, .iconSprite = gMonIcon_Golem, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 5, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Golem) OVERWORLD( @@ -9397,6 +9526,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_GeodudeAlola, .iconSprite = gMonIcon_GeodudeAlola, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 10, SHADOW_SIZE_M) FOOTPRINT(Geodude) OVERWORLD( @@ -9464,6 +9594,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_GravelerAlola, .iconSprite = gMonIcon_GravelerAlola, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 5, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Graveler) OVERWORLD( @@ -9531,6 +9662,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_GolemAlola, .iconSprite = gMonIcon_GolemAlola, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 11, SHADOW_SIZE_L) FOOTPRINT(Golem) OVERWORLD( @@ -9602,6 +9734,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Ponyta, .iconSprite = gMonIcon_Ponyta, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 3, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(Ponyta) OVERWORLD( @@ -9671,6 +9804,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Rapidash, .iconSprite = gMonIcon_Rapidash, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 3, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Rapidash) OVERWORLD( @@ -9735,6 +9869,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PonytaGalar, .iconSprite = gMonIcon_PonytaGalar, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-5, 5, SHADOW_SIZE_M) FOOTPRINT(Ponyta) OVERWORLD( @@ -9801,6 +9936,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_RapidashGalar, .iconSprite = gMonIcon_RapidashGalar, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Rapidash) OVERWORLD( @@ -9873,6 +10009,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Slowpoke, .iconSprite = gMonIcon_Slowpoke, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, -5, SHADOW_SIZE_L) FOOTPRINT(Slowpoke) OVERWORLD( @@ -9944,6 +10081,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Slowbro, .iconSprite = gMonIcon_Slowbro, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 8, SHADOW_SIZE_L) FOOTPRINT(Slowbro) OVERWORLD( @@ -10014,6 +10152,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Slowking, .iconSprite = gMonIcon_Slowking, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 11, SHADOW_SIZE_M) FOOTPRINT(Slowking) OVERWORLD( @@ -10080,6 +10219,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_SlowbroMega, .iconSprite = gMonIcon_SlowbroMega, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(Slowbro) #if OW_BATTLE_ONLY_FORMS @@ -10149,6 +10289,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_SlowpokeGalar, .iconSprite = gMonIcon_SlowpokeGalar, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, -8, SHADOW_SIZE_L) FOOTPRINT(Slowpoke) OVERWORLD( @@ -10217,6 +10358,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_SlowbroGalar, .iconSprite = gMonIcon_SlowbroGalar, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-5, 9, SHADOW_SIZE_L) FOOTPRINT(Slowbro) OVERWORLD( @@ -10282,6 +10424,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_SlowkingGalar, .iconSprite = gMonIcon_SlowkingGalar, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 12, SHADOW_SIZE_M) FOOTPRINT(Slowking) OVERWORLD( @@ -10358,6 +10501,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Magnemite, .iconSprite = gMonIcon_Magnemite, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 8, SHADOW_SIZE_S) FOOTPRINT(Magnemite) OVERWORLD( @@ -10431,6 +10575,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Magneton, .iconSprite = gMonIcon_Magneton, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 13, SHADOW_SIZE_M) FOOTPRINT(Magneton) OVERWORLD( @@ -10510,6 +10655,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Magnezone, .iconSprite = gMonIcon_Magnezone, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Magnezone) OVERWORLD( @@ -10599,6 +10745,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Farfetchd, .iconSprite = gMonIcon_Farfetchd, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Farfetchd) OVERWORLD( @@ -10665,6 +10812,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_FarfetchdGalar, .iconSprite = gMonIcon_FarfetchdGalar, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-7, 2, SHADOW_SIZE_L) FOOTPRINT(Farfetchd) OVERWORLD( @@ -10732,6 +10880,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Sirfetchd, .iconSprite = gMonIcon_Sirfetchd, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Sirfetchd) OVERWORLD( @@ -10810,6 +10959,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .backPicFemale = gMonBackPic_DoduoF, .backPicSizeFemale = MON_COORDS_SIZE(64, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(6, 5, SHADOW_SIZE_M) FOOTPRINT(Doduo) OVERWORLD( @@ -10902,6 +11052,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .backPicFemale = gMonBackPic_DodrioF, .backPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 12, SHADOW_SIZE_L) FOOTPRINT(Dodrio) OVERWORLD( @@ -10982,6 +11133,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Seel, .iconSprite = gMonIcon_Seel, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 3, SHADOW_SIZE_L) FOOTPRINT(Seel) OVERWORLD( @@ -11054,6 +11206,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Dewgong, .iconSprite = gMonIcon_Dewgong, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Dewgong) OVERWORLD( @@ -11125,6 +11278,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Grimer, .iconSprite = gMonIcon_Grimer, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 3, SHADOW_SIZE_M) FOOTPRINT(Grimer) OVERWORLD( @@ -11199,6 +11353,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Muk, .iconSprite = gMonIcon_Muk, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Muk) OVERWORLD( @@ -11264,6 +11419,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_GrimerAlola, .iconSprite = gMonIcon_GrimerAlola, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 1, SHADOW_SIZE_M) FOOTPRINT(Grimer) OVERWORLD( @@ -11333,6 +11489,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MukAlola, .iconSprite = gMonIcon_MukAlola, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 7, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Muk) OVERWORLD( @@ -11412,6 +11569,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Shellder, .iconSprite = gMonIcon_Shellder, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(0, -4, SHADOW_SIZE_S) FOOTPRINT(Shellder) OVERWORLD( @@ -11487,6 +11645,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Cloyster, .iconSprite = gMonIcon_Cloyster, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 8, SHADOW_SIZE_M) FOOTPRINT(Cloyster) OVERWORLD( @@ -11560,6 +11719,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Gastly, .iconSprite = gMonIcon_Gastly, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 11, SHADOW_SIZE_S) FOOTPRINT(Gastly) OVERWORLD( @@ -11632,6 +11792,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Haunter, .iconSprite = gMonIcon_Haunter, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 12, SHADOW_SIZE_M) FOOTPRINT(Haunter) OVERWORLD( @@ -11712,6 +11873,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Gengar, .iconSprite = gMonIcon_Gengar, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 5, SHADOW_SIZE_L) FOOTPRINT(Gengar) OVERWORLD( @@ -11777,6 +11939,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_GengarMega, .iconSprite = gMonIcon_GengarMega, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(6, 1, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Gengar) #if OW_BATTLE_ONLY_FORMS @@ -11846,6 +12009,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_GengarGmax, .iconSprite = gMonIcon_GengarGmax, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, NO_SHADOW FOOTPRINT(Gengar) .isGigantamax = TRUE, @@ -11908,6 +12072,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Onix, .iconSprite = gMonIcon_Onix, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Onix) OVERWORLD( @@ -11988,6 +12153,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .backPicFemale = gMonBackPic_SteelixF, .backPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Steelix) OVERWORLD( @@ -12061,6 +12227,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_SteelixMega, .iconSprite = gMonIcon_SteelixMega, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Steelix) #if OW_BATTLE_ONLY_FORMS @@ -12144,6 +12311,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Drowzee, .iconSprite = gMonIcon_Drowzee, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 6, SHADOW_SIZE_M) FOOTPRINT(Drowzee) OVERWORLD( @@ -12227,6 +12395,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .backPicFemale = gMonBackPic_HypnoF, .backPicSizeFemale = MON_COORDS_SIZE(64, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 9, SHADOW_SIZE_L) FOOTPRINT(Hypno) OVERWORLD( @@ -12305,6 +12474,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Krabby, .iconSprite = gMonIcon_Krabby, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(0, -1, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Krabby) OVERWORLD( @@ -12374,6 +12544,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Kingler, .iconSprite = gMonIcon_Kingler, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 4, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kingler) OVERWORLD( @@ -12440,6 +12611,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_KinglerGmax, .iconSprite = gMonIcon_KinglerGmax, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kingler) .isGigantamax = TRUE, @@ -12514,6 +12686,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Voltorb, .iconSprite = gMonIcon_Voltorb, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, -2, SHADOW_SIZE_S) FOOTPRINT(Voltorb) OVERWORLD( @@ -12584,6 +12757,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Electrode, .iconSprite = gMonIcon_Electrode, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 2, SHADOW_SIZE_M) FOOTPRINT(Electrode) OVERWORLD( @@ -12648,6 +12822,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_VoltorbHisui, .iconSprite = gMonIcon_VoltorbHisui, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, -4, SHADOW_SIZE_S) FOOTPRINT(Voltorb) OVERWORLD( @@ -12713,6 +12888,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_ElectrodeHisui, .iconSprite = gMonIcon_ElectrodeHisui, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 4, SHADOW_SIZE_M) FOOTPRINT(Electrode) OVERWORLD( @@ -12791,6 +12967,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Exeggcute, .iconSprite = gMonIcon_Exeggcute, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(0, -5, SHADOW_SIZE_L) FOOTPRINT(Exeggcute) OVERWORLD( @@ -12869,6 +13046,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Exeggutor, .iconSprite = gMonIcon_Exeggutor, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 13, SHADOW_SIZE_L) FOOTPRINT(Exeggutor) OVERWORLD( @@ -12933,6 +13111,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_ExeggutorAlola, .iconSprite = gMonIcon_ExeggutorAlola, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(6, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Exeggutor) OVERWORLD( @@ -13009,6 +13188,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Cubone, .iconSprite = gMonIcon_Cubone, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(1, 0, SHADOW_SIZE_S) FOOTPRINT(Cubone) OVERWORLD( @@ -13083,6 +13263,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Marowak, .iconSprite = gMonIcon_Marowak, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(6, 6, SHADOW_SIZE_M) FOOTPRINT(Marowak) OVERWORLD( @@ -13144,6 +13325,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MarowakAlola, .iconSprite = gMonIcon_MarowakAlola, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 11, SHADOW_SIZE_M) FOOTPRINT(Marowak) OVERWORLD( @@ -13205,6 +13387,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MarowakAlola, .iconSprite = gMonIcon_MarowakAlola, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 11, SHADOW_SIZE_M) FOOTPRINT(Marowak) OVERWORLD( @@ -13282,6 +13465,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Tyrogue, .iconSprite = gMonIcon_Tyrogue, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Tyrogue) OVERWORLD( @@ -13357,6 +13541,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Hitmonlee, .iconSprite = gMonIcon_Hitmonlee, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 8, SHADOW_SIZE_M) FOOTPRINT(Hitmonlee) OVERWORLD( @@ -13435,6 +13620,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Hitmonchan, .iconSprite = gMonIcon_Hitmonchan, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 9, SHADOW_SIZE_M) FOOTPRINT(Hitmonchan) OVERWORLD( @@ -13508,6 +13694,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Hitmontop, .iconSprite = gMonIcon_Hitmontop, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Hitmontop) OVERWORLD( @@ -13577,6 +13764,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Lickitung, .iconSprite = gMonIcon_Lickitung, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 6, SHADOW_SIZE_M) FOOTPRINT(Lickitung) OVERWORLD( @@ -13653,6 +13841,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Lickilicky, .iconSprite = gMonIcon_Lickilicky, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 11, SHADOW_SIZE_M) FOOTPRINT(Lickilicky) OVERWORLD( @@ -13730,6 +13919,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Koffing, .iconSprite = gMonIcon_Koffing, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 15, SHADOW_SIZE_S) FOOTPRINT(Koffing) OVERWORLD( @@ -13808,6 +13998,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Weezing, .iconSprite = gMonIcon_Weezing, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(5, 14, SHADOW_SIZE_M) FOOTPRINT(Weezing) OVERWORLD( @@ -13875,6 +14066,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_WeezingGalar, .iconSprite = gMonIcon_WeezingGalar, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(7, 17, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Weezing) OVERWORLD( @@ -13954,6 +14146,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .backPicFemale = gMonBackPic_RhyhornF, .backPicSizeFemale = MON_COORDS_SIZE(64, 48), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 0, SHADOW_SIZE_L) FOOTPRINT(Rhyhorn) OVERWORLD( @@ -14034,6 +14227,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .backPicFemale = gMonBackPic_RhydonF, .backPicSizeFemale = MON_COORDS_SIZE(64, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Rhydon) OVERWORLD( @@ -14124,6 +14318,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .backPicFemale = gMonBackPic_RhyperiorF, .backPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Rhyperior) OVERWORLD( @@ -14202,6 +14397,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Happiny, .iconSprite = gMonIcon_Happiny, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Happiny) OVERWORLD( @@ -14273,6 +14469,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Chansey, .iconSprite = gMonIcon_Chansey, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 4, SHADOW_SIZE_L) FOOTPRINT(Chansey) OVERWORLD( @@ -14343,6 +14540,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Blissey, .iconSprite = gMonIcon_Blissey, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 8, SHADOW_SIZE_L) FOOTPRINT(Blissey) OVERWORLD( @@ -14416,6 +14614,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Tangela, .iconSprite = gMonIcon_Tangela, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 1, SHADOW_SIZE_M) FOOTPRINT(Tangela) OVERWORLD( @@ -14493,6 +14692,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .frontPicFemale = gMonFrontPic_TangrowthF, .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Tangrowth) OVERWORLD( @@ -14570,6 +14770,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Kangaskhan, .iconSprite = gMonIcon_Kangaskhan, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kangaskhan) OVERWORLD( @@ -14636,6 +14837,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_KangaskhanMega, .iconSprite = gMonIcon_KangaskhanMega, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kangaskhan) #if OW_BATTLE_ONLY_FORMS @@ -14718,6 +14920,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Horsea, .iconSprite = gMonIcon_Horsea, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Horsea) OVERWORLD( @@ -14794,6 +14997,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Seadra, .iconSprite = gMonIcon_Seadra, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 7, SHADOW_SIZE_M) FOOTPRINT(Seadra) OVERWORLD( @@ -14878,6 +15082,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Kingdra, .iconSprite = gMonIcon_Kingdra, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 12, SHADOW_SIZE_M) FOOTPRINT(Kingdra) OVERWORLD( @@ -14960,6 +15165,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .backPicFemale = gMonBackPic_GoldeenF, .backPicSizeFemale = MON_COORDS_SIZE(64, 48), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-6, 0, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Goldeen) OVERWORLD( @@ -15044,6 +15250,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .backPicFemale = gMonBackPic_SeakingF, .backPicSizeFemale = MON_COORDS_SIZE(64, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Seaking) OVERWORLD( @@ -15124,6 +15331,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Staryu, .iconSprite = gMonIcon_Staryu, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 2, SHADOW_SIZE_M) FOOTPRINT(Staryu) OVERWORLD( @@ -15195,6 +15403,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Starmie, .iconSprite = gMonIcon_Starmie, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 7, SHADOW_SIZE_L) FOOTPRINT(Starmie) OVERWORLD( @@ -15275,6 +15484,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MimeJr, .iconSprite = gMonIcon_MimeJr, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-5, 4, SHADOW_SIZE_S) FOOTPRINT(MimeJr) OVERWORLD( @@ -15352,6 +15562,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MrMime, .iconSprite = gMonIcon_MrMime, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(MrMime) OVERWORLD( @@ -15417,6 +15628,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MrMimeGalar, .iconSprite = gMonIcon_MrMimeGalar, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 6, SHADOW_SIZE_M) FOOTPRINT(MrMime) OVERWORLD( @@ -15482,6 +15694,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MrRime, .iconSprite = gMonIcon_MrRime, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 9, SHADOW_SIZE_L) FOOTPRINT(MrRime) OVERWORLD( @@ -15565,6 +15778,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .frontPicFemale = gMonFrontPic_ScytherF, .frontPicSizeFemale = MON_COORDS_SIZE(56, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 7, SHADOW_SIZE_L) FOOTPRINT(Scyther) OVERWORLD( @@ -15651,6 +15865,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .frontPicFemale = gMonFrontPic_ScizorF, .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Scizor) OVERWORLD( @@ -15723,6 +15938,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_ScizorMega, .iconSprite = gMonIcon_ScizorMega, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(5, 15, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Scizor) #if OW_BATTLE_ONLY_FORMS @@ -15793,6 +16009,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Kleavor, .iconSprite = gMonIcon_Kleavor, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kleavor) OVERWORLD( @@ -15867,6 +16084,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Smoochum, .iconSprite = gMonIcon_Smoochum, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-1, 0, SHADOW_SIZE_S) FOOTPRINT(Smoochum) OVERWORLD( @@ -15942,6 +16160,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Jynx, .iconSprite = gMonIcon_Jynx, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 3, SHADOW_SIZE_L) FOOTPRINT(Jynx) OVERWORLD( @@ -16013,6 +16232,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Elekid, .iconSprite = gMonIcon_Elekid, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-1, 1, SHADOW_SIZE_M) FOOTPRINT(Elekid) OVERWORLD( @@ -16086,6 +16306,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Electabuzz, .iconSprite = gMonIcon_Electabuzz, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 9, SHADOW_SIZE_L) FOOTPRINT(Electabuzz) OVERWORLD( @@ -16162,6 +16383,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Electivire, .iconSprite = gMonIcon_Electivire, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Electivire) OVERWORLD( @@ -16235,6 +16457,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Magby, .iconSprite = gMonIcon_Magby, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Magby) OVERWORLD( @@ -16304,6 +16527,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Magmar, .iconSprite = gMonIcon_Magmar, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 8, SHADOW_SIZE_L) FOOTPRINT(Magmar) OVERWORLD( @@ -16380,6 +16604,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Magmortar, .iconSprite = gMonIcon_Magmortar, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Magmortar) OVERWORLD( @@ -16455,6 +16680,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Pinsir, .iconSprite = gMonIcon_Pinsir, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(5, 7, SHADOW_SIZE_L) FOOTPRINT(Pinsir) OVERWORLD( @@ -16522,6 +16748,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PinsirMega, .iconSprite = gMonIcon_PinsirMega, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 12, SHADOW_SIZE_L) FOOTPRINT(Pinsir) #if OW_BATTLE_ONLY_FORMS @@ -16604,6 +16831,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Tauros, .iconSprite = gMonIcon_Tauros, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Tauros) OVERWORLD( @@ -16668,6 +16896,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_TaurosPaldeaCombat, .iconSprite = gMonIcon_TaurosPaldeaCombat, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Tauros) OVERWORLD( @@ -16733,6 +16962,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_TaurosPaldeaBlaze, .iconSprite = gMonIcon_TaurosPaldeaBlaze, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Tauros) OVERWORLD( @@ -16798,6 +17028,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_TaurosPaldeaAqua, .iconSprite = gMonIcon_TaurosPaldeaAqua, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Tauros) OVERWORLD( @@ -16882,6 +17113,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .backPicFemale = gMonBackPic_MagikarpF, .backPicSizeFemale = MON_COORDS_SIZE(64, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 7, SHADOW_SIZE_M) FOOTPRINT(Magikarp) OVERWORLD( @@ -16963,6 +17195,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .backPicFemale = gMonBackPic_GyaradosF, .backPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(5, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Gyarados) OVERWORLD( @@ -17036,6 +17269,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_GyaradosMega, .iconSprite = gMonIcon_GyaradosMega, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 17, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Gyarados) #if OW_BATTLE_ONLY_FORMS @@ -17111,6 +17345,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Lapras, .iconSprite = gMonIcon_Lapras, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Lapras) OVERWORLD( @@ -17179,6 +17414,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_LaprasGmax, .iconSprite = gMonIcon_LaprasGmax, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Lapras) .isGigantamax = TRUE, @@ -17246,6 +17482,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Ditto, .iconSprite = gMonIcon_Ditto, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(0, -4, SHADOW_SIZE_M) FOOTPRINT(Ditto) OVERWORLD( @@ -17320,6 +17557,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .backPicFemale = gMonBackPic_EeveeF, .backPicSizeFemale = MON_COORDS_SIZE(56, 48), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Eevee) OVERWORLD( @@ -17403,6 +17641,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_EeveeGmax, .iconSprite = gMonIcon_EeveeGmax, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 4, SHADOW_SIZE_L) FOOTPRINT(Eevee) .isGigantamax = TRUE, @@ -17470,6 +17709,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .iconPalIndexFemale = 2, #endif #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Eevee) OVERWORLD( @@ -17539,6 +17779,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Vaporeon, .iconSprite = gMonIcon_Vaporeon, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-4, 3, SHADOW_SIZE_M) FOOTPRINT(Vaporeon) OVERWORLD( @@ -17604,6 +17845,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Jolteon, .iconSprite = gMonIcon_Jolteon, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 2, SHADOW_SIZE_M) FOOTPRINT(Jolteon) OVERWORLD( @@ -17669,6 +17911,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Flareon, .iconSprite = gMonIcon_Flareon, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 3, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 1, SHADOW_SIZE_L) FOOTPRINT(Flareon) OVERWORLD( @@ -17736,6 +17979,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Espeon, .iconSprite = gMonIcon_Espeon, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 4, SHADOW_SIZE_M) FOOTPRINT(Espeon) OVERWORLD( @@ -17801,6 +18045,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Umbreon, .iconSprite = gMonIcon_Umbreon, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 3, SHADOW_SIZE_M) FOOTPRINT(Umbreon) OVERWORLD( @@ -17869,6 +18114,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Leafeon, .iconSprite = gMonIcon_Leafeon, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 4, SHADOW_SIZE_M) FOOTPRINT(Leafeon) OVERWORLD( @@ -17935,6 +18181,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Glaceon, .iconSprite = gMonIcon_Glaceon, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 3, SHADOW_SIZE_M) FOOTPRINT(Glaceon) OVERWORLD( @@ -18004,6 +18251,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Sylveon, .iconSprite = gMonIcon_Sylveon, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 9, SHADOW_SIZE_M) FOOTPRINT(Sylveon) OVERWORLD( @@ -18078,6 +18326,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Porygon, .iconSprite = gMonIcon_Porygon, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, -2, SHADOW_SIZE_S) FOOTPRINT(Porygon) OVERWORLD( @@ -18154,6 +18403,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Porygon2, .iconSprite = gMonIcon_Porygon2, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Porygon2) OVERWORLD( @@ -18231,6 +18481,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PorygonZ, .iconSprite = gMonIcon_PorygonZ, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 17, SHADOW_SIZE_S) FOOTPRINT(PorygonZ) OVERWORLD( @@ -18312,6 +18563,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Omanyte, .iconSprite = gMonIcon_Omanyte, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-2, -2, SHADOW_SIZE_S) FOOTPRINT(Omanyte) OVERWORLD( @@ -18381,6 +18633,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Omastar, .iconSprite = gMonIcon_Omastar, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 4, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Omastar) OVERWORLD( @@ -18460,6 +18713,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Kabuto, .iconSprite = gMonIcon_Kabuto, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(2, -3, SHADOW_SIZE_S) FOOTPRINT(Kabuto) OVERWORLD( @@ -18535,6 +18789,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Kabutops, .iconSprite = gMonIcon_Kabutops, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kabutops) OVERWORLD( @@ -18605,6 +18860,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Aerodactyl, .iconSprite = gMonIcon_Aerodactyl, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 16, SHADOW_SIZE_M) FOOTPRINT(Aerodactyl) OVERWORLD( @@ -18671,6 +18927,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_AerodactylMega, .iconSprite = gMonIcon_AerodactylMega, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 16, SHADOW_SIZE_M) FOOTPRINT(Aerodactyl) #if OW_BATTLE_ONLY_FORMS @@ -18749,6 +19006,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Munchlax, .iconSprite = gMonIcon_Munchlax, .iconPalIndex = 3, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-1, 2, SHADOW_SIZE_M) FOOTPRINT(Munchlax) OVERWORLD( @@ -18820,6 +19078,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Snorlax, .iconSprite = gMonIcon_Snorlax, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 3, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Snorlax) OVERWORLD( @@ -18888,6 +19147,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_SnorlaxGmax, .iconSprite = gMonIcon_SnorlaxGmax, .iconPalIndex = 3, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Snorlax) .isGigantamax = TRUE, @@ -18960,6 +19220,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Articuno, .iconSprite = gMonIcon_Articuno, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 10, SHADOW_SIZE_M) FOOTPRINT(Articuno) OVERWORLD( @@ -19027,6 +19288,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_ArticunoGalar, .iconSprite = gMonIcon_ArticunoGalar, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 14, SHADOW_SIZE_M) FOOTPRINT(Articuno) OVERWORLD( @@ -19112,6 +19374,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Zapdos, .iconSprite = gMonIcon_Zapdos, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 15, SHADOW_SIZE_M) FOOTPRINT(Zapdos) OVERWORLD( @@ -19178,6 +19441,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_ZapdosGalar, .iconSprite = gMonIcon_ZapdosGalar, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 11, SHADOW_SIZE_M) FOOTPRINT(Zapdos) OVERWORLD( @@ -19287,6 +19551,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Moltres, .iconSprite = gMonIcon_Moltres, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 12, SHADOW_SIZE_M) FOOTPRINT(Moltres) OVERWORLD( @@ -19353,6 +19618,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MoltresGalar, .iconSprite = gMonIcon_MoltresGalar, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 12, SHADOW_SIZE_M) FOOTPRINT(Moltres) OVERWORLD( @@ -19427,6 +19693,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Dratini, .iconSprite = gMonIcon_Dratini, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 3, SHADOW_SIZE_L) FOOTPRINT(Dratini) OVERWORLD( @@ -19497,6 +19764,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Dragonair, .iconSprite = gMonIcon_Dragonair, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Dragonair) OVERWORLD( @@ -19572,6 +19840,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Dragonite, .iconSprite = gMonIcon_Dragonite, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Dragonite) OVERWORLD( @@ -19645,6 +19914,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Mewtwo, .iconSprite = gMonIcon_Mewtwo, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(6, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Mewtwo) OVERWORLD( @@ -19713,6 +19983,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MewtwoMegaX, .iconSprite = gMonIcon_MewtwoMegaX, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 12, SHADOW_SIZE_M) FOOTPRINT(Mewtwo) #if OW_BATTLE_ONLY_FORMS @@ -19784,6 +20055,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MewtwoMegaY, .iconSprite = gMonIcon_MewtwoMegaY, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 14, SHADOW_SIZE_S) FOOTPRINT(Mewtwo) #if OW_BATTLE_ONLY_FORMS @@ -19870,6 +20142,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Mew, .iconSprite = gMonIcon_Mew, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Mew) OVERWORLD( diff --git a/src/data/pokemon/species_info/gen_2_families.h b/src/data/pokemon/species_info/gen_2_families.h index fc12c19d46..23a76e189d 100644 --- a/src/data/pokemon/species_info/gen_2_families.h +++ b/src/data/pokemon/species_info/gen_2_families.h @@ -55,6 +55,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Chikorita, .iconSprite = gMonIcon_Chikorita, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-1, 2, SHADOW_SIZE_S) FOOTPRINT(Chikorita) OVERWORLD( @@ -123,6 +124,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Bayleef, .iconSprite = gMonIcon_Bayleef, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 10, SHADOW_SIZE_M) FOOTPRINT(Bayleef) OVERWORLD( @@ -202,6 +204,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .backPicFemale = gMonBackPic_MeganiumF, .backPicSizeFemale = MON_COORDS_SIZE(56, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 13, SHADOW_SIZE_M) FOOTPRINT(Meganium) OVERWORLD( @@ -278,6 +281,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Cyndaquil, .iconSprite = gMonIcon_Cyndaquil, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 3, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(0, -1, SHADOW_SIZE_S) FOOTPRINT(Cyndaquil) OVERWORLD( @@ -346,6 +350,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Quilava, .iconSprite = gMonIcon_Quilava, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 3, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 2, SHADOW_SIZE_M) FOOTPRINT(Quilava) OVERWORLD( @@ -422,6 +427,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Typhlosion, .iconSprite = gMonIcon_Typhlosion, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 3, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 14, SHADOW_SIZE_L) FOOTPRINT(Typhlosion) OVERWORLD( @@ -486,6 +492,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_TyphlosionHisui, .iconSprite = gMonIcon_TyphlosionHisui, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 14, SHADOW_SIZE_L) FOOTPRINT(Typhlosion) OVERWORLD( @@ -560,6 +567,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Totodile, .iconSprite = gMonIcon_Totodile, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(2, 0, SHADOW_SIZE_S) FOOTPRINT(Totodile) OVERWORLD( @@ -629,6 +637,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Croconaw, .iconSprite = gMonIcon_Croconaw, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 8, SHADOW_SIZE_M) FOOTPRINT(Croconaw) OVERWORLD( @@ -705,6 +714,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Feraligatr, .iconSprite = gMonIcon_Feraligatr, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Feraligatr) OVERWORLD( @@ -774,6 +784,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Sentret, .iconSprite = gMonIcon_Sentret, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 11, SHADOW_SIZE_S) FOOTPRINT(Sentret) OVERWORLD( @@ -841,6 +852,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Furret, .iconSprite = gMonIcon_Furret, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 9, SHADOW_SIZE_M) FOOTPRINT(Furret) OVERWORLD( @@ -918,6 +930,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Hoothoot, .iconSprite = gMonIcon_Hoothoot, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Hoothoot) OVERWORLD( @@ -991,6 +1004,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Noctowl, .iconSprite = gMonIcon_Noctowl, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 10, SHADOW_SIZE_S) FOOTPRINT(Noctowl) OVERWORLD( @@ -1066,6 +1080,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .backPicFemale = gMonBackPic_LedybaF, .backPicSizeFemale = MON_COORDS_SIZE(56, 48), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 4, SHADOW_SIZE_M) FOOTPRINT(Ledyba) OVERWORLD( @@ -1149,6 +1164,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .backPicFemale = gMonBackPic_LedianF, .backPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 15, SHADOW_SIZE_S) FOOTPRINT(Ledian) OVERWORLD( @@ -1229,6 +1245,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Spinarak, .iconSprite = gMonIcon_Spinarak, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(0, -8, SHADOW_SIZE_M) FOOTPRINT(Spinarak) OVERWORLD( @@ -1304,6 +1321,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Ariados, .iconSprite = gMonIcon_Ariados, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 3, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Ariados) OVERWORLD( @@ -1375,6 +1393,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Chinchou, .iconSprite = gMonIcon_Chinchou, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 1, SHADOW_SIZE_M) FOOTPRINT(Chinchou) OVERWORLD( @@ -1446,6 +1465,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Lanturn, .iconSprite = gMonIcon_Lanturn, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(5, 4, SHADOW_SIZE_M) FOOTPRINT(Lanturn) OVERWORLD( @@ -1516,6 +1536,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Togepi, .iconSprite = gMonIcon_Togepi, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-1, -3, SHADOW_SIZE_S) FOOTPRINT(Togepi) OVERWORLD( @@ -1584,6 +1605,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Togetic, .iconSprite = gMonIcon_Togetic, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 6, SHADOW_SIZE_S) FOOTPRINT(Togetic) OVERWORLD( @@ -1665,6 +1687,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Togekiss, .iconSprite = gMonIcon_Togekiss, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 15, SHADOW_SIZE_M) FOOTPRINT(Togekiss) OVERWORLD( @@ -1737,6 +1760,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Natu, .iconSprite = gMonIcon_Natu, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, -4, SHADOW_SIZE_S) FOOTPRINT(Natu) OVERWORLD( @@ -1814,6 +1838,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .frontPicFemale = gMonFrontPic_XatuF, .frontPicSizeFemale = MON_COORDS_SIZE(40, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 9, SHADOW_SIZE_S) FOOTPRINT(Xatu) OVERWORLD( @@ -1893,6 +1918,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Mareep, .iconSprite = gMonIcon_Mareep, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(1, 1, SHADOW_SIZE_M) FOOTPRINT(Mareep) OVERWORLD( @@ -1963,6 +1989,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Flaaffy, .iconSprite = gMonIcon_Flaaffy, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Flaaffy) OVERWORLD( @@ -2041,6 +2068,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Ampharos, .iconSprite = gMonIcon_Ampharos, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 11, SHADOW_SIZE_M) FOOTPRINT(Ampharos) OVERWORLD( @@ -2106,6 +2134,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_AmpharosMega, .iconSprite = gMonIcon_AmpharosMega, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-7, 13, SHADOW_SIZE_M) FOOTPRINT(Ampharos) #if OW_BATTLE_ONLY_FORMS @@ -2189,6 +2218,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Azurill, .iconSprite = gMonIcon_Azurill, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-4, 3, SHADOW_SIZE_S) FOOTPRINT(Azurill) OVERWORLD( @@ -2262,6 +2292,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Marill, .iconSprite = gMonIcon_Marill, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-2, 0, SHADOW_SIZE_S) FOOTPRINT(Marill) OVERWORLD( @@ -2344,6 +2375,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Azumarill, .iconSprite = gMonIcon_Azumarill, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-4, 8, SHADOW_SIZE_S) FOOTPRINT(Azumarill) OVERWORLD( @@ -2415,6 +2447,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Bonsly, .iconSprite = gMonIcon_Bonsly, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-3, 4, SHADOW_SIZE_S) FOOTPRINT(Bonsly) OVERWORLD( @@ -2493,6 +2526,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .backPicFemale = gMonBackPic_SudowoodoF, .backPicSizeFemale = MON_COORDS_SIZE(48, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 7, SHADOW_SIZE_S) FOOTPRINT(Sudowoodo) OVERWORLD( @@ -2575,6 +2609,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Hoppip, .iconSprite = gMonIcon_Hoppip, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-5, 12, SHADOW_SIZE_S) FOOTPRINT(Hoppip) OVERWORLD( @@ -2653,6 +2688,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Skiploom, .iconSprite = gMonIcon_Skiploom, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 10, SHADOW_SIZE_S) FOOTPRINT(Skiploom) OVERWORLD( @@ -2736,6 +2772,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Jumpluff, .iconSprite = gMonIcon_Jumpluff, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 11, SHADOW_SIZE_S) FOOTPRINT(Jumpluff) OVERWORLD( @@ -2809,6 +2846,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .backPicFemale = gMonBackPic_AipomF, .backPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Aipom) OVERWORLD( @@ -2891,6 +2929,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .backPicFemale = gMonBackPic_AmbipomF, .backPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Ambipom) OVERWORLD( @@ -2974,6 +3013,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Sunkern, .iconSprite = gMonIcon_Sunkern, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-1, -4, SHADOW_SIZE_S) FOOTPRINT(Sunkern) OVERWORLD( @@ -3046,6 +3086,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Sunflora, .iconSprite = gMonIcon_Sunflora, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 6, SHADOW_SIZE_S) FOOTPRINT(Sunflora) OVERWORLD( @@ -3135,6 +3176,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Yanma, .iconSprite = gMonIcon_Yanma, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 10, SHADOW_SIZE_S) FOOTPRINT(Yanma) OVERWORLD( @@ -3229,6 +3271,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Yanmega, .iconSprite = gMonIcon_Yanmega, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 12, SHADOW_SIZE_M) FOOTPRINT(Yanmega) OVERWORLD( @@ -3304,6 +3347,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .backPicFemale = gMonBackPic_WooperF, .backPicSizeFemale = MON_COORDS_SIZE(64, 40), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(1, -2, SHADOW_SIZE_S) FOOTPRINT(Wooper) OVERWORLD( @@ -3385,6 +3429,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .backPicFemale = gMonBackPic_QuagsireF, .backPicSizeFemale = MON_COORDS_SIZE(64, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 8, SHADOW_SIZE_M) FOOTPRINT(Quagsire) OVERWORLD( @@ -3455,6 +3500,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_WooperPaldea, .iconSprite = gMonIcon_WooperPaldea, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-1, -2, SHADOW_SIZE_S) FOOTPRINT(Wooper) OVERWORLD( @@ -3521,6 +3567,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Clodsire, .iconSprite = gMonIcon_Clodsire, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 3, SHADOW_SIZE_L) FOOTPRINT(Clodsire) OVERWORLD( @@ -3600,6 +3647,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .backPicFemale = gMonBackPic_MurkrowF, .backPicSizeFemale = MON_COORDS_SIZE(40, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 8, SHADOW_SIZE_S) FOOTPRINT(Murkrow) OVERWORLD( @@ -3677,6 +3725,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Honchkrow, .iconSprite = gMonIcon_Honchkrow, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(5, 7, SHADOW_SIZE_M) FOOTPRINT(Honchkrow) OVERWORLD( @@ -3755,6 +3804,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Misdreavus, .iconSprite = gMonIcon_Misdreavus, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 10, SHADOW_SIZE_S) FOOTPRINT(Misdreavus) OVERWORLD( @@ -3833,6 +3883,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Mismagius, .iconSprite = gMonIcon_Mismagius, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 11, SHADOW_SIZE_M) FOOTPRINT(Mismagius) OVERWORLD( @@ -3897,6 +3948,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Unown, \ .iconSprite = gMonIcon_Unown ##letter, \ .iconPalIndex = 0, \ + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, \ SHADOW(0, 3, SHADOW_SIZE_S) \ FOOTPRINT(Unown) \ OVERWORLD( \ @@ -4000,6 +4052,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Wynaut, .iconSprite = gMonIcon_Wynaut, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-1, 2, SHADOW_SIZE_S) FOOTPRINT(Wynaut) OVERWORLD( @@ -4081,6 +4134,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .iconPalIndexFemale = 0, #endif #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 8, SHADOW_SIZE_M) FOOTPRINT(Wobbuffet) OVERWORLD( @@ -4163,6 +4217,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .backPicFemale = gMonBackPic_GirafarigF, .backPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 13, SHADOW_SIZE_M) FOOTPRINT(Girafarig) OVERWORLD( @@ -4235,6 +4290,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Farigiraf, .iconSprite = gMonIcon_Farigiraf, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(11, 13, SHADOW_SIZE_L) FOOTPRINT(Farigiraf) OVERWORLD( @@ -4309,6 +4365,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Pineco, .iconSprite = gMonIcon_Pineco, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Pineco) OVERWORLD( @@ -4378,6 +4435,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Forretress, .iconSprite = gMonIcon_Forretress, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 6, SHADOW_SIZE_L) FOOTPRINT(Forretress) OVERWORLD( @@ -4454,6 +4512,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Dunsparce, .iconSprite = gMonIcon_Dunsparce, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, -4, SHADOW_SIZE_M) FOOTPRINT(Dunsparce) OVERWORLD( @@ -4520,6 +4579,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Dudunsparce, .iconSprite = gMonIcon_Dudunsparce, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 5, SHADOW_SIZE_L) FOOTPRINT(Dudunsparce) OVERWORLD( @@ -4583,6 +4643,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Dudunsparce, .iconSprite = gMonIcon_Dudunsparce, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 4, SHADOW_SIZE_L) FOOTPRINT(Dudunsparce) OVERWORLD( @@ -4659,6 +4720,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .backPicFemale = gMonBackPic_GligarF, .backPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 15, SHADOW_SIZE_S) FOOTPRINT(Gligar) OVERWORLD( @@ -4738,6 +4800,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Gliscor, .iconSprite = gMonIcon_Gliscor, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 13, SHADOW_SIZE_M) FOOTPRINT(Gliscor) OVERWORLD( @@ -4810,6 +4873,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Snubbull, .iconSprite = gMonIcon_Snubbull, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Snubbull) OVERWORLD( @@ -4885,6 +4949,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Granbull, .iconSprite = gMonIcon_Granbull, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 10, SHADOW_SIZE_L) FOOTPRINT(Granbull) OVERWORLD( @@ -4968,6 +5033,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Qwilfish, .iconSprite = gMonIcon_Qwilfish, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 3, SHADOW_SIZE_S) FOOTPRINT(Qwilfish) OVERWORLD( @@ -5035,6 +5101,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_QwilfishHisui, .iconSprite = gMonIcon_QwilfishHisui, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-5, 4, SHADOW_SIZE_S) FOOTPRINT(Qwilfish) OVERWORLD( @@ -5100,6 +5167,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Overqwil, .iconSprite = gMonIcon_Overqwil, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(Overqwil) OVERWORLD( @@ -5176,6 +5244,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Shuckle, .iconSprite = gMonIcon_Shuckle, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(1, 3, SHADOW_SIZE_M) FOOTPRINT(Shuckle) OVERWORLD( @@ -5253,6 +5322,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .backPicFemale = gMonBackPic_HeracrossF, .backPicSizeFemale = MON_COORDS_SIZE(48, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 10, SHADOW_SIZE_M) FOOTPRINT(Heracross) OVERWORLD( @@ -5326,6 +5396,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_HeracrossMega, .iconSprite = gMonIcon_HeracrossMega, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 13, SHADOW_SIZE_M) FOOTPRINT(Heracross) #if OW_BATTLE_ONLY_FORMS @@ -5412,6 +5483,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .backPicFemale = gMonBackPic_SneaselF, .backPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Sneasel) OVERWORLD( @@ -5497,6 +5569,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .backPicFemale = gMonBackPic_WeavileF, .backPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-4, 10, SHADOW_SIZE_M) FOOTPRINT(Weavile) OVERWORLD( @@ -5576,6 +5649,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .backPicFemale = gMonBackPic_SneaselHisuiF, .backPicSizeFemale = MON_COORDS_SIZE(56, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Sneasel) OVERWORLD( @@ -5649,6 +5723,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Sneasler, .iconSprite = gMonIcon_Sneasler, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(Sneasler) OVERWORLD( @@ -5723,6 +5798,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Teddiursa, .iconSprite = gMonIcon_Teddiursa, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-2, 1, SHADOW_SIZE_S) FOOTPRINT(Teddiursa) OVERWORLD( @@ -5800,6 +5876,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .backPicFemale = gMonBackPic_UrsaringF, .backPicSizeFemale = MON_COORDS_SIZE(56, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 14, SHADOW_SIZE_L) FOOTPRINT(Ursaring) OVERWORLD( @@ -5871,6 +5948,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Ursaluna, .iconSprite = gMonIcon_Ursaluna, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 4, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Ursaluna) OVERWORLD( @@ -5934,6 +6012,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_UrsalunaBloodmoon, .iconSprite = gMonIcon_UrsalunaBloodmoon, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(6, 11, SHADOW_SIZE_L) FOOTPRINT(Ursaluna) .levelUpLearnset = sUrsalunaBloodmoonLevelUpLearnset, @@ -5997,6 +6076,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Slugma, .iconSprite = gMonIcon_Slugma, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Slugma) OVERWORLD( @@ -6074,6 +6154,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Magcargo, .iconSprite = gMonIcon_Magcargo, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 5, SHADOW_SIZE_M) FOOTPRINT(Magcargo) OVERWORLD( @@ -6147,6 +6228,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Swinub, .iconSprite = gMonIcon_Swinub, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-3, -6, SHADOW_SIZE_S) FOOTPRINT(Swinub) OVERWORLD( @@ -6227,6 +6309,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .backPicFemale = gMonBackPic_PiloswineF, .backPicSizeFemale = MON_COORDS_SIZE(64, 48), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 3, SHADOW_SIZE_M) FOOTPRINT(Piloswine) OVERWORLD( @@ -6312,6 +6395,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .frontPicFemale = gMonFrontPic_MamoswineF, .frontPicSizeFemale = MON_COORDS_SIZE(64, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(7, 7, SHADOW_SIZE_L) FOOTPRINT(Mamoswine) OVERWORLD( @@ -6402,6 +6486,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Corsola, .iconSprite = gMonIcon_Corsola, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 1, SHADOW_SIZE_M) FOOTPRINT(Corsola) OVERWORLD( @@ -6467,6 +6552,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_CorsolaGalar, .iconSprite = gMonIcon_CorsolaGalar, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 2, SHADOW_SIZE_M) FOOTPRINT(Corsola) OVERWORLD( @@ -6533,6 +6619,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Cursola, .iconSprite = gMonIcon_Cursola, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 13, SHADOW_SIZE_S) FOOTPRINT(Cursola) OVERWORLD( @@ -6606,6 +6693,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Remoraid, .iconSprite = gMonIcon_Remoraid, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 0, SHADOW_SIZE_S) FOOTPRINT(Remoraid) OVERWORLD( @@ -6687,6 +6775,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .backPicFemale = gMonBackPic_OctilleryF, .backPicSizeFemale = MON_COORDS_SIZE(64, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 4, SHADOW_SIZE_M) FOOTPRINT(Octillery) OVERWORLD( @@ -6761,6 +6850,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Delibird, .iconSprite = gMonIcon_Delibird, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(Delibird) OVERWORLD( @@ -6832,6 +6922,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Mantyke, .iconSprite = gMonIcon_Mantyke, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 3, SHADOW_SIZE_S) FOOTPRINT(Mantyke) OVERWORLD( @@ -6909,6 +7000,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Mantine, .iconSprite = gMonIcon_Mantine, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Mantine) OVERWORLD( @@ -6978,6 +7070,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Skarmory, .iconSprite = gMonIcon_Skarmory, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 9, SHADOW_SIZE_M) FOOTPRINT(Skarmory) OVERWORLD( @@ -7046,6 +7139,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Houndour, .iconSprite = gMonIcon_Houndour, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(0, 4, SHADOW_SIZE_M) FOOTPRINT(Houndour) OVERWORLD( @@ -7119,6 +7213,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .backPicFemale = gMonBackPic_HoundoomF, .backPicSizeFemale = MON_COORDS_SIZE(64, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-5, 13, SHADOW_SIZE_L) FOOTPRINT(Houndoom) OVERWORLD( @@ -7190,6 +7285,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_HoundoomMega, .iconSprite = gMonIcon_HoundoomMega, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-5, 13, SHADOW_SIZE_L) FOOTPRINT(Houndoom) #if OW_BATTLE_ONLY_FORMS @@ -7268,6 +7364,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Phanpy, .iconSprite = gMonIcon_Phanpy, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(3, -2, SHADOW_SIZE_M) FOOTPRINT(Phanpy) OVERWORLD( @@ -7343,6 +7440,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .backPicFemale = gMonBackPic_DonphanF, .backPicSizeFemale = MON_COORDS_SIZE(64, 48), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(7, 2, SHADOW_SIZE_L) FOOTPRINT(Donphan) OVERWORLD( @@ -7421,6 +7519,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Stantler, .iconSprite = gMonIcon_Stantler, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 13, SHADOW_SIZE_M) FOOTPRINT(Stantler) OVERWORLD( @@ -7487,6 +7586,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Wyrdeer, .iconSprite = gMonIcon_Wyrdeer, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 13, SHADOW_SIZE_M) FOOTPRINT(Wyrdeer) OVERWORLD( @@ -7561,6 +7661,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Smeargle, .iconSprite = gMonIcon_Smeargle, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(6, 7, SHADOW_SIZE_S) FOOTPRINT(Smeargle) OVERWORLD( @@ -7635,6 +7736,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Miltank, .iconSprite = gMonIcon_Miltank, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 4, SHADOW_SIZE_M) FOOTPRINT(Miltank) OVERWORLD( @@ -7715,6 +7817,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Raikou, .iconSprite = gMonIcon_Raikou, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-4, 7, SHADOW_SIZE_L) FOOTPRINT(Raikou) OVERWORLD( @@ -7795,6 +7898,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Entei, .iconSprite = gMonIcon_Entei, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 8, SHADOW_SIZE_L) FOOTPRINT(Entei) OVERWORLD( @@ -7875,6 +7979,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Suicune, .iconSprite = gMonIcon_Suicune, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Suicune) OVERWORLD( @@ -7946,6 +8051,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Larvitar, .iconSprite = gMonIcon_Larvitar, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(0, 3, SHADOW_SIZE_S) FOOTPRINT(Larvitar) OVERWORLD( @@ -8013,6 +8119,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Pupitar, .iconSprite = gMonIcon_Pupitar, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 3, SHADOW_SIZE_S) FOOTPRINT(Pupitar) OVERWORLD( @@ -8087,6 +8194,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Tyranitar, .iconSprite = gMonIcon_Tyranitar, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 4, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 11, SHADOW_SIZE_L) FOOTPRINT(Tyranitar) OVERWORLD( @@ -8152,6 +8260,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_TyranitarMega, .iconSprite = gMonIcon_TyranitarMega, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Tyranitar) #if OW_BATTLE_ONLY_FORMS @@ -8243,6 +8352,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Lugia, .iconSprite = gMonIcon_Lugia, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 17, SHADOW_SIZE_L) FOOTPRINT(Lugia) OVERWORLD( @@ -8322,6 +8432,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_HoOh, .iconSprite = gMonIcon_HoOh, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 17, SHADOW_SIZE_L) FOOTPRINT(HoOh) OVERWORLD( @@ -8403,6 +8514,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Celebi, .iconSprite = gMonIcon_Celebi, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 14, SHADOW_SIZE_S) FOOTPRINT(Celebi) OVERWORLD( diff --git a/src/data/pokemon/species_info/gen_3_families.h b/src/data/pokemon/species_info/gen_3_families.h index 7b87415c76..489de091df 100644 --- a/src/data/pokemon/species_info/gen_3_families.h +++ b/src/data/pokemon/species_info/gen_3_families.h @@ -57,6 +57,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Treecko, .iconSprite = gMonIcon_Treecko, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-3, 4, SHADOW_SIZE_S) FOOTPRINT(Treecko) OVERWORLD( @@ -127,6 +128,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Grovyle, .iconSprite = gMonIcon_Grovyle, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 7, SHADOW_SIZE_M) FOOTPRINT(Grovyle) OVERWORLD( @@ -200,6 +202,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Sceptile, .iconSprite = gMonIcon_Sceptile, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 11, SHADOW_SIZE_L) FOOTPRINT(Sceptile) OVERWORLD( @@ -265,6 +268,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_SceptileMega, .iconSprite = gMonIcon_SceptileMega, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 11, SHADOW_SIZE_L) FOOTPRINT(Sceptile) #if OW_BATTLE_ONLY_FORMS @@ -347,6 +351,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .backPicFemale = gMonBackPic_TorchicF, .backPicSizeFemale = MON_COORDS_SIZE(40, 48), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Torchic) OVERWORLD( @@ -429,6 +434,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .backPicFemale = gMonBackPic_CombuskenF, .backPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Combusken) OVERWORLD( @@ -517,6 +523,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .backPicFemale = gMonBackPic_BlazikenF, .backPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 8, SHADOW_SIZE_M) FOOTPRINT(Blaziken) OVERWORLD( @@ -589,6 +596,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_BlazikenMega, .iconSprite = gMonIcon_BlazikenMega, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(Blaziken) #if OW_BATTLE_ONLY_FORMS @@ -665,6 +673,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Mudkip, .iconSprite = gMonIcon_Mudkip, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(1, 1, SHADOW_SIZE_S) FOOTPRINT(Mudkip) OVERWORLD( @@ -739,6 +748,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Marshtomp, .iconSprite = gMonIcon_Marshtomp, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(Marshtomp) OVERWORLD( @@ -814,6 +824,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Swampert, .iconSprite = gMonIcon_Swampert, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(5, 7, SHADOW_SIZE_L) FOOTPRINT(Swampert) OVERWORLD( @@ -879,6 +890,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_SwampertMega, .iconSprite = gMonIcon_SwampertMega, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(6, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Swampert) #if OW_BATTLE_ONLY_FORMS @@ -963,6 +975,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Poochyena, .iconSprite = gMonIcon_Poochyena, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(0, 2, SHADOW_SIZE_M) FOOTPRINT(Poochyena) OVERWORLD( @@ -1037,6 +1050,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Mightyena, .iconSprite = gMonIcon_Mightyena, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 6, SHADOW_SIZE_L) FOOTPRINT(Mightyena) OVERWORLD( @@ -1121,6 +1135,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Zigzagoon, .iconSprite = gMonIcon_Zigzagoon, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-4, 0, SHADOW_SIZE_M) FOOTPRINT(Zigzagoon) OVERWORLD( @@ -1198,6 +1213,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Linoone, .iconSprite = gMonIcon_Linoone, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-6, 0, SHADOW_SIZE_L) FOOTPRINT(Linoone) OVERWORLD( @@ -1262,6 +1278,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_ZigzagoonGalar, .iconSprite = gMonIcon_ZigzagoonGalar, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-5, 0, SHADOW_SIZE_M) FOOTPRINT(Zigzagoon) OVERWORLD( @@ -1328,6 +1345,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_LinooneGalar, .iconSprite = gMonIcon_LinooneGalar, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-4, 0, SHADOW_SIZE_L) FOOTPRINT(Linoone) OVERWORLD( @@ -1393,6 +1411,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Obstagoon, .iconSprite = gMonIcon_Obstagoon, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 13, SHADOW_SIZE_M) FOOTPRINT(Obstagoon) OVERWORLD( @@ -1470,6 +1489,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Wurmple, .iconSprite = gMonIcon_Wurmple, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Wurmple) OVERWORLD( @@ -1539,6 +1559,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Silcoon, .iconSprite = gMonIcon_Silcoon, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(0, -4, SHADOW_SIZE_M) FOOTPRINT(Silcoon) OVERWORLD( @@ -1629,6 +1650,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .backPicFemale = gMonBackPic_BeautiflyF, .backPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-5, 12, SHADOW_SIZE_S) FOOTPRINT(Beautifly) OVERWORLD( @@ -1710,6 +1732,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Cascoon, .iconSprite = gMonIcon_Cascoon, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(0, -4, SHADOW_SIZE_M) FOOTPRINT(Cascoon) OVERWORLD( @@ -1808,6 +1831,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .backPicFemale = gMonBackPic_DustoxF, .backPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 11, SHADOW_SIZE_S) FOOTPRINT(Dustox) OVERWORLD( @@ -1884,6 +1908,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Lotad, .iconSprite = gMonIcon_Lotad, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 4, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(2, -3, SHADOW_SIZE_S) FOOTPRINT(Lotad) OVERWORLD( @@ -1955,6 +1980,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Lombre, .iconSprite = gMonIcon_Lombre, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 2, SHADOW_SIZE_S) FOOTPRINT(Lombre) OVERWORLD( @@ -2039,6 +2065,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .backPicFemale = gMonBackPic_LudicoloF, .backPicSizeFemale = MON_COORDS_SIZE(64, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 14, SHADOW_SIZE_M) FOOTPRINT(Ludicolo) OVERWORLD( @@ -2121,6 +2148,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Seedot, .iconSprite = gMonIcon_Seedot, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 2, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Seedot) OVERWORLD( @@ -2202,6 +2230,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .backPicFemale = gMonBackPic_NuzleafF, .backPicSizeFemale = MON_COORDS_SIZE(56, 48), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 5, SHADOW_SIZE_S) FOOTPRINT(Nuzleaf) OVERWORLD( @@ -2293,6 +2322,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .backPicFemale = gMonBackPic_ShiftryF, .backPicSizeFemale = MON_COORDS_SIZE(64, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-5, 5, SHADOW_SIZE_M) FOOTPRINT(Shiftry) OVERWORLD( @@ -2374,6 +2404,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Taillow, .iconSprite = gMonIcon_Taillow, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Taillow) OVERWORLD( @@ -2448,6 +2479,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Swellow, .iconSprite = gMonIcon_Swellow, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-7, 7, SHADOW_SIZE_M) FOOTPRINT(Swellow) OVERWORLD( @@ -2522,6 +2554,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Wingull, .iconSprite = gMonIcon_Wingull, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 15, SHADOW_SIZE_S) FOOTPRINT(Wingull) OVERWORLD( @@ -2608,6 +2641,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Pelipper, .iconSprite = gMonIcon_Pelipper, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 17, SHADOW_SIZE_M) FOOTPRINT(Pelipper) OVERWORLD( @@ -2684,6 +2718,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Ralts, .iconSprite = gMonIcon_Ralts, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Ralts) OVERWORLD( @@ -2752,6 +2787,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Kirlia, .iconSprite = gMonIcon_Kirlia, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-2, 7, SHADOW_SIZE_S) FOOTPRINT(Kirlia) OVERWORLD( @@ -2826,6 +2862,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Gardevoir, .iconSprite = gMonIcon_Gardevoir, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 14, SHADOW_SIZE_L) FOOTPRINT(Gardevoir) OVERWORLD( @@ -2891,6 +2928,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_GardevoirMega, .iconSprite = gMonIcon_GardevoirMega, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 14, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Gardevoir) #if OW_BATTLE_ONLY_FORMS @@ -2973,6 +3011,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Gallade, .iconSprite = gMonIcon_Gallade, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 13, SHADOW_SIZE_L) FOOTPRINT(Gallade) OVERWORLD( @@ -3038,6 +3077,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_GalladeMega, .iconSprite = gMonIcon_GalladeMega, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 13, SHADOW_SIZE_L) FOOTPRINT(Gallade) #if OW_BATTLE_ONLY_FORMS @@ -3116,6 +3156,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Surskit, .iconSprite = gMonIcon_Surskit, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-1, -3, SHADOW_SIZE_S) FOOTPRINT(Surskit) OVERWORLD( @@ -3199,6 +3240,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Masquerain, .iconSprite = gMonIcon_Masquerain, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-4, 17, SHADOW_SIZE_M) FOOTPRINT(Masquerain) OVERWORLD( @@ -3281,6 +3323,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Shroomish, .iconSprite = gMonIcon_Shroomish, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Shroomish) OVERWORLD( @@ -3357,6 +3400,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Breloom, .iconSprite = gMonIcon_Breloom, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-4, 9, SHADOW_SIZE_M) FOOTPRINT(Breloom) OVERWORLD( @@ -3428,6 +3472,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Slakoth, .iconSprite = gMonIcon_Slakoth, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, -4, SHADOW_SIZE_M) FOOTPRINT(Slakoth) OVERWORLD( @@ -3500,6 +3545,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Vigoroth, .iconSprite = gMonIcon_Vigoroth, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 6, SHADOW_SIZE_M) FOOTPRINT(Vigoroth) OVERWORLD( @@ -3577,6 +3623,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Slaking, .iconSprite = gMonIcon_Slaking, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Slaking) OVERWORLD( @@ -3648,6 +3695,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Nincada, .iconSprite = gMonIcon_Nincada, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(2, -3, SHADOW_SIZE_M) FOOTPRINT(Nincada) OVERWORLD( @@ -3733,6 +3781,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Ninjask, .iconSprite = gMonIcon_Ninjask, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 10, SHADOW_SIZE_S) FOOTPRINT(Ninjask) OVERWORLD( @@ -3802,6 +3851,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Shedinja, .iconSprite = gMonIcon_Shedinja, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 9, SHADOW_SIZE_S) FOOTPRINT(Shedinja) OVERWORLD( @@ -3877,6 +3927,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Whismur, .iconSprite = gMonIcon_Whismur, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(1, 0, SHADOW_SIZE_S) FOOTPRINT(Whismur) OVERWORLD( @@ -3947,6 +3998,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Loudred, .iconSprite = gMonIcon_Loudred, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 9, SHADOW_SIZE_M) FOOTPRINT(Loudred) OVERWORLD( @@ -4022,6 +4074,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Exploud, .iconSprite = gMonIcon_Exploud, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 12, SHADOW_SIZE_L) FOOTPRINT(Exploud) OVERWORLD( @@ -4097,6 +4150,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Makuhita, .iconSprite = gMonIcon_Makuhita, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 5, SHADOW_SIZE_M) FOOTPRINT(Makuhita) OVERWORLD( @@ -4167,6 +4221,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Hariyama, .iconSprite = gMonIcon_Hariyama, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 9, SHADOW_SIZE_L) FOOTPRINT(Hariyama) OVERWORLD( @@ -4240,6 +4295,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Nosepass, .iconSprite = gMonIcon_Nosepass, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 3, SHADOW_SIZE_M) FOOTPRINT(Nosepass) OVERWORLD( @@ -4315,6 +4371,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Probopass, .iconSprite = gMonIcon_Probopass, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 13, SHADOW_SIZE_L) FOOTPRINT(Probopass) OVERWORLD( @@ -4388,6 +4445,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Skitty, .iconSprite = gMonIcon_Skitty, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Skitty) OVERWORLD( @@ -4467,6 +4525,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Delcatty, .iconSprite = gMonIcon_Delcatty, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 9, SHADOW_SIZE_S) FOOTPRINT(Delcatty) OVERWORLD( @@ -4543,6 +4602,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Sableye, .iconSprite = gMonIcon_Sableye, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(2, 3, SHADOW_SIZE_S) FOOTPRINT(Sableye) OVERWORLD( @@ -4609,6 +4669,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_SableyeMega, .iconSprite = gMonIcon_SableyeMega, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(3, 7, SHADOW_SIZE_S) FOOTPRINT(Sableye) #if OW_BATTLE_ONLY_FORMS @@ -4696,6 +4757,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Mawile, .iconSprite = gMonIcon_Mawile, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(1, 4, SHADOW_SIZE_L) FOOTPRINT(Mawile) OVERWORLD( @@ -4763,6 +4825,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_MawileMega, .iconSprite = gMonIcon_MawileMega, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Mawile) #if OW_BATTLE_ONLY_FORMS @@ -4841,6 +4904,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Aron, .iconSprite = gMonIcon_Aron, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(2, -3, SHADOW_SIZE_S) FOOTPRINT(Aron) OVERWORLD( @@ -4912,6 +4976,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Lairon, .iconSprite = gMonIcon_Lairon, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 2, SHADOW_SIZE_L) FOOTPRINT(Lairon) OVERWORLD( @@ -4986,6 +5051,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Aggron, .iconSprite = gMonIcon_Aggron, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(5, 12, SHADOW_SIZE_L) FOOTPRINT(Aggron) OVERWORLD( @@ -5052,6 +5118,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_AggronMega, .iconSprite = gMonIcon_AggronMega, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Aggron) #if OW_BATTLE_ONLY_FORMS @@ -5132,6 +5199,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .backPicFemale = gMonBackPic_MedititeF, .backPicSizeFemale = MON_COORDS_SIZE(48, 48), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Meditite) OVERWORLD( @@ -5217,6 +5285,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .backPicFemale = gMonBackPic_MedichamF, .backPicSizeFemale = MON_COORDS_SIZE(56, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 13, SHADOW_SIZE_S) FOOTPRINT(Medicham) OVERWORLD( @@ -5289,6 +5358,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_MedichamMega, .iconSprite = gMonIcon_MedichamMega, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 13, SHADOW_SIZE_S) FOOTPRINT(Medicham) #if OW_BATTLE_ONLY_FORMS @@ -5365,6 +5435,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Electrike, .iconSprite = gMonIcon_Electrike, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(3, -1, SHADOW_SIZE_M) FOOTPRINT(Electrike) OVERWORLD( @@ -5435,6 +5506,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Manectric, .iconSprite = gMonIcon_Manectric, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 10, SHADOW_SIZE_M) FOOTPRINT(Manectric) OVERWORLD( @@ -5499,6 +5571,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_ManectricMega, .iconSprite = gMonIcon_ManectricMega, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 10, SHADOW_SIZE_L) FOOTPRINT(Manectric) #if OW_BATTLE_ONLY_FORMS @@ -5580,6 +5653,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Plusle, .iconSprite = gMonIcon_Plusle, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(2, 3, SHADOW_SIZE_S) FOOTPRINT(Plusle) OVERWORLD( @@ -5656,6 +5730,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Minun, .iconSprite = gMonIcon_Minun, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-4, 3, SHADOW_SIZE_S) FOOTPRINT(Minun) OVERWORLD( @@ -5736,6 +5811,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Volbeat, .iconSprite = gMonIcon_Volbeat, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Volbeat) OVERWORLD( @@ -5816,6 +5892,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Illumise, .iconSprite = gMonIcon_Illumise, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Illumise) OVERWORLD( @@ -5888,6 +5965,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Budew, .iconSprite = gMonIcon_Budew, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-3, 0, SHADOW_SIZE_S) FOOTPRINT(Budew) OVERWORLD( @@ -5965,6 +6043,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .backPicFemale = gMonBackPic_RoseliaF, .backPicSizeFemale = MON_COORDS_SIZE(64, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-2, 3, SHADOW_SIZE_S) FOOTPRINT(Roselia) OVERWORLD( @@ -6056,6 +6135,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .backPicFemale = gMonBackPic_RoseradeF, .backPicSizeFemale = MON_COORDS_SIZE(64, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 6, SHADOW_SIZE_S) FOOTPRINT(Roserade) OVERWORLD( @@ -6142,6 +6222,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .backPicFemale = gMonBackPic_GulpinF, .backPicSizeFemale = MON_COORDS_SIZE(56, 48), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(1, -2, SHADOW_SIZE_S) FOOTPRINT(Gulpin) OVERWORLD( @@ -6226,6 +6307,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .backPicFemale = gMonBackPic_SwalotF, .backPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 3, SHADOW_SIZE_L) FOOTPRINT(Swalot) OVERWORLD( @@ -6308,6 +6390,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Carvanha, .iconSprite = gMonIcon_Carvanha, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 8, SHADOW_SIZE_S) FOOTPRINT(Carvanha) OVERWORLD( @@ -6383,6 +6466,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Sharpedo, .iconSprite = gMonIcon_Sharpedo, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Sharpedo) OVERWORLD( @@ -6450,6 +6534,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_SharpedoMega, .iconSprite = gMonIcon_SharpedoMega, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Sharpedo) #if OW_BATTLE_ONLY_FORMS @@ -6528,6 +6613,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Wailmer, .iconSprite = gMonIcon_Wailmer, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 3, SHADOW_SIZE_L) FOOTPRINT(Wailmer) OVERWORLD( @@ -6597,6 +6683,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Wailord, .iconSprite = gMonIcon_Wailord, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 7, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Wailord) OVERWORLD( @@ -6677,6 +6764,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .backPicFemale = gMonBackPic_NumelF, .backPicSizeFemale = MON_COORDS_SIZE(56, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(4, 2, SHADOW_SIZE_S) FOOTPRINT(Numel) OVERWORLD( @@ -6767,6 +6855,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .backPicFemale = gMonBackPic_CameruptF, .backPicSizeFemale = MON_COORDS_SIZE(64, 40), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 4, SHADOW_SIZE_L) FOOTPRINT(Camerupt) OVERWORLD( @@ -6840,6 +6929,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_CameruptMega, .iconSprite = gMonIcon_CameruptMega, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Camerupt) #if OW_BATTLE_ONLY_FORMS @@ -6921,6 +7011,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Torkoal, .iconSprite = gMonIcon_Torkoal, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 2, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(2, 7, SHADOW_SIZE_L) FOOTPRINT(Torkoal) OVERWORLD( @@ -6998,6 +7089,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Spoink, .iconSprite = gMonIcon_Spoink, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Spoink) OVERWORLD( @@ -7069,6 +7161,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Grumpig, .iconSprite = gMonIcon_Grumpig, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Grumpig) OVERWORLD( @@ -7144,6 +7237,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Spinda, .iconSprite = gMonIcon_Spinda, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 6, SHADOW_SIZE_S) FOOTPRINT(Spinda) OVERWORLD( @@ -7220,6 +7314,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Trapinch, .iconSprite = gMonIcon_Trapinch, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(4, -1, SHADOW_SIZE_S) FOOTPRINT(Trapinch) OVERWORLD( @@ -7297,6 +7392,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Vibrava, .iconSprite = gMonIcon_Vibrava, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 0, SHADOW_SIZE_L) FOOTPRINT(Vibrava) OVERWORLD( @@ -7380,6 +7476,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Flygon, .iconSprite = gMonIcon_Flygon, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 17, SHADOW_SIZE_M) FOOTPRINT(Flygon) OVERWORLD( @@ -7457,6 +7554,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Cacnea, .iconSprite = gMonIcon_Cacnea, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Cacnea) OVERWORLD( @@ -7533,6 +7631,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .frontPicFemale = gMonFrontPic_CacturneF, .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 14, SHADOW_SIZE_M) FOOTPRINT(Cacturne) OVERWORLD( @@ -7613,6 +7712,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Swablu, .iconSprite = gMonIcon_Swablu, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 0, SHADOW_SIZE_S) FOOTPRINT(Swablu) OVERWORLD( @@ -7684,6 +7784,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Altaria, .iconSprite = gMonIcon_Altaria, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 14, SHADOW_SIZE_L) FOOTPRINT(Altaria) OVERWORLD( @@ -7750,6 +7851,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_AltariaMega, .iconSprite = gMonIcon_AltariaMega, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 17, SHADOW_SIZE_L) FOOTPRINT(Altaria) #if OW_BATTLE_ONLY_FORMS @@ -7830,6 +7932,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Zangoose, .iconSprite = gMonIcon_Zangoose, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Zangoose) OVERWORLD( @@ -7906,6 +8009,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Seviper, .iconSprite = gMonIcon_Seviper, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 7, SHADOW_SIZE_L) FOOTPRINT(Seviper) OVERWORLD( @@ -7986,6 +8090,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Lunatone, .iconSprite = gMonIcon_Lunatone, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 15, SHADOW_SIZE_S) FOOTPRINT(Lunatone) OVERWORLD( @@ -8065,6 +8170,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Solrock, .iconSprite = gMonIcon_Solrock, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 15, SHADOW_SIZE_M) FOOTPRINT(Solrock) OVERWORLD( @@ -8148,6 +8254,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Barboach, .iconSprite = gMonIcon_Barboach, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 3, SHADOW_SIZE_M) FOOTPRINT(Barboach) OVERWORLD( @@ -8230,6 +8337,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Whiscash, .iconSprite = gMonIcon_Whiscash, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 3, SHADOW_SIZE_L) FOOTPRINT(Whiscash) OVERWORLD( @@ -8302,6 +8410,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Corphish, .iconSprite = gMonIcon_Corphish, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 5, SHADOW_SIZE_M) FOOTPRINT(Corphish) OVERWORLD( @@ -8372,6 +8481,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Crawdaunt, .iconSprite = gMonIcon_Crawdaunt, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(6, 9, SHADOW_SIZE_M) FOOTPRINT(Crawdaunt) OVERWORLD( @@ -8446,6 +8556,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Baltoy, .iconSprite = gMonIcon_Baltoy, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 1 : 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 5, SHADOW_SIZE_S) FOOTPRINT(Baltoy) OVERWORLD( @@ -8519,6 +8630,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Claydol, .iconSprite = gMonIcon_Claydol, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 18, SHADOW_SIZE_M) FOOTPRINT(Claydol) OVERWORLD( @@ -8596,6 +8708,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Lileep, .iconSprite = gMonIcon_Lileep, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Lileep) OVERWORLD( @@ -8675,6 +8788,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Cradily, .iconSprite = gMonIcon_Cradily, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(Cradily) OVERWORLD( @@ -8753,6 +8867,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Anorith, .iconSprite = gMonIcon_Anorith, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Anorith) OVERWORLD( @@ -8829,6 +8944,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Armaldo, .iconSprite = gMonIcon_Armaldo, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 0 : 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 11, SHADOW_SIZE_L) FOOTPRINT(Armaldo) OVERWORLD( @@ -8905,6 +9021,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Feebas, .iconSprite = gMonIcon_Feebas, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Feebas) OVERWORLD( @@ -8990,6 +9107,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .backPicFemale = gMonBackPic_MiloticF, .backPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 12, SHADOW_SIZE_M) FOOTPRINT(Milotic) OVERWORLD( @@ -9070,6 +9188,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_CastformNormal, .iconSprite = gMonIcon_CastformNormal, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 10, SHADOW_SIZE_S) FOOTPRINT(Castform) OVERWORLD( @@ -9146,6 +9265,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_CastformSunny, .iconSprite = gMonIcon_CastformSunny, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Castform) OVERWORLD( @@ -9220,6 +9340,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_CastformRainy, .iconSprite = gMonIcon_CastformRainy, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Castform) OVERWORLD( @@ -9294,6 +9415,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_CastformSnowy, .iconSprite = gMonIcon_CastformSnowy, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 8, SHADOW_SIZE_S) FOOTPRINT(Castform) OVERWORLD( @@ -9372,6 +9494,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Kecleon, .iconSprite = gMonIcon_Kecleon, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 8, SHADOW_SIZE_S) FOOTPRINT(Kecleon) OVERWORLD( @@ -9451,6 +9574,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Shuppet, .iconSprite = gMonIcon_Shuppet, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 12, SHADOW_SIZE_S) FOOTPRINT(Shuppet) OVERWORLD( @@ -9529,6 +9653,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Banette, .iconSprite = gMonIcon_Banette, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Banette) OVERWORLD( @@ -9595,6 +9720,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_BanetteMega, .iconSprite = gMonIcon_BanetteMega, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 16, SHADOW_SIZE_M) FOOTPRINT(Banette) #if OW_BATTLE_ONLY_FORMS @@ -9678,6 +9804,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Duskull, .iconSprite = gMonIcon_Duskull, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 12, SHADOW_SIZE_S) FOOTPRINT(Duskull) OVERWORLD( @@ -9755,6 +9882,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Dusclops, .iconSprite = gMonIcon_Dusclops, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 8, SHADOW_SIZE_M) FOOTPRINT(Dusclops) OVERWORLD( @@ -9844,6 +9972,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Dusknoir, .iconSprite = gMonIcon_Dusknoir, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(6, 13, SHADOW_SIZE_M) FOOTPRINT(Dusknoir) OVERWORLD( @@ -9919,6 +10048,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Tropius, .iconSprite = gMonIcon_Tropius, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-6, 13, SHADOW_SIZE_L) FOOTPRINT(Tropius) OVERWORLD( @@ -9995,6 +10125,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Chingling, .iconSprite = gMonIcon_Chingling, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, -2, SHADOW_SIZE_S) FOOTPRINT(Chingling) OVERWORLD( @@ -10079,6 +10210,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Chimecho, .iconSprite = gMonIcon_Chimecho, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 16, SHADOW_SIZE_S) FOOTPRINT(Chimecho) OVERWORLD( @@ -10156,6 +10288,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Absol, .iconSprite = gMonIcon_Absol, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 6, SHADOW_SIZE_L) FOOTPRINT(Absol) OVERWORLD( @@ -10223,6 +10356,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_AbsolMega, .iconSprite = gMonIcon_AbsolMega, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Absol) #if OW_BATTLE_ONLY_FORMS @@ -10306,6 +10440,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Snorunt, .iconSprite = gMonIcon_Snorunt, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Snorunt) OVERWORLD( @@ -10382,6 +10517,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Glalie, .iconSprite = gMonIcon_Glalie, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 15, SHADOW_SIZE_M) FOOTPRINT(Glalie) OVERWORLD( @@ -10447,6 +10583,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_GlalieMega, .iconSprite = gMonIcon_GlalieMega, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 18, SHADOW_SIZE_L) FOOTPRINT(Glalie) #if OW_BATTLE_ONLY_FORMS @@ -10521,6 +10658,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Froslass, .iconSprite = gMonIcon_Froslass, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 10, SHADOW_SIZE_S) FOOTPRINT(Froslass) OVERWORLD( @@ -10600,6 +10738,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Spheal, .iconSprite = gMonIcon_Spheal, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, -1, SHADOW_SIZE_M) FOOTPRINT(Spheal) OVERWORLD( @@ -10674,6 +10813,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Sealeo, .iconSprite = gMonIcon_Sealeo, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 2, SHADOW_SIZE_L) FOOTPRINT(Sealeo) OVERWORLD( @@ -10753,6 +10893,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Walrein, .iconSprite = gMonIcon_Walrein, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 8, SHADOW_SIZE_L) FOOTPRINT(Walrein) OVERWORLD( @@ -10825,6 +10966,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Clamperl, .iconSprite = gMonIcon_Clamperl, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-1, 1, SHADOW_SIZE_M) FOOTPRINT(Clamperl) OVERWORLD( @@ -10900,6 +11042,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Huntail, .iconSprite = gMonIcon_Huntail, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 7, SHADOW_SIZE_L) FOOTPRINT(Huntail) OVERWORLD( @@ -10969,6 +11112,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Gorebyss, .iconSprite = gMonIcon_Gorebyss, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 5, SHADOW_SIZE_M) FOOTPRINT(Gorebyss) OVERWORLD( @@ -11047,6 +11191,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .backPicFemale = gMonBackPic_RelicanthF, .backPicSizeFemale = MON_COORDS_SIZE(64, 40), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 3, SHADOW_SIZE_M) FOOTPRINT(Relicanth) OVERWORLD( @@ -11126,6 +11271,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Luvdisc, .iconSprite = gMonIcon_Luvdisc, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 0, SHADOW_SIZE_S) FOOTPRINT(Luvdisc) OVERWORLD( @@ -11198,6 +11344,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Bagon, .iconSprite = gMonIcon_Bagon, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(4, 3, SHADOW_SIZE_S) FOOTPRINT(Bagon) OVERWORLD( @@ -11269,6 +11416,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Shelgon, .iconSprite = gMonIcon_Shelgon, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 2, SHADOW_SIZE_M) FOOTPRINT(Shelgon) OVERWORLD( @@ -11346,6 +11494,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Salamence, .iconSprite = gMonIcon_Salamence, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 8, SHADOW_SIZE_L) FOOTPRINT(Salamence) OVERWORLD( @@ -11412,6 +11561,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_SalamenceMega, .iconSprite = gMonIcon_SalamenceMega, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 8, SHADOW_SIZE_L) FOOTPRINT(Salamence) #if OW_BATTLE_ONLY_FORMS @@ -11490,6 +11640,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Beldum, .iconSprite = gMonIcon_Beldum, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Beldum) OVERWORLD( @@ -11561,6 +11712,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Metang, .iconSprite = gMonIcon_Metang, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 2, SHADOW_SIZE_M) FOOTPRINT(Metang) OVERWORLD( @@ -11637,6 +11789,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Metagross, .iconSprite = gMonIcon_Metagross, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, -2, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Metagross) OVERWORLD( @@ -11703,6 +11856,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_MetagrossMega, .iconSprite = gMonIcon_MetagrossMega, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 15, SHADOW_SIZE_L) FOOTPRINT(Metagross) #if OW_BATTLE_ONLY_FORMS @@ -11786,6 +11940,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Regirock, .iconSprite = gMonIcon_Regirock, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 10, SHADOW_SIZE_L) FOOTPRINT(Regirock) OVERWORLD( @@ -11864,6 +12019,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Regice, .iconSprite = gMonIcon_Regice, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 10, SHADOW_SIZE_L) FOOTPRINT(Regice) OVERWORLD( @@ -11943,6 +12099,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Registeel, .iconSprite = gMonIcon_Registeel, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 8, SHADOW_SIZE_L) FOOTPRINT(Registeel) OVERWORLD( @@ -12022,6 +12179,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Latias, .iconSprite = gMonIcon_Latias, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 15, SHADOW_SIZE_M) FOOTPRINT(Latias) OVERWORLD( @@ -12090,6 +12248,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_LatiasMega, .iconSprite = gMonIcon_LatiasMega, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 19, SHADOW_SIZE_L) FOOTPRINT(Latias) #if OW_BATTLE_ONLY_FORMS @@ -12175,6 +12334,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Latios, .iconSprite = gMonIcon_Latios, .iconPalIndex = P_GBA_STYLE_SPECIES_ICONS ? 2 : 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 17, SHADOW_SIZE_M) FOOTPRINT(Latios) OVERWORLD( @@ -12243,6 +12403,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_LatiosMega, .iconSprite = gMonIcon_LatiosMega, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 19, SHADOW_SIZE_L) FOOTPRINT(Latios) #if OW_BATTLE_ONLY_FORMS @@ -12328,6 +12489,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Kyogre, .iconSprite = gMonIcon_Kyogre, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kyogre) OVERWORLD( @@ -12395,6 +12557,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_KyogrePrimal, .iconSprite = gMonIcon_KyogrePrimal, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kyogre) #if OW_BATTLE_ONLY_FORMS @@ -12480,6 +12643,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Groudon, .iconSprite = gMonIcon_Groudon, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Groudon) OVERWORLD( @@ -12548,6 +12712,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_GroudonPrimal, .iconSprite = gMonIcon_GroudonPrimal, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Groudon) #if OW_BATTLE_ONLY_FORMS @@ -12636,6 +12801,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Rayquaza, .iconSprite = gMonIcon_Rayquaza, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 17, SHADOW_SIZE_L) FOOTPRINT(Rayquaza) OVERWORLD( @@ -12706,6 +12872,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_RayquazaMega, .iconSprite = gMonIcon_RayquazaMega, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 15, SHADOW_SIZE_L) FOOTPRINT(Rayquaza) #if OW_BATTLE_ONLY_FORMS @@ -12799,6 +12966,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Jirachi, .iconSprite = gMonIcon_Jirachi, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 12, SHADOW_SIZE_S) FOOTPRINT(Jirachi) OVERWORLD( @@ -12878,6 +13046,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_DeoxysNormal, .iconSprite = gMonIcon_DeoxysNormal, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 14, SHADOW_SIZE_M) FOOTPRINT(Deoxys) OVERWORLD( @@ -12948,6 +13117,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_DeoxysAttack, .iconSprite = gMonIcon_DeoxysAttack, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 14, SHADOW_SIZE_M) OVERWORLD( sPicTable_DeoxysAttack, @@ -13017,6 +13187,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_DeoxysDefense, .iconSprite = gMonIcon_DeoxysDefense, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 13, SHADOW_SIZE_M) FOOTPRINT(Deoxys) OVERWORLD( @@ -13087,6 +13258,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_DeoxysSpeed, .iconSprite = gMonIcon_DeoxysSpeed, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 13, SHADOW_SIZE_M) FOOTPRINT(Deoxys) OVERWORLD( diff --git a/src/data/pokemon/species_info/gen_4_families.h b/src/data/pokemon/species_info/gen_4_families.h index a6d6302012..a7f15ffc9e 100644 --- a/src/data/pokemon/species_info/gen_4_families.h +++ b/src/data/pokemon/species_info/gen_4_families.h @@ -55,6 +55,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Turtwig, .iconSprite = gMonIcon_Turtwig, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Turtwig) OVERWORLD( @@ -124,6 +125,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Grotle, .iconSprite = gMonIcon_Grotle, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 2, SHADOW_SIZE_L) FOOTPRINT(Grotle) OVERWORLD( @@ -198,6 +200,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Torterra, .iconSprite = gMonIcon_Torterra, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 10, SHADOW_SIZE_L) FOOTPRINT(Torterra) OVERWORLD( @@ -270,6 +273,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Chimchar, .iconSprite = gMonIcon_Chimchar, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(4, 3, SHADOW_SIZE_S) FOOTPRINT(Chimchar) OVERWORLD( @@ -342,6 +346,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Monferno, .iconSprite = gMonIcon_Monferno, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-7, 6, SHADOW_SIZE_S) FOOTPRINT(Monferno) OVERWORLD( @@ -417,6 +422,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Infernape, .iconSprite = gMonIcon_Infernape, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 9, SHADOW_SIZE_L) FOOTPRINT(Infernape) OVERWORLD( @@ -489,6 +495,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Piplup, .iconSprite = gMonIcon_Piplup, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(0, -1, SHADOW_SIZE_S) FOOTPRINT(Piplup) OVERWORLD( @@ -567,6 +574,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Prinplup, .iconSprite = gMonIcon_Prinplup, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(Prinplup) OVERWORLD( @@ -644,6 +652,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Empoleon, .iconSprite = gMonIcon_Empoleon, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 12, SHADOW_SIZE_M) FOOTPRINT(Empoleon) OVERWORLD( @@ -724,6 +733,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .backPicFemale = gMonBackPic_StarlyF, .backPicSizeFemale = MON_COORDS_SIZE(56, 48), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 1, SHADOW_SIZE_S) FOOTPRINT(Starly) OVERWORLD( @@ -804,6 +814,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .backPicFemale = gMonBackPic_StaraviaF, .backPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Staravia) OVERWORLD( @@ -889,6 +900,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .frontPicFemale = gMonFrontPic_StaraptorF, .frontPicSizeFemale = MON_COORDS_SIZE(56, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 10, SHADOW_SIZE_M) FOOTPRINT(Staraptor) OVERWORLD( @@ -974,6 +986,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .backPicFemale = gMonBackPic_BidoofF, .backPicSizeFemale = MON_COORDS_SIZE(64, 40), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(1, 1, SHADOW_SIZE_M) FOOTPRINT(Bidoof) OVERWORLD( @@ -1055,6 +1068,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .frontPicFemale = gMonFrontPic_BibarelF, .frontPicSizeFemale = MON_COORDS_SIZE(56, 48), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-5, 5, SHADOW_SIZE_M) FOOTPRINT(Bibarel) OVERWORLD( @@ -1150,6 +1164,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .backPicFemale = gMonBackPic_KricketotF, .backPicSizeFemale = MON_COORDS_SIZE(48, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-5, 2, SHADOW_SIZE_S) FOOTPRINT(Kricketot) OVERWORLD( @@ -1236,6 +1251,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .backPicFemale = gMonBackPic_KricketuneF, .backPicSizeFemale = MON_COORDS_SIZE(56, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 6, SHADOW_SIZE_S) FOOTPRINT(Kricketune) OVERWORLD( @@ -1317,6 +1333,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .backPicFemale = gMonBackPic_ShinxF, .backPicSizeFemale = MON_COORDS_SIZE(64, 48), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Shinx) OVERWORLD( @@ -1397,6 +1414,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .backPicFemale = gMonBackPic_LuxioF, .backPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-4, 2, SHADOW_SIZE_M) FOOTPRINT(Luxio) OVERWORLD( @@ -1485,6 +1503,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .backPicFemale = gMonBackPic_LuxrayF, .backPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 10, SHADOW_SIZE_L) FOOTPRINT(Luxray) OVERWORLD( @@ -1559,6 +1578,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Cranidos, .iconSprite = gMonIcon_Cranidos, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 4, SHADOW_SIZE_S) FOOTPRINT(Cranidos) OVERWORLD( @@ -1629,6 +1649,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Rampardos, .iconSprite = gMonIcon_Rampardos, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(7, 11, SHADOW_SIZE_L) FOOTPRINT(Rampardos) OVERWORLD( @@ -1697,6 +1718,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Shieldon, .iconSprite = gMonIcon_Shieldon, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(3, -1, SHADOW_SIZE_S) FOOTPRINT(Shieldon) OVERWORLD( @@ -1765,6 +1787,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Bastiodon, .iconSprite = gMonIcon_Bastiodon, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 6, SHADOW_SIZE_L) FOOTPRINT(Bastiodon) OVERWORLD( @@ -1830,6 +1853,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_BurmyPlant, .iconSprite = gMonIcon_BurmyPlant, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 8, SHADOW_SIZE_S) FOOTPRINT(Burmy) OVERWORLD( @@ -1898,6 +1922,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_BurmySandy, .iconSprite = gMonIcon_BurmySandy, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 9, SHADOW_SIZE_S) FOOTPRINT(Burmy) OVERWORLD( @@ -1966,6 +1991,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_BurmyTrash, .iconSprite = gMonIcon_BurmyTrash, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Burmy) OVERWORLD( @@ -2035,6 +2061,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_WormadamPlant, .iconSprite = gMonIcon_WormadamPlant, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 9, SHADOW_SIZE_S) FOOTPRINT(Wormadam) OVERWORLD( @@ -2100,6 +2127,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_WormadamSandy, .iconSprite = gMonIcon_WormadamSandy, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 9, SHADOW_SIZE_S) FOOTPRINT(Wormadam) OVERWORLD( @@ -2166,6 +2194,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_WormadamTrash, .iconSprite = gMonIcon_WormadamTrash, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 9, SHADOW_SIZE_S) FOOTPRINT(Wormadam) OVERWORLD( @@ -2228,6 +2257,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Mothim, \ .iconSprite = gMonIcon_Mothim, \ .iconPalIndex = 0, \ + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, \ SHADOW(-1, 9, SHADOW_SIZE_S) \ FOOTPRINT(Mothim) \ OVERWORLD( \ @@ -2311,6 +2341,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .paletteFemale = gMonPalette_CombeeF, .shinyPaletteFemale = gMonShinyPalette_CombeeF, #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-4, 10, SHADOW_SIZE_S) FOOTPRINT(Combee) OVERWORLD( @@ -2395,6 +2426,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Vespiquen, .iconSprite = gMonIcon_Vespiquen, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 11, SHADOW_SIZE_L) FOOTPRINT(Vespiquen) OVERWORLD( @@ -2473,6 +2505,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .frontPicFemale = gMonFrontPic_PachirisuF, .frontPicSizeFemale = MON_COORDS_SIZE(48, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-2, 1, SHADOW_SIZE_S) FOOTPRINT(Pachirisu) OVERWORLD( @@ -2553,6 +2586,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .backPicFemale = gMonBackPic_BuizelF, .backPicSizeFemale = MON_COORDS_SIZE(64, 48), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(1, 4, SHADOW_SIZE_S) FOOTPRINT(Buizel) OVERWORLD( @@ -2635,6 +2669,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .backPicFemale = gMonBackPic_FloatzelF, .backPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-4, 10, SHADOW_SIZE_M) FOOTPRINT(Floatzel) OVERWORLD( @@ -2717,6 +2752,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Cherubi, .iconSprite = gMonIcon_Cherubi, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-4, -2, SHADOW_SIZE_S) FOOTPRINT(Cherubi) OVERWORLD( @@ -2788,6 +2824,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_CherrimOvercast, .iconSprite = gMonIcon_CherrimOvercast, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(0, 6, SHADOW_SIZE_S) FOOTPRINT(Cherrim) OVERWORLD( @@ -2860,6 +2897,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_CherrimSunshine, .iconSprite = gMonIcon_CherrimSunshine, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Cherrim) .levelUpLearnset = sCherrimLevelUpLearnset, @@ -2917,6 +2955,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_ShellosWestSea, .iconSprite = gMonIcon_ShellosWestSea, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(1, 0, SHADOW_SIZE_S) FOOTPRINT(Shellos) OVERWORLD( @@ -2982,6 +3021,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_ShellosEast, .iconSprite = gMonIcon_ShellosEast, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(2, -1, SHADOW_SIZE_S) FOOTPRINT(Shellos) OVERWORLD( @@ -3047,6 +3087,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_GastrodonWestSea, .iconSprite = gMonIcon_GastrodonWestSea, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 3, SHADOW_SIZE_M) FOOTPRINT(Gastrodon) OVERWORLD( @@ -3110,6 +3151,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_GastrodonEast, .iconSprite = gMonIcon_GastrodonEast, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 4, SHADOW_SIZE_M) FOOTPRINT(Gastrodon) OVERWORLD( @@ -3181,6 +3223,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Drifloon, .iconSprite = gMonIcon_Drifloon, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 9, SHADOW_SIZE_S) FOOTPRINT(Drifloon) OVERWORLD( @@ -3253,6 +3296,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Drifblim, .iconSprite = gMonIcon_Drifblim, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 11, SHADOW_SIZE_M) FOOTPRINT(Drifblim) OVERWORLD( @@ -3320,6 +3364,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Buneary, .iconSprite = gMonIcon_Buneary, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(3, 5, SHADOW_SIZE_S) FOOTPRINT(Buneary) OVERWORLD( @@ -3388,6 +3433,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Lopunny, .iconSprite = gMonIcon_Lopunny, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 10, SHADOW_SIZE_S) FOOTPRINT(Lopunny) OVERWORLD( @@ -3453,6 +3499,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_LopunnyMega, .iconSprite = gMonIcon_LopunnyMega, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Lopunny) #if OW_BATTLE_ONLY_FORMS @@ -3527,6 +3574,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Glameow, .iconSprite = gMonIcon_Glameow, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-3, 6, SHADOW_SIZE_S) FOOTPRINT(Glameow) OVERWORLD( @@ -3599,6 +3647,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Purugly, .iconSprite = gMonIcon_Purugly, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 8, SHADOW_SIZE_L) FOOTPRINT(Purugly) OVERWORLD( @@ -3669,6 +3718,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Stunky, .iconSprite = gMonIcon_Stunky, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-1, 0, SHADOW_SIZE_M) FOOTPRINT(Stunky) OVERWORLD( @@ -3737,6 +3787,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Skuntank, .iconSprite = gMonIcon_Skuntank, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 6, SHADOW_SIZE_L) FOOTPRINT(Skuntank) OVERWORLD( @@ -3814,6 +3865,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Bronzor, .iconSprite = gMonIcon_Bronzor, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 6, SHADOW_SIZE_S) FOOTPRINT(Bronzor) OVERWORLD( @@ -3886,6 +3938,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Bronzong, .iconSprite = gMonIcon_Bronzong, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(5, 12, SHADOW_SIZE_M) FOOTPRINT(Bronzong) OVERWORLD( @@ -3968,6 +4021,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Chatot, .iconSprite = gMonIcon_Chatot, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 3, SHADOW_SIZE_S) FOOTPRINT(Chatot) OVERWORLD( @@ -4037,6 +4091,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Spiritomb, .iconSprite = gMonIcon_Spiritomb, .iconPalIndex = 5, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 7, SHADOW_SIZE_L) FOOTPRINT(Spiritomb) OVERWORLD( @@ -4112,6 +4167,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .backPicFemale = gMonBackPic_GibleF, .backPicSizeFemale = MON_COORDS_SIZE(56, 48), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(1, 5, SHADOW_SIZE_M) FOOTPRINT(Gible) OVERWORLD( @@ -4192,6 +4248,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .backPicFemale = gMonBackPic_GabiteF, .backPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 8, SHADOW_SIZE_M) FOOTPRINT(Gabite) OVERWORLD( @@ -4279,6 +4336,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .frontPicFemale = gMonFrontPic_GarchompF, .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(5, 11, SHADOW_SIZE_L) FOOTPRINT(Garchomp) OVERWORLD( @@ -4351,6 +4409,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_GarchompMega, .iconSprite = gMonIcon_GarchompMega, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 12, SHADOW_SIZE_L) FOOTPRINT(Garchomp) #if OW_BATTLE_ONLY_FORMS @@ -4426,6 +4485,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Riolu, .iconSprite = gMonIcon_Riolu, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(3, 3, SHADOW_SIZE_S) FOOTPRINT(Riolu) OVERWORLD( @@ -4494,6 +4554,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Lucario, .iconSprite = gMonIcon_Lucario, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(Lucario) OVERWORLD( @@ -4560,6 +4621,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_LucarioMega, .iconSprite = gMonIcon_LucarioMega, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 11, SHADOW_SIZE_M) FOOTPRINT(Lucario) #if OW_BATTLE_ONLY_FORMS @@ -4642,6 +4704,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .iconPalIndexFemale = 1, #endif #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, -1, SHADOW_SIZE_L) FOOTPRINT(Hippopotas) OVERWORLD( @@ -4724,6 +4787,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .iconPalIndexFemale = 1, #endif #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, NO_SHADOW FOOTPRINT(Hippowdon) OVERWORLD( @@ -4810,6 +4874,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Skorupi, .iconSprite = gMonIcon_Skorupi, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 3, SHADOW_SIZE_S) FOOTPRINT(Skorupi) OVERWORLD( @@ -4885,6 +4950,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Drapion, .iconSprite = gMonIcon_Drapion, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 6, SHADOW_SIZE_L) FOOTPRINT(Drapion) OVERWORLD( @@ -4961,6 +5027,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .backPicFemale = gMonBackPic_CroagunkF, .backPicSizeFemale = MON_COORDS_SIZE(56, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(2, 4, SHADOW_SIZE_S) FOOTPRINT(Croagunk) OVERWORLD( @@ -5045,6 +5112,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .backPicFemale = gMonBackPic_ToxicroakF, .backPicSizeFemale = MON_COORDS_SIZE(56, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 7, SHADOW_SIZE_M) FOOTPRINT(Toxicroak) OVERWORLD( @@ -5130,6 +5198,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Carnivine, .iconSprite = gMonIcon_Carnivine, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Carnivine) OVERWORLD( @@ -5210,6 +5279,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .backPicFemale = gMonBackPic_FinneonF, .backPicSizeFemale = MON_COORDS_SIZE(56, 40), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Finneon) OVERWORLD( @@ -5294,6 +5364,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .backPicFemale = gMonBackPic_LumineonF, .backPicSizeFemale = MON_COORDS_SIZE(56, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Lumineon) OVERWORLD( @@ -5376,6 +5447,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .backPicFemale = gMonBackPic_SnoverF, .backPicSizeFemale = MON_COORDS_SIZE(64, 56), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 4, SHADOW_SIZE_M) FOOTPRINT(Snover) OVERWORLD( @@ -5457,6 +5529,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .frontPicFemale = gMonFrontPic_AbomasnowF, .frontPicSizeFemale = MON_COORDS_SIZE(64, 64), #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 11, SHADOW_SIZE_L) FOOTPRINT(Abomasnow) OVERWORLD( @@ -5531,6 +5604,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_AbomasnowMega, .iconSprite = gMonIcon_AbomasnowMega, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Abomasnow) #if OW_BATTLE_ONLY_FORMS @@ -5609,6 +5683,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Rotom, .iconSprite = gMonIcon_Rotom, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 10, SHADOW_SIZE_S) FOOTPRINT(Rotom) OVERWORLD( @@ -5687,6 +5762,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_RotomHeat, .iconSprite = gMonIcon_RotomHeat, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(Rotom) OVERWORLD( @@ -5758,6 +5834,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_RotomWash, .iconSprite = gMonIcon_RotomWash, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 10, SHADOW_SIZE_M) FOOTPRINT(Rotom) OVERWORLD( @@ -5827,6 +5904,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_RotomFrost, .iconSprite = gMonIcon_RotomFrost, .iconPalIndex = 5, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 13, SHADOW_SIZE_M) FOOTPRINT(Rotom) OVERWORLD( @@ -5921,6 +5999,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_RotomFan, .iconSprite = gMonIcon_RotomFan, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 9, SHADOW_SIZE_S) FOOTPRINT(Rotom) OVERWORLD( @@ -5993,6 +6072,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_RotomMow, .iconSprite = gMonIcon_RotomMow, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 14, SHADOW_SIZE_M) FOOTPRINT(Rotom) OVERWORLD( @@ -6071,6 +6151,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Uxie, .iconSprite = gMonIcon_Uxie, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 11, SHADOW_SIZE_S) FOOTPRINT(Uxie) OVERWORLD( @@ -6155,6 +6236,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Mesprit, .iconSprite = gMonIcon_Mesprit, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Mesprit) OVERWORLD( @@ -6233,6 +6315,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Azelf, .iconSprite = gMonIcon_Azelf, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 17, SHADOW_SIZE_S) FOOTPRINT(Azelf) OVERWORLD( @@ -6310,6 +6393,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Dialga, .iconSprite = gMonIcon_Dialga, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 12, SHADOW_SIZE_L) FOOTPRINT(Dialga) OVERWORLD( @@ -6377,6 +6461,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_DialgaOrigin, .iconSprite = gMonIcon_DialgaOrigin, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 11, SHADOW_SIZE_L) FOOTPRINT(Dialga) OVERWORLD( @@ -6457,6 +6542,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Palkia, .iconSprite = gMonIcon_Palkia, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 10, SHADOW_SIZE_L) FOOTPRINT(Palkia) OVERWORLD( @@ -6524,6 +6610,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_PalkiaOrigin, .iconSprite = gMonIcon_PalkiaOrigin, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 14, SHADOW_SIZE_L) FOOTPRINT(Palkia) OVERWORLD( @@ -6603,6 +6690,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Heatran, .iconSprite = gMonIcon_Heatran, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 2, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Heatran) OVERWORLD( @@ -6678,6 +6766,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Regigigas, .iconSprite = gMonIcon_Regigigas, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Regigigas) OVERWORLD( @@ -6756,6 +6845,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_GiratinaAltered, .iconSprite = gMonIcon_GiratinaAltered, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 11, SHADOW_SIZE_L) FOOTPRINT(GiratinaAltered) OVERWORLD( @@ -6830,6 +6920,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_GiratinaOrigin, .iconSprite = gMonIcon_GiratinaOrigin, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 18, SHADOW_SIZE_L) FOOTPRINT(GiratinaOrigin) OVERWORLD( @@ -6913,6 +7004,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Cresselia, .iconSprite = gMonIcon_Cresselia, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 12, SHADOW_SIZE_M) FOOTPRINT(Cresselia) OVERWORLD( @@ -6990,6 +7082,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Phione, .iconSprite = gMonIcon_Phione, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Phione) OVERWORLD( @@ -7066,6 +7159,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Manaphy, .iconSprite = gMonIcon_Manaphy, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-5, 8, SHADOW_SIZE_S) FOOTPRINT(Manaphy) OVERWORLD( @@ -7145,6 +7239,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Darkrai, .iconSprite = gMonIcon_Darkrai, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 12, SHADOW_SIZE_M) FOOTPRINT(Darkrai) OVERWORLD( @@ -7226,6 +7321,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_ShayminLand, .iconSprite = gMonIcon_ShayminLand, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(1, -3, SHADOW_SIZE_S) FOOTPRINT(Shaymin) OVERWORLD( @@ -7304,6 +7400,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_ShayminSky, .iconSprite = gMonIcon_ShayminSky, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 7, SHADOW_SIZE_M) FOOTPRINT(Shaymin) OVERWORLD( @@ -7385,6 +7482,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .palette = gMonPalette_Arceus ##typeName, \ .shinyPalette = gMonShinyPalette_Arceus ##typeName, \ ARCEUS_ICON(typeName, iconPal) \ + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, \ SHADOW(-1, 15, SHADOW_SIZE_XL_BATTLE_ONLY) \ FOOTPRINT(Arceus) \ OVERWORLD( \ diff --git a/src/data/pokemon/species_info/gen_5_families.h b/src/data/pokemon/species_info/gen_5_families.h index d55a7bf1d0..58fab83247 100644 --- a/src/data/pokemon/species_info/gen_5_families.h +++ b/src/data/pokemon/species_info/gen_5_families.h @@ -55,6 +55,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Victini, .iconSprite = gMonIcon_Victini, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 4, SHADOW_SIZE_S) FOOTPRINT(Victini) OVERWORLD( @@ -126,6 +127,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Snivy, .iconSprite = gMonIcon_Snivy, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Snivy) OVERWORLD( @@ -198,6 +200,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Servine, .iconSprite = gMonIcon_Servine, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 7, SHADOW_SIZE_S) FOOTPRINT(Servine) OVERWORLD( @@ -267,6 +270,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Serperior, .iconSprite = gMonIcon_Serperior, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Serperior) OVERWORLD( @@ -337,6 +341,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Tepig, .iconSprite = gMonIcon_Tepig, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(0, -2, SHADOW_SIZE_S) FOOTPRINT(Tepig) OVERWORLD( @@ -405,6 +410,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Pignite, .iconSprite = gMonIcon_Pignite, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 6, SHADOW_SIZE_M) FOOTPRINT(Pignite) OVERWORLD( @@ -492,6 +498,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Emboar, .iconSprite = gMonIcon_Emboar, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 12, SHADOW_SIZE_L) FOOTPRINT(Emboar) OVERWORLD( @@ -564,6 +571,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Oshawott, .iconSprite = gMonIcon_Oshawott, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-3, 0, SHADOW_SIZE_S) FOOTPRINT(Oshawott) OVERWORLD( @@ -634,6 +642,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Dewott, .iconSprite = gMonIcon_Dewott, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 6, SHADOW_SIZE_S) FOOTPRINT(Dewott) OVERWORLD( @@ -701,6 +710,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Samurott, .iconSprite = gMonIcon_Samurott, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 13, SHADOW_SIZE_L) FOOTPRINT(Samurott) OVERWORLD( @@ -765,6 +775,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_SamurottHisui, .iconSprite = gMonIcon_SamurottHisui, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 13, SHADOW_SIZE_L) FOOTPRINT(Samurott) OVERWORLD( @@ -835,6 +846,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Patrat, .iconSprite = gMonIcon_Patrat, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Patrat) OVERWORLD( @@ -907,6 +919,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Watchog, .iconSprite = gMonIcon_Watchog, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-4, 11, SHADOW_SIZE_S) FOOTPRINT(Watchog) OVERWORLD( @@ -979,6 +992,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Lillipup, .iconSprite = gMonIcon_Lillipup, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(2, 1, SHADOW_SIZE_S) FOOTPRINT(Lillipup) OVERWORLD( @@ -1050,6 +1064,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Herdier, .iconSprite = gMonIcon_Herdier, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 5, SHADOW_SIZE_M) FOOTPRINT(Herdier) OVERWORLD( @@ -1125,6 +1140,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Stoutland, .iconSprite = gMonIcon_Stoutland, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-4, 9, SHADOW_SIZE_L) FOOTPRINT(Stoutland) OVERWORLD( @@ -1193,6 +1209,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Purrloin, .iconSprite = gMonIcon_Purrloin, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Purrloin) OVERWORLD( @@ -1261,6 +1278,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Liepard, .iconSprite = gMonIcon_Liepard, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 11, SHADOW_SIZE_M) FOOTPRINT(Liepard) OVERWORLD( @@ -1331,6 +1349,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Pansage, .iconSprite = gMonIcon_Pansage, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(0, 3, SHADOW_SIZE_S) FOOTPRINT(Pansage) OVERWORLD( @@ -1399,6 +1418,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Simisage, .iconSprite = gMonIcon_Simisage, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 12, SHADOW_SIZE_M) FOOTPRINT(Simisage) OVERWORLD( @@ -1467,6 +1487,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Pansear, .iconSprite = gMonIcon_Pansear, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(1, 3, SHADOW_SIZE_S) FOOTPRINT(Pansear) OVERWORLD( @@ -1538,6 +1559,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Simisear, .iconSprite = gMonIcon_Simisear, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 8, SHADOW_SIZE_M) FOOTPRINT(Simisear) OVERWORLD( @@ -1606,6 +1628,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Panpour, .iconSprite = gMonIcon_Panpour, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-3, 4, SHADOW_SIZE_S) FOOTPRINT(Panpour) OVERWORLD( @@ -1673,6 +1696,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Simipour, .iconSprite = gMonIcon_Simipour, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Simipour) OVERWORLD( @@ -1747,6 +1771,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Munna, .iconSprite = gMonIcon_Munna, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Munna) OVERWORLD( @@ -1818,6 +1843,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Musharna, .iconSprite = gMonIcon_Musharna, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(6, 10, SHADOW_SIZE_M) FOOTPRINT(Musharna) OVERWORLD( @@ -1886,6 +1912,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Pidove, .iconSprite = gMonIcon_Pidove, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 1, SHADOW_SIZE_S) FOOTPRINT(Pidove) OVERWORLD( @@ -1954,6 +1981,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Tranquill, .iconSprite = gMonIcon_Tranquill, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 6, SHADOW_SIZE_S) FOOTPRINT(Tranquill) OVERWORLD( @@ -2037,6 +2065,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .iconSpriteFemale = gMonIcon_UnfezantF, .iconPalIndexFemale = 1, #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 12, SHADOW_SIZE_M) FOOTPRINT(Unfezant) OVERWORLD( @@ -2117,6 +2146,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Blitzle, .iconSprite = gMonIcon_Blitzle, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 9, SHADOW_SIZE_M) FOOTPRINT(Blitzle) OVERWORLD( @@ -2185,6 +2215,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Zebstrika, .iconSprite = gMonIcon_Zebstrika, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 13, SHADOW_SIZE_M) FOOTPRINT(Zebstrika) OVERWORLD( @@ -2259,6 +2290,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Roggenrola, .iconSprite = gMonIcon_Roggenrola, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-1, 0, SHADOW_SIZE_S) FOOTPRINT(Roggenrola) OVERWORLD( @@ -2337,6 +2369,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Boldore, .iconSprite = gMonIcon_Boldore, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 3, SHADOW_SIZE_L) FOOTPRINT(Boldore) OVERWORLD( @@ -2417,6 +2450,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Gigalith, .iconSprite = gMonIcon_Gigalith, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Gigalith) OVERWORLD( @@ -2502,6 +2536,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Woobat, .iconSprite = gMonIcon_Woobat, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 14, SHADOW_SIZE_S) FOOTPRINT(Woobat) OVERWORLD( @@ -2574,6 +2609,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Swoobat, .iconSprite = gMonIcon_Swoobat, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 17, SHADOW_SIZE_M) FOOTPRINT(Swoobat) OVERWORLD( @@ -2645,6 +2681,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Drilbur, .iconSprite = gMonIcon_Drilbur, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Drilbur) OVERWORLD( @@ -2715,6 +2752,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Excadrill, .iconSprite = gMonIcon_Excadrill, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(3, 8, SHADOW_SIZE_L) FOOTPRINT(Excadrill) OVERWORLD( @@ -2785,6 +2823,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Audino, .iconSprite = gMonIcon_Audino, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 6, SHADOW_SIZE_S) FOOTPRINT(Audino) OVERWORLD( @@ -2853,6 +2892,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_AudinoMega, .iconSprite = gMonIcon_AudinoMega, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(Audino) #if OW_BATTLE_ONLY_FORMS @@ -2928,6 +2968,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Timburr, .iconSprite = gMonIcon_Timburr, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-4, 2, SHADOW_SIZE_S) FOOTPRINT(Timburr) OVERWORLD( @@ -3000,6 +3041,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Gurdurr, .iconSprite = gMonIcon_Gurdurr, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Gurdurr) OVERWORLD( @@ -3067,6 +3109,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Conkeldurr, .iconSprite = gMonIcon_Conkeldurr, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 3, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Conkeldurr) OVERWORLD( @@ -3134,6 +3177,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Tympole, .iconSprite = gMonIcon_Tympole, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Tympole) OVERWORLD( @@ -3204,6 +3248,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Palpitoad, .iconSprite = gMonIcon_Palpitoad, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 3, SHADOW_SIZE_S) FOOTPRINT(Palpitoad) OVERWORLD( @@ -3281,6 +3326,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Seismitoad, .iconSprite = gMonIcon_Seismitoad, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 10, SHADOW_SIZE_L) FOOTPRINT(Seismitoad) OVERWORLD( @@ -3351,6 +3397,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Throh, .iconSprite = gMonIcon_Throh, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 4, SHADOW_SIZE_M) FOOTPRINT(Throh) OVERWORLD( @@ -3420,6 +3467,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Sawk, .iconSprite = gMonIcon_Sawk, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 6, SHADOW_SIZE_M) FOOTPRINT(Sawk) OVERWORLD( @@ -3491,6 +3539,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Sewaddle, .iconSprite = gMonIcon_Sewaddle, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(1, 0, SHADOW_SIZE_S) FOOTPRINT(Sewaddle) OVERWORLD( @@ -3561,6 +3610,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Swadloon, .iconSprite = gMonIcon_Swadloon, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(0, 1, SHADOW_SIZE_L) FOOTPRINT(Swadloon) OVERWORLD( @@ -3635,6 +3685,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Leavanny, .iconSprite = gMonIcon_Leavanny, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 14, SHADOW_SIZE_S) FOOTPRINT(Leavanny) OVERWORLD( @@ -3712,6 +3763,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Venipede, .iconSprite = gMonIcon_Venipede, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-2, -3, SHADOW_SIZE_M) FOOTPRINT(Venipede) OVERWORLD( @@ -3788,6 +3840,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Whirlipede, .iconSprite = gMonIcon_Whirlipede, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Whirlipede) OVERWORLD( @@ -3865,6 +3918,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Scolipede, .iconSprite = gMonIcon_Scolipede, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 12, SHADOW_SIZE_L) FOOTPRINT(Scolipede) OVERWORLD( @@ -3946,6 +4000,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Cottonee, .iconSprite = gMonIcon_Cottonee, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, -5, SHADOW_SIZE_M) FOOTPRINT(Cottonee) OVERWORLD( @@ -4015,6 +4070,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Whimsicott, .iconSprite = gMonIcon_Whimsicott, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Whimsicott) OVERWORLD( @@ -4087,6 +4143,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Petilil, .iconSprite = gMonIcon_Petilil, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-2, 6, SHADOW_SIZE_S) FOOTPRINT(Petilil) OVERWORLD( @@ -4158,6 +4215,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Lilligant, .iconSprite = gMonIcon_Lilligant, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 13, SHADOW_SIZE_M) FOOTPRINT(Lilligant) OVERWORLD( @@ -4225,6 +4283,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_LilligantHisui, .iconSprite = gMonIcon_LilligantHisui, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 13, SHADOW_SIZE_S) FOOTPRINT(Lilligant) OVERWORLD( @@ -4294,6 +4353,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_BasculinRedStriped, .iconSprite = gMonIcon_BasculinRedStriped, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Basculin) OVERWORLD( @@ -4360,6 +4420,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_BasculinBlueStriped, .iconSprite = gMonIcon_BasculinBlueStriped, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Basculin) OVERWORLD( @@ -4427,6 +4488,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_BasculinWhiteStriped, .iconSprite = gMonIcon_BasculinWhiteStriped, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 5, SHADOW_SIZE_S) FOOTPRINT(Basculin) OVERWORLD( @@ -4493,6 +4555,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_BasculegionM, .iconSprite = gMonIcon_BasculegionM, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 16, SHADOW_SIZE_M) FOOTPRINT(Basculegion) OVERWORLD( @@ -4556,6 +4619,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_BasculegionF, .iconSprite = gMonIcon_BasculegionF, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 16, SHADOW_SIZE_M) FOOTPRINT(Basculegion) OVERWORLD( @@ -4627,6 +4691,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Sandile, .iconSprite = gMonIcon_Sandile, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(4, -5, SHADOW_SIZE_M) FOOTPRINT(Sandile) OVERWORLD( @@ -4695,6 +4760,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Krokorok, .iconSprite = gMonIcon_Krokorok, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 8, SHADOW_SIZE_M) FOOTPRINT(Krokorok) OVERWORLD( @@ -4771,6 +4837,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Krookodile, .iconSprite = gMonIcon_Krookodile, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 12, SHADOW_SIZE_L) FOOTPRINT(Krookodile) OVERWORLD( @@ -4839,6 +4906,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Darumaka, .iconSprite = gMonIcon_Darumaka, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Darumaka) OVERWORLD( @@ -4909,6 +4977,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_DarmanitanStandard, .iconSprite = gMonIcon_DarmanitanStandard, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 5, SHADOW_SIZE_L) FOOTPRINT(Darmanitan) OVERWORLD( @@ -4975,6 +5044,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_DarmanitanZen, .iconSprite = gMonIcon_DarmanitanZen, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, -1, SHADOW_SIZE_S) FOOTPRINT(Darmanitan) .levelUpLearnset = sDarmanitanLevelUpLearnset, @@ -5031,6 +5101,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_DarumakaGalar, .iconSprite = gMonIcon_DarumakaGalar, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-3, -1, SHADOW_SIZE_S) FOOTPRINT(Darumaka) OVERWORLD( @@ -5097,6 +5168,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_DarmanitanGalarStandard, .iconSprite = gMonIcon_DarmanitanGalarStandard, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 8, SHADOW_SIZE_L) FOOTPRINT(Darmanitan) OVERWORLD( @@ -5162,6 +5234,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_DarmanitanGalarZen, .iconSprite = gMonIcon_DarmanitanGalarZen, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 11, SHADOW_SIZE_S) FOOTPRINT(Darmanitan) .isGalarianForm = TRUE, @@ -5230,6 +5303,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Maractus, .iconSprite = gMonIcon_Maractus, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Maractus) OVERWORLD( @@ -5306,6 +5380,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Dwebble, .iconSprite = gMonIcon_Dwebble, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-1, -2, SHADOW_SIZE_S) FOOTPRINT(Dwebble) OVERWORLD( @@ -5378,6 +5453,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Crustle, .iconSprite = gMonIcon_Crustle, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 8, SHADOW_SIZE_L) FOOTPRINT(Crustle) OVERWORLD( @@ -5447,6 +5523,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Scraggy, .iconSprite = gMonIcon_Scraggy, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-4, 2, SHADOW_SIZE_S) FOOTPRINT(Scraggy) OVERWORLD( @@ -5517,6 +5594,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Scrafty, .iconSprite = gMonIcon_Scrafty, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 9, SHADOW_SIZE_M) FOOTPRINT(Scrafty) OVERWORLD( @@ -5591,6 +5669,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Sigilyph, .iconSprite = gMonIcon_Sigilyph, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 18, SHADOW_SIZE_S) FOOTPRINT(Sigilyph) OVERWORLD( @@ -5664,6 +5743,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Yamask, .iconSprite = gMonIcon_Yamask, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 6, SHADOW_SIZE_S) FOOTPRINT(Yamask) OVERWORLD( @@ -5734,6 +5814,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Cofagrigus, .iconSprite = gMonIcon_Cofagrigus, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(6, 12, SHADOW_SIZE_M) FOOTPRINT(Cofagrigus) OVERWORLD( @@ -5798,6 +5879,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_YamaskGalar, .iconSprite = gMonIcon_YamaskGalar, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Yamask) OVERWORLD( @@ -5864,6 +5946,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Runerigus, .iconSprite = gMonIcon_Runerigus, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(14, 14, SHADOW_SIZE_M) FOOTPRINT(Runerigus) OVERWORLD( @@ -5934,6 +6017,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Tirtouga, .iconSprite = gMonIcon_Tirtouga, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, -3, SHADOW_SIZE_M) FOOTPRINT(Tirtouga) OVERWORLD( @@ -6009,6 +6093,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Carracosta, .iconSprite = gMonIcon_Carracosta, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 8, SHADOW_SIZE_L) FOOTPRINT(Carracosta) OVERWORLD( @@ -6077,6 +6162,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Archen, .iconSprite = gMonIcon_Archen, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-3, -2, SHADOW_SIZE_S) FOOTPRINT(Archen) OVERWORLD( @@ -6151,6 +6237,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Archeops, .iconSprite = gMonIcon_Archeops, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 18, SHADOW_SIZE_M) FOOTPRINT(Archeops) OVERWORLD( @@ -6220,6 +6307,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Trubbish, .iconSprite = gMonIcon_Trubbish, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-2, -1, SHADOW_SIZE_S) FOOTPRINT(Trubbish) OVERWORLD( @@ -6291,6 +6379,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Garbodor, .iconSprite = gMonIcon_Garbodor, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Garbodor) OVERWORLD( @@ -6359,6 +6448,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_GarbodorGmax, .iconSprite = gMonIcon_GarbodorGmax, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, NO_SHADOW FOOTPRINT(Garbodor) .isGigantamax = TRUE, @@ -6424,6 +6514,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Zorua, .iconSprite = gMonIcon_Zorua, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Zorua) OVERWORLD( @@ -6495,6 +6586,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Zoroark, .iconSprite = gMonIcon_Zoroark, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 8, SHADOW_SIZE_L) FOOTPRINT(Zoroark) OVERWORLD( @@ -6559,6 +6651,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_ZoruaHisui, .iconSprite = gMonIcon_ZoruaHisui, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(2, 12, SHADOW_SIZE_S) FOOTPRINT(Zorua) OVERWORLD( @@ -6624,6 +6717,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_ZoroarkHisui, .iconSprite = gMonIcon_ZoroarkHisui, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(11, 13, SHADOW_SIZE_L) FOOTPRINT(Zoroark) OVERWORLD( @@ -6695,6 +6789,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Minccino, .iconSprite = gMonIcon_Minccino, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-3, 3, SHADOW_SIZE_S) FOOTPRINT(Minccino) OVERWORLD( @@ -6766,6 +6861,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Cinccino, .iconSprite = gMonIcon_Cinccino, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(0, 6, SHADOW_SIZE_M) FOOTPRINT(Cinccino) OVERWORLD( @@ -6839,6 +6935,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Gothita, .iconSprite = gMonIcon_Gothita, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-3, 2, SHADOW_SIZE_S) FOOTPRINT(Gothita) OVERWORLD( @@ -6913,6 +7010,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Gothorita, .iconSprite = gMonIcon_Gothorita, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-2, 7, SHADOW_SIZE_S) FOOTPRINT(Gothorita) OVERWORLD( @@ -6985,6 +7083,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Gothitelle, .iconSprite = gMonIcon_Gothitelle, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 13, SHADOW_SIZE_M) FOOTPRINT(Gothitelle) OVERWORLD( @@ -7056,6 +7155,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Solosis, .iconSprite = gMonIcon_Solosis, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 8, SHADOW_SIZE_S) FOOTPRINT(Solosis) OVERWORLD( @@ -7126,6 +7226,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Duosion, .iconSprite = gMonIcon_Duosion, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 6, SHADOW_SIZE_M) FOOTPRINT(Duosion) OVERWORLD( @@ -7196,6 +7297,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Reuniclus, .iconSprite = gMonIcon_Reuniclus, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 8, SHADOW_SIZE_M) FOOTPRINT(Reuniclus) OVERWORLD( @@ -7268,6 +7370,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Ducklett, .iconSprite = gMonIcon_Ducklett, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 2, SHADOW_SIZE_S) FOOTPRINT(Ducklett) OVERWORLD( @@ -7335,6 +7438,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Swanna, .iconSprite = gMonIcon_Swanna, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 12, SHADOW_SIZE_M) FOOTPRINT(Swanna) OVERWORLD( @@ -7410,6 +7514,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Vanillite, .iconSprite = gMonIcon_Vanillite, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 0, SHADOW_SIZE_S) FOOTPRINT(Vanillite) OVERWORLD( @@ -7483,6 +7588,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Vanillish, .iconSprite = gMonIcon_Vanillish, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 9, SHADOW_SIZE_S) FOOTPRINT(Vanillish) OVERWORLD( @@ -7555,6 +7661,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Vanilluxe, .iconSprite = gMonIcon_Vanilluxe, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 10, SHADOW_SIZE_M) FOOTPRINT(Vanilluxe) OVERWORLD( @@ -7619,6 +7726,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_DeerlingSpring, .iconSprite = gMonIcon_DeerlingSpring, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Deerling) OVERWORLD( @@ -7684,6 +7792,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_DeerlingSummer, .iconSprite = gMonIcon_DeerlingSummer, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Deerling) OVERWORLD( @@ -7749,6 +7858,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_DeerlingAutumn, .iconSprite = gMonIcon_DeerlingAutumn, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Deerling) OVERWORLD( @@ -7814,6 +7924,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_DeerlingWinter, .iconSprite = gMonIcon_DeerlingWinter, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Deerling) OVERWORLD( @@ -7879,6 +7990,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_SawsbuckSpring, .iconSprite = gMonIcon_SawsbuckSpring, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(7, 13, SHADOW_SIZE_M) FOOTPRINT(Sawsbuck) OVERWORLD( @@ -7942,6 +8054,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_SawsbuckSummer, .iconSprite = gMonIcon_SawsbuckSummer, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(7, 13, SHADOW_SIZE_M) FOOTPRINT(Sawsbuck) OVERWORLD( @@ -8005,6 +8118,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_SawsbuckAutumn, .iconSprite = gMonIcon_SawsbuckAutumn, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(7, 13, SHADOW_SIZE_M) FOOTPRINT(Sawsbuck) OVERWORLD( @@ -8068,6 +8182,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_SawsbuckWinter, .iconSprite = gMonIcon_SawsbuckWinter, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(7, 13, SHADOW_SIZE_M) FOOTPRINT(Sawsbuck) OVERWORLD( @@ -8140,6 +8255,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Emolga, .iconSprite = gMonIcon_Emolga, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Emolga) OVERWORLD( @@ -8208,6 +8324,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Karrablast, .iconSprite = gMonIcon_Karrablast, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-1, 0, SHADOW_SIZE_S) FOOTPRINT(Karrablast) OVERWORLD( @@ -8276,6 +8393,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Escavalier, .iconSprite = gMonIcon_Escavalier, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 11, SHADOW_SIZE_M) FOOTPRINT(Escavalier) OVERWORLD( @@ -8348,6 +8466,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Foongus, .iconSprite = gMonIcon_Foongus, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-1, -3, SHADOW_SIZE_S) FOOTPRINT(Foongus) OVERWORLD( @@ -8422,6 +8541,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Amoonguss, .iconSprite = gMonIcon_Amoonguss, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(1, 5, SHADOW_SIZE_M) FOOTPRINT(Amoonguss) OVERWORLD( @@ -8501,6 +8621,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .iconSpriteFemale = gMonIcon_FrillishF, .iconPalIndexFemale = 1, #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 9, SHADOW_SIZE_S) FOOTPRINT(Frillish) OVERWORLD( @@ -8590,6 +8711,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .iconSpriteFemale = gMonIcon_JellicentF, .iconPalIndexFemale = 1, #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 11, SHADOW_SIZE_M) FOOTPRINT(Jellicent) OVERWORLD( @@ -8667,6 +8789,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Alomomola, .iconSprite = gMonIcon_Alomomola, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 15, SHADOW_SIZE_S) FOOTPRINT(Alomomola) OVERWORLD( @@ -8738,6 +8861,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Joltik, .iconSprite = gMonIcon_Joltik, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(0, -5, SHADOW_SIZE_S) FOOTPRINT(Joltik) OVERWORLD( @@ -8811,6 +8935,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Galvantula, .iconSprite = gMonIcon_Galvantula, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, -2, SHADOW_SIZE_L) FOOTPRINT(Galvantula) OVERWORLD( @@ -8882,6 +9007,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Ferroseed, .iconSprite = gMonIcon_Ferroseed, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Ferroseed) OVERWORLD( @@ -8958,6 +9084,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Ferrothorn, .iconSprite = gMonIcon_Ferrothorn, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 17, SHADOW_SIZE_M) FOOTPRINT(Ferrothorn) OVERWORLD( @@ -9029,6 +9156,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Klink, .iconSprite = gMonIcon_Klink, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 11, SHADOW_SIZE_S) FOOTPRINT(Klink) OVERWORLD( @@ -9099,6 +9227,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Klang, .iconSprite = gMonIcon_Klang, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 12, SHADOW_SIZE_M) FOOTPRINT(Klang) OVERWORLD( @@ -9169,6 +9298,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Klinklang, .iconSprite = gMonIcon_Klinklang, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(Klinklang) OVERWORLD( @@ -9251,6 +9381,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Tynamo, .iconSprite = gMonIcon_Tynamo, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 5, SHADOW_SIZE_S) FOOTPRINT(Tynamo) OVERWORLD( @@ -9322,6 +9453,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Eelektrik, .iconSprite = gMonIcon_Eelektrik, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Eelektrik) OVERWORLD( @@ -9393,6 +9525,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Eelektross, .iconSprite = gMonIcon_Eelektross, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 13, SHADOW_SIZE_M) FOOTPRINT(Eelektross) OVERWORLD( @@ -9466,6 +9599,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Elgyem, .iconSprite = gMonIcon_Elgyem, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Elgyem) OVERWORLD( @@ -9533,6 +9667,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Beheeyem, .iconSprite = gMonIcon_Beheeyem, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 10, SHADOW_SIZE_M) FOOTPRINT(Beheeyem) OVERWORLD( @@ -9607,6 +9742,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Litwick, .iconSprite = gMonIcon_Litwick, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(1, -1, SHADOW_SIZE_S) FOOTPRINT(Litwick) OVERWORLD( @@ -9681,6 +9817,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Lampent, .iconSprite = gMonIcon_Lampent, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 9, SHADOW_SIZE_S) FOOTPRINT(Lampent) OVERWORLD( @@ -9753,6 +9890,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Chandelure, .iconSprite = gMonIcon_Chandelure, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 13, SHADOW_SIZE_S) FOOTPRINT(Chandelure) OVERWORLD( @@ -9820,6 +9958,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Axew, .iconSprite = gMonIcon_Axew, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(2, 1, SHADOW_SIZE_S) FOOTPRINT(Axew) OVERWORLD( @@ -9887,6 +10026,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Fraxure, .iconSprite = gMonIcon_Fraxure, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 8, SHADOW_SIZE_L) FOOTPRINT(Fraxure) OVERWORLD( @@ -9955,6 +10095,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Haxorus, .iconSprite = gMonIcon_Haxorus, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 9, SHADOW_SIZE_L) FOOTPRINT(Haxorus) OVERWORLD( @@ -10027,6 +10168,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Cubchoo, .iconSprite = gMonIcon_Cubchoo, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-2, 0, SHADOW_SIZE_S) FOOTPRINT(Cubchoo) OVERWORLD( @@ -10100,6 +10242,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Beartic, .iconSprite = gMonIcon_Beartic, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 13, SHADOW_SIZE_L) FOOTPRINT(Beartic) OVERWORLD( @@ -10172,6 +10315,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Cryogonal, .iconSprite = gMonIcon_Cryogonal, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 14, SHADOW_SIZE_M) FOOTPRINT(Cryogonal) OVERWORLD( @@ -10242,6 +10386,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Shelmet, .iconSprite = gMonIcon_Shelmet, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(0, -1, SHADOW_SIZE_S) FOOTPRINT(Shelmet) OVERWORLD( @@ -10309,6 +10454,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Accelgor, .iconSprite = gMonIcon_Accelgor, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-14, 8, SHADOW_SIZE_S) FOOTPRINT(Accelgor) OVERWORLD( @@ -10377,6 +10523,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Stunfisk, .iconSprite = gMonIcon_Stunfisk, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(0, -1, SHADOW_SIZE_M) FOOTPRINT(Stunfisk) OVERWORLD( @@ -10442,6 +10589,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_StunfiskGalar, .iconSprite = gMonIcon_StunfiskGalar, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(0, -1, SHADOW_SIZE_M) FOOTPRINT(Stunfisk) OVERWORLD( @@ -10513,6 +10661,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Mienfoo, .iconSprite = gMonIcon_Mienfoo, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Mienfoo) OVERWORLD( @@ -10585,6 +10734,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Mienshao, .iconSprite = gMonIcon_Mienshao, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Mienshao) OVERWORLD( @@ -10658,6 +10808,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Druddigon, .iconSprite = gMonIcon_Druddigon, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 9, SHADOW_SIZE_M) FOOTPRINT(Druddigon) OVERWORLD( @@ -10729,6 +10880,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Golett, .iconSprite = gMonIcon_Golett, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(Golett) OVERWORLD( @@ -10797,6 +10949,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Golurk, .iconSprite = gMonIcon_Golurk, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 14, SHADOW_SIZE_L) FOOTPRINT(Golurk) OVERWORLD( @@ -10870,6 +11023,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Pawniard, .iconSprite = gMonIcon_Pawniard, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(4, 4, SHADOW_SIZE_S) FOOTPRINT(Pawniard) OVERWORLD( @@ -10938,6 +11092,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Bisharp, .iconSprite = gMonIcon_Bisharp, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Bisharp) OVERWORLD( @@ -11002,6 +11157,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Kingambit, .iconSprite = gMonIcon_Kingambit, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Kingambit) OVERWORLD( @@ -11071,6 +11227,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Bouffalant, .iconSprite = gMonIcon_Bouffalant, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(8, 7, SHADOW_SIZE_M) FOOTPRINT(Bouffalant) OVERWORLD( @@ -11142,6 +11299,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Rufflet, .iconSprite = gMonIcon_Rufflet, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Rufflet) OVERWORLD( @@ -11211,6 +11369,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Braviary, .iconSprite = gMonIcon_Braviary, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 16, SHADOW_SIZE_M) FOOTPRINT(Braviary) OVERWORLD( @@ -11275,6 +11434,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_BraviaryHisui, .iconSprite = gMonIcon_BraviaryHisui, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 14, SHADOW_SIZE_M) FOOTPRINT(Braviary) OVERWORLD( @@ -11346,6 +11506,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Vullaby, .iconSprite = gMonIcon_Vullaby, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 9, SHADOW_SIZE_M) FOOTPRINT(Vullaby) OVERWORLD( @@ -11414,6 +11575,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Mandibuzz, .iconSprite = gMonIcon_Mandibuzz, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 12, SHADOW_SIZE_M) FOOTPRINT(Mandibuzz) OVERWORLD( @@ -11481,6 +11643,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Heatmor, .iconSprite = gMonIcon_Heatmor, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(5, 7, SHADOW_SIZE_L) FOOTPRINT(Heatmor) OVERWORLD( @@ -11564,6 +11727,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Durant, .iconSprite = gMonIcon_Durant, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(0, -3, SHADOW_SIZE_L) FOOTPRINT(Durant) OVERWORLD( @@ -11633,6 +11797,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Deino, .iconSprite = gMonIcon_Deino, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 3, SHADOW_SIZE_S) FOOTPRINT(Deino) OVERWORLD( @@ -11700,6 +11865,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Zweilous, .iconSprite = gMonIcon_Zweilous, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 6, SHADOW_SIZE_L) FOOTPRINT(Zweilous) OVERWORLD( @@ -11773,6 +11939,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Hydreigon, .iconSprite = gMonIcon_Hydreigon, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 16, SHADOW_SIZE_M) FOOTPRINT(Hydreigon) OVERWORLD( @@ -11849,6 +12016,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Larvesta, .iconSprite = gMonIcon_Larvesta, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Larvesta) OVERWORLD( @@ -11921,6 +12089,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Volcarona, .iconSprite = gMonIcon_Volcarona, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-4, 14, SHADOW_SIZE_M) FOOTPRINT(Volcarona) OVERWORLD( @@ -11989,6 +12158,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Cobalion, .iconSprite = gMonIcon_Cobalion, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 14, SHADOW_SIZE_M) FOOTPRINT(Cobalion) OVERWORLD( @@ -12063,6 +12233,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Terrakion, .iconSprite = gMonIcon_Terrakion, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 6, SHADOW_SIZE_L) FOOTPRINT(Terrakion) OVERWORLD( @@ -12132,6 +12303,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Virizion, .iconSprite = gMonIcon_Virizion, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 12, SHADOW_SIZE_M) FOOTPRINT(Virizion) OVERWORLD( @@ -12222,6 +12394,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_TornadusIncarnate, .iconSprite = gMonIcon_TornadusIncarnate, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 17, SHADOW_SIZE_M) FOOTPRINT(Tornadus) OVERWORLD( @@ -12294,6 +12467,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_TornadusTherian, .iconSprite = gMonIcon_TornadusTherian, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-5, 12, SHADOW_SIZE_L) FOOTPRINT(Tornadus) OVERWORLD( @@ -12386,6 +12560,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_ThundurusIncarnate, .iconSprite = gMonIcon_ThundurusIncarnate, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 17, SHADOW_SIZE_M) FOOTPRINT(Thundurus) OVERWORLD( @@ -12470,6 +12645,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_ThundurusTherian, .iconSprite = gMonIcon_ThundurusTherian, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(5, 16, SHADOW_SIZE_M) FOOTPRINT(Thundurus) OVERWORLD( @@ -12541,6 +12717,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Reshiram, .iconSprite = gMonIcon_Reshiram, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 12, SHADOW_SIZE_L) FOOTPRINT(Reshiram) OVERWORLD( @@ -12611,6 +12788,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Zekrom, .iconSprite = gMonIcon_Zekrom, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 14, SHADOW_SIZE_L) FOOTPRINT(Zekrom) OVERWORLD( @@ -12702,6 +12880,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_LandorusIncarnate, .iconSprite = gMonIcon_LandorusIncarnate, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 17, SHADOW_SIZE_M) FOOTPRINT(Landorus) OVERWORLD( @@ -12774,6 +12953,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_LandorusTherian, .iconSprite = gMonIcon_LandorusTherian, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Landorus) OVERWORLD( @@ -12850,6 +13030,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Kyurem, .iconSprite = gMonIcon_Kyurem, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 8, SHADOW_SIZE_L) FOOTPRINT(Kyurem) OVERWORLD( @@ -12927,6 +13108,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_KyuremWhite, .iconSprite = gMonIcon_KyuremWhite, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-8, 14, SHADOW_SIZE_L) FOOTPRINT(Kyurem) OVERWORLD( @@ -13004,6 +13186,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_KyuremBlack, .iconSprite = gMonIcon_KyuremBlack, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 14, SHADOW_SIZE_L) FOOTPRINT(Kyurem) OVERWORLD( @@ -13077,6 +13260,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_KeldeoOrdinary, .iconSprite = gMonIcon_KeldeoOrdinary, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 8, SHADOW_SIZE_M) FOOTPRINT(Keldeo) OVERWORLD( @@ -13149,6 +13333,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_KeldeoResolute, .iconSprite = gMonIcon_KeldeoResolute, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 12, SHADOW_SIZE_M) FOOTPRINT(Keldeo) .isMythical = TRUE, @@ -13223,6 +13408,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_MeloettaAria, .iconSprite = gMonIcon_MeloettaAria, .iconPalIndex = 4, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 10, SHADOW_SIZE_S) FOOTPRINT(Meloetta) OVERWORLD( @@ -13302,6 +13488,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_MeloettaPirouette, .iconSprite = gMonIcon_MeloettaPirouette, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 16, SHADOW_SIZE_S) FOOTPRINT(Meloetta) OVERWORLD( @@ -13369,6 +13556,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_##form, \ .iconSprite = gMonIcon_Genesect, \ .iconPalIndex = 2, \ + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, \ SHADOW(5, 13, SHADOW_SIZE_L) \ FOOTPRINT(Genesect) \ OVERWORLD( \ diff --git a/src/data/pokemon/species_info/gen_6_families.h b/src/data/pokemon/species_info/gen_6_families.h index b42696983e..5df5e2580f 100644 --- a/src/data/pokemon/species_info/gen_6_families.h +++ b/src/data/pokemon/species_info/gen_6_families.h @@ -57,6 +57,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Chespin, .iconSprite = gMonIcon_Chespin, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-2, 3, SHADOW_SIZE_S) FOOTPRINT(Chespin) OVERWORLD( @@ -127,6 +128,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Quilladin, .iconSprite = gMonIcon_Quilladin, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(2, 4, SHADOW_SIZE_M) FOOTPRINT(Quilladin) OVERWORLD( @@ -194,6 +196,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Chesnaught, .iconSprite = gMonIcon_Chesnaught, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 10, SHADOW_SIZE_L) FOOTPRINT(Chesnaught) OVERWORLD( @@ -266,6 +269,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Fennekin, .iconSprite = gMonIcon_Fennekin, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Fennekin) OVERWORLD( @@ -334,6 +338,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Braixen, .iconSprite = gMonIcon_Braixen, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 10, SHADOW_SIZE_M) FOOTPRINT(Braixen) OVERWORLD( @@ -405,6 +410,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Delphox, .iconSprite = gMonIcon_Delphox, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(7, 14, SHADOW_SIZE_M) FOOTPRINT(Delphox) OVERWORLD( @@ -477,6 +483,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Froakie, .iconSprite = gMonIcon_Froakie, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(2, 0, SHADOW_SIZE_S) FOOTPRINT(Froakie) OVERWORLD( @@ -544,6 +551,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Frogadier, .iconSprite = gMonIcon_Frogadier, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(0, 5, SHADOW_SIZE_M) FOOTPRINT(Frogadier) OVERWORLD( @@ -604,6 +612,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Greninja, .iconSprite = gMonIcon_Greninja, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 6, SHADOW_SIZE_L) FOOTPRINT(Greninja) OVERWORLD( @@ -664,6 +673,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Greninja, .iconSprite = gMonIcon_Greninja, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 6, SHADOW_SIZE_L) FOOTPRINT(Greninja) OVERWORLD( @@ -731,6 +741,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_GreninjaAsh, .iconSprite = gMonIcon_GreninjaAsh, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 10, SHADOW_SIZE_L) FOOTPRINT(Greninja) .levelUpLearnset = sGreninjaLevelUpLearnset, @@ -791,6 +802,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Bunnelby, .iconSprite = gMonIcon_Bunnelby, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(3, 9, SHADOW_SIZE_S) FOOTPRINT(Bunnelby) OVERWORLD( @@ -858,6 +870,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Diggersby, .iconSprite = gMonIcon_Diggersby, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(8, 10, SHADOW_SIZE_M) FOOTPRINT(Diggersby) OVERWORLD( @@ -929,6 +942,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Fletchling, .iconSprite = gMonIcon_Fletchling, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 0, SHADOW_SIZE_S) FOOTPRINT(Fletchling) OVERWORLD( @@ -1003,6 +1017,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Fletchinder, .iconSprite = gMonIcon_Fletchinder, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 12, SHADOW_SIZE_S) FOOTPRINT(Fletchinder) OVERWORLD( @@ -1070,6 +1085,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Talonflame, .iconSprite = gMonIcon_Talonflame, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 17, SHADOW_SIZE_M) FOOTPRINT(Talonflame) OVERWORLD( @@ -1130,6 +1146,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Scatterbug, \ .iconSprite = gMonIcon_Scatterbug, \ .iconPalIndex = 1, \ + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, \ SHADOW(1, 1, SHADOW_SIZE_S) \ FOOTPRINT(Scatterbug) \ OVERWORLD( \ @@ -1213,6 +1230,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Spewpa, \ .iconSprite = gMonIcon_Spewpa, \ .iconPalIndex = 1, \ + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, \ SHADOW(0, 2, SHADOW_SIZE_M) \ FOOTPRINT(Spewpa) \ OVERWORLD( \ @@ -1296,6 +1314,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Vivillon ##form, \ .iconSprite = gMonIcon_Vivillon ##form, \ .iconPalIndex = iconPal, \ + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, \ SHADOW(0, 20, SHADOW_SIZE_M) \ FOOTPRINT(Vivillon) \ OVERWORLD( \ @@ -1545,6 +1564,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Litleo, .iconSprite = gMonIcon_Litleo, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(2, 3, SHADOW_SIZE_S) FOOTPRINT(Litleo) OVERWORLD( @@ -1620,6 +1640,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .iconSpriteFemale = gMonIcon_PyroarF, .iconPalIndexFemale = 2, #endif //P_GENDER_DIFFERENCES + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Pyroar) OVERWORLD( @@ -1686,6 +1707,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Flabebe##Form, \ .iconSprite = gMonIcon_Flabebe##Form, \ .iconPalIndex = iconPal, \ + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, \ SHADOW(0, 11, SHADOW_SIZE_S) \ FOOTPRINT(Flabebe) \ OVERWORLD( \ @@ -1775,6 +1797,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Floette ##form, \ .iconSprite = gMonIcon_Floette##form, \ .iconPalIndex = iconPal, \ + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, \ SHADOW(-3, 12, SHADOW_SIZE_S) \ FOOTPRINT(Floette) \ OVERWORLD( \ @@ -1924,6 +1947,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Florges##Form, \ .iconSprite = gMonIcon_Florges##Form, \ .iconPalIndex = iconPal, \ + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, \ SHADOW(-5, 15, SHADOW_SIZE_M) \ FOOTPRINT(Florges) \ OVERWORLD( \ @@ -2036,6 +2060,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Skiddo, .iconSprite = gMonIcon_Skiddo, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 7, SHADOW_SIZE_M) FOOTPRINT(Skiddo) OVERWORLD( @@ -2104,6 +2129,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Gogoat, .iconSprite = gMonIcon_Gogoat, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Gogoat) OVERWORLD( @@ -2176,6 +2202,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Pancham, .iconSprite = gMonIcon_Pancham, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Pancham) OVERWORLD( @@ -2248,6 +2275,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Pangoro, .iconSprite = gMonIcon_Pangoro, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Pangoro) OVERWORLD( @@ -2309,6 +2337,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Furfrou##_form, \ .iconSprite = gMonIcon_Furfrou##_form, \ .iconPalIndex = _iconIdx, \ + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, \ SHADOW(3, 10, SHADOW_SIZE_XL_BATTLE_ONLY) \ FOOTPRINT(Furfrou) \ OVERWORLD( \ @@ -2395,6 +2424,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Espurr, .iconSprite = gMonIcon_Espurr, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-1, 4, SHADOW_SIZE_S) FOOTPRINT(Espurr) OVERWORLD( @@ -2460,6 +2490,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_MeowsticM, .iconSprite = gMonIcon_MeowsticM, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-2, 11, SHADOW_SIZE_S) FOOTPRINT(Meowstic) OVERWORLD( @@ -2523,6 +2554,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_MeowsticF, .iconSprite = gMonIcon_MeowsticF, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-2, 12, SHADOW_SIZE_S) FOOTPRINT(Meowstic) OVERWORLD( @@ -2593,6 +2625,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Honedge, .iconSprite = gMonIcon_Honedge, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-10, 11, SHADOW_SIZE_S) FOOTPRINT(Honedge) OVERWORLD( @@ -2664,6 +2697,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Doublade, .iconSprite = gMonIcon_Doublade, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(8, 11, SHADOW_SIZE_M) FOOTPRINT(Doublade) OVERWORLD( @@ -2737,6 +2771,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_AegislashShield, .iconSprite = gMonIcon_AegislashShield, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 14, SHADOW_SIZE_M) FOOTPRINT(Aegislash) OVERWORLD( @@ -2814,6 +2849,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_AegislashBlade, .iconSprite = gMonIcon_AegislashBlade, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 14, SHADOW_SIZE_M) FOOTPRINT(Aegislash) .levelUpLearnset = sAegislashLevelUpLearnset, @@ -2879,6 +2915,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Spritzee, .iconSprite = gMonIcon_Spritzee, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Spritzee) OVERWORLD( @@ -2947,6 +2984,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Aromatisse, .iconSprite = gMonIcon_Aromatisse, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 10, SHADOW_SIZE_M) FOOTPRINT(Aromatisse) OVERWORLD( @@ -3019,6 +3057,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Swirlix, .iconSprite = gMonIcon_Swirlix, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, -1, SHADOW_SIZE_S) FOOTPRINT(Swirlix) OVERWORLD( @@ -3090,6 +3129,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Slurpuff, .iconSprite = gMonIcon_Slurpuff, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 6, SHADOW_SIZE_M) FOOTPRINT(Slurpuff) OVERWORLD( @@ -3160,6 +3200,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Inkay, .iconSprite = gMonIcon_Inkay, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 11, SHADOW_SIZE_S) FOOTPRINT(Inkay) OVERWORLD( @@ -3229,6 +3270,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Malamar, .iconSprite = gMonIcon_Malamar, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(5, 14, SHADOW_SIZE_M) FOOTPRINT(Malamar) OVERWORLD( @@ -3300,6 +3342,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Binacle, .iconSprite = gMonIcon_Binacle, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Binacle) OVERWORLD( @@ -3368,6 +3411,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Barbaracle, .iconSprite = gMonIcon_Barbaracle, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 14, SHADOW_SIZE_L) FOOTPRINT(Barbaracle) OVERWORLD( @@ -3441,6 +3485,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Skrelp, .iconSprite = gMonIcon_Skrelp, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 5, SHADOW_SIZE_S) FOOTPRINT(Skrelp) OVERWORLD( @@ -3510,6 +3555,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Dragalge, .iconSprite = gMonIcon_Dragalge, .iconPalIndex = 5, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 14, SHADOW_SIZE_M) FOOTPRINT(Dragalge) OVERWORLD( @@ -3581,6 +3627,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Clauncher, .iconSprite = gMonIcon_Clauncher, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(4, -6, SHADOW_SIZE_M) FOOTPRINT(Clauncher) OVERWORLD( @@ -3655,6 +3702,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Clawitzer, .iconSprite = gMonIcon_Clawitzer, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(6, 1, SHADOW_SIZE_L) FOOTPRINT(Clawitzer) OVERWORLD( @@ -3723,6 +3771,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Helioptile, .iconSprite = gMonIcon_Helioptile, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Helioptile) OVERWORLD( @@ -3792,6 +3841,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Heliolisk, .iconSprite = gMonIcon_Heliolisk, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 10, SHADOW_SIZE_M) FOOTPRINT(Heliolisk) OVERWORLD( @@ -3861,6 +3911,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Tyrunt, .iconSprite = gMonIcon_Tyrunt, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 2, SHADOW_SIZE_M) FOOTPRINT(Tyrunt) OVERWORLD( @@ -3928,6 +3979,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Tyrantrum, .iconSprite = gMonIcon_Tyrantrum, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 14, SHADOW_SIZE_L) FOOTPRINT(Tyrantrum) OVERWORLD( @@ -4003,6 +4055,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Amaura, .iconSprite = gMonIcon_Amaura, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 8, SHADOW_SIZE_S) FOOTPRINT(Amaura) OVERWORLD( @@ -4070,6 +4123,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Aurorus, .iconSprite = gMonIcon_Aurorus, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-6, 14, SHADOW_SIZE_L) FOOTPRINT(Aurorus) OVERWORLD( @@ -4143,6 +4197,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Hawlucha, .iconSprite = gMonIcon_Hawlucha, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 6, SHADOW_SIZE_S) FOOTPRINT(Hawlucha) OVERWORLD( @@ -4212,6 +4267,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Dedenne, .iconSprite = gMonIcon_Dedenne, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-2, 1, SHADOW_SIZE_S) FOOTPRINT(Dedenne) OVERWORLD( @@ -4289,6 +4345,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Carbink, .iconSprite = gMonIcon_Carbink, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Carbink) OVERWORLD( @@ -4358,6 +4415,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Goomy, .iconSprite = gMonIcon_Goomy, .iconPalIndex = 5, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-1, -1, SHADOW_SIZE_S) FOOTPRINT(Goomy) OVERWORLD( @@ -4428,6 +4486,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Sliggoo, .iconSprite = gMonIcon_Sliggoo, .iconPalIndex = 5, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 6, SHADOW_SIZE_S) FOOTPRINT(Sliggoo) OVERWORLD( @@ -4499,6 +4558,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Goodra, .iconSprite = gMonIcon_Goodra, .iconPalIndex = 5, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Goodra) OVERWORLD( @@ -4564,6 +4624,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_SliggooHisui, .iconSprite = gMonIcon_SliggooHisui, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(2, 6, SHADOW_SIZE_M) FOOTPRINT(Sliggoo) OVERWORLD( @@ -4630,6 +4691,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_GoodraHisui, .iconSprite = gMonIcon_GoodraHisui, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 12, SHADOW_SIZE_M) FOOTPRINT(Goodra) OVERWORLD( @@ -4709,6 +4771,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Klefki, .iconSprite = gMonIcon_Klefki, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Klefki) OVERWORLD( @@ -4779,6 +4842,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Phantump, .iconSprite = gMonIcon_Phantump, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Phantump) OVERWORLD( @@ -4851,6 +4915,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Trevenant, .iconSprite = gMonIcon_Trevenant, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 13, SHADOW_SIZE_M) FOOTPRINT(Trevenant) OVERWORLD( @@ -4915,6 +4980,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Pumpkaboo, .iconSprite = gMonIcon_Pumpkaboo, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Pumpkaboo) OVERWORLD( @@ -4980,6 +5046,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Pumpkaboo, .iconSprite = gMonIcon_Pumpkaboo, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, -1, SHADOW_SIZE_S) FOOTPRINT(Pumpkaboo) OVERWORLD( @@ -5045,6 +5112,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Pumpkaboo, .iconSprite = gMonIcon_Pumpkaboo, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Pumpkaboo) OVERWORLD( @@ -5112,6 +5180,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Pumpkaboo, .iconSprite = gMonIcon_Pumpkaboo, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 4, SHADOW_SIZE_S) FOOTPRINT(Pumpkaboo) OVERWORLD( @@ -5178,6 +5247,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Gourgeist, .iconSprite = gMonIcon_Gourgeist, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 10, SHADOW_SIZE_M) FOOTPRINT(Gourgeist) OVERWORLD( @@ -5241,6 +5311,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Gourgeist, .iconSprite = gMonIcon_Gourgeist, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 9, SHADOW_SIZE_S) FOOTPRINT(Gourgeist) OVERWORLD( @@ -5304,6 +5375,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Gourgeist, .iconSprite = gMonIcon_Gourgeist, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 12, SHADOW_SIZE_M) FOOTPRINT(Gourgeist) OVERWORLD( @@ -5369,6 +5441,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Gourgeist, .iconSprite = gMonIcon_Gourgeist, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 14, SHADOW_SIZE_M) FOOTPRINT(Gourgeist) OVERWORLD( @@ -5446,6 +5519,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Bergmite, .iconSprite = gMonIcon_Bergmite, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, -1, SHADOW_SIZE_S) FOOTPRINT(Bergmite) OVERWORLD( @@ -5516,6 +5590,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Avalugg, .iconSprite = gMonIcon_Avalugg, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, -1, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Avalugg) OVERWORLD( @@ -5579,6 +5654,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_AvaluggHisui, .iconSprite = gMonIcon_AvaluggHisui, .iconPalIndex = 5, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, -2, SHADOW_SIZE_L) FOOTPRINT(Avalugg) OVERWORLD( @@ -5660,6 +5736,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Noibat, .iconSprite = gMonIcon_Noibat, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 11, SHADOW_SIZE_L) FOOTPRINT(Noibat) OVERWORLD( @@ -5731,6 +5808,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Noivern, .iconSprite = gMonIcon_Noivern, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(5, 10, SHADOW_SIZE_L) FOOTPRINT(Noivern) OVERWORLD( @@ -5791,6 +5869,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_XerneasNeutral, .iconSprite = gMonIcon_XerneasNeutral, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 14, SHADOW_SIZE_M) FOOTPRINT(Xerneas) OVERWORLD( @@ -5854,6 +5933,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_XerneasActive, .iconSprite = gMonIcon_XerneasActive, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 14, SHADOW_SIZE_M) FOOTPRINT(Xerneas) OVERWORLD( @@ -5929,6 +6009,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Yveltal, .iconSprite = gMonIcon_Yveltal, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 16, SHADOW_SIZE_L) FOOTPRINT(Yveltal) OVERWORLD( @@ -5993,6 +6074,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Zygarde50, .iconSprite = gMonIcon_Zygarde50, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(Zygarde) OVERWORLD( @@ -6056,6 +6138,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Zygarde50, .iconSprite = gMonIcon_Zygarde50, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(Zygarde) OVERWORLD( @@ -6119,6 +6202,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Zygarde10, .iconSprite = gMonIcon_Zygarde10, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Zygarde) OVERWORLD( @@ -6183,6 +6267,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Zygarde10, .iconSprite = gMonIcon_Zygarde10, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Zygarde) OVERWORLD( @@ -6255,6 +6340,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_ZygardeComplete, .iconSprite = gMonIcon_ZygardeComplete, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Zygarde) OVERWORLD( @@ -6329,6 +6415,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Diancie, .iconSprite = gMonIcon_Diancie, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Diancie) OVERWORLD( @@ -6398,6 +6485,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_DiancieMega, .iconSprite = gMonIcon_DiancieMega, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 12, SHADOW_SIZE_M) FOOTPRINT(Diancie) #if OW_BATTLE_ONLY_FORMS @@ -6482,6 +6570,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_HoopaConfined, .iconSprite = gMonIcon_HoopaConfined, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Hoopa) OVERWORLD( @@ -6553,6 +6642,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_HoopaUnbound, .iconSprite = gMonIcon_HoopaUnbound, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 14, SHADOW_SIZE_L) FOOTPRINT(Hoopa) OVERWORLD( @@ -6625,6 +6715,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Volcanion, .iconSprite = gMonIcon_Volcanion, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Volcanion) OVERWORLD( diff --git a/src/data/pokemon/species_info/gen_7_families.h b/src/data/pokemon/species_info/gen_7_families.h index fb97530b74..3fcd15848f 100644 --- a/src/data/pokemon/species_info/gen_7_families.h +++ b/src/data/pokemon/species_info/gen_7_families.h @@ -54,6 +54,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Rowlet, .iconSprite = gMonIcon_Rowlet, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Rowlet) OVERWORLD( @@ -122,6 +123,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Dartrix, .iconSprite = gMonIcon_Dartrix, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Dartrix) OVERWORLD( @@ -189,6 +191,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Decidueye, .iconSprite = gMonIcon_Decidueye, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Decidueye) OVERWORLD( @@ -253,6 +256,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_DecidueyeHisui, .iconSprite = gMonIcon_DecidueyeHisui, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 14, SHADOW_SIZE_L) FOOTPRINT(Decidueye) OVERWORLD( @@ -320,6 +324,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Litten, .iconSprite = gMonIcon_Litten, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(1, 1, SHADOW_SIZE_S) FOOTPRINT(Litten) OVERWORLD( @@ -384,6 +389,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Torracat, .iconSprite = gMonIcon_Torracat, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(5, 7, SHADOW_SIZE_M) FOOTPRINT(Torracat) OVERWORLD( @@ -447,6 +453,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Incineroar, .iconSprite = gMonIcon_Incineroar, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 14, SHADOW_SIZE_L) FOOTPRINT(Incineroar) OVERWORLD( @@ -511,6 +518,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Popplio, .iconSprite = gMonIcon_Popplio, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Popplio) OVERWORLD( @@ -575,6 +583,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Brionne, .iconSprite = gMonIcon_Brionne, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-5, 6, SHADOW_SIZE_M) FOOTPRINT(Brionne) OVERWORLD( @@ -638,6 +647,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Primarina, .iconSprite = gMonIcon_Primarina, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-6, 11, SHADOW_SIZE_L) FOOTPRINT(Primarina) OVERWORLD( @@ -707,6 +717,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Pikipek, .iconSprite = gMonIcon_Pikipek, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 3, SHADOW_SIZE_S) FOOTPRINT(Pikipek) OVERWORLD( @@ -777,6 +788,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Trumbeak, .iconSprite = gMonIcon_Trumbeak, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 8, SHADOW_SIZE_S) FOOTPRINT(Trumbeak) OVERWORLD( @@ -844,6 +856,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Toucannon, .iconSprite = gMonIcon_Toucannon, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(9, 12, SHADOW_SIZE_M) FOOTPRINT(Toucannon) OVERWORLD( @@ -909,6 +922,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Yungoos, .iconSprite = gMonIcon_Yungoos, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-9, 1, SHADOW_SIZE_M) FOOTPRINT(Yungoos) OVERWORLD( @@ -970,6 +984,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Gumshoos, .iconSprite = gMonIcon_Gumshoos, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-2, 8, SHADOW_SIZE_M) FOOTPRINT(Gumshoos) OVERWORLD( @@ -1030,6 +1045,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Gumshoos, .iconSprite = gMonIcon_Gumshoos, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 8, SHADOW_SIZE_M) FOOTPRINT(Gumshoos) OVERWORLD( @@ -1097,6 +1113,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Grubbin, .iconSprite = gMonIcon_Grubbin, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(0, -4, SHADOW_SIZE_M) FOOTPRINT(Grubbin) OVERWORLD( @@ -1166,6 +1183,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Charjabug, .iconSprite = gMonIcon_Charjabug, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, NO_SHADOW FOOTPRINT(Charjabug) OVERWORLD( @@ -1228,6 +1246,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Vikavolt, .iconSprite = gMonIcon_Vikavolt, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 16, SHADOW_SIZE_S) FOOTPRINT(Vikavolt) OVERWORLD( @@ -1296,6 +1315,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Vikavolt, .iconSprite = gMonIcon_Vikavolt, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 16, SHADOW_SIZE_S) FOOTPRINT(Vikavolt) OVERWORLD( @@ -1364,6 +1384,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Crabrawler, .iconSprite = gMonIcon_Crabrawler, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(7, 6, SHADOW_SIZE_M) FOOTPRINT(Crabrawler) OVERWORLD( @@ -1430,6 +1451,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Crabominable, .iconSprite = gMonIcon_Crabominable, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 14, SHADOW_SIZE_L) FOOTPRINT(Crabominable) OVERWORLD( @@ -1495,6 +1517,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_OricorioBaile, .iconSprite = gMonIcon_OricorioBaile, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-4, 9, SHADOW_SIZE_S) FOOTPRINT(Oricorio) OVERWORLD( @@ -1561,6 +1584,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_OricorioPomPom, .iconSprite = gMonIcon_OricorioPomPom, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(5, 8, SHADOW_SIZE_S) FOOTPRINT(Oricorio) OVERWORLD( @@ -1627,6 +1651,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_OricorioPau, .iconSprite = gMonIcon_OricorioPau, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 11, SHADOW_SIZE_S) FOOTPRINT(Oricorio) OVERWORLD( @@ -1693,6 +1718,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_OricorioSensu, .iconSprite = gMonIcon_OricorioSensu, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(7, 10, SHADOW_SIZE_S) FOOTPRINT(Oricorio) OVERWORLD( @@ -1795,6 +1821,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Cutiefly, .iconSprite = gMonIcon_Cutiefly, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Cutiefly) OVERWORLD( @@ -1858,6 +1885,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Ribombee, .iconSprite = gMonIcon_Ribombee, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Ribombee) OVERWORLD( @@ -1919,6 +1947,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Ribombee, .iconSprite = gMonIcon_Ribombee, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Ribombee) OVERWORLD( @@ -1982,6 +2011,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Rockruff, .iconSprite = gMonIcon_Rockruff, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Rockruff) OVERWORLD( @@ -2044,6 +2074,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Rockruff, .iconSprite = gMonIcon_Rockruff, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Rockruff) OVERWORLD( @@ -2112,6 +2143,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_LycanrocMidday, .iconSprite = gMonIcon_LycanrocMidday, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(5, 7, SHADOW_SIZE_L) FOOTPRINT(Lycanroc) OVERWORLD( @@ -2178,6 +2210,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_LycanrocMidnight, .iconSprite = gMonIcon_LycanrocMidnight, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(5, 13, SHADOW_SIZE_L) FOOTPRINT(Lycanroc) OVERWORLD( @@ -2244,6 +2277,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_LycanrocDusk, .iconSprite = gMonIcon_LycanrocDusk, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(5, 7, SHADOW_SIZE_L) FOOTPRINT(Lycanroc) OVERWORLD( @@ -2310,6 +2344,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_WishiwashiSolo, .iconSprite = gMonIcon_WishiwashiSolo, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 3, SHADOW_SIZE_S) FOOTPRINT(Wishiwashi) OVERWORLD( @@ -2375,6 +2410,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_WishiwashiSchool, .iconSprite = gMonIcon_WishiwashiSchool, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-4, 7, SHADOW_SIZE_L) FOOTPRINT(Wishiwashi) .levelUpLearnset = sWishiwashiLevelUpLearnset, @@ -2434,6 +2470,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Mareanie, .iconSprite = gMonIcon_Mareanie, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(0, -1, SHADOW_SIZE_M) FOOTPRINT(Mareanie) OVERWORLD( @@ -2499,6 +2536,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Toxapex, .iconSprite = gMonIcon_Toxapex, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Toxapex) OVERWORLD( @@ -2564,6 +2602,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Mudbray, .iconSprite = gMonIcon_Mudbray, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 6, SHADOW_SIZE_M) FOOTPRINT(Mudbray) OVERWORLD( @@ -2629,6 +2668,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Mudsdale, .iconSprite = gMonIcon_Mudsdale, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 13, SHADOW_SIZE_L) FOOTPRINT(Mudsdale) OVERWORLD( @@ -2701,6 +2741,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Dewpider, .iconSprite = gMonIcon_Dewpider, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Dewpider) OVERWORLD( @@ -2763,6 +2804,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Araquanid, .iconSprite = gMonIcon_Araquanid, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-6, 9, SHADOW_SIZE_M) FOOTPRINT(Araquanid) OVERWORLD( @@ -2823,6 +2865,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Araquanid, .iconSprite = gMonIcon_Araquanid, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-6, 9, SHADOW_SIZE_S) FOOTPRINT(Araquanid) OVERWORLD( @@ -2891,6 +2934,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Fomantis, .iconSprite = gMonIcon_Fomantis, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(0, 3, SHADOW_SIZE_S) FOOTPRINT(Fomantis) OVERWORLD( @@ -2953,6 +2997,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Lurantis, .iconSprite = gMonIcon_Lurantis, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Lurantis) OVERWORLD( @@ -3013,6 +3058,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Lurantis, .iconSprite = gMonIcon_Lurantis, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Lurantis) OVERWORLD( @@ -3082,6 +3128,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Morelull, .iconSprite = gMonIcon_Morelull, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-1, 4, SHADOW_SIZE_S) FOOTPRINT(Morelull) OVERWORLD( @@ -3148,6 +3195,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Shiinotic, .iconSprite = gMonIcon_Shiinotic, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 10, SHADOW_SIZE_S) FOOTPRINT(Shiinotic) OVERWORLD( @@ -3217,6 +3265,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Salandit, .iconSprite = gMonIcon_Salandit, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(3, 1, SHADOW_SIZE_M) FOOTPRINT(Salandit) OVERWORLD( @@ -3279,6 +3328,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Salazzle, .iconSprite = gMonIcon_Salazzle, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-4, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Salazzle) OVERWORLD( @@ -3339,6 +3389,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Salazzle, .iconSprite = gMonIcon_Salazzle, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-4, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Salazzle) OVERWORLD( @@ -3410,6 +3461,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Stufful, .iconSprite = gMonIcon_Stufful, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(0, 3, SHADOW_SIZE_M) FOOTPRINT(Stufful) OVERWORLD( @@ -3478,6 +3530,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Bewear, .iconSprite = gMonIcon_Bewear, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 13, SHADOW_SIZE_M) FOOTPRINT(Bewear) OVERWORLD( @@ -3543,6 +3596,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Bounsweet, .iconSprite = gMonIcon_Bounsweet, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-2, -3, SHADOW_SIZE_S) FOOTPRINT(Bounsweet) OVERWORLD( @@ -3609,6 +3663,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Steenee, .iconSprite = gMonIcon_Steenee, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-2, 7, SHADOW_SIZE_S) FOOTPRINT(Steenee) OVERWORLD( @@ -3674,6 +3729,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Tsareena, .iconSprite = gMonIcon_Tsareena, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 13, SHADOW_SIZE_M) FOOTPRINT(Tsareena) OVERWORLD( @@ -3741,6 +3797,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Comfey, .iconSprite = gMonIcon_Comfey, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 10, SHADOW_SIZE_M) FOOTPRINT(Comfey) OVERWORLD( @@ -3809,6 +3866,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Oranguru, .iconSprite = gMonIcon_Oranguru, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 6, SHADOW_SIZE_M) FOOTPRINT(Oranguru) OVERWORLD( @@ -3877,6 +3935,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Passimian, .iconSprite = gMonIcon_Passimian, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-4, 12, SHADOW_SIZE_L) FOOTPRINT(Passimian) OVERWORLD( @@ -3946,6 +4005,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Wimpod, .iconSprite = gMonIcon_Wimpod, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-4, -3, SHADOW_SIZE_S) FOOTPRINT(Wimpod) OVERWORLD( @@ -4014,6 +4074,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Golisopod, .iconSprite = gMonIcon_Golisopod, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 13, SHADOW_SIZE_L) FOOTPRINT(Golisopod) OVERWORLD( @@ -4079,6 +4140,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Sandygast, .iconSprite = gMonIcon_Sandygast, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, NO_SHADOW FOOTPRINT(Sandygast) OVERWORLD( @@ -4144,6 +4206,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Palossand, .iconSprite = gMonIcon_Palossand, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, NO_SHADOW FOOTPRINT(Palossand) OVERWORLD( @@ -4212,6 +4275,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Pyukumuku, .iconSprite = gMonIcon_Pyukumuku, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-3, -3, SHADOW_SIZE_S) FOOTPRINT(Pyukumuku) OVERWORLD( @@ -4277,6 +4341,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_TypeNull, .iconSprite = gMonIcon_TypeNull, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Type_Null) OVERWORLD( @@ -4340,6 +4405,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Silvally##_palette, \ .iconSprite = gMonIcon_Silvally, \ .iconPalIndex = 0, \ + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, \ SHADOW(1, 13, SHADOW_SIZE_L) \ FOOTPRINT(Silvally) \ OVERWORLD( \ @@ -4433,6 +4499,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_MiniorMeteor, \ .iconSprite = gMonIcon_MiniorMeteor, \ .iconPalIndex = 0, \ + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, \ SHADOW(0, 14, SHADOW_SIZE_S) \ OVERWORLD( \ sPicTable_MiniorMeteor, \ @@ -4471,6 +4538,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_MiniorCore, \ .iconSprite = gMonIcon_MiniorCore##Form, \ .iconPalIndex = iconPal, \ + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, \ SHADOW(-2, 12, SHADOW_SIZE_S) \ .formChangeTable = sMinior ##Form##FormChangeTable, \ MINIOR_MISC_INFO(color), \ @@ -4540,6 +4608,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Komala, .iconSprite = gMonIcon_Komala, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-4, 0, SHADOW_SIZE_S) FOOTPRINT(Komala) OVERWORLD( @@ -4610,6 +4679,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Turtonator, .iconSprite = gMonIcon_Turtonator, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 12, SHADOW_SIZE_L) FOOTPRINT(Turtonator) OVERWORLD( @@ -4672,6 +4742,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Togedemaru, .iconSprite = gMonIcon_Togedemaru, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-1, 4, SHADOW_SIZE_S) FOOTPRINT(Togedemaru) OVERWORLD( @@ -4733,6 +4804,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Togedemaru, .iconSprite = gMonIcon_Togedemaru, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-1, 4, SHADOW_SIZE_S) FOOTPRINT(Togedemaru) OVERWORLD( @@ -4798,6 +4870,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_MimikyuDisguised, .iconSprite = gMonIcon_MimikyuDisguised, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Mimikyu) OVERWORLD( @@ -4860,6 +4933,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_MimikyuBusted, .iconSprite = gMonIcon_MimikyuBusted, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Mimikyu) .levelUpLearnset = sMimikyuLevelUpLearnset, @@ -4913,6 +4987,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_MimikyuDisguised, .iconSprite = gMonIcon_MimikyuDisguised, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Mimikyu) OVERWORLD( @@ -4977,6 +5052,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_MimikyuBusted, .iconSprite = gMonIcon_MimikyuBusted, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Mimikyu) .isTotem = TRUE, @@ -5038,6 +5114,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Bruxish, .iconSprite = gMonIcon_Bruxish, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, -1, SHADOW_SIZE_M) FOOTPRINT(Bruxish) OVERWORLD( @@ -5107,6 +5184,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Drampa, .iconSprite = gMonIcon_Drampa, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(5, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Drampa) OVERWORLD( @@ -5174,6 +5252,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Dhelmise, .iconSprite = gMonIcon_Dhelmise, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 12, SHADOW_SIZE_M) FOOTPRINT(Dhelmise) OVERWORLD( @@ -5242,6 +5321,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_JangmoO, .iconSprite = gMonIcon_JangmoO, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(JangmoO) OVERWORLD( @@ -5310,6 +5390,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_HakamoO, .iconSprite = gMonIcon_HakamoO, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 12, SHADOW_SIZE_M) FOOTPRINT(HakamoO) OVERWORLD( @@ -5371,6 +5452,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_KommoO, .iconSprite = gMonIcon_KommoO, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(KommoO) OVERWORLD( @@ -5437,6 +5519,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_KommoO, .iconSprite = gMonIcon_KommoO, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(KommoO) OVERWORLD( @@ -5513,6 +5596,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_TapuKoko, .iconSprite = gMonIcon_TapuKoko, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 19, SHADOW_SIZE_M) FOOTPRINT(TapuKoko) OVERWORLD( @@ -5584,6 +5668,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_TapuLele, .iconSprite = gMonIcon_TapuLele, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(TapuLele) OVERWORLD( @@ -5657,6 +5742,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_TapuBulu, .iconSprite = gMonIcon_TapuBulu, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 16, SHADOW_SIZE_M) FOOTPRINT(TapuBulu) OVERWORLD( @@ -5729,6 +5815,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_TapuFini, .iconSprite = gMonIcon_TapuFini, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 15, SHADOW_SIZE_M) FOOTPRINT(TapuFini) OVERWORLD( @@ -5796,6 +5883,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Cosmog, .iconSprite = gMonIcon_Cosmog, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 8, SHADOW_SIZE_S) FOOTPRINT(Cosmog) OVERWORLD( @@ -5865,6 +5953,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Cosmoem, .iconSprite = gMonIcon_Cosmoem, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 5, SHADOW_SIZE_M) FOOTPRINT(Cosmoem) OVERWORLD( @@ -5933,6 +6022,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Solgaleo, .iconSprite = gMonIcon_Solgaleo, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Solgaleo) OVERWORLD( @@ -5999,6 +6089,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Lunala, .iconSprite = gMonIcon_Lunala, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 17, SHADOW_SIZE_L) FOOTPRINT(Lunala) OVERWORLD( @@ -6067,6 +6158,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Nihilego, .iconSprite = gMonIcon_Nihilego, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 14, SHADOW_SIZE_S) FOOTPRINT(Nihilego) OVERWORLD( @@ -6134,6 +6226,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Buzzwole, .iconSprite = gMonIcon_Buzzwole, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Buzzwole) OVERWORLD( @@ -6200,6 +6293,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Pheromosa, .iconSprite = gMonIcon_Pheromosa, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Pheromosa) OVERWORLD( @@ -6266,6 +6360,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Xurkitree, .iconSprite = gMonIcon_Xurkitree, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(Xurkitree) OVERWORLD( @@ -6334,6 +6429,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Celesteela, .iconSprite = gMonIcon_Celesteela, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 13, SHADOW_SIZE_M) FOOTPRINT(Celesteela) OVERWORLD( @@ -6401,6 +6497,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Kartana, .iconSprite = gMonIcon_Kartana, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 14, SHADOW_SIZE_M) FOOTPRINT(Kartana) OVERWORLD( @@ -6467,6 +6564,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Guzzlord, .iconSprite = gMonIcon_Guzzlord, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Guzzlord) OVERWORLD( @@ -6536,6 +6634,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Necrozma, .iconSprite = gMonIcon_Necrozma, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 15, SHADOW_SIZE_M) FOOTPRINT(Necrozma) OVERWORLD( @@ -6604,6 +6703,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_NecrozmaDuskMane, .iconSprite = gMonIcon_NecrozmaDuskMane, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Necrozma) OVERWORLD( @@ -6674,6 +6774,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_NecrozmaDawnWings, .iconSprite = gMonIcon_NecrozmaDawnWings, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 17, SHADOW_SIZE_L) FOOTPRINT(Necrozma) OVERWORLD( @@ -6747,6 +6848,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_NecrozmaUltra, .iconSprite = gMonIcon_NecrozmaUltra, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 16, SHADOW_SIZE_L) FOOTPRINT(Necrozma) #if OW_BATTLE_ONLY_FORMS @@ -6821,6 +6923,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Magearna, .iconSprite = gMonIcon_Magearna, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Magearna) OVERWORLD( @@ -6886,6 +6989,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_MagearnaOriginal, .iconSprite = gMonIcon_MagearnaOriginal, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Magearna) OVERWORLD( @@ -6960,6 +7064,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Marshadow, .iconSprite = gMonIcon_Marshadow, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Marshadow) OVERWORLD( @@ -7027,6 +7132,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Poipole, .iconSprite = gMonIcon_Poipole, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Poipole) OVERWORLD( @@ -7092,6 +7198,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Naganadel, .iconSprite = gMonIcon_Naganadel, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(7, 17, SHADOW_SIZE_M) FOOTPRINT(Naganadel) OVERWORLD( @@ -7158,6 +7265,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Stakataka, .iconSprite = gMonIcon_Stakataka, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 15, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Stakataka) OVERWORLD( @@ -7224,6 +7332,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Blacephalon, .iconSprite = gMonIcon_Blacephalon, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 13, SHADOW_SIZE_M) FOOTPRINT(Blacephalon) OVERWORLD( @@ -7289,6 +7398,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Zeraora, .iconSprite = gMonIcon_Zeraora, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Zeraora) OVERWORLD( @@ -7355,6 +7465,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Meltan, .iconSprite = gMonIcon_Meltan, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-1, 2, SHADOW_SIZE_S) FOOTPRINT(Meltan) OVERWORLD( @@ -7419,6 +7530,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Melmetal, .iconSprite = gMonIcon_Melmetal, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 10, SHADOW_SIZE_L) FOOTPRINT(Melmetal) OVERWORLD( @@ -7487,6 +7599,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_MelmetalGmax, .iconSprite = gMonIcon_MelmetalGmax, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Melmetal) .isMythical = TRUE, diff --git a/src/data/pokemon/species_info/gen_8_families.h b/src/data/pokemon/species_info/gen_8_families.h index ee3a17dfe9..f803864cfc 100644 --- a/src/data/pokemon/species_info/gen_8_families.h +++ b/src/data/pokemon/species_info/gen_8_families.h @@ -51,6 +51,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Grookey, .iconSprite = gMonIcon_Grookey, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(1, 1, SHADOW_SIZE_S) FOOTPRINT(Grookey) OVERWORLD( @@ -114,6 +115,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Thwackey, .iconSprite = gMonIcon_Thwackey, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(5, 6, SHADOW_SIZE_M) FOOTPRINT(Thwackey) OVERWORLD( @@ -176,6 +178,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Rillaboom, .iconSprite = gMonIcon_Rillaboom, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 8, SHADOW_SIZE_L) FOOTPRINT(Rillaboom) OVERWORLD( @@ -240,6 +243,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_RillaboomGmax, .iconSprite = gMonIcon_RillaboomGmax, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Rillaboom) .isGigantamax = TRUE, @@ -299,6 +303,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Scorbunny, .iconSprite = gMonIcon_Scorbunny, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-1, 6, SHADOW_SIZE_S) FOOTPRINT(Scorbunny) OVERWORLD( @@ -362,6 +367,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Raboot, .iconSprite = gMonIcon_Raboot, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-4, 5, SHADOW_SIZE_S) FOOTPRINT(Raboot) OVERWORLD( @@ -425,6 +431,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Cinderace, .iconSprite = gMonIcon_Cinderace, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 14, SHADOW_SIZE_M) FOOTPRINT(Cinderace) OVERWORLD( @@ -490,6 +497,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_CinderaceGmax, .iconSprite = gMonIcon_CinderaceGmax, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Cinderace) .isGigantamax = TRUE, @@ -550,6 +558,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Sobble, .iconSprite = gMonIcon_Sobble, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-3, 3, SHADOW_SIZE_S) FOOTPRINT(Sobble) OVERWORLD( @@ -613,6 +622,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Drizzile, .iconSprite = gMonIcon_Drizzile, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(2, 5, SHADOW_SIZE_M) FOOTPRINT(Drizzile) OVERWORLD( @@ -676,6 +686,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Inteleon, .iconSprite = gMonIcon_Inteleon, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-5, 12, SHADOW_SIZE_S) FOOTPRINT(Inteleon) OVERWORLD( @@ -741,6 +752,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_InteleonGmax, .iconSprite = gMonIcon_InteleonGmax, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-5, 12, SHADOW_SIZE_L) FOOTPRINT(Inteleon) .isGigantamax = TRUE, @@ -800,6 +812,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Skwovet, .iconSprite = gMonIcon_Skwovet, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-7, 5, SHADOW_SIZE_S) FOOTPRINT(Skwovet) OVERWORLD( @@ -865,6 +878,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Greedent, .iconSprite = gMonIcon_Greedent, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-11, 10, SHADOW_SIZE_M) FOOTPRINT(Greedent) OVERWORLD( @@ -937,6 +951,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Rookidee, .iconSprite = gMonIcon_Rookidee, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, -3, SHADOW_SIZE_S) FOOTPRINT(Rookidee) OVERWORLD( @@ -1010,6 +1025,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Corvisquire, .iconSprite = gMonIcon_Corvisquire, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 16, SHADOW_SIZE_S) FOOTPRINT(Corvisquire) OVERWORLD( @@ -1077,6 +1093,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Corviknight, .iconSprite = gMonIcon_Corviknight, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 9, SHADOW_SIZE_L) FOOTPRINT(Corviknight) OVERWORLD( @@ -1142,6 +1159,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_CorviknightGmax, .iconSprite = gMonIcon_CorviknightGmax, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 8, SHADOW_SIZE_L) FOOTPRINT(Corviknight) .isGigantamax = TRUE, @@ -1200,6 +1218,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Blipbug, .iconSprite = gMonIcon_Blipbug, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(2, 1, SHADOW_SIZE_S) FOOTPRINT(Blipbug) OVERWORLD( @@ -1266,6 +1285,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Dottler, .iconSprite = gMonIcon_Dottler, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-1, 0, SHADOW_SIZE_M) FOOTPRINT(Dottler) OVERWORLD( @@ -1331,6 +1351,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Orbeetle, .iconSprite = gMonIcon_Orbeetle, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 15, SHADOW_SIZE_M) FOOTPRINT(Orbeetle) OVERWORLD( @@ -1397,6 +1418,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_OrbeetleGmax, .iconSprite = gMonIcon_OrbeetleGmax, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Orbeetle) .isGigantamax = TRUE, @@ -1456,6 +1478,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Nickit, .iconSprite = gMonIcon_Nickit, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(0, 4, SHADOW_SIZE_M) FOOTPRINT(Nickit) OVERWORLD( @@ -1520,6 +1543,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Thievul, .iconSprite = gMonIcon_Thievul, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-9, 7, SHADOW_SIZE_M) FOOTPRINT(Thievul) OVERWORLD( @@ -1584,6 +1608,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Gossifleur, .iconSprite = gMonIcon_Gossifleur, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Gossifleur) OVERWORLD( @@ -1648,6 +1673,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Eldegoss, .iconSprite = gMonIcon_Eldegoss, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-2, 8, SHADOW_SIZE_S) FOOTPRINT(Eldegoss) OVERWORLD( @@ -1712,6 +1738,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Wooloo, .iconSprite = gMonIcon_Wooloo, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(1, 1, SHADOW_SIZE_S) FOOTPRINT(Wooloo) OVERWORLD( @@ -1776,6 +1803,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Dubwool, .iconSprite = gMonIcon_Dubwool, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 8, SHADOW_SIZE_M) FOOTPRINT(Dubwool) OVERWORLD( @@ -1843,6 +1871,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Chewtle, .iconSprite = gMonIcon_Chewtle, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(3, 1, SHADOW_SIZE_S) FOOTPRINT(Chewtle) OVERWORLD( @@ -1910,6 +1939,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Drednaw, .iconSprite = gMonIcon_Drednaw, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 4, SHADOW_SIZE_L) FOOTPRINT(Drednaw) OVERWORLD( @@ -1975,6 +2005,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_DrednawGmax, .iconSprite = gMonIcon_DrednawGmax, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Drednaw) .isGigantamax = TRUE, @@ -2034,6 +2065,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Yamper, .iconSprite = gMonIcon_Yamper, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-1, 2, SHADOW_SIZE_M) FOOTPRINT(Yamper) OVERWORLD( @@ -2098,6 +2130,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Boltund, .iconSprite = gMonIcon_Boltund, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(Boltund) OVERWORLD( @@ -2162,6 +2195,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Rolycoly, .iconSprite = gMonIcon_Rolycoly, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(0, -3, SHADOW_SIZE_S) FOOTPRINT(Rolycoly) OVERWORLD( @@ -2225,6 +2259,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Carkol, .iconSprite = gMonIcon_Carkol, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 3, SHADOW_SIZE_M) FOOTPRINT(Carkol) OVERWORLD( @@ -2288,6 +2323,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Coalossal, .iconSprite = gMonIcon_Coalossal, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 12, SHADOW_SIZE_L) FOOTPRINT(Coalossal) OVERWORLD( @@ -2353,6 +2389,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_CoalossalGmax, .iconSprite = gMonIcon_CoalossalGmax, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Coalossal) .isGigantamax = TRUE, @@ -2412,6 +2449,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Applin, .iconSprite = gMonIcon_Applin, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-1, -3, SHADOW_SIZE_S) FOOTPRINT(Applin) OVERWORLD( @@ -2479,6 +2517,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Flapple, .iconSprite = gMonIcon_Flapple, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-6, 11, SHADOW_SIZE_S) FOOTPRINT(Flapple) OVERWORLD( @@ -2544,6 +2583,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_FlappleGmax, .iconSprite = gMonIcon_FlappleGmax, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Flapple) .isGigantamax = TRUE, @@ -2600,6 +2640,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Appletun, .iconSprite = gMonIcon_Appletun, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(5, 6, SHADOW_SIZE_L) FOOTPRINT(Appletun) OVERWORLD( @@ -2665,6 +2706,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_AppletunGmax, .iconSprite = gMonIcon_AppletunGmax, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Appletun) .isGigantamax = TRUE, @@ -2722,6 +2764,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Dipplin, .iconSprite = gMonIcon_Dipplin, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-4, 8, SHADOW_SIZE_S) FOOTPRINT(Dipplin) OVERWORLD( @@ -2785,6 +2828,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Hydrapple, .iconSprite = gMonIcon_Hydrapple, .iconPalIndex = 5, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 12, SHADOW_SIZE_L) FOOTPRINT(Hydrapple) OVERWORLD( @@ -2849,6 +2893,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Silicobra, .iconSprite = gMonIcon_Silicobra, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 1, SHADOW_SIZE_M) FOOTPRINT(Silicobra) OVERWORLD( @@ -2913,6 +2958,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Sandaconda, .iconSprite = gMonIcon_Sandaconda, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, -1, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Sandaconda) OVERWORLD( @@ -2978,6 +3024,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_SandacondaGmax, .iconSprite = gMonIcon_SandacondaGmax, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 14, SHADOW_SIZE_M) FOOTPRINT(Sandaconda) .isGigantamax = TRUE, @@ -3036,6 +3083,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Cramorant, .iconSprite = gMonIcon_Cramorant, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(5, 14, SHADOW_SIZE_M) FOOTPRINT(Cramorant) OVERWORLD( @@ -3101,6 +3149,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_CramorantGulping, .iconSprite = gMonIcon_CramorantGulping, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(5, 14, SHADOW_SIZE_M) FOOTPRINT(Cramorant) .levelUpLearnset = sCramorantLevelUpLearnset, @@ -3157,6 +3206,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_CramorantGorging, .iconSprite = gMonIcon_CramorantGorging, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(5, 14, SHADOW_SIZE_M) FOOTPRINT(Cramorant) .levelUpLearnset = sCramorantLevelUpLearnset, @@ -3215,6 +3265,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Arrokuda, .iconSprite = gMonIcon_Arrokuda, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, -5, SHADOW_SIZE_S) FOOTPRINT(Arrokuda) OVERWORLD( @@ -3279,6 +3330,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Barraskewda, .iconSprite = gMonIcon_Barraskewda, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 5, SHADOW_SIZE_M) FOOTPRINT(Barraskewda) OVERWORLD( @@ -3343,6 +3395,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Toxel, .iconSprite = gMonIcon_Toxel, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-2, 1, SHADOW_SIZE_M) FOOTPRINT(Toxel) OVERWORLD( @@ -3408,6 +3461,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_ToxtricityAmped, .iconSprite = gMonIcon_ToxtricityAmped, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-6, 13, SHADOW_SIZE_M) FOOTPRINT(Toxtricity) OVERWORLD( @@ -3469,6 +3523,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_ToxtricityGmax, .iconSprite = gMonIcon_ToxtricityGmax, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Toxtricity) .isGigantamax = TRUE, @@ -3525,6 +3580,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_ToxtricityLowKey, .iconSprite = gMonIcon_ToxtricityLowKey, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 12, SHADOW_SIZE_M) FOOTPRINT(Toxtricity) OVERWORLD( @@ -3586,6 +3642,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_ToxtricityGmax, .iconSprite = gMonIcon_ToxtricityGmax, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Toxtricity) .isGigantamax = TRUE, @@ -3648,6 +3705,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Sizzlipede, .iconSprite = gMonIcon_Sizzlipede, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(6, -4, SHADOW_SIZE_S) FOOTPRINT(Sizzlipede) OVERWORLD( @@ -3716,6 +3774,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Centiskorch, .iconSprite = gMonIcon_Centiskorch, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 7, SHADOW_SIZE_M) FOOTPRINT(Centiskorch) OVERWORLD( @@ -3781,6 +3840,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_CentiskorchGmax, .iconSprite = gMonIcon_CentiskorchGmax, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(6, 9, SHADOW_SIZE_L) FOOTPRINT(Centiskorch) .isGigantamax = TRUE, @@ -3840,6 +3900,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Clobbopus, .iconSprite = gMonIcon_Clobbopus, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(1, -2, SHADOW_SIZE_S) FOOTPRINT(Clobbopus) OVERWORLD( @@ -3903,6 +3964,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Grapploct, .iconSprite = gMonIcon_Grapploct, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 9, SHADOW_SIZE_M) FOOTPRINT(Grapploct) OVERWORLD( @@ -3967,6 +4029,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Sinistea, .iconSprite = gMonIcon_Sinistea, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 3, SHADOW_SIZE_S) FOOTPRINT(Sinistea) OVERWORLD( @@ -4032,6 +4095,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Sinistea, .iconSprite = gMonIcon_Sinistea, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 4, SHADOW_SIZE_S) FOOTPRINT(Sinistea) OVERWORLD( @@ -4096,6 +4160,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Polteageist, .iconSprite = gMonIcon_Polteageist, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 12, SHADOW_SIZE_S) FOOTPRINT(Polteageist) OVERWORLD( @@ -4160,6 +4225,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Polteageist, .iconSprite = gMonIcon_Polteageist, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 11, SHADOW_SIZE_S) FOOTPRINT(Polteageist) OVERWORLD( @@ -4225,6 +4291,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Hatenna, .iconSprite = gMonIcon_Hatenna, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(0, 1, SHADOW_SIZE_M) FOOTPRINT(Hatenna) OVERWORLD( @@ -4288,6 +4355,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Hattrem, .iconSprite = gMonIcon_Hattrem, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(0, 5, SHADOW_SIZE_M) FOOTPRINT(Hattrem) OVERWORLD( @@ -4350,6 +4418,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Hatterene, .iconSprite = gMonIcon_Hatterene, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(6, 13, SHADOW_SIZE_S) FOOTPRINT(Hatterene) OVERWORLD( @@ -4415,6 +4484,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_HattereneGmax, .iconSprite = gMonIcon_HattereneGmax, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 13, SHADOW_SIZE_S) FOOTPRINT(Hatterene) .isGigantamax = TRUE, @@ -4474,6 +4544,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Impidimp, .iconSprite = gMonIcon_Impidimp, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Impidimp) OVERWORLD( @@ -4537,6 +4608,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Morgrem, .iconSprite = gMonIcon_Morgrem, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(Morgrem) OVERWORLD( @@ -4600,6 +4672,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Grimmsnarl, .iconSprite = gMonIcon_Grimmsnarl, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Grimmsnarl) OVERWORLD( @@ -4665,6 +4738,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_GrimmsnarlGmax, .iconSprite = gMonIcon_GrimmsnarlGmax, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 14, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Grimmsnarl) .isGigantamax = TRUE, @@ -4724,6 +4798,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Milcery, .iconSprite = gMonIcon_Milcery, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 6, SHADOW_SIZE_S) FOOTPRINT(Milcery) OVERWORLD( @@ -4795,6 +4870,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Alcremie ##sweet, \ .iconSprite = gMonIcon_AlcremieStrawberryVanillaCream, /*AlcremieStrawberry##cream##*/ \ .iconPalIndex = 1, \ + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, \ SHADOW(0, 5, SHADOW_SIZE_S) \ FOOTPRINT(Alcremie) \ OVERWORLD( \ @@ -4907,6 +4983,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_AlcremieGmax, .iconSprite = gMonIcon_AlcremieGmax, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 10, SHADOW_SIZE_L) FOOTPRINT(Alcremie) .isGigantamax = TRUE, @@ -4965,6 +5042,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Falinks, .iconSprite = gMonIcon_Falinks, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-7, 5, SHADOW_SIZE_S) FOOTPRINT(Falinks) OVERWORLD( @@ -5028,6 +5106,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Pincurchin, .iconSprite = gMonIcon_Pincurchin, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-1, -4, SHADOW_SIZE_S) FOOTPRINT(Pincurchin) OVERWORLD( @@ -5094,6 +5173,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Snom, .iconSprite = gMonIcon_Snom, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-2, -7, SHADOW_SIZE_S) FOOTPRINT(Snom) OVERWORLD( @@ -5159,6 +5239,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Frosmoth, .iconSprite = gMonIcon_Frosmoth, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-7, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Frosmoth) OVERWORLD( @@ -5223,6 +5304,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Stonjourner, .iconSprite = gMonIcon_Stonjourner, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 10, SHADOW_SIZE_L) FOOTPRINT(Stonjourner) OVERWORLD( @@ -5288,6 +5370,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_EiscueIce, .iconSprite = gMonIcon_EiscueIce, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Eiscue) OVERWORLD( @@ -5353,6 +5436,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_EiscueNoice, .iconSprite = gMonIcon_EiscueNoice, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Eiscue) .levelUpLearnset = sEiscueLevelUpLearnset, @@ -5411,6 +5495,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_IndeedeeM, .iconSprite = gMonIcon_IndeedeeM, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 4, SHADOW_SIZE_S) FOOTPRINT(Indeedee) OVERWORLD( @@ -5474,6 +5559,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_IndeedeeF, .iconSprite = gMonIcon_IndeedeeF, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 4, SHADOW_SIZE_S) FOOTPRINT(Indeedee) OVERWORLD( @@ -5540,6 +5626,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_MorpekoFullBelly, .iconSprite = gMonIcon_MorpekoFullBelly, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Morpeko) OVERWORLD( @@ -5605,6 +5692,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_MorpekoHangry, .iconSprite = gMonIcon_MorpekoHangry, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Morpeko) .levelUpLearnset = sMorpekoLevelUpLearnset, @@ -5664,6 +5752,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Cufant, .iconSprite = gMonIcon_Cufant, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(5, 2, SHADOW_SIZE_M) FOOTPRINT(Cufant) OVERWORLD( @@ -5728,6 +5817,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Copperajah, .iconSprite = gMonIcon_Copperajah, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(6, 7, SHADOW_SIZE_L) FOOTPRINT(Copperajah) OVERWORLD( @@ -5794,6 +5884,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_CopperajahGmax, .iconSprite = gMonIcon_CopperajahGmax, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 11, SHADOW_SIZE_L) FOOTPRINT(Copperajah) .isGigantamax = TRUE, @@ -5853,6 +5944,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Dracozolt, .iconSprite = gMonIcon_Dracozolt, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-4, 10, SHADOW_SIZE_L) FOOTPRINT(Dracozolt) OVERWORLD( @@ -5916,6 +6008,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Arctozolt, .iconSprite = gMonIcon_Arctozolt, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 11, SHADOW_SIZE_M) FOOTPRINT(Arctozolt) OVERWORLD( @@ -5980,6 +6073,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Dracovish, .iconSprite = gMonIcon_Dracovish, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(Dracovish) OVERWORLD( @@ -6044,6 +6138,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Arctovish, .iconSprite = gMonIcon_Arctovish, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 11, SHADOW_SIZE_L) FOOTPRINT(Arctovish) OVERWORLD( @@ -6111,6 +6206,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Duraludon, .iconSprite = gMonIcon_Duraludon, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 11, SHADOW_SIZE_L) FOOTPRINT(Duraludon) OVERWORLD( @@ -6178,6 +6274,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_DuraludonGmax, .iconSprite = gMonIcon_DuraludonGmax, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 12, SHADOW_SIZE_L) FOOTPRINT(Duraludon) .isGigantamax = TRUE, @@ -6237,6 +6334,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Archaludon, .iconSprite = gMonIcon_Archaludon, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 14, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Archaludon) OVERWORLD( @@ -6303,6 +6401,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Dreepy, .iconSprite = gMonIcon_Dreepy, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Dreepy) OVERWORLD( @@ -6367,6 +6466,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Drakloak, .iconSprite = gMonIcon_Drakloak, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 9, SHADOW_SIZE_M) FOOTPRINT(Drakloak) OVERWORLD( @@ -6431,6 +6531,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Dragapult, .iconSprite = gMonIcon_Dragapult, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 12, SHADOW_SIZE_M) FOOTPRINT(Dragapult) OVERWORLD( @@ -6494,6 +6595,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_ZacianHero, .iconSprite = gMonIcon_ZacianHero, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 9, SHADOW_SIZE_L) FOOTPRINT(Zacian) OVERWORLD( @@ -6561,6 +6663,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_ZacianCrowned, .iconSprite = gMonIcon_ZacianCrowned, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 12, SHADOW_SIZE_L) FOOTPRINT(Zacian) OVERWORLD( @@ -6630,6 +6733,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_ZamazentaHero, .iconSprite = gMonIcon_ZamazentaHero, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 12, SHADOW_SIZE_L) FOOTPRINT(Zamazenta) OVERWORLD( @@ -6697,6 +6801,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_ZamazentaCrowned, .iconSprite = gMonIcon_ZamazentaCrowned, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 12, SHADOW_SIZE_L) FOOTPRINT(Zamazenta) OVERWORLD( @@ -6767,6 +6872,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Eternatus, .iconSprite = gMonIcon_Eternatus, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 14, SHADOW_SIZE_L) FOOTPRINT(Eternatus) OVERWORLD( @@ -6834,6 +6940,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_EternatusEternamax, .iconSprite = gMonIcon_EternatusEternamax, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 20, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Eternatus) .isLegendary = TRUE, @@ -6892,6 +6999,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Kubfu, .iconSprite = gMonIcon_Kubfu, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-2, 5, SHADOW_SIZE_S) FOOTPRINT(Kubfu) OVERWORLD( @@ -6960,6 +7068,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_UrshifuSingleStrike, .iconSprite = gMonIcon_Urshifu, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 14, SHADOW_SIZE_L) FOOTPRINT(Urshifu) OVERWORLD( @@ -7027,6 +7136,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_UrshifuSingleStrikeGmax, .iconSprite = gMonIcon_UrshifuSingleStrikeGmax, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 13, SHADOW_SIZE_L) FOOTPRINT(Urshifu) .isLegendary = TRUE, @@ -7085,6 +7195,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_UrshifuRapidStrike, .iconSprite = gMonIcon_Urshifu, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 14, SHADOW_SIZE_M) FOOTPRINT(Urshifu) OVERWORLD( @@ -7152,6 +7263,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_UrshifuRapidStrikeGmax, .iconSprite = gMonIcon_UrshifuRapidStrikeGmax, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 13, SHADOW_SIZE_M) FOOTPRINT(Urshifu) .isLegendary = TRUE, @@ -7213,6 +7325,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Zarude, .iconSprite = gMonIcon_Zarude, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(5, 11, SHADOW_SIZE_L) FOOTPRINT(Zarude) OVERWORLD( @@ -7278,6 +7391,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_ZarudeDada, .iconSprite = gMonIcon_ZarudeDada, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(5, 11, SHADOW_SIZE_L) FOOTPRINT(Zarude) .isMythical = TRUE, @@ -7338,6 +7452,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Regieleki, .iconSprite = gMonIcon_Regieleki, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 14, SHADOW_SIZE_S) FOOTPRINT(Regieleki) OVERWORLD( @@ -7405,6 +7520,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Regidrago, .iconSprite = gMonIcon_Regidrago, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 13, SHADOW_SIZE_M) FOOTPRINT(Regidrago) OVERWORLD( @@ -7470,6 +7586,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Glastrier, .iconSprite = gMonIcon_Glastrier, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-5, 11, SHADOW_SIZE_L) FOOTPRINT(Glastrier) OVERWORLD( @@ -7536,6 +7653,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Spectrier, .iconSprite = gMonIcon_Spectrier, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-6, 12, SHADOW_SIZE_L) FOOTPRINT(Spectrier) OVERWORLD( @@ -7602,6 +7720,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Calyrex, .iconSprite = gMonIcon_Calyrex, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Calyrex) OVERWORLD( @@ -7669,6 +7788,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_CalyrexIce, .iconSprite = gMonIcon_CalyrexIce, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-5, 11, SHADOW_SIZE_L) FOOTPRINT(Calyrex) OVERWORLD( @@ -7736,6 +7856,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_CalyrexShadow, .iconSprite = gMonIcon_CalyrexShadow, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-5, 12, SHADOW_SIZE_L) FOOTPRINT(Calyrex) OVERWORLD( @@ -7807,6 +7928,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_EnamorusIncarnate, .iconSprite = gMonIcon_EnamorusIncarnate, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 19, SHADOW_SIZE_M) FOOTPRINT(Enamorus) OVERWORLD( @@ -7873,6 +7995,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_EnamorusTherian, .iconSprite = gMonIcon_EnamorusTherian, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 8, SHADOW_SIZE_L) FOOTPRINT(Enamorus) OVERWORLD( diff --git a/src/data/pokemon/species_info/gen_9_families.h b/src/data/pokemon/species_info/gen_9_families.h index f4f76eec33..9e5046958a 100644 --- a/src/data/pokemon/species_info/gen_9_families.h +++ b/src/data/pokemon/species_info/gen_9_families.h @@ -51,6 +51,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Sprigatito, .iconSprite = gMonIcon_Sprigatito, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-2, 5, SHADOW_SIZE_S) FOOTPRINT(Sprigatito) OVERWORLD( @@ -115,6 +116,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Floragato, .iconSprite = gMonIcon_Floragato, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 11, SHADOW_SIZE_M) FOOTPRINT(Floragato) OVERWORLD( @@ -178,6 +180,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Meowscarada, .iconSprite = gMonIcon_Meowscarada, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 14, SHADOW_SIZE_S) FOOTPRINT(Meowscarada) OVERWORLD( @@ -242,6 +245,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Fuecoco, .iconSprite = gMonIcon_Fuecoco, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-3, 5, SHADOW_SIZE_S) FOOTPRINT(Fuecoco) OVERWORLD( @@ -306,6 +310,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Crocalor, .iconSprite = gMonIcon_Crocalor, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 8, SHADOW_SIZE_M) FOOTPRINT(Crocalor) OVERWORLD( @@ -369,6 +374,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Skeledirge, .iconSprite = gMonIcon_Skeledirge, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(6, 7, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Skeledirge) OVERWORLD( @@ -433,6 +439,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Quaxly, .iconSprite = gMonIcon_Quaxly, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Quaxly) OVERWORLD( @@ -497,6 +504,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Quaxwell, .iconSprite = gMonIcon_Quaxwell, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 10, SHADOW_SIZE_S) FOOTPRINT(Quaxwell) OVERWORLD( @@ -560,6 +568,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Quaquaval, .iconSprite = gMonIcon_Quaquaval, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-7, 13, SHADOW_SIZE_M) FOOTPRINT(Quaquaval) OVERWORLD( @@ -624,6 +633,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Lechonk, .iconSprite = gMonIcon_Lechonk, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Lechonk) OVERWORLD( @@ -688,6 +698,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_OinkologneM, .iconSprite = gMonIcon_OinkologneM, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 6, SHADOW_SIZE_M) FOOTPRINT(Oinkologne) OVERWORLD( @@ -751,6 +762,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_OinkologneF, .iconSprite = gMonIcon_OinkologneF, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 7, SHADOW_SIZE_M) FOOTPRINT(Oinkologne) OVERWORLD( @@ -816,6 +828,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Tarountula, .iconSprite = gMonIcon_Tarountula, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 2, SHADOW_SIZE_M) FOOTPRINT(Tarountula) OVERWORLD( @@ -880,6 +893,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Spidops, .iconSprite = gMonIcon_Spidops, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(6, 8, SHADOW_SIZE_L) FOOTPRINT(Spidops) OVERWORLD( @@ -944,6 +958,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Nymble, .iconSprite = gMonIcon_Nymble, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(1, 3, SHADOW_SIZE_M) FOOTPRINT(Nymble) OVERWORLD( @@ -1008,6 +1023,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Lokix, .iconSprite = gMonIcon_Lokix, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 11, SHADOW_SIZE_M) FOOTPRINT(Lokix) OVERWORLD( @@ -1072,6 +1088,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Pawmi, .iconSprite = gMonIcon_Pawmi, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(1, 4, SHADOW_SIZE_M) FOOTPRINT(Pawmi) OVERWORLD( @@ -1136,6 +1153,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Pawmo, .iconSprite = gMonIcon_Pawmo, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-3, 10, SHADOW_SIZE_S) FOOTPRINT(Pawmo) OVERWORLD( @@ -1199,6 +1217,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Pawmot, .iconSprite = gMonIcon_Pawmot, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 11, SHADOW_SIZE_M) FOOTPRINT(Pawmot) OVERWORLD( @@ -1263,6 +1282,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Tandemaus, .iconSprite = gMonIcon_Tandemaus, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(0, -1, SHADOW_SIZE_M) FOOTPRINT(Tandemaus) OVERWORLD( @@ -1328,6 +1348,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Maushold, .iconSprite = gMonIcon_MausholdThree, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(4, -1, SHADOW_SIZE_L) FOOTPRINT(MausholdThree) OVERWORLD( @@ -1390,6 +1411,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Maushold, .iconSprite = gMonIcon_MausholdFour, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(0, -1, SHADOW_SIZE_L) FOOTPRINT(MausholdFour) OVERWORLD( @@ -1455,6 +1477,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Fidough, .iconSprite = gMonIcon_Fidough, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(4, 0, SHADOW_SIZE_S) FOOTPRINT(Fidough) OVERWORLD( @@ -1519,6 +1542,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Dachsbun, .iconSprite = gMonIcon_Dachsbun, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-1, 7, SHADOW_SIZE_L) FOOTPRINT(Dachsbun) OVERWORLD( @@ -1583,6 +1607,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Smoliv, .iconSprite = gMonIcon_Smoliv, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-1, -2, SHADOW_SIZE_S) FOOTPRINT(Smoliv) OVERWORLD( @@ -1647,6 +1672,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Dolliv, .iconSprite = gMonIcon_Dolliv, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(1, 9, SHADOW_SIZE_M) FOOTPRINT(Dolliv) OVERWORLD( @@ -1710,6 +1736,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Arboliva, .iconSprite = gMonIcon_Arboliva, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 13, SHADOW_SIZE_L) FOOTPRINT(Arboliva) OVERWORLD( @@ -1774,6 +1801,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_SquawkabillyGreen, .iconSprite = gMonIcon_SquawkabillyGreen, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-6, 9, SHADOW_SIZE_M) FOOTPRINT(Squawkabilly) OVERWORLD( @@ -1838,6 +1866,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_SquawkabillyBlue, .iconSprite = gMonIcon_SquawkabillyBlue, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-6, 9, SHADOW_SIZE_M) FOOTPRINT(Squawkabilly) OVERWORLD( @@ -1902,6 +1931,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_SquawkabillyYellow, .iconSprite = gMonIcon_SquawkabillyYellow, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-6, 9, SHADOW_SIZE_M) FOOTPRINT(Squawkabilly) OVERWORLD( @@ -1966,6 +1996,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_SquawkabillyWhite, .iconSprite = gMonIcon_SquawkabillyWhite, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-6, 9, SHADOW_SIZE_M) FOOTPRINT(Squawkabilly) OVERWORLD( @@ -2032,6 +2063,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Nacli, .iconSprite = gMonIcon_Nacli, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Nacli) OVERWORLD( @@ -2096,6 +2128,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Naclstack, .iconSprite = gMonIcon_Naclstack, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(0, 5, SHADOW_SIZE_L) FOOTPRINT(Naclstack) OVERWORLD( @@ -2159,6 +2192,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Garganacl, .iconSprite = gMonIcon_Garganacl, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(Garganacl) OVERWORLD( @@ -2223,6 +2257,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Charcadet, .iconSprite = gMonIcon_Charcadet, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Charcadet) OVERWORLD( @@ -2288,6 +2323,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Armarouge, .iconSprite = gMonIcon_Armarouge, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 14, SHADOW_SIZE_L) FOOTPRINT(Armarouge) OVERWORLD( @@ -2350,6 +2386,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Ceruledge, .iconSprite = gMonIcon_Ceruledge, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(9, 14, SHADOW_SIZE_L) FOOTPRINT(Ceruledge) OVERWORLD( @@ -2415,6 +2452,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Tadbulb, .iconSprite = gMonIcon_Tadbulb, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 19, SHADOW_SIZE_S) FOOTPRINT(Tadbulb) OVERWORLD( @@ -2479,6 +2517,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Bellibolt, .iconSprite = gMonIcon_Bellibolt, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(Bellibolt) OVERWORLD( @@ -2543,6 +2582,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Wattrel, .iconSprite = gMonIcon_Wattrel, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 0, SHADOW_SIZE_S) FOOTPRINT(Wattrel) OVERWORLD( @@ -2607,6 +2647,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Kilowattrel, .iconSprite = gMonIcon_Kilowattrel, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-6, 6, SHADOW_SIZE_M) FOOTPRINT(Kilowattrel) OVERWORLD( @@ -2671,6 +2712,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Maschiff, .iconSprite = gMonIcon_Maschiff, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(2, 5, SHADOW_SIZE_L) FOOTPRINT(Maschiff) OVERWORLD( @@ -2735,6 +2777,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Mabosstiff, .iconSprite = gMonIcon_Mabosstiff, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 5, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Mabosstiff) OVERWORLD( @@ -2799,6 +2842,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Shroodle, .iconSprite = gMonIcon_Shroodle, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(0, -6, SHADOW_SIZE_S) FOOTPRINT(Shroodle) OVERWORLD( @@ -2863,6 +2907,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Grafaiai, .iconSprite = gMonIcon_Grafaiai, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(-2, 5, SHADOW_SIZE_S) FOOTPRINT(Grafaiai) OVERWORLD( @@ -2927,6 +2972,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Bramblin, .iconSprite = gMonIcon_Bramblin, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(2, 0, SHADOW_SIZE_S) FOOTPRINT(Bramblin) OVERWORLD( @@ -2991,6 +3037,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Brambleghast, .iconSprite = gMonIcon_Brambleghast, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 6, SHADOW_SIZE_M) FOOTPRINT(Brambleghast) OVERWORLD( @@ -3057,6 +3104,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Toedscool, .iconSprite = gMonIcon_Toedscool, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 10, SHADOW_SIZE_M) FOOTPRINT(Toedscool) OVERWORLD( @@ -3123,6 +3171,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Toedscruel, .iconSprite = gMonIcon_Toedscruel, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 8, SHADOW_SIZE_L) FOOTPRINT(Toedscruel) OVERWORLD( @@ -3187,6 +3236,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Klawf, .iconSprite = gMonIcon_Klawf, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 0, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Klawf) OVERWORLD( @@ -3252,6 +3302,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Capsakid, .iconSprite = gMonIcon_Capsakid, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(2, 0, SHADOW_SIZE_S) FOOTPRINT(Capsakid) OVERWORLD( @@ -3316,6 +3367,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Scovillain, .iconSprite = gMonIcon_Scovillain, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(6, 11, SHADOW_SIZE_M) FOOTPRINT(Scovillain) OVERWORLD( @@ -3380,6 +3432,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Rellor, .iconSprite = gMonIcon_Rellor, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(4, -3, SHADOW_SIZE_L) FOOTPRINT(Rellor) OVERWORLD( @@ -3444,6 +3497,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Rabsca, .iconSprite = gMonIcon_Rabsca, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Rabsca) OVERWORLD( @@ -3508,6 +3562,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Flittle, .iconSprite = gMonIcon_Flittle, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Flittle) OVERWORLD( @@ -3572,6 +3627,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Espathra, .iconSprite = gMonIcon_Espathra, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-5, 10, SHADOW_SIZE_M) FOOTPRINT(Espathra) OVERWORLD( @@ -3636,6 +3692,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Tinkatink, .iconSprite = gMonIcon_Tinkatink, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Tinkatink) OVERWORLD( @@ -3700,6 +3757,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Tinkatuff, .iconSprite = gMonIcon_Tinkatuff, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-4, 5, SHADOW_SIZE_L) FOOTPRINT(Tinkatuff) OVERWORLD( @@ -3763,6 +3821,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Tinkaton, .iconSprite = gMonIcon_Tinkaton, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-5, 15, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Tinkaton) OVERWORLD( @@ -3826,6 +3885,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Wiglett, .iconSprite = gMonIcon_Wiglett, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, NO_SHADOW FOOTPRINT(Wiglett) OVERWORLD( @@ -3889,6 +3949,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Wugtrio, .iconSprite = gMonIcon_Wugtrio, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, NO_SHADOW FOOTPRINT(Wugtrio) OVERWORLD( @@ -3954,6 +4015,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Bombirdier, .iconSprite = gMonIcon_Bombirdier, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 18, SHADOW_SIZE_M) FOOTPRINT(Bombirdier) OVERWORLD( @@ -4018,6 +4080,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Finizen, .iconSprite = gMonIcon_Finizen, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Finizen) OVERWORLD( @@ -4082,6 +4145,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_PalafinZero, .iconSprite = gMonIcon_PalafinZero, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Palafin) OVERWORLD( @@ -4146,6 +4210,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_PalafinHero, .iconSprite = gMonIcon_PalafinHero, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 13, SHADOW_SIZE_M) FOOTPRINT(Palafin) OVERWORLD( @@ -4212,6 +4277,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Varoom, .iconSprite = gMonIcon_Varoom, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 0, SHADOW_SIZE_M) FOOTPRINT(Varoom) OVERWORLD( @@ -4276,6 +4342,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Revavroom, .iconSprite = gMonIcon_Revavroom, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 7, SHADOW_SIZE_L) FOOTPRINT(Revavroom) OVERWORLD( @@ -4340,6 +4407,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Cyclizar, .iconSprite = gMonIcon_Cyclizar, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 9, SHADOW_SIZE_M) FOOTPRINT(Cyclizar) OVERWORLD( @@ -4405,6 +4473,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Orthworm, .iconSprite = gMonIcon_Orthworm, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(6, 10, SHADOW_SIZE_L) FOOTPRINT(Orthworm) OVERWORLD( @@ -4471,6 +4540,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Glimmet, .iconSprite = gMonIcon_Glimmet, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 6, SHADOW_SIZE_S) FOOTPRINT(Glimmet) OVERWORLD( @@ -4536,6 +4606,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Glimmora, .iconSprite = gMonIcon_Glimmora, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 17, SHADOW_SIZE_M) FOOTPRINT(Glimmora) OVERWORLD( @@ -4600,6 +4671,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Greavard, .iconSprite = gMonIcon_Greavard, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(3, 2, SHADOW_SIZE_M) FOOTPRINT(Greavard) OVERWORLD( @@ -4664,6 +4736,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Houndstone, .iconSprite = gMonIcon_Houndstone, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 6, SHADOW_SIZE_L) FOOTPRINT(Houndstone) OVERWORLD( @@ -4728,6 +4801,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Flamigo, .iconSprite = gMonIcon_Flamigo, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 12, SHADOW_SIZE_S) FOOTPRINT(Flamigo) OVERWORLD( @@ -4793,6 +4867,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Cetoddle, .iconSprite = gMonIcon_Cetoddle, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 0, SHADOW_SIZE_M) FOOTPRINT(Cetoddle) OVERWORLD( @@ -4857,6 +4932,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Cetitan, .iconSprite = gMonIcon_Cetitan, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Cetitan) OVERWORLD( @@ -4922,6 +4998,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Veluza, .iconSprite = gMonIcon_Veluza, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 5, SHADOW_SIZE_M) FOOTPRINT(Veluza) OVERWORLD( @@ -4988,6 +5065,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Dondozo, .iconSprite = gMonIcon_Dondozo, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Dondozo) OVERWORLD( @@ -5053,6 +5131,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_TatsugiriCurly, .iconSprite = gMonIcon_TatsugiriCurly, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-2, -1, SHADOW_SIZE_S) FOOTPRINT(Tatsugiri) OVERWORLD( @@ -5116,6 +5195,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_TatsugiriDroopy, .iconSprite = gMonIcon_TatsugiriDroopy, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-2, -1, SHADOW_SIZE_S) FOOTPRINT(Tatsugiri) OVERWORLD( @@ -5179,6 +5259,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_TatsugiriStretchy, .iconSprite = gMonIcon_TatsugiriStretchy, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-2, -1, SHADOW_SIZE_S) FOOTPRINT(Tatsugiri) OVERWORLD( @@ -5246,6 +5327,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_GreatTusk, .iconSprite = gMonIcon_GreatTusk, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 6, SHADOW_SIZE_L) FOOTPRINT(GreatTusk) OVERWORLD( @@ -5312,6 +5394,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_ScreamTail, .iconSprite = gMonIcon_ScreamTail, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 3, SHADOW_SIZE_L) FOOTPRINT(ScreamTail) OVERWORLD( @@ -5378,6 +5461,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_BruteBonnet, .iconSprite = gMonIcon_BruteBonnet, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 7, SHADOW_SIZE_L) FOOTPRINT(BruteBonnet) OVERWORLD( @@ -5447,6 +5531,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_FlutterMane, .iconSprite = gMonIcon_FlutterMane, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 20, SHADOW_SIZE_S) FOOTPRINT(FlutterMane) OVERWORLD( @@ -5512,6 +5597,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_SlitherWing, .iconSprite = gMonIcon_SlitherWing, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-5, 13, SHADOW_SIZE_M) FOOTPRINT(SlitherWing) OVERWORLD( @@ -5578,6 +5664,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_SandyShocks, .iconSprite = gMonIcon_SandyShocks, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(SandyShocks) OVERWORLD( @@ -5644,6 +5731,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronTreads, .iconSprite = gMonIcon_IronTreads, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 3, SHADOW_SIZE_L) FOOTPRINT(IronTreads) OVERWORLD( @@ -5710,6 +5798,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronBundle, .iconSprite = gMonIcon_IronBundle, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(-1, 6, SHADOW_SIZE_M) FOOTPRINT(IronBundle) OVERWORLD( @@ -5776,6 +5865,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronHands, .iconSprite = gMonIcon_IronHands, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-2, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(IronHands) OVERWORLD( @@ -5843,6 +5933,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronJugulis, .iconSprite = gMonIcon_IronJugulis, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 15, SHADOW_SIZE_M) FOOTPRINT(IronJugulis) OVERWORLD( @@ -5910,6 +6001,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronMoth, .iconSprite = gMonIcon_IronMoth, .iconPalIndex = 3, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-4, 14, SHADOW_SIZE_M) FOOTPRINT(IronMoth) OVERWORLD( @@ -5976,6 +6068,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronThorns, .iconSprite = gMonIcon_IronThorns, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-9, 12, SHADOW_SIZE_L) FOOTPRINT(IronThorns) OVERWORLD( @@ -6041,6 +6134,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Frigibax, .iconSprite = gMonIcon_Frigibax, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Frigibax) OVERWORLD( @@ -6105,6 +6199,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Arctibax, .iconSprite = gMonIcon_Arctibax, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 8, SHADOW_SIZE_M) FOOTPRINT(Arctibax) OVERWORLD( @@ -6168,6 +6263,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Baxcalibur, .iconSprite = gMonIcon_Baxcalibur, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(5, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Baxcalibur) OVERWORLD( @@ -6232,6 +6328,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_GimmighoulChest, .iconSprite = gMonIcon_GimmighoulChest, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_SLOW, SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(GimmighoulChest) OVERWORLD( @@ -6296,6 +6393,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_GimmighoulRoaming, .iconSprite = gMonIcon_GimmighoulRoaming, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_FAST, SHADOW(-1, -4, SHADOW_SIZE_S) FOOTPRINT(GimmighoulRoaming) .levelUpLearnset = sGimmighoulLevelUpLearnset, @@ -6351,6 +6449,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Gholdengo, .iconSprite = gMonIcon_Gholdengo, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 13, SHADOW_SIZE_M) FOOTPRINT(Gholdengo) OVERWORLD( @@ -6415,6 +6514,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_WoChien, .iconSprite = gMonIcon_WoChien, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(WoChien) OVERWORLD( @@ -6481,6 +6581,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_ChienPao, .iconSprite = gMonIcon_ChienPao, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-4, 8, SHADOW_SIZE_L) FOOTPRINT(ChienPao) OVERWORLD( @@ -6547,6 +6648,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_TingLu, .iconSprite = gMonIcon_TingLu, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(12, 13, SHADOW_SIZE_L) FOOTPRINT(TingLu) OVERWORLD( @@ -6614,6 +6716,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_ChiYu, .iconSprite = gMonIcon_ChiYu, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 16, SHADOW_SIZE_S) FOOTPRINT(ChiYu) OVERWORLD( @@ -6682,6 +6785,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_RoaringMoon, .iconSprite = gMonIcon_RoaringMoon, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(3, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(RoaringMoon) OVERWORLD( @@ -6747,6 +6851,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronValiant, .iconSprite = gMonIcon_IronValiant, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 14, SHADOW_SIZE_L) FOOTPRINT(IronValiant) OVERWORLD( @@ -6812,6 +6917,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Koraidon, .iconSprite = gMonIcon_Koraidon, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Koraidon) OVERWORLD( @@ -6879,6 +6985,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Miraidon, .iconSprite = gMonIcon_Miraidon, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(10, 14, SHADOW_SIZE_L) FOOTPRINT(Miraidon) OVERWORLD( @@ -6946,6 +7053,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_WalkingWake, .iconSprite = gMonIcon_WalkingWake, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 13, SHADOW_SIZE_L) FOOTPRINT(WalkingWake) OVERWORLD( @@ -7011,6 +7119,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronLeaves, .iconSprite = gMonIcon_IronLeaves, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(IronLeaves) OVERWORLD( @@ -7077,6 +7186,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Poltchageist, .iconSprite = gMonIcon_Poltchageist, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 14, SHADOW_SIZE_S) FOOTPRINT(Poltchageist) OVERWORLD( @@ -7141,6 +7251,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Poltchageist, .iconSprite = gMonIcon_Poltchageist, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 14, SHADOW_SIZE_S) FOOTPRINT(Poltchageist) OVERWORLD( @@ -7206,6 +7317,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Sinistcha, .iconSprite = gMonIcon_Sinistcha, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 11, SHADOW_SIZE_M) FOOTPRINT(Sinistcha) OVERWORLD( @@ -7269,6 +7381,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Sinistcha, .iconSprite = gMonIcon_Sinistcha, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 11, SHADOW_SIZE_M) FOOTPRINT(Sinistcha) OVERWORLD( @@ -7334,6 +7447,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Okidogi, .iconSprite = gMonIcon_Okidogi, .iconPalIndex = 1, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 11, SHADOW_SIZE_L) FOOTPRINT(Okidogi) OVERWORLD( @@ -7400,6 +7514,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Munkidori, .iconSprite = gMonIcon_Munkidori, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(1, 8, SHADOW_SIZE_S) FOOTPRINT(Munkidori) OVERWORLD( @@ -7466,6 +7581,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Fezandipiti, .iconSprite = gMonIcon_Fezandipiti, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-3, 10, SHADOW_SIZE_M) FOOTPRINT(Fezandipiti) OVERWORLD( @@ -7529,6 +7645,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Ogerpon##Form2, \ .iconSprite = gMonIcon_Ogerpon##Form1, \ .iconPalIndex = iconpalette, \ + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, \ SHADOW(7, 13, SHADOW_SIZE_L) \ FOOTPRINT(Ogerpon) \ OVERWORLD( \ @@ -7611,6 +7728,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_GougingFire, .iconSprite = gMonIcon_GougingFire, .iconPalIndex = 5, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-1, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(GougingFire) OVERWORLD( @@ -7677,6 +7795,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_RagingBolt, .iconSprite = gMonIcon_RagingBolt, .iconPalIndex = 2, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 14, SHADOW_SIZE_L) FOOTPRINT(RagingBolt) OVERWORLD( @@ -7742,6 +7861,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronBoulder, .iconSprite = gMonIcon_IronBoulder, .iconPalIndex = 5, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(4, 7, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(IronBoulder) OVERWORLD( @@ -7808,6 +7928,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronCrown, .iconSprite = gMonIcon_IronCrown, .iconPalIndex = 3, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 14, SHADOW_SIZE_L) FOOTPRINT(IronCrown) OVERWORLD( @@ -7875,6 +7996,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_TerapagosNormal, .iconSprite = gMonIcon_TerapagosNormal, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NORMAL, SHADOW(3, 13, SHADOW_SIZE_L) FOOTPRINT(TerapagosNormal) OVERWORLD( @@ -7945,6 +8067,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_TerapagosTerastal, .iconSprite = gMonIcon_TerapagosTerastal, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(-4, 4, SHADOW_SIZE_L) FOOTPRINT(TerapagosTerastal) OVERWORLD( @@ -8013,6 +8136,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_TerapagosStellar, .iconSprite = gMonIcon_TerapagosStellar, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(0, 12, SHADOW_SIZE_L) FOOTPRINT(TerapagosStellar) .isLegendary = TRUE, @@ -8074,6 +8198,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Pecharunt, .iconSprite = gMonIcon_Pecharunt, .iconPalIndex = 0, + .pokemonJumpType = PKMN_JUMP_TYPE_NONE, SHADOW(2, 1, SHADOW_SIZE_L) FOOTPRINT(Pecharunt) OVERWORLD( diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c index 9492a4a9f8..76a4a1ceea 100755 --- a/src/pokemon_jump.c +++ b/src/pokemon_jump.c @@ -57,12 +57,6 @@ enum { PACKET_MEMBER_STATE, }; -enum { - JUMP_TYPE_NORMAL, - JUMP_TYPE_FAST, - JUMP_TYPE_SLOW, -}; - enum { FUNC_GAME_INTRO, FUNC_WAIT_ROUND, @@ -274,17 +268,11 @@ struct PokemonJump struct PokemonJump_Player *player; }; -struct PokemonJumpMons -{ - u16 species; - u16 jumpType; -}; - static void InitGame(struct PokemonJump *); static void ResetForNewGame(struct PokemonJump *); static void InitPlayerAndJumpTypes(void); static void ResetPlayersForNewGame(void); -static s16 GetPokemonJumpSpeciesIdx(u16 species); +static s16 GetSpeciesPokemonJumpType(u16 species); static void InitJumpMonInfo(struct PokemonJump_MonInfo *, struct Pokemon *); static void CB2_PokemonJump(void); static void Task_StartPokemonJump(u8); @@ -420,390 +408,6 @@ static inline void TruncateToFirstWordOnly(u8 *); EWRAM_DATA static struct PokemonJump *sPokemonJump = NULL; EWRAM_DATA static struct PokemonJumpGfx *sPokemonJumpGfx = NULL; -/* - According to the clerk, the Pokémon allowed in - Pokémon Jump are all <= 28 inches, and do not - only swim, burrow, or fly. -*/ -static const struct PokemonJumpMons sPokeJumpMons[] = -{ - { .species = SPECIES_BULBASAUR, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_CHARMANDER, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SQUIRTLE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_CATERPIE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_METAPOD, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_WEEDLE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_KAKUNA, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_RATTATA, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_RATTATA_ALOLA, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_RATICATE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_RATICATE_ALOLA, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_PIKACHU, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_COSPLAY, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_ROCK_STAR, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_BELLE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_POP_STAR, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_PHD, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_LIBRE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_ORIGINAL, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_HOENN, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_SINNOH, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_UNOVA, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_KALOS, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_ALOLA, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_PARTNER, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_WORLD, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PIKACHU_STARTER, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SANDSHREW, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SANDSHREW_ALOLA, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_NIDORAN_F, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_NIDORAN_M, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_CLEFAIRY, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_VULPIX, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_VULPIX_ALOLA, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_JIGGLYPUFF, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ODDISH, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_PARAS, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_MEOWTH, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_MEOWTH_ALOLA, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_MEOWTH_GALAR, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PSYDUCK, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_MANKEY, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_GROWLITHE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_POLIWAG, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_BELLSPROUT, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SHELLDER, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_KRABBY, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_EXEGGCUTE, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_CUBONE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_DITTO, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_EEVEE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_EEVEE_STARTER, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_OMANYTE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_KABUTO, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_CHIKORITA, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_CYNDAQUIL, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_TOTODILE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SPINARAK, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_PICHU, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PICHU_SPIKY_EARED, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_CLEFFA, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_IGGLYBUFF, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_TOGEPI, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_MAREEP, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_BELLOSSOM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_MARILL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SUNKERN, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_WOOPER, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_WOOPER_PALDEA, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_PINECO, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SNUBBULL, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SHUCKLE, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_TEDDIURSA, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SLUGMA, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SWINUB, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_HOUNDOUR, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_PHANPY, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PORYGON2, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_TYROGUE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SMOOCHUM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ELEKID, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_MAGBY, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_LARVITAR, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_TREECKO, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_TORCHIC, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_MUDKIP, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_MARSHTOMP, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_POOCHYENA, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_ZIGZAGOON, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_ZIGZAGOON_GALAR, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_LINOONE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_LINOONE_GALAR, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_WURMPLE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SILCOON, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_CASCOON, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_LOTAD, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SEEDOT, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_RALTS, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_KIRLIA, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SURSKIT, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SHROOMISH, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_NINCADA, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_WHISMUR, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_AZURILL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SKITTY, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SABLEYE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SABLEYE_MEGA, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_MAWILE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_ARON, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_MEDITITE, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ELECTRIKE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_PLUSLE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_MINUN, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_VOLBEAT, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_ILLUMISE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_ROSELIA, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_GULPIN, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_NUMEL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_TORKOAL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SPOINK, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_TRAPINCH, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_CACNEA, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ANORITH, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_WYNAUT, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SNORUNT, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_CLAMPERL, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_BAGON, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_TURTWIG, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_CHIMCHAR, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_PIPLUP, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_BIDOOF, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_KRICKETOT, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SHINX, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_BUDEW, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SHIELDON, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_PACHIRISU, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_BUIZEL, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_CHERUBI, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_CHERRIM_OVERCAST, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_CHERRIM_SUNSHINE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SHELLOS_WEST, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SHELLOS_EAST, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_BUNEARY, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_GLAMEOW, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_STUNKY, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_BONSLY, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_MIME_JR, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_HAPPINY, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_GIBLE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_MUNCHLAX, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_RIOLU, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_CROAGUNK, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SHAYMIN_LAND, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SNIVY, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_TEPIG, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_OSHAWOTT, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PATRAT, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_LILLIPUP, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_PURRLOIN, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_PANSAGE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PANSEAR, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_PANPOUR, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_ROGGENROLA, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_DRILBUR, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_EXCADRILL, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_TIMBURR, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SEWADDLE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SWADLOON, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_VENIPEDE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_PETILIL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SANDILE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_DARUMAKA, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_DARUMAKA_GALAR, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_DWEBBLE, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SCRAGGY, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ARCHEN, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_TRUBBISH, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_ZORUA, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_MINCCINO, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_CINCCINO, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_GOTHITA, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_GOTHORITA, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_DEERLING_SPRING, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_DEERLING_SUMMER, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_DEERLING_AUTUMN, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_DEERLING_WINTER, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_KARRABLAST, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_FOONGUS, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_AMOONGUSS, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_JOLTIK, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_LITWICK, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_AXEW, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_CUBCHOO, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SHELMET, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_STUNFISK, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_STUNFISK_GALAR, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_PAWNIARD, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_DURANT, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_CHESPIN, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_QUILLADIN, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_FENNEKIN, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_FROAKIE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_FROGADIER, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_BUNNELBY, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SCATTERBUG_POLAR, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SCATTERBUG_TUNDRA, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SCATTERBUG_CONTINENTAL, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SCATTERBUG_GARDEN, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SCATTERBUG_ELEGANT, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SCATTERBUG_MEADOW, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SCATTERBUG_MODERN, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SCATTERBUG_MARINE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SCATTERBUG_ARCHIPELAGO, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SCATTERBUG_HIGH_PLAINS, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SCATTERBUG_SANDSTORM, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SCATTERBUG_RIVER, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SCATTERBUG_MONSOON, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SCATTERBUG_SAVANNA, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SCATTERBUG_SUN, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SCATTERBUG_OCEAN, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SCATTERBUG_JUNGLE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SCATTERBUG_FANCY, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SCATTERBUG_POKEBALL, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SPEWPA_POLAR, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SPEWPA_TUNDRA, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SPEWPA_CONTINENTAL, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SPEWPA_GARDEN, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SPEWPA_ELEGANT, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SPEWPA_MEADOW, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SPEWPA_MODERN, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SPEWPA_MARINE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SPEWPA_ARCHIPELAGO, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SPEWPA_HIGH_PLAINS, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SPEWPA_SANDSTORM, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SPEWPA_RIVER, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SPEWPA_MONSOON, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SPEWPA_SAVANNA, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SPEWPA_SUN, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SPEWPA_OCEAN, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SPEWPA_JUNGLE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SPEWPA_FANCY, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SPEWPA_POKEBALL, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_LITLEO, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_PANCHAM, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_ESPURR, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_MEOWSTIC_M, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_MEOWSTIC_F, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_BINACLE, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_CLAUNCHER, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_HELIOPTILE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_DEDENNE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_GOOMY, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ROWLET, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_DARTRIX, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_LITTEN, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_TORRACAT, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_POPPLIO, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_BRIONNE, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_YUNGOOS, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_GUMSHOOS, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_GRUBBIN, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_CHARJABUG, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_CRABRAWLER, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ROCKRUFF, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_ROCKRUFF_OWN_TEMPO, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_MAREANIE, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_DEWPIDER, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_FOMANTIS, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_MORELULL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SALANDIT, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_STUFFUL, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_BOUNSWEET, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_STEENEE, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_WIMPOD, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_PYUKUMUKU, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_KOMALA, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_TOGEDEMARU, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_MIMIKYU_DISGUISED, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_MIMIKYU_BUSTED, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_JANGMO_O, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_MARSHADOW, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_MELTAN, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_GROOKEY, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_THWACKEY, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_SCORBUNNY, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_RABOOT, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SOBBLE, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_DRIZZILE, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SKWOVET, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SKWOVET, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_BLIPBUG, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_DOTTLER, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_NICKIT, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_GOSSIFLEUR, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ELDEGOSS, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_WOOLOO, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_CHEWTLE, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_YAMPER, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_ROLYCOLY, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_APPLIN, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_APPLETUN, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_TOXEL, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_SIZZLIPEDE, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_CLOBBOPUS, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_HATENNA, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_HATTREM, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_IMPIDIMP, .jumpType = JUMP_TYPE_FAST, }, - { .species = SPECIES_ALCREMIE_STRAWBERRY_VANILLA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_STRAWBERRY_RUBY_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_STRAWBERRY_MATCHA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_STRAWBERRY_MINT_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_STRAWBERRY_LEMON_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_STRAWBERRY_SALTED_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_STRAWBERRY_RUBY_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_STRAWBERRY_CARAMEL_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_STRAWBERRY_RAINBOW_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_BERRY_VANILLA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_BERRY_RUBY_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_BERRY_MATCHA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_BERRY_MINT_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_BERRY_LEMON_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_BERRY_SALTED_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_BERRY_RUBY_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_BERRY_CARAMEL_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_BERRY_RAINBOW_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_LOVE_VANILLA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_LOVE_RUBY_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_LOVE_MATCHA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_LOVE_MINT_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_LOVE_LEMON_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_LOVE_SALTED_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_LOVE_RUBY_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_LOVE_CARAMEL_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_LOVE_RAINBOW_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_STAR_VANILLA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_STAR_RUBY_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_STAR_MATCHA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_STAR_MINT_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_STAR_LEMON_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_STAR_SALTED_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_STAR_RUBY_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_STAR_CARAMEL_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_STAR_RAINBOW_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_CLOVER_VANILLA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_CLOVER_RUBY_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_CLOVER_MATCHA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_CLOVER_MINT_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_CLOVER_LEMON_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_CLOVER_SALTED_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_CLOVER_RUBY_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_CLOVER_CARAMEL_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_CLOVER_RAINBOW_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_FLOWER_VANILLA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_FLOWER_RUBY_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_FLOWER_MATCHA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_FLOWER_MINT_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_FLOWER_LEMON_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_FLOWER_SALTED_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_FLOWER_RUBY_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_FLOWER_CARAMEL_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_FLOWER_RAINBOW_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_RIBBON_VANILLA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_RIBBON_RUBY_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_RIBBON_MATCHA_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_RIBBON_MINT_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_RIBBON_LEMON_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_RIBBON_SALTED_CREAM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_RIBBON_RUBY_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_RIBBON_CARAMEL_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_ALCREMIE_RIBBON_RAINBOW_SWIRL, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_PINCURCHIN, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_SNOM, .jumpType = JUMP_TYPE_SLOW, }, - { .species = SPECIES_MORPEKO_FULL_BELLY, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_MORPEKO_HANGRY, .jumpType = JUMP_TYPE_NORMAL, }, - { .species = SPECIES_KUBFU, .jumpType = JUMP_TYPE_FAST, }, -}; - void StartPokemonJump(u16 partyId, MainCallback exitCallback) { u8 taskId; @@ -890,12 +494,11 @@ static void ResetForNewGame(struct PokemonJump *jump) static void InitPlayerAndJumpTypes(void) { - int i, index; + int i; for (i = 0; i < MAX_RFU_PLAYERS; i++) { - index = GetPokemonJumpSpeciesIdx(sPokemonJump->monInfo[i].species); - sPokemonJump->players[i].monJumpType = sPokeJumpMons[index].jumpType; + sPokemonJump->players[i].monJumpType = GetSpeciesPokemonJumpType(sPokemonJump->monInfo[i].species); } sPokemonJump->player = &sPokemonJump->players[sPokemonJump->multiplayerId]; @@ -917,16 +520,9 @@ static void ResetPlayersForNewGame(void) } } -static s16 GetPokemonJumpSpeciesIdx(u16 species) +static s16 GetSpeciesPokemonJumpType(u16 species) { - u32 i; - for (i = 0; i < ARRAY_COUNT(sPokeJumpMons); i++) - { - if (sPokeJumpMons[i].species == species) - return i; - } - - return -1; // species isnt allowed + return gSpeciesInfo[SanitizeSpeciesId(species)].pokemonJumpType; } static void InitJumpMonInfo(struct PokemonJump_MonInfo *monInfo, struct Pokemon *mon) @@ -2237,24 +1833,24 @@ static void HandleMonState(void) static const s8 sJumpOffsets[][48] = { - [JUMP_TYPE_NORMAL] = { -3, -6, -8, -10, -13, -15, -17, -19, - -21, -23, -25, -27, -28, -29, - JUMP_PEAK, JUMP_PEAK, JUMP_PEAK, - -28, -27, -26, -25, -23, -22, -20, -18, - -17, -15, -13, -11, -8, -6, -4, -1}, + [PKMN_JUMP_TYPE_NORMAL - 1] = { -3, -6, -8, -10, -13, -15, -17, -19, + -21, -23, -25, -27, -28, -29, + JUMP_PEAK, JUMP_PEAK, JUMP_PEAK, + -28, -27, -26, -25, -23, -22, -20, -18, + -17, -15, -13, -11, -8, -6, -4, -1}, - [JUMP_TYPE_FAST] = { -3, -6, -9, -11, -14, -16, -18, -20, - -22, -24, -26, -28, -29, - JUMP_PEAK, JUMP_PEAK, - -28, -26, -24, -22, -20, -18, -16, -14, - -11, -9, -6, -4, -1}, + [PKMN_JUMP_TYPE_FAST - 1] = { -3, -6, -9, -11, -14, -16, -18, -20, + -22, -24, -26, -28, -29, + JUMP_PEAK, JUMP_PEAK, + -28, -26, -24, -22, -20, -18, -16, -14, + -11, -9, -6, -4, -1}, - [JUMP_TYPE_SLOW] = { -3, -6, -9, -11, -13, -15, -17, -19, - -21, -23, -25, -27, -28, -29, - JUMP_PEAK, JUMP_PEAK, JUMP_PEAK, JUMP_PEAK, - -29, -29, -28, -28, -27, -27, -26, -25, - -24, -22, -20, -18, -16, -14, -12, -11, - -9, -6, -4, -1}, + [PKMN_JUMP_TYPE_SLOW - 1] = { -3, -6, -9, -11, -13, -15, -17, -19, + -21, -23, -25, -27, -28, -29, + JUMP_PEAK, JUMP_PEAK, JUMP_PEAK, JUMP_PEAK, + -29, -29, -28, -28, -27, -27, -26, -25, + -24, -22, -20, -18, -16, -14, -12, -11, + -9, -6, -4, -1}, }; static void UpdateJump(int multiplayerId) @@ -2289,7 +1885,7 @@ static void UpdateJump(int multiplayerId) jumpOffsetIdx -= 4; if (jumpOffsetIdx < (int)ARRAY_COUNT(sJumpOffsets[0])) - jumpOffset = sJumpOffsets[player->monJumpType][jumpOffsetIdx]; + jumpOffset = sJumpOffsets[player->monJumpType - 1][jumpOffsetIdx]; else jumpOffset = 0; @@ -2620,7 +2216,7 @@ static u8 *GetPokeJumpPlayerName(u8 multiplayerId) bool32 IsSpeciesAllowedInPokemonJump(u16 species) { - return GetPokemonJumpSpeciesIdx(species) > -1; + return GetSpeciesPokemonJumpType(species) != PKMN_JUMP_TYPE_NONE; } void IsPokemonJumpSpeciesInParty(void) From da95f81fc40fff7fced527b4b467217c1fb11fa8 Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Thu, 27 Feb 2025 12:01:03 -0500 Subject: [PATCH 006/115] Update AI_TryTo2HKO comment (#6349) --- src/battle_ai_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 6244245d82..e04ca63e68 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -5072,7 +5072,7 @@ static s32 AI_Risky(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) return score; } -// Adds score bonus to best powered move +// Adds score bonus to OHKOs and 2HKOs static s32 AI_TryTo2HKO(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) From 5bd50e1e710e1a4ffb8af9c1188c3bf2fb48a57d Mon Sep 17 00:00:00 2001 From: surskitty Date: Thu, 27 Feb 2025 12:21:09 -0500 Subject: [PATCH 007/115] Fixing grammar of Berry Tree strings (#6355) --- src/berry.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/berry.c b/src/berry.c index 4730799e0c..fd6cac9679 100644 --- a/src/berry.c +++ b/src/berry.c @@ -2174,6 +2174,11 @@ void ObjectEventInteractionGetBerryCountString(void) u8 berry = GetBerryTypeByBerryTreeId(treeId); u8 count = GetBerryCountByBerryTreeId(treeId); + // The strings for growing Berries all refer to a singular berry plant. + // This ensures that text about planting a Berry and the growing Berry reads correctly. + if (GetStageByBerryTreeId(treeId) != BERRY_STAGE_BERRIES) + count = 1; + gSpecialVar_0x8006 = BerryTypeToItemId(berry); CopyItemNameHandlePlural(BerryTypeToItemId(berry), gStringVar1, count); berry = GetTreeMutationValue(treeId); From fb28206f21a69f45993063fc49aaf477663e95bf Mon Sep 17 00:00:00 2001 From: surskitty Date: Thu, 27 Feb 2025 18:16:16 -0500 Subject: [PATCH 008/115] Configuration to scale Critical Capture odds based on local Pokedex or estimated National Pokedex (#6250) --- include/config/battle.h | 8 +++++--- src/battle_script_commands.c | 17 ++++++++++++----- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/include/config/battle.h b/include/config/battle.h index bacdc770d9..8721ef317f 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -245,9 +245,11 @@ #define B_MOVE_DESCRIPTION_BUTTON L_BUTTON // If set to a button other than B_LAST_USED_BALL_BUTTON, pressing this button will open the move description menu // Catching settings -#define B_SEMI_INVULNERABLE_CATCH GEN_LATEST // In Gen4+, you cannot throw a ball against a Pokemon that is in a semi-invulnerable state (dig/fly/etc) -#define B_CATCHING_CHARM_BOOST 20 // % boost in Critical Capture odds if player has the Catching Charm. -#define B_CRITICAL_CAPTURE TRUE // If set to TRUE, Critical Capture will be enabled. +#define B_SEMI_INVULNERABLE_CATCH GEN_LATEST // In Gen4+, you cannot throw a ball against a Pokemon that is in a semi-invulnerable state (dig/fly/etc) +#define B_CATCHING_CHARM_BOOST 20 // % boost in Critical Capture odds if player has the Catching Charm. +#define B_CRITICAL_CAPTURE TRUE // If set to TRUE, Critical Capture will be enabled. +#define B_CRITICAL_CAPTURE_LOCAL_DEX TRUE // If set to FALSE, Critical Capture % is based off of the National Pokedex estimated by enabled generations. + #define B_LAST_USED_BALL TRUE // If TRUE, the "last used ball" feature from Gen 7 will be implemented #define B_LAST_USED_BALL_BUTTON R_BUTTON // If last used ball is implemented, this button (or button combo) will trigger throwing the last used ball. #define B_LAST_USED_BALL_CYCLE TRUE // If TRUE, then holding B_LAST_USED_BALL_BUTTON while pressing the D-Pad cycles through the balls diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index be57f4ae18..1154660af2 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -16701,21 +16701,27 @@ void BS_DoStockpileStatChangesWearOff(void) static bool32 CriticalCapture(u32 odds) { u32 numCaught; + u32 totalDexCount; if (B_CRITICAL_CAPTURE == FALSE) return FALSE; + if (B_CRITICAL_CAPTURE_LOCAL_DEX == TRUE) + totalDexCount = HOENN_DEX_COUNT; + else + totalDexCount = NATIONAL_DEX_COUNT; + numCaught = GetNationalPokedexCount(FLAG_GET_CAUGHT); - if (numCaught <= (NATIONAL_DEX_COUNT * 30) / 650) + if (numCaught <= (totalDexCount * 30) / 650) odds = 0; - else if (numCaught <= (NATIONAL_DEX_COUNT * 150) / 650) + else if (numCaught <= (totalDexCount * 150) / 650) odds /= 2; - else if (numCaught <= (NATIONAL_DEX_COUNT * 300) / 650) + else if (numCaught <= (totalDexCount * 300) / 650) ; // odds = (odds * 100) / 100; - else if (numCaught <= (NATIONAL_DEX_COUNT * 450) / 650) + else if (numCaught <= (totalDexCount * 450) / 650) odds = (odds * 150) / 100; - else if (numCaught <= (NATIONAL_DEX_COUNT * 600) / 650) + else if (numCaught <= (totalDexCount * 600) / 650) odds *= 2; else odds = (odds * 250) / 100; @@ -16724,6 +16730,7 @@ static bool32 CriticalCapture(u32 odds) odds = (odds * (100 + B_CATCHING_CHARM_BOOST)) / 100; odds /= 6; + if ((Random() % 255) < odds) return TRUE; From 1331931a42f75209b9d979757c4324055495d2d9 Mon Sep 17 00:00:00 2001 From: Hedara Date: Sun, 2 Mar 2025 10:42:12 +0100 Subject: [PATCH 009/115] Fixed Zacian/Zamazenta learning Iron head while already knowing it in Crowned form --- src/pokemon.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/pokemon.c b/src/pokemon.c index 6bec95c307..5340691b46 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2002,6 +2002,19 @@ u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 firstMove) } } + // Handler for if Zacian or Zamazenta should learn Iron Head + // since it transforms in the Behemoth Blade/Bash move in + // battle in the Crowned forms. + if (learnset[sLearningMoveTableID].move == MOVE_IRON_HEAD && (species == SPECIES_ZAMAZENTA_CROWNED || species == SPECIES_ZACIAN_CROWNED)) + { + for (u32 accessor = MON_DATA_MOVE1; accessor <= MON_DATA_MOVE4; accessor++) + { + u32 move = GetMonData(mon, accessor); + if (move == MOVE_BEHEMOTH_BLADE || move == MOVE_BEHEMOTH_BASH) + return MOVE_NONE; + } + } + if (learnset[sLearningMoveTableID].level == level) { gMoveToLearn = learnset[sLearningMoveTableID].move; From ec8344c2ad65a70fb40e866653abbefaf0101b7c Mon Sep 17 00:00:00 2001 From: Ruby Date: Sun, 2 Mar 2025 22:00:57 +0800 Subject: [PATCH 010/115] Fixed a missing ) in trainers.party comment block. (#6367) --- src/data/trainers.party | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/trainers.party b/src/data/trainers.party index 14304518b6..f1a8f3e84e 100644 --- a/src/data/trainers.party +++ b/src/data/trainers.party @@ -46,7 +46,7 @@ Optional fields for Pokemon: (Order does not matter) - EVs (252 HP / 128 Spe / 48 Def, defaults to all 0, is not capped at 512 total) (Order does not matter) - - Ball (Poke Ball or ITEM_POKE_BALL, defaults to Poke Ball + - Ball (Poke Ball or ITEM_POKE_BALL, defaults to Poke Ball) - Happiness (Number between 1 and 255) - Nature (Rash or NATURE_RASH, defaults to Hardy) - Shiny (Yes/No, defaults to No) From 3da228e99835242cf86734cf253fe7f9a704a913 Mon Sep 17 00:00:00 2001 From: Hedara Date: Sun, 2 Mar 2025 22:00:51 +0100 Subject: [PATCH 011/115] Fixed Ivy Cudgel types with type changes --- src/battle_main.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/battle_main.c b/src/battle_main.c index b24b2dcb02..b7e81247af 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -5969,12 +5969,14 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost) switch (species) { case SPECIES_OGERPON_WELLSPRING: - case SPECIES_OGERPON_HEARTHFLAME: - case SPECIES_OGERPON_CORNERSTONE: case SPECIES_OGERPON_WELLSPRING_TERA: + return TYPE_WATER; + case SPECIES_OGERPON_HEARTHFLAME: case SPECIES_OGERPON_HEARTHFLAME_TERA: + return TYPE_FIRE; + case SPECIES_OGERPON_CORNERSTONE: case SPECIES_OGERPON_CORNERSTONE_TERA: - return type2; + return TYPE_ROCK; } break; case EFFECT_NATURAL_GIFT: From 682b7874b2b6b0b0646547d631d50b91caa140c3 Mon Sep 17 00:00:00 2001 From: Hedara Date: Sun, 2 Mar 2025 22:11:23 +0100 Subject: [PATCH 012/115] Missed an Ivy Cudgel --- src/battle_controller_player.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 5bac769eb6..9ed1c4477c 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -1718,10 +1718,12 @@ static void MoveSelectionDisplayMoveType(u32 battler) else if (effect == EFFECT_IVY_CUDGEL) { - if (speciesId == SPECIES_OGERPON_WELLSPRING || speciesId == SPECIES_OGERPON_WELLSPRING_TERA - || speciesId == SPECIES_OGERPON_HEARTHFLAME || speciesId == SPECIES_OGERPON_HEARTHFLAME_TERA - || speciesId == SPECIES_OGERPON_CORNERSTONE || speciesId == SPECIES_OGERPON_CORNERSTONE_TERA) - type = gBattleMons[battler].types[1]; + if (speciesId == SPECIES_OGERPON_WELLSPRING || speciesId == SPECIES_OGERPON_WELLSPRING_TERA) + type = TYPE_WATER; + else if (speciesId == SPECIES_OGERPON_HEARTHFLAME || speciesId == SPECIES_OGERPON_HEARTHFLAME_TERA) + type = TYPE_FIRE; + else if (speciesId == SPECIES_OGERPON_CORNERSTONE || speciesId == SPECIES_OGERPON_CORNERSTONE_TERA) + type = TYPE_ROCK; } else if (GetMoveCategory(move) == DAMAGE_CATEGORY_STATUS && (GetActiveGimmick(battler) == GIMMICK_DYNAMAX || IsGimmickSelected(battler, GIMMICK_DYNAMAX))) From 7a3acdf7fed3d267236eee82a459819b5c549731 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Mon, 3 Mar 2025 08:58:37 +0100 Subject: [PATCH 013/115] Change ability to abilityNum in CreateTrainerMon (#6370) --- src/battle_main.c | 20 ++++++++++---------- test/battle/move_effect/charge.c | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/battle_main.c b/src/battle_main.c index b24b2dcb02..3045632af3 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -1888,7 +1888,7 @@ u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer const struct TrainerMon *partyData = trainer->party; u32 otIdType = OT_ID_RANDOM_NO_SHINY; u32 fixedOtId = 0; - u32 ability = 0; + u32 abilityNum = 0; if (trainer->doubleBattle == TRUE) personalityValue = 0x80; @@ -1927,25 +1927,25 @@ u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer if (partyData[monIndex].ability != ABILITY_NONE) { const struct SpeciesInfo *speciesInfo = &gSpeciesInfo[partyData[monIndex].species]; - u32 maxAbilities = ARRAY_COUNT(speciesInfo->abilities); - for (ability = 0; ability < maxAbilities; ++ability) + u32 maxAbilityNum = ARRAY_COUNT(speciesInfo->abilities); + for (abilityNum = 0; abilityNum < maxAbilityNum; ++abilityNum) { - if (speciesInfo->abilities[ability] == partyData[monIndex].ability) + if (speciesInfo->abilities[abilityNum] == partyData[monIndex].ability) break; } - if (ability >= maxAbilities) - ability = 0; + if (abilityNum >= maxAbilityNum) + abilityNum = 0; } else if (B_TRAINER_MON_RANDOM_ABILITY) { const struct SpeciesInfo *speciesInfo = &gSpeciesInfo[partyData[monIndex].species]; - ability = personalityHash % 3; - while (speciesInfo->abilities[ability] == ABILITY_NONE) + abilityNum = personalityHash % 3; + while (speciesInfo->abilities[abilityNum] == ABILITY_NONE) { - ability--; + abilityNum--; } } - SetMonData(&party[i], MON_DATA_ABILITY_NUM, &ability); + SetMonData(&party[i], MON_DATA_ABILITY_NUM, &abilityNum); SetMonData(&party[i], MON_DATA_FRIENDSHIP, &(partyData[monIndex].friendship)); if (partyData[monIndex].ball != ITEM_NONE) { diff --git a/test/battle/move_effect/charge.c b/test/battle/move_effect/charge.c index 8d4bbd9bcc..cd96a99226 100644 --- a/test/battle/move_effect/charge.c +++ b/test/battle/move_effect/charge.c @@ -134,7 +134,7 @@ SINGLE_BATTLE_TEST("Charge will not expire if it flinches twice in a row") { s16 damage[2]; GIVEN { - ASSUME(GetMoveAdditionalEffectById(MOVE_IRON_HEAD, 0)->moveEffect == MOVE_EFFECT_FLINCH); + ASSUME(GetMoveAdditionalEffectById(MOVE_IRON_HEAD, 0)->moveEffect == MOVE_EFFECT_FLINCH); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LUM_BERRY); } } WHEN { From 8041f6978b22b98cee151b730cf470bb4c3c92c3 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Mon, 3 Mar 2025 09:00:27 +0100 Subject: [PATCH 014/115] Small Code clean up in GetBattlerAbility (removes duplication) (#6362) --- src/battle_util.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 04f641ddac..dd6360cbd0 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -6664,8 +6664,11 @@ bool32 IsMoldBreakerTypeAbility(u32 battler, u32 ability) || (ability == ABILITY_MYCELIUM_MIGHT && IsBattleMoveStatus(gCurrentMove))); } -static inline bool32 CanBreakThroughAbility(u32 battlerAtk, u32 battlerDef, u32 ability) +static inline bool32 CanBreakThroughAbility(u32 battlerAtk, u32 battlerDef, u32 ability, u32 hasAbilityShield) { + if (hasAbilityShield || gBattleStruct->bypassMoldBreakerChecks) + return FALSE; + return ((IsMoldBreakerTypeAbility(battlerAtk, ability) || MoveIgnoresTargetAbility(gCurrentMove)) && battlerDef != battlerAtk && gAbilitiesInfo[gBattleMons[battlerDef].ability].breakable @@ -6676,7 +6679,7 @@ static inline bool32 CanBreakThroughAbility(u32 battlerAtk, u32 battlerDef, u32 u32 GetBattlerAbility(u32 battler) { - bool32 noAbilityShield = GetBattlerHoldEffectIgnoreAbility(battler, TRUE) != HOLD_EFFECT_ABILITY_SHIELD; + bool32 hasAbilityShield = GetBattlerHoldEffectIgnoreAbility(battler, TRUE) == HOLD_EFFECT_ABILITY_SHIELD; bool32 abilityCantBeSuppressed = gAbilitiesInfo[gBattleMons[battler].ability].cantBeSuppressed; if (abilityCantBeSuppressed) @@ -6687,9 +6690,7 @@ u32 GetBattlerAbility(u32 battler) && gBattleMons[battler].ability == ABILITY_COMATOSE) return ABILITY_NONE; - if (!gBattleStruct->bypassMoldBreakerChecks - && noAbilityShield - && CanBreakThroughAbility(gBattlerAttacker, battler, gBattleMons[gBattlerAttacker].ability)) + if (CanBreakThroughAbility(gBattlerAttacker, battler, gBattleMons[gBattlerAttacker].ability, hasAbilityShield)) return ABILITY_NONE; return gBattleMons[battler].ability; @@ -6698,14 +6699,12 @@ u32 GetBattlerAbility(u32 battler) if (gStatuses3[battler] & STATUS3_GASTRO_ACID) return ABILITY_NONE; - if (IsNeutralizingGasOnField() - && gBattleMons[battler].ability != ABILITY_NEUTRALIZING_GAS - && noAbilityShield) + if (!hasAbilityShield + && IsNeutralizingGasOnField() + && gBattleMons[battler].ability != ABILITY_NEUTRALIZING_GAS) return ABILITY_NONE; - if (!gBattleStruct->bypassMoldBreakerChecks - && noAbilityShield - && CanBreakThroughAbility(gBattlerAttacker, battler, gBattleMons[gBattlerAttacker].ability)) + if (CanBreakThroughAbility(gBattlerAttacker, battler, gBattleMons[gBattlerAttacker].ability, hasAbilityShield)) return ABILITY_NONE; return gBattleMons[battler].ability; From 7665324be076cdb7f85158ff0453f89eb8c9f6ed Mon Sep 17 00:00:00 2001 From: Hedara Date: Mon, 3 Mar 2025 10:00:53 +0100 Subject: [PATCH 015/115] Removed hard-coded types --- src/battle_controller_player.c | 10 ++++------ src/battle_main.c | 4 +--- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 9ed1c4477c..b84b87d0ed 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -1718,12 +1718,10 @@ static void MoveSelectionDisplayMoveType(u32 battler) else if (effect == EFFECT_IVY_CUDGEL) { - if (speciesId == SPECIES_OGERPON_WELLSPRING || speciesId == SPECIES_OGERPON_WELLSPRING_TERA) - type = TYPE_WATER; - else if (speciesId == SPECIES_OGERPON_HEARTHFLAME || speciesId == SPECIES_OGERPON_HEARTHFLAME_TERA) - type = TYPE_FIRE; - else if (speciesId == SPECIES_OGERPON_CORNERSTONE || speciesId == SPECIES_OGERPON_CORNERSTONE_TERA) - type = TYPE_ROCK; + if (speciesId == SPECIES_OGERPON_WELLSPRING || speciesId == SPECIES_OGERPON_WELLSPRING_TERA + || speciesId == SPECIES_OGERPON_HEARTHFLAME || speciesId == SPECIES_OGERPON_HEARTHFLAME_TERA + || speciesId == SPECIES_OGERPON_CORNERSTONE || speciesId == SPECIES_OGERPON_CORNERSTONE_TERA) + type = gSpeciesInfo[speciesId].types[1]; } else if (GetMoveCategory(move) == DAMAGE_CATEGORY_STATUS && (GetActiveGimmick(battler) == GIMMICK_DYNAMAX || IsGimmickSelected(battler, GIMMICK_DYNAMAX))) diff --git a/src/battle_main.c b/src/battle_main.c index b7e81247af..c50a76a4e0 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -5970,13 +5970,11 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost) { case SPECIES_OGERPON_WELLSPRING: case SPECIES_OGERPON_WELLSPRING_TERA: - return TYPE_WATER; case SPECIES_OGERPON_HEARTHFLAME: case SPECIES_OGERPON_HEARTHFLAME_TERA: - return TYPE_FIRE; case SPECIES_OGERPON_CORNERSTONE: case SPECIES_OGERPON_CORNERSTONE_TERA: - return TYPE_ROCK; + return gSpeciesInfo[species].types[1]; } break; case EFFECT_NATURAL_GIFT: From 6b9cc083729172d013f061ac5a97bfd66f5e67af Mon Sep 17 00:00:00 2001 From: Hedara Date: Mon, 3 Mar 2025 16:20:18 +0100 Subject: [PATCH 016/115] Add Raging Bull fix --- src/battle_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_main.c b/src/battle_main.c index c50a76a4e0..c2779e2b9a 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -5962,7 +5962,7 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost) case SPECIES_TAUROS_PALDEA_COMBAT: case SPECIES_TAUROS_PALDEA_BLAZE: case SPECIES_TAUROS_PALDEA_AQUA: - return type2; + return gSpeciesInfo[species].types[1]; } break; case EFFECT_IVY_CUDGEL: From d9c767049ff58bd33b107659366e0a8538ff44e0 Mon Sep 17 00:00:00 2001 From: lwelyk Date: Mon, 3 Mar 2025 13:48:02 -0600 Subject: [PATCH 017/115] Update README.md for contest src link (#6375) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5e83f9793b..cc978678c6 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Also, *please follow the Pull Request template and feel free to discuss how the - Fairy Type (configurable). - Physical/Special/Status Category (configurable). - New moves and abilities up to Scarlet and Violet. - - Custom Contest data up to SwSh, newer moves are WIP. ([source](https://pokemonurpg.com/info/contests/rse-move-list/)) + - Custom Contest data up to SwSh, newer moves are WIP. ([source](https://web.archive.org/web/20240910012333/https://pokemonurpg.com/info/contests/rse-move-list/)) - Battle gimmick support: - Mega Evolution - Primal Reversion From d44eff4e0c9857e1e8158414ca14addd9d04ccd0 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Mon, 3 Mar 2025 14:56:08 -0500 Subject: [PATCH 018/115] fix red card overwriting gBattlerAttacker causing subsequent MOVEEND cases checking attacker not to trigger properly --- asm/macros/battle_script.inc | 4 +++ data/battle_scripts_1.s | 17 +++++----- include/battle.h | 1 + src/battle_script_commands.c | 15 +++++++++ test/battle/hold_effect/red_card.c | 54 ++++++++++++++++++++++++++++++ 5 files changed, 82 insertions(+), 9 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index a169b3580b..e50cbcbe43 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -2376,6 +2376,10 @@ callnative BS_SwapStats .byte \stat .endm + + .macro restoresavedmove + callnative BS_RestoreSavedMove + .endm @ helpful macros .macro setstatchanger stat:req, stages:req, down:req diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 748fa2c5be..aaa03f0ac6 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -6045,6 +6045,8 @@ BattleScript_RoarSuccessSwitch:: BattleScript_RoarSuccessSwitch_Ret: swapattackerwithtarget @ continuation of RedCardActivates restoretarget + restoreattacker + restoresavedmove setbyte sSWITCH_CASE, B_SWITCH_NORMAL return @@ -9519,6 +9521,8 @@ BattleScript_RedCardActivationNoSwitch:: waitmessage B_WAIT_TIME_LONG removeitem BS_SCRIPTING restoretarget + restoreattacker + restoresavedmove return BattleScript_RedCardActivates:: @@ -9537,22 +9541,17 @@ BattleScript_RedCardEnd: return BattleScript_RedCardIngrain: printstring STRINGID_PKMNANCHOREDITSELF +BattleScript_RedCardIngrainContinue: waitmessage B_WAIT_TIME_LONG removeitem BS_SCRIPTING restoretarget return BattleScript_RedCardSuctionCups: - printstring STRINGID_PKMNANCHORSITSELFWITH - waitmessage B_WAIT_TIME_LONG - removeitem BS_SCRIPTING - restoretarget - return + printstring STRINGID_PKMNANCHORSITSELFWITH + goto BattleScript_RedCardIngrainContinue BattleScript_RedCardDynamaxed: printstring STRINGID_MOVEBLOCKEDBYDYNAMAX - waitmessage B_WAIT_TIME_LONG - removeitem BS_SCRIPTING - restoretarget - return + goto BattleScript_RedCardIngrainContinue BattleScript_EjectButtonActivates:: makevisible BS_ATTACKER diff --git a/include/battle.h b/include/battle.h index 27227544d9..c9517b9b71 100644 --- a/include/battle.h +++ b/include/battle.h @@ -836,6 +836,7 @@ struct BattleStruct struct MessageStatus slideMessageStatus; u8 trainerSlideSpriteIds[MAX_BATTLERS_COUNT]; u8 embodyAspectBoost[NUM_BATTLE_SIDES]; + u16 savedMove; // backup current move for mid-turn switching, e.g. Red Card }; // The palaceFlags member of struct BattleStruct contains 1 flag per move to indicate which moves the AI should consider, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index be57f4ae18..331ff44ff2 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -7075,6 +7075,8 @@ static void Cmd_moveend(void) { gLastUsedItem = gBattleMons[battler].item; SaveBattlerTarget(battler); // save battler with red card + SaveBattlerAttacker(gBattlerAttacker); + gBattleStruct->savedMove = gCurrentMove; gBattleScripting.battler = battler; gEffectBattler = gBattlerAttacker; gBattleStruct->redCardActivates = TRUE; @@ -18637,3 +18639,16 @@ void BS_SetSteelsurge(void) gBattlescriptCurrInstr = cmd->nextInstr; } } + +void BS_RestoreSavedMove(void) +{ + NATIVE_ARGS(); + + if (gBattleStruct->savedMove == MOVE_NONE) + DebugPrintfLevel(MGBA_LOG_WARN, "restoresavedmove was called with no move saved!"); + + gCurrentMove = gBattleStruct->savedMove; + gBattleStruct->savedMove = MOVE_NONE; + gBattlescriptCurrInstr = cmd->nextInstr; +} + diff --git a/test/battle/hold_effect/red_card.c b/test/battle/hold_effect/red_card.c index 88b208cf50..80595b5b65 100644 --- a/test/battle/hold_effect/red_card.c +++ b/test/battle/hold_effect/red_card.c @@ -520,3 +520,57 @@ SINGLE_BATTLE_TEST("Red Card activates before Eject Pack") ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); } } + +DOUBLE_BATTLE_TEST("Dancer still activates after Red Card") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) ; + PLAYER(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); } + PLAYER(SPECIES_CHANSEY); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_BULBASAUR); + OPPONENT(SPECIES_SHUCKLE); + } WHEN { + TURN { MOVE(playerLeft, MOVE_FIERY_DANCE, target: opponentLeft); } + } SCENE { + MESSAGE("Wobbuffet used Fiery Dance!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIERY_DANCE, playerLeft); + HP_BAR(opponentLeft); + // Red card trigger + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentLeft); + MESSAGE("The opposing Wobbuffet held up its Red Card against Wobbuffet!"); + MESSAGE("Chansey was dragged out!"); + // Dancer + ABILITY_POPUP(playerRight, ABILITY_DANCER); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIERY_DANCE, playerRight); + HP_BAR(opponentLeft); + } +} + +DOUBLE_BATTLE_TEST("Red Card: Dancer still activate after Red Card even if blocked by Suction Cups") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_SUCTION_CUPS); } + PLAYER(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); } + PLAYER(SPECIES_CHANSEY); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_BULBASAUR); + OPPONENT(SPECIES_SHUCKLE); + } WHEN { + TURN { MOVE(playerLeft, MOVE_FIERY_DANCE, target: opponentLeft); } + } SCENE { + MESSAGE("Wobbuffet used Fiery Dance!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIERY_DANCE, playerLeft); + HP_BAR(opponentLeft); + // red card trigger + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentLeft); + MESSAGE("The opposing Wobbuffet held up its Red Card against Wobbuffet!"); + MESSAGE("Wobbuffet anchors itself with Suction Cups!"); + NOT MESSAGE("Chansey was dragged out!"); + // Dancer + ABILITY_POPUP(playerRight, ABILITY_DANCER); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIERY_DANCE, playerRight); + HP_BAR(opponentLeft); + } +} + From 26c73dca32a4b1cab0c7a4b56554588d648a1289 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Mon, 3 Mar 2025 17:01:15 -0500 Subject: [PATCH 019/115] move red card dancer tests to dancer.c --- test/battle/ability/dancer.c | 54 ++++++++++++++++++++++++++++++ test/battle/hold_effect/red_card.c | 53 ----------------------------- 2 files changed, 54 insertions(+), 53 deletions(-) diff --git a/test/battle/ability/dancer.c b/test/battle/ability/dancer.c index 657a126470..1e4c61dba0 100644 --- a/test/battle/ability/dancer.c +++ b/test/battle/ability/dancer.c @@ -246,3 +246,57 @@ DOUBLE_BATTLE_TEST("Dancer doesn't call a move that didn't execute due to Powder } } } + + +DOUBLE_BATTLE_TEST("Dancer still activates after Red Card") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) ; + PLAYER(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); } + PLAYER(SPECIES_CHANSEY); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_BULBASAUR); + OPPONENT(SPECIES_SHUCKLE); + } WHEN { + TURN { MOVE(playerLeft, MOVE_FIERY_DANCE, target: opponentLeft); } + } SCENE { + MESSAGE("Wobbuffet used Fiery Dance!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIERY_DANCE, playerLeft); + HP_BAR(opponentLeft); + // Red card trigger + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentLeft); + MESSAGE("The opposing Wobbuffet held up its Red Card against Wobbuffet!"); + MESSAGE("Chansey was dragged out!"); + // Dancer + ABILITY_POPUP(playerRight, ABILITY_DANCER); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIERY_DANCE, playerRight); + HP_BAR(opponentLeft); + } +} + +DOUBLE_BATTLE_TEST("Dancer still activate after Red Card even if blocked by Suction Cups") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_SUCTION_CUPS); } + PLAYER(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); } + PLAYER(SPECIES_CHANSEY); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_BULBASAUR); + OPPONENT(SPECIES_SHUCKLE); + } WHEN { + TURN { MOVE(playerLeft, MOVE_FIERY_DANCE, target: opponentLeft); } + } SCENE { + MESSAGE("Wobbuffet used Fiery Dance!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIERY_DANCE, playerLeft); + HP_BAR(opponentLeft); + // red card trigger + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentLeft); + MESSAGE("The opposing Wobbuffet held up its Red Card against Wobbuffet!"); + MESSAGE("Wobbuffet anchors itself with Suction Cups!"); + NOT MESSAGE("Chansey was dragged out!"); + // Dancer + ABILITY_POPUP(playerRight, ABILITY_DANCER); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIERY_DANCE, playerRight); + HP_BAR(opponentLeft); + } +} diff --git a/test/battle/hold_effect/red_card.c b/test/battle/hold_effect/red_card.c index 80595b5b65..8513e795b9 100644 --- a/test/battle/hold_effect/red_card.c +++ b/test/battle/hold_effect/red_card.c @@ -521,56 +521,3 @@ SINGLE_BATTLE_TEST("Red Card activates before Eject Pack") } } -DOUBLE_BATTLE_TEST("Dancer still activates after Red Card") -{ - GIVEN { - PLAYER(SPECIES_WOBBUFFET) ; - PLAYER(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); } - PLAYER(SPECIES_CHANSEY); - OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } - OPPONENT(SPECIES_BULBASAUR); - OPPONENT(SPECIES_SHUCKLE); - } WHEN { - TURN { MOVE(playerLeft, MOVE_FIERY_DANCE, target: opponentLeft); } - } SCENE { - MESSAGE("Wobbuffet used Fiery Dance!"); - ANIMATION(ANIM_TYPE_MOVE, MOVE_FIERY_DANCE, playerLeft); - HP_BAR(opponentLeft); - // Red card trigger - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentLeft); - MESSAGE("The opposing Wobbuffet held up its Red Card against Wobbuffet!"); - MESSAGE("Chansey was dragged out!"); - // Dancer - ABILITY_POPUP(playerRight, ABILITY_DANCER); - ANIMATION(ANIM_TYPE_MOVE, MOVE_FIERY_DANCE, playerRight); - HP_BAR(opponentLeft); - } -} - -DOUBLE_BATTLE_TEST("Red Card: Dancer still activate after Red Card even if blocked by Suction Cups") -{ - GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_SUCTION_CUPS); } - PLAYER(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); } - PLAYER(SPECIES_CHANSEY); - OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } - OPPONENT(SPECIES_BULBASAUR); - OPPONENT(SPECIES_SHUCKLE); - } WHEN { - TURN { MOVE(playerLeft, MOVE_FIERY_DANCE, target: opponentLeft); } - } SCENE { - MESSAGE("Wobbuffet used Fiery Dance!"); - ANIMATION(ANIM_TYPE_MOVE, MOVE_FIERY_DANCE, playerLeft); - HP_BAR(opponentLeft); - // red card trigger - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentLeft); - MESSAGE("The opposing Wobbuffet held up its Red Card against Wobbuffet!"); - MESSAGE("Wobbuffet anchors itself with Suction Cups!"); - NOT MESSAGE("Chansey was dragged out!"); - // Dancer - ABILITY_POPUP(playerRight, ABILITY_DANCER); - ANIMATION(ANIM_TYPE_MOVE, MOVE_FIERY_DANCE, playerRight); - HP_BAR(opponentLeft); - } -} - From e750dca08a75e008914b01bb371d809fd4f4c390 Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Tue, 4 Mar 2025 11:02:33 +0000 Subject: [PATCH 020/115] Reorder Dancer activation --- include/constants/battle_script_commands.h | 2 +- src/battle_script_commands.c | 87 ++++++++++------------ src/battle_util.c | 2 + test/battle/ability/dancer.c | 34 +++++++++ 4 files changed, 78 insertions(+), 47 deletions(-) diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 2cbc25b003..2aa5799a9e 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -293,13 +293,13 @@ enum MoveEndEffects MOVEEND_LIFEORB_SHELLBELL, // Includes shell bell, throat spray, etc MOVEEND_CHANGED_ITEMS, MOVEEND_PICKPOCKET, - MOVEEND_DANCER, MOVEEND_EMERGENCY_EXIT, MOVEEND_SYMBIOSIS, MOVEEND_OPPORTUNIST, // Occurs after other stat change items/abilities to try and copy the boosts MOVEEND_SAME_MOVE_TURNS, MOVEEND_SET_EVOLUTION_TRACKER, MOVEEND_CLEAR_BITS, + MOVEEND_DANCER, MOVEEND_PURSUIT_NEXT_ACTION, MOVEEND_COUNT, }; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 331ff44ff2..fc86c99bf1 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -7143,49 +7143,6 @@ static void Cmd_moveend(void) } gBattleScripting.moveendState++; break; - case MOVEEND_DANCER: // Special case because it's so annoying - if (IsDanceMove(gCurrentMove) && !gBattleStruct->snatchedMoveIsUsed) - { - u32 battler, nextDancer = 0; - bool32 hasDancerTriggered = FALSE; - - for (battler = 0; battler < gBattlersCount; battler++) - { - if (gSpecialStatuses[battler].dancerUsedMove) - { - // in case a battler fails to act on a Dancer-called move - hasDancerTriggered = TRUE; - break; - } - } - - if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & (MOVE_RESULT_FAILED | MOVE_RESULT_DOESNT_AFFECT_FOE) - || (gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE && !hasDancerTriggered) - || (!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) - { - gBattleScripting.savedBattler = gBattlerTarget | 0x4; - gBattleScripting.savedBattler |= (gBattlerAttacker << 4); - gSpecialStatuses[gBattlerAttacker].dancerUsedMove = TRUE; - } - for (battler = 0; battler < gBattlersCount; battler++) - { - if (GetBattlerAbility(battler) == ABILITY_DANCER && !gSpecialStatuses[battler].dancerUsedMove) - { - if (!nextDancer || (gBattleMons[battler].speed < gBattleMons[nextDancer & 0x3].speed)) - nextDancer = battler | 0x4; - } - } - if (nextDancer && AbilityBattleEffects(ABILITYEFFECT_MOVE_END_OTHER, nextDancer & 0x3, 0, 0, 0)) - effect = TRUE; - - ClearDamageCalcResults(); - } - } - gBattleScripting.moveendState++; - break; case MOVEEND_EMERGENCY_EXIT: // Special case, because moves hitting multiple opponents stop after switching out for (i = 0; i < gBattlersCount; i++) { @@ -7291,8 +7248,6 @@ static void Cmd_moveend(void) gBattleStruct->isAtkCancelerForCalledMove = FALSE; gBattleStruct->swapDamageCategory = FALSE; gBattleStruct->categoryOverride = FALSE; - gBattleStruct->bouncedMoveIsUsed = FALSE; - gBattleStruct->snatchedMoveIsUsed = FALSE; gBattleStruct->additionalEffectsCounter = 0; gBattleStruct->poisonPuppeteerConfusion = FALSE; gBattleStruct->fickleBeamBoosted = FALSE; @@ -7305,7 +7260,6 @@ static void Cmd_moveend(void) if (B_CHARGE >= GEN_9 && moveType == TYPE_ELECTRIC && (IsBattlerTurnDamaged(gBattlerTarget) || gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) gStatuses3[gBattlerAttacker] &= ~(STATUS3_CHARGED_UP); memset(gQueuedStatBoosts, 0, sizeof(gQueuedStatBoosts)); - ClearDamageCalcResults(); for (i = 0; i < gBattlersCount; i++) { @@ -7320,6 +7274,47 @@ static void Cmd_moveend(void) } } + gBattleScripting.moveendState++; + break; + case MOVEEND_DANCER: // Special case because it's so annoying + if (IsDanceMove(gCurrentMove) && !gBattleStruct->snatchedMoveIsUsed) + { + u32 battler, nextDancer = 0; + bool32 hasDancerTriggered = FALSE; + + for (battler = 0; battler < gBattlersCount; battler++) + { + if (gSpecialStatuses[battler].dancerUsedMove) + { + // in case a battler fails to act on a Dancer-called move + hasDancerTriggered = TRUE; + break; + } + } + + if (!(gBattleStruct->moveResultFlags[gBattlerTarget] & (MOVE_RESULT_FAILED | MOVE_RESULT_DOESNT_AFFECT_FOE) + || (gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE && !hasDancerTriggered) + || (!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) + { + gBattleScripting.savedBattler = gBattlerTarget | 0x4; + gBattleScripting.savedBattler |= (gBattlerAttacker << 4); + gSpecialStatuses[gBattlerAttacker].dancerUsedMove = TRUE; + } + for (battler = 0; battler < gBattlersCount; battler++) + { + if (GetBattlerAbility(battler) == ABILITY_DANCER && !gSpecialStatuses[battler].dancerUsedMove) + { + if (!nextDancer || (gBattleMons[battler].speed < gBattleMons[nextDancer & 0x3].speed)) + nextDancer = battler | 0x4; + } + } + if (nextDancer && AbilityBattleEffects(ABILITYEFFECT_MOVE_END_OTHER, nextDancer & 0x3, 0, 0, 0)) + effect = TRUE; + } + } gBattleScripting.moveendState++; break; case MOVEEND_PURSUIT_NEXT_ACTION: diff --git a/src/battle_util.c b/src/battle_util.c index 04f641ddac..4a7a0faf0e 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -811,6 +811,8 @@ void HandleAction_ActionFinished(void) gBattleScripting.animTurn = 0; gBattleScripting.animTargetsHit = 0; gBattleStruct->dynamicMoveType = 0; + gBattleStruct->bouncedMoveIsUsed = FALSE; + gBattleStruct->snatchedMoveIsUsed = FALSE; gBattleScripting.moveendState = 0; gBattleCommunication[3] = 0; gBattleCommunication[4] = 0; diff --git a/test/battle/ability/dancer.c b/test/battle/ability/dancer.c index 1e4c61dba0..b95b79a11f 100644 --- a/test/battle/ability/dancer.c +++ b/test/battle/ability/dancer.c @@ -300,3 +300,37 @@ DOUBLE_BATTLE_TEST("Dancer still activate after Red Card even if blocked by Suct HP_BAR(opponentLeft); } } + +DOUBLE_BATTLE_TEST("Dancer correctly restores move targets") +{ + GIVEN { + ASSUME(IsDanceMove(MOVE_REVELATION_DANCE)); + PLAYER(SPECIES_ORICORIO) { Speed(10); } + PLAYER(SPECIES_ORICORIO) { Speed(3); } + OPPONENT(SPECIES_ORICORIO) { Speed(1); } + OPPONENT(SPECIES_ORICORIO) { Speed(5); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_REVELATION_DANCE, target: opponentLeft); + MOVE(opponentRight, MOVE_TACKLE, target: playerRight); + MOVE(playerRight, MOVE_TACKLE, target: opponentRight); + MOVE(opponentLeft, MOVE_TACKLE, target: playerRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, playerLeft); + HP_BAR(opponentLeft); + ABILITY_POPUP(opponentLeft, ABILITY_DANCER); + ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, opponentLeft); + HP_BAR(playerLeft); + ABILITY_POPUP(playerRight, ABILITY_DANCER); + ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, playerRight); + HP_BAR(opponentLeft); + ABILITY_POPUP(opponentRight, ABILITY_DANCER); + ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, opponentRight); + HP_BAR(playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); + HP_BAR(playerRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerRight); + HP_BAR(opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); + HP_BAR(playerRight); + } +} From 5a8fbeeb47f782411a5d5f9551356b3c4ed9060c Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Tue, 4 Mar 2025 11:13:45 +0000 Subject: [PATCH 021/115] Other Dancer tests cleanup --- test/battle/ability/dancer.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/battle/ability/dancer.c b/test/battle/ability/dancer.c index b95b79a11f..6a5b64efb2 100644 --- a/test/battle/ability/dancer.c +++ b/test/battle/ability/dancer.c @@ -58,10 +58,10 @@ DOUBLE_BATTLE_TEST("Dancer triggers from slowest to fastest") { GIVEN { ASSUME(IsDanceMove(MOVE_DRAGON_DANCE)); - PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_DANCER); Speed(10); } + PLAYER(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(10); } PLAYER(SPECIES_WYNAUT) { Speed(50); } OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(20); } - OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_DANCER); Speed(3); } + OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(3); } } WHEN { TURN { MOVE(playerRight, MOVE_DRAGON_DANCE); } } SCENE { @@ -103,10 +103,10 @@ DOUBLE_BATTLE_TEST("Dancer still triggers if another dancer flinches") GIVEN { ASSUME(MoveHasAdditionalEffectWithChance(MOVE_FAKE_OUT, MOVE_EFFECT_FLINCH, 100)); ASSUME(IsDanceMove(MOVE_DRAGON_DANCE)); - PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_DANCER); Speed(10); } + PLAYER(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(3); } PLAYER(SPECIES_WYNAUT) { Speed(5); } OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(20); } - OPPONENT(SPECIES_WOBBUFFET) { Speed(3); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(10); } } WHEN { TURN { MOVE(opponentLeft, MOVE_FAKE_OUT, target: playerLeft); MOVE(playerRight, MOVE_DRAGON_DANCE); } } SCENE { @@ -116,7 +116,7 @@ DOUBLE_BATTLE_TEST("Dancer still triggers if another dancer flinches") ABILITY_POPUP(playerLeft, ABILITY_DANCER); MESSAGE("Wobbuffet flinched and couldn't move!"); NONE_OF { - MESSAGE("Wobbuffet used Dragon Dance!"); + MESSAGE("Oricorio used Dragon Dance!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); } From 0cce4bad8cf35f5193958078fa3328fd0e6ae6e8 Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Tue, 4 Mar 2025 11:21:14 +0000 Subject: [PATCH 022/115] Speeds were already correct --- test/battle/ability/dancer.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/battle/ability/dancer.c b/test/battle/ability/dancer.c index 6a5b64efb2..b2ca70cc48 100644 --- a/test/battle/ability/dancer.c +++ b/test/battle/ability/dancer.c @@ -103,10 +103,10 @@ DOUBLE_BATTLE_TEST("Dancer still triggers if another dancer flinches") GIVEN { ASSUME(MoveHasAdditionalEffectWithChance(MOVE_FAKE_OUT, MOVE_EFFECT_FLINCH, 100)); ASSUME(IsDanceMove(MOVE_DRAGON_DANCE)); - PLAYER(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(3); } + PLAYER(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(10); } PLAYER(SPECIES_WYNAUT) { Speed(5); } OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Speed(20); } - OPPONENT(SPECIES_WOBBUFFET) { Speed(10); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(3); } } WHEN { TURN { MOVE(opponentLeft, MOVE_FAKE_OUT, target: playerLeft); MOVE(playerRight, MOVE_DRAGON_DANCE); } } SCENE { From fe4046a9004c583ca1ada86c0c195aba4f7e5690 Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Tue, 4 Mar 2025 11:34:07 +0000 Subject: [PATCH 023/115] Fix tests --- src/battle_script_commands.c | 1 + test/battle/ability/dancer.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index fc86c99bf1..0742c79aab 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -8740,6 +8740,7 @@ static void ResetValuesForCalledMove(void) gBattleScripting.animTargetsHit = 0; SetTypeBeforeUsingMove(gCurrentMove, gBattlerAttacker); HandleMoveTargetRedirection(); + ClearDamageCalcResults(); } static void Cmd_jumptocalledmove(void) diff --git a/test/battle/ability/dancer.c b/test/battle/ability/dancer.c index b2ca70cc48..de33121e13 100644 --- a/test/battle/ability/dancer.c +++ b/test/battle/ability/dancer.c @@ -39,7 +39,7 @@ DOUBLE_BATTLE_TEST("Dancer can copy Teeter Dance and confuse both opposing targe GIVEN { ASSUME(IsDanceMove(MOVE_TEETER_DANCE)); ASSUME(gItemsInfo[ITEM_LUM_BERRY].holdEffect == HOLD_EFFECT_CURE_STATUS); - PLAYER(SPECIES_WOBBUFFET) + PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT) { Item(ITEM_LUM_BERRY); } OPPONENT(SPECIES_ORICORIO) { Ability(ABILITY_DANCER); Item(ITEM_LUM_BERRY); } OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); } @@ -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 and couldn't move!"); + MESSAGE("Oricorio flinched and couldn't move!"); NONE_OF { MESSAGE("Oricorio used Dragon Dance!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerLeft); From 3398d75fe873633da3f2d9d06121ea74d2478f28 Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Tue, 4 Mar 2025 08:26:07 -0500 Subject: [PATCH 024/115] Improve AI's handling of player's Encore (#6305) Co-authored-by: Bassoonian --- src/battle_ai_util.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index f7b5ab9c64..9a522fba09 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -3831,6 +3831,7 @@ static u32 IncreaseStatUpScoreInternal(u32 battlerAtk, u32 battlerDef, u32 statI u32 noOfHitsToFaint = NoOfHitsForTargetToFaintAI(battlerDef, battlerAtk); u32 aiIsFaster = AI_IsFaster(battlerAtk, battlerDef, TRUE); u32 shouldSetUp = ((noOfHitsToFaint >= 2 && aiIsFaster) || (noOfHitsToFaint >= 3 && !aiIsFaster) || noOfHitsToFaint == UNKNOWN_NO_OF_HITS); + u32 i; if (considerContrary && AI_DATA->abilities[battlerAtk] == ABILITY_CONTRARY) return NO_INCREASE; @@ -3851,9 +3852,30 @@ static u32 IncreaseStatUpScoreInternal(u32 battlerAtk, u32 battlerDef, u32 statI if (AI_DATA->abilities[battlerDef] == ABILITY_OPPORTUNIST) return NO_INCREASE; - // If predicting switch, stat increases are great momentum + // Don't increase stats if opposing battler has Encore + if (HasMoveEffect(battlerDef, EFFECT_ENCORE)) + return NO_INCREASE; + + if (IsDoubleBattle() && HasMoveEffect(GetPartnerBattler(battlerDef), EFFECT_ENCORE)) + return NO_INCREASE; + + // Predicting switch if (IsBattlerPredictedToSwitch(battlerDef)) + { + struct Pokemon *playerParty = GetBattlerParty(battlerDef); + // If expected switchin outspeeds and has Encore, don't increase + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (GetMoveEffect(GetMonData(&playerParty[AI_DATA->mostSuitableMonId[battlerDef]], MON_DATA_MOVE1 + i, NULL)) == EFFECT_ENCORE + && GetMonData(&playerParty[AI_DATA->mostSuitableMonId[battlerDef]], MON_DATA_PP1 + i, NULL) > 0); + { + if (GetMonData(&playerParty[AI_DATA->mostSuitableMonId[battlerDef]], MON_DATA_SPEED, NULL) > gBattleMons[battlerAtk].speed) + return NO_INCREASE; + } + } + // Otherwise if predicting switch, stat increases are great momentum tempScore += WEAK_EFFECT; + } switch (statId) { From c7ac1a19dfccfa9710689531c5618b5a427f31b2 Mon Sep 17 00:00:00 2001 From: Rachel Date: Tue, 4 Mar 2025 11:10:00 -0800 Subject: [PATCH 025/115] Refactor teachable learnset helper (#6378) --- .gitignore | 1 + Makefile | 18 +- src/data/pokemon/teachable_learnsets.h | 20180 ++++++++++---------- tools/learnset_helpers/make_learnables.py | 62 + tools/learnset_helpers/make_teachables.py | 204 + tools/learnset_helpers/teachable.py | 214 - 6 files changed, 10372 insertions(+), 10307 deletions(-) create mode 100755 tools/learnset_helpers/make_learnables.py create mode 100644 tools/learnset_helpers/make_teachables.py delete mode 100644 tools/learnset_helpers/teachable.py diff --git a/.gitignore b/.gitignore index 301fc8ca29..6d9453242a 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,4 @@ tools/trainerproc/trainerproc *.smol *.fastSmol *.smolTM +__pycache__ diff --git a/Makefile b/Makefile index 095b6b6ac8..de030e096f 100644 --- a/Makefile +++ b/Makefile @@ -165,6 +165,12 @@ PATCHELF := $(TOOLS_DIR)/patchelf/patchelf$(EXE) ROMTEST ?= $(shell { command -v mgba-rom-test || command -v $(TOOLS_DIR)/mgba/mgba-rom-test$(EXE); } 2>/dev/null) ROMTESTHYDRA := $(TOOLS_DIR)/mgba-rom-test-hydra/mgba-rom-test-hydra$(EXE) +# Learnset helper is a Python script +LEARNSET_HELPERS_DIR := $(TOOLS_DIR)/learnset_helpers +LEARNSET_HELPERS_DATA_DIR := $(LEARNSET_HELPERS_DIR)/porymoves_files +LEARNSET_HELPERS_BUILD_DIR := $(LEARNSET_HELPERS_DIR)/build +ALL_LEARNABLES_JSON := $(LEARNSET_HELPERS_BUILD_DIR)/all_learnables.json + PERL := perl SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c @@ -338,6 +344,7 @@ generated: $(AUTO_GEN_TARGETS) clean-generated: -rm -f $(AUTO_GEN_TARGETS) + -rm -f $(ALL_LEARNABLES_JSON) COMPETITIVE_PARTY_SYNTAX := $(shell PATH="$(PATH)"; echo 'COMPETITIVE_PARTY_SYNTAX' | $(CPP) $(CPPFLAGS) -imacros include/gba/defines.h -imacros include/config/general.h | tail -n1) ifeq ($(COMPETITIVE_PARTY_SYNTAX),1) @@ -427,11 +434,16 @@ $(OBJ_DIR)/sym_common.ld: sym_common.txt $(C_OBJS) $(wildcard common_syms/*.txt) $(OBJ_DIR)/sym_ewram.ld: sym_ewram.txt $(RAMSCRGEN) ewram_data $< ENGLISH > $@ -MOVES_JSON_DIR := $(TOOLS_DIR)/learnset_helpers/porymoves_files -TEACHABLE_DEPS := $(shell find data/ -type f -name '*.inc') $(INCLUDE_DIRS)/constants/tms_hms.h $(C_SUBDIR)/pokemon.c $(wildcard $(MOVES_JSON_DIR)/*.json) +TEACHABLE_DEPS := $(ALL_LEARNABLES_JSON) $(shell find data/ -type f -name '*.inc') $(INCLUDE_DIRS)/constants/tms_hms.h $(C_SUBDIR)/pokemon.c + +$(LEARNSET_HELPERS_BUILD_DIR): + @mkdir -p $@ + +$(ALL_LEARNABLES_JSON): $(wildcard $(LEARNSET_HELPERS_DATA_DIR)/*.json) | $(LEARNSET_HELPERS_BUILD_DIR) + python3 $(LEARNSET_HELPERS_DIR)/make_learnables.py $(LEARNSET_HELPERS_DATA_DIR) $@ $(DATA_SRC_SUBDIR)/pokemon/teachable_learnsets.h: $(TEACHABLE_DEPS) - python3 $(TOOLS_DIR)/learnset_helpers/teachable.py + python3 $(LEARNSET_HELPERS_DIR)/make_teachables.py $< # Linker script LD_SCRIPT := ld_script_modern.ld diff --git a/src/data/pokemon/teachable_learnsets.h b/src/data/pokemon/teachable_learnsets.h index b0755d6039..ae04d18e68 100644 --- a/src/data/pokemon/teachable_learnsets.h +++ b/src/data/pokemon/teachable_learnsets.h @@ -1,5 +1,5 @@ // -// DO NOT MODIFY THIS FILE! It is auto-generated from tools/learnset_helpers/teachable.py +// DO NOT MODIFY THIS FILE! It is auto-generated by tools/learnset_helpers/make_teachables.py // // *************************************************** // @@ -63,7 +63,7 @@ // - MOVE_WATERFALL // // - MOVE_DIVE // // *************************************************** // -// Tutor moves found in map scripts: // +// Tutor moves found from map scripts: // // - MOVE_BODY_SLAM // // - MOVE_COUNTER // // - MOVE_DEFENSE_CURL // @@ -95,7 +95,7 @@ // - MOVE_THUNDER_PUNCH // // - MOVE_THUNDER_WAVE // // *************************************************** // -// Near-universal moves found in sUniversalMoves: // +// Near-universal moves found from sUniversalMoves: // // - MOVE_BIDE // // - MOVE_FRUSTRATION // // - MOVE_HIDDEN_POWER // @@ -115,101 +115,101 @@ static const u16 sNoneTeachableLearnset[] = { #if P_FAMILY_BULBASAUR static const u16 sBulbasaurTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, MOVE_CUT, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, MOVE_ROCK_SMASH, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sIvysaurTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, MOVE_CUT, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sVenusaurTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, MOVE_CUT, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_BULBASAUR @@ -218,141 +218,141 @@ static const u16 sVenusaurTeachableLearnset[] = { static const u16 sCharmanderTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sCharmeleonTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sCharizardTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FLY, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STEEL_WING, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CHARMANDER @@ -361,132 +361,132 @@ static const u16 sCharizardTeachableLearnset[] = { static const u16 sSquirtleTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SURF, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_ROLLOUT, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SURF, MOVE_SWAGGER, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sWartortleTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SURF, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_ROLLOUT, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SURF, MOVE_SWAGGER, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sBlastoiseTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SURF, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_ROLLOUT, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SURF, MOVE_SWAGGER, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SQUIRTLE @@ -504,31 +504,31 @@ static const u16 sMetapodTeachableLearnset[] = { static const u16 sButterfreeTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CATERPIE @@ -547,28 +547,28 @@ static const u16 sBeedrillTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BRICK_BREAK, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, MOVE_ROCK_SMASH, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_WEEDLE @@ -577,73 +577,73 @@ static const u16 sBeedrillTeachableLearnset[] = { static const u16 sPidgeyTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sPidgeottoTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sPidgeotTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_PIDGEY @@ -652,50 +652,57 @@ static const u16 sPidgeotTeachableLearnset[] = { static const u16 sRattataTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_COUNTER, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sRaticateTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_COUNTER, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, @@ -703,27 +710,20 @@ static const u16 sRaticateTeachableLearnset[] = { MOVE_ROCK_SMASH, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -731,29 +731,29 @@ static const u16 sRaticateTeachableLearnset[] = { static const u16 sRattataAlolaTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_FACADE, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; @@ -761,11 +761,14 @@ static const u16 sRaticateAlolaTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_RAIN_DANCE, @@ -773,20 +776,17 @@ static const u16 sRaticateAlolaTeachableLearnset[] = { MOVE_ROAR, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; #endif //P_ALOLAN_FORMS @@ -796,47 +796,47 @@ static const u16 sRaticateAlolaTeachableLearnset[] = { static const u16 sSpearowTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sFearowTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SPEAROW @@ -844,62 +844,62 @@ static const u16 sFearowTeachableLearnset[] = { #if P_FAMILY_EKANS static const u16 sEkansTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; static const u16 sArbokTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_EKANS @@ -908,140 +908,144 @@ static const u16 sArbokTeachableLearnset[] = { #if P_GEN_2_CROSS_EVOS static const u16 sPichuTeachableLearnset[] = { MOVE_ATTRACT, - MOVE_DOUBLE_TEAM, - MOVE_FACADE, - MOVE_FLASH, - MOVE_IRON_TAIL, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REFLECT, - MOVE_REST, - MOVE_SHOCK_WAVE, - MOVE_SURF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, MOVE_BODY_SLAM, MOVE_COUNTER, MOVE_DEFENSE_CURL, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_ENDURE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, MOVE_ROLLOUT, MOVE_SEISMIC_TOSS, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SURF, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_GEN_2_CROSS_EVOS static const u16 sPikachuTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROCK_SMASH, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROLLOUT, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sRaichuTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROCK_SMASH, + MOVE_ROLLOUT, MOVE_SAFEGUARD, + MOVE_SEISMIC_TOSS, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROLLOUT, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #if P_ALOLAN_FORMS static const u16 sRaichuAlolaTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_RAIN_DANCE, @@ -1049,24 +1053,20 @@ static const u16 sRaichuAlolaTeachableLearnset[] = { MOVE_REST, MOVE_ROCK_SMASH, MOVE_SAFEGUARD, + MOVE_SEISMIC_TOSS, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_ALOLAN_FORMS @@ -1076,81 +1076,81 @@ static const u16 sRaichuAlolaTeachableLearnset[] = { static const u16 sSandshrewTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SAFEGUARD, MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sSandslashTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SAFEGUARD, MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -1159,38 +1159,38 @@ static const u16 sSandshrewAlolaTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_REST, - MOVE_ROCK_TOMB, - MOVE_SAFEGUARD, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, + MOVE_SAFEGUARD, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -1198,39 +1198,39 @@ static const u16 sSandslashAlolaTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_REST, - MOVE_ROCK_TOMB, - MOVE_SAFEGUARD, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, + MOVE_SAFEGUARD, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_ALOLAN_FORMS @@ -1241,35 +1241,35 @@ static const u16 sNidoranFTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_COUNTER, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_ICE_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROCK_SMASH, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; @@ -1277,35 +1277,35 @@ static const u16 sNidorinaTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_COUNTER, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_ICE_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROCK_SMASH, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; @@ -1313,186 +1313,186 @@ static const u16 sNidoqueenTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SEISMIC_TOSS, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_PUNCH, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_THUNDER_PUNCH, MOVE_UNAVAILABLE, }; static const u16 sNidoranMTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_COUNTER, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_ICE_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROCK_SMASH, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; static const u16 sNidorinoTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_COUNTER, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_ICE_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROCK_SMASH, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; static const u16 sNidokingTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SEISMIC_TOSS, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_PUNCH, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_THUNDER_PUNCH, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_NIDORAN @@ -1501,47 +1501,47 @@ static const u16 sNidokingTeachableLearnset[] = { #if P_GEN_2_CROSS_EVOS static const u16 sCleffaTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_FLASH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REFLECT, - MOVE_REST, - MOVE_SAFEGUARD, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, MOVE_ROLLOUT, + MOVE_SAFEGUARD, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SOFT_BOILED, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_GEN_2_CROSS_EVOS @@ -1549,123 +1549,123 @@ static const u16 sCleffaTeachableLearnset[] = { static const u16 sClefairyTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_ICE_BEAM, - MOVE_IRON_TAIL, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REFLECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_SAFEGUARD, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_ICY_WIND, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_ROCK_SMASH, MOVE_ROLLOUT, + MOVE_SAFEGUARD, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, MOVE_SOFT_BOILED, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sClefableTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, - MOVE_IRON_TAIL, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REFLECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_SAFEGUARD, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_ICY_WIND, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_ROCK_SMASH, MOVE_ROLLOUT, + MOVE_SAFEGUARD, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, MOVE_SOFT_BOILED, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CLEFAIRY @@ -1673,36 +1673,40 @@ static const u16 sClefableTeachableLearnset[] = { #if P_FAMILY_VULPIX static const u16 sVulpixTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_IRON_TAIL, MOVE_OVERHEAT, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, MOVE_SAFEGUARD, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sNinetalesTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -1710,23 +1714,19 @@ static const u16 sNinetalesTeachableLearnset[] = { MOVE_IRON_TAIL, MOVE_OVERHEAT, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -1734,60 +1734,60 @@ static const u16 sNinetalesTeachableLearnset[] = { static const u16 sVulpixAlolaTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, MOVE_SAFEGUARD, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sNinetalesAlolaTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, MOVE_SAFEGUARD, - MOVE_SOLAR_BEAM, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_ALOLAN_FORMS @@ -1797,43 +1797,43 @@ static const u16 sNinetalesAlolaTeachableLearnset[] = { #if P_GEN_2_CROSS_EVOS static const u16 sIgglybuffTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_FLASH, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REFLECT, - MOVE_REST, - MOVE_SAFEGUARD, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, MOVE_ICY_WIND, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, MOVE_ROLLOUT, + MOVE_SAFEGUARD, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_GEN_2_CROSS_EVOS @@ -1841,121 +1841,121 @@ static const u16 sIgglybuffTeachableLearnset[] = { static const u16 sJigglypuffTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_ICE_BEAM, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REFLECT, - MOVE_REST, - MOVE_SAFEGUARD, - MOVE_SANDSTORM, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_ICY_WIND, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, MOVE_ROLLOUT, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sWigglytuffTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REFLECT, - MOVE_REST, - MOVE_SAFEGUARD, - MOVE_SANDSTORM, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_ICY_WIND, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, MOVE_ROLLOUT, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_JIGGLYPUFF @@ -1964,7 +1964,9 @@ static const u16 sWigglytuffTeachableLearnset[] = { static const u16 sZubatTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_GIGA_DRAIN, @@ -1972,27 +1974,27 @@ static const u16 sZubatTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; static const u16 sGolbatTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_GIGA_DRAIN, @@ -2001,20 +2003,18 @@ static const u16 sGolbatTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; @@ -2022,7 +2022,9 @@ static const u16 sGolbatTeachableLearnset[] = { static const u16 sCrobatTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_GIGA_DRAIN, @@ -2031,20 +2033,18 @@ static const u16 sCrobatTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_GEN_2_CROSS_EVOS @@ -2055,23 +2055,23 @@ static const u16 sOddishTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULLET_SEED, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -2079,31 +2079,34 @@ static const u16 sGloomTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULLET_SEED, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sVileplumeTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -2112,17 +2115,14 @@ static const u16 sVileplumeTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -2131,7 +2131,9 @@ static const u16 sBellossomTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULLET_SEED, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -2139,16 +2141,14 @@ static const u16 sBellossomTeachableLearnset[] = { MOVE_PROTECT, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_GEN_2_CROSS_EVOS @@ -2158,46 +2158,51 @@ static const u16 sBellossomTeachableLearnset[] = { static const u16 sParasTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULLET_SEED, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, MOVE_ROCK_SMASH, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sParasectTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULLET_SEED, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, @@ -2205,20 +2210,15 @@ static const u16 sParasectTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_ROCK_SMASH, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_PARAS @@ -2226,7 +2226,9 @@ static const u16 sParasectTeachableLearnset[] = { #if P_FAMILY_VENONAT static const u16 sVenonatTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -2235,24 +2237,25 @@ static const u16 sVenonatTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sVenomothTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -2262,18 +2265,15 @@ static const u16 sVenomothTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_VENONAT @@ -2282,59 +2282,59 @@ static const u16 sVenomothTeachableLearnset[] = { static const u16 sDiglettTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_SLUDGE_BOMB, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sDugtrioTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_SLUDGE_BOMB, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -2342,54 +2342,54 @@ static const u16 sDugtrioTeachableLearnset[] = { static const u16 sDiglettAlolaTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIG, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_SLUDGE_BOMB, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sDugtrioAlolaTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_SLUDGE_BOMB, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_ALOLAN_FORMS @@ -2399,80 +2399,80 @@ static const u16 sDugtrioAlolaTeachableLearnset[] = { static const u16 sMeowthTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; static const u16 sPersianTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -2480,72 +2480,72 @@ static const u16 sPersianTeachableLearnset[] = { static const u16 sMeowthAlolaTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; static const u16 sPersianAlolaTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #endif //P_ALOLAN_FORMS @@ -2554,55 +2554,55 @@ static const u16 sPersianAlolaTeachableLearnset[] = { static const u16 sMeowthGalarTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_DIG, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_IRON_TAIL, + MOVE_METRONOME, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_METRONOME, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; static const u16 sPerrserkerTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_DIG, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_METRONOME, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_METRONOME, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; #endif //P_GALARIAN_FORMS @@ -2613,48 +2613,48 @@ static const u16 sPsyduckTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_COUNTER, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, + MOVE_SEISMIC_TOSS, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; @@ -2662,50 +2662,50 @@ static const u16 sGolduckTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_COUNTER, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, + MOVE_SEISMIC_TOSS, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_PSYDUCK @@ -2714,130 +2714,130 @@ static const u16 sGolduckTeachableLearnset[] = { static const u16 sMankeyTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, - MOVE_DIG, - MOVE_DOUBLE_TEAM, - MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_FOCUS_PUNCH, - MOVE_IRON_TAIL, - MOVE_OVERHEAT, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, MOVE_COUNTER, MOVE_DEFENSE_CURL, + MOVE_DIG, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DYNAMIC_PUNCH, + MOVE_EARTHQUAKE, MOVE_ENDURE, + MOVE_FACADE, MOVE_FIRE_PUNCH, + MOVE_FOCUS_PUNCH, MOVE_ICE_PUNCH, + MOVE_IRON_TAIL, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_OVERHEAT, + MOVE_PROTECT, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sPrimeapeTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, - MOVE_DIG, - MOVE_DOUBLE_TEAM, - MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_FOCUS_PUNCH, - MOVE_HYPER_BEAM, - MOVE_IRON_TAIL, - MOVE_OVERHEAT, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, MOVE_COUNTER, MOVE_DEFENSE_CURL, + MOVE_DIG, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DYNAMIC_PUNCH, + MOVE_EARTHQUAKE, MOVE_ENDURE, + MOVE_FACADE, MOVE_FIRE_PUNCH, + MOVE_FOCUS_PUNCH, + MOVE_HYPER_BEAM, MOVE_ICE_PUNCH, + MOVE_IRON_TAIL, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_OVERHEAT, + MOVE_PROTECT, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #if P_GEN_9_CROSS_EVOS static const u16 sAnnihilapeTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, + MOVE_METRONOME, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, + MOVE_SEISMIC_TOSS, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_METRONOME, - MOVE_ROCK_SLIDE, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_PUNCH, MOVE_UNAVAILABLE, }; @@ -2848,12 +2848,16 @@ static const u16 sAnnihilapeTeachableLearnset[] = { static const u16 sGrowlitheTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REFLECT, @@ -2861,31 +2865,31 @@ static const u16 sGrowlitheTeachableLearnset[] = { MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SAFEGUARD, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sArcanineTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REFLECT, @@ -2893,26 +2897,25 @@ static const u16 sArcanineTeachableLearnset[] = { MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #if P_HISUIAN_FORMS static const u16 sGrowlitheHisuiTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -2921,22 +2924,22 @@ static const u16 sGrowlitheHisuiTeachableLearnset[] = { MOVE_PROTECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_SUNNY_DAY, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, + MOVE_SUNNY_DAY, MOVE_SWIFT, MOVE_UNAVAILABLE, }; static const u16 sArcanineHisuiTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -2946,18 +2949,15 @@ static const u16 sArcanineHisuiTeachableLearnset[] = { MOVE_PROTECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, MOVE_SWIFT, + MOVE_THIEF, MOVE_UNAVAILABLE, }; #endif //P_HISUIAN_FORMS @@ -2967,124 +2967,124 @@ static const u16 sArcanineHisuiTeachableLearnset[] = { static const u16 sPoliwagTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; static const u16 sPoliwhirlTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_HAIL, MOVE_ICE_BEAM, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_STRENGTH, - MOVE_SURF, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROCK_SMASH, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SURF, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sPoliwrathTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SURF, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SURF, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; @@ -3092,45 +3092,45 @@ static const u16 sPoliwrathTeachableLearnset[] = { static const u16 sPolitoedTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_STRENGTH, - MOVE_SURF, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROCK_SMASH, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SURF, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_GEN_2_CROSS_EVOS @@ -3139,142 +3139,142 @@ static const u16 sPolitoedTeachableLearnset[] = { #if P_FAMILY_ABRA static const u16 sAbraTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_FOCUS_PUNCH, + MOVE_ICE_PUNCH, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SEISMIC_TOSS, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_PSYCH_UP, - MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sKadabraTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_FOCUS_PUNCH, + MOVE_ICE_PUNCH, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SEISMIC_TOSS, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_PSYCH_UP, - MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sAlakazamTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SEISMIC_TOSS, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_PSYCH_UP, - MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ABRA @@ -3282,125 +3282,125 @@ static const u16 sAlakazamTeachableLearnset[] = { #if P_FAMILY_MACHOP static const u16 sMachopTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sMachokeTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sMachampTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MACHOP @@ -3410,59 +3410,62 @@ static const u16 sBellsproutTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULLET_SEED, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sWeepinbellTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sVictreebelTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -3470,19 +3473,16 @@ static const u16 sVictreebelTeachableLearnset[] = { MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_BELLSPROUT @@ -3493,30 +3493,30 @@ static const u16 sTentacoolTeachableLearnset[] = { MOVE_BLIZZARD, MOVE_CUT, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; @@ -3525,31 +3525,31 @@ static const u16 sTentacruelTeachableLearnset[] = { MOVE_BLIZZARD, MOVE_CUT, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TENTACOOL @@ -3557,244 +3557,244 @@ static const u16 sTentacruelTeachableLearnset[] = { #if P_FAMILY_GEODUDE static const u16 sGeodudeTeachableLearnset[] = { MOVE_ATTRACT, - MOVE_BRICK_BREAK, - MOVE_DIG, - MOVE_DOUBLE_TEAM, - MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_FIRE_BLAST, - MOVE_FLAMETHROWER, - MOVE_FOCUS_PUNCH, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, MOVE_BODY_SLAM, + MOVE_BRICK_BREAK, MOVE_COUNTER, MOVE_DEFENSE_CURL, + MOVE_DIG, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DYNAMIC_PUNCH, + MOVE_EARTHQUAKE, MOVE_ENDURE, MOVE_EXPLOSION, + MOVE_FACADE, + MOVE_FIRE_BLAST, MOVE_FIRE_PUNCH, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, + MOVE_SANDSTORM, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sGravelerTeachableLearnset[] = { MOVE_ATTRACT, - MOVE_BRICK_BREAK, - MOVE_DIG, - MOVE_DOUBLE_TEAM, - MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_FIRE_BLAST, - MOVE_FLAMETHROWER, - MOVE_FOCUS_PUNCH, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, MOVE_BODY_SLAM, + MOVE_BRICK_BREAK, MOVE_COUNTER, MOVE_DEFENSE_CURL, + MOVE_DIG, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DYNAMIC_PUNCH, + MOVE_EARTHQUAKE, MOVE_ENDURE, MOVE_EXPLOSION, + MOVE_FACADE, + MOVE_FIRE_BLAST, MOVE_FIRE_PUNCH, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, + MOVE_SANDSTORM, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sGolemTeachableLearnset[] = { MOVE_ATTRACT, - MOVE_BRICK_BREAK, - MOVE_DIG, - MOVE_DOUBLE_TEAM, - MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_FIRE_BLAST, - MOVE_FLAMETHROWER, - MOVE_FOCUS_PUNCH, - MOVE_HYPER_BEAM, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROAR, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, MOVE_BODY_SLAM, + MOVE_BRICK_BREAK, MOVE_COUNTER, MOVE_DEFENSE_CURL, + MOVE_DIG, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DYNAMIC_PUNCH, + MOVE_EARTHQUAKE, MOVE_ENDURE, MOVE_EXPLOSION, + MOVE_FACADE, + MOVE_FIRE_BLAST, MOVE_FIRE_PUNCH, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, MOVE_FURY_CUTTER, + MOVE_HYPER_BEAM, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROAR, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, + MOVE_SANDSTORM, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #if P_ALOLAN_FORMS static const u16 sGeodudeAlolaTeachableLearnset[] = { MOVE_ATTRACT, - MOVE_BRICK_BREAK, - MOVE_DIG, - MOVE_DOUBLE_TEAM, - MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_FIRE_BLAST, - MOVE_FLAMETHROWER, - MOVE_FOCUS_PUNCH, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, MOVE_BODY_SLAM, + MOVE_BRICK_BREAK, MOVE_COUNTER, MOVE_DEFENSE_CURL, + MOVE_DIG, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, MOVE_ENDURE, MOVE_EXPLOSION, + MOVE_FACADE, + MOVE_FIRE_BLAST, MOVE_FIRE_PUNCH, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, + MOVE_SANDSTORM, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sGravelerAlolaTeachableLearnset[] = { MOVE_ATTRACT, - MOVE_BRICK_BREAK, - MOVE_DIG, - MOVE_DOUBLE_TEAM, - MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_FIRE_BLAST, - MOVE_FLAMETHROWER, - MOVE_FOCUS_PUNCH, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_SHOCK_WAVE, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, MOVE_BODY_SLAM, + MOVE_BRICK_BREAK, MOVE_COUNTER, MOVE_DEFENSE_CURL, + MOVE_DIG, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, MOVE_ENDURE, MOVE_EXPLOSION, + MOVE_FACADE, + MOVE_FIRE_BLAST, MOVE_FIRE_PUNCH, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, + MOVE_SANDSTORM, MOVE_SEISMIC_TOSS, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sGolemAlolaTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROAR, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_SHOCK_WAVE, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_FIRE_PUNCH, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROAR, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, + MOVE_SANDSTORM, MOVE_SEISMIC_TOSS, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_ALOLAN_FORMS @@ -3803,7 +3803,10 @@ static const u16 sGolemAlolaTeachableLearnset[] = { #if P_FAMILY_PONYTA static const u16 sPonytaTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -3812,23 +3815,23 @@ static const u16 sPonytaTeachableLearnset[] = { MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sRapidashTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -3838,25 +3841,25 @@ static const u16 sRapidashTeachableLearnset[] = { MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #if P_GALARIAN_FORMS static const u16 sPonytaGalarTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -3864,9 +3867,6 @@ static const u16 sPonytaGalarTeachableLearnset[] = { MOVE_PROTECT, MOVE_PSYCHIC, MOVE_REST, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWIFT, @@ -3875,7 +3875,10 @@ static const u16 sPonytaGalarTeachableLearnset[] = { static const u16 sRapidashGalarTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -3884,9 +3887,6 @@ static const u16 sRapidashGalarTeachableLearnset[] = { MOVE_PROTECT, MOVE_PSYCHIC, MOVE_REST, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWIFT, @@ -3900,45 +3900,45 @@ static const u16 sRapidashGalarTeachableLearnset[] = { static const u16 sSlowpokeTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; @@ -3946,57 +3946,57 @@ static const u16 sSlowbroTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_COUNTER, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROCK_SMASH, MOVE_SAFEGUARD, + MOVE_SEISMIC_TOSS, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; @@ -4004,61 +4004,61 @@ static const u16 sSlowbroTeachableLearnset[] = { static const u16 sSlowkingTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_COUNTER, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, - MOVE_IRON_TAIL, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REFLECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SAFEGUARD, - MOVE_SHADOW_BALL, - MOVE_SKILL_SWAP, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_SURF, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, MOVE_ICE_PUNCH, MOVE_ICY_WIND, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, MOVE_SWAGGER, MOVE_SWIFT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_GEN_2_CROSS_EVOS @@ -4067,82 +4067,82 @@ static const u16 sSlowkingTeachableLearnset[] = { static const u16 sSlowpokeGalarTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_DIG, MOVE_DIVE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_SUNNY_DAY, - MOVE_SURF, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, + MOVE_SURF, MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sSlowbroGalarTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, MOVE_SANDSTORM, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWIFT, + MOVE_THUNDER_WAVE, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWIFT, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -4150,48 +4150,48 @@ static const u16 sSlowbroGalarTeachableLearnset[] = { static const u16 sSlowkingGalarTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, MOVE_DIG, MOVE_DIVE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_PUNCH, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #endif //P_GEN_2_CROSS_EVOS @@ -4200,90 +4200,90 @@ static const u16 sSlowkingGalarTeachableLearnset[] = { #if P_FAMILY_MAGNEMITE static const u16 sMagnemiteTeachableLearnset[] = { + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLASH, MOVE_LIGHT_SCREEN, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROLLOUT, MOVE_SANDSTORM, MOVE_SHOCK_WAVE, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_PSYCH_UP, - MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sMagnetonTeachableLearnset[] = { + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROLLOUT, MOVE_SANDSTORM, MOVE_SHOCK_WAVE, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_PSYCH_UP, - MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #if P_GEN_4_CROSS_EVOS static const u16 sMagnezoneTeachableLearnset[] = { + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROLLOUT, MOVE_SANDSTORM, MOVE_SHOCK_WAVE, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_PSYCH_UP, - MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS @@ -4293,69 +4293,69 @@ static const u16 sMagnezoneTeachableLearnset[] = { static const u16 sFarfetchdTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, + MOVE_FURY_CUTTER, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #if P_GALARIAN_FORMS static const u16 sFarfetchdGalarTeachableLearnset[] = { MOVE_ATTRACT, - MOVE_BRICK_BREAK, - MOVE_FACADE, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, MOVE_BODY_SLAM, + MOVE_BRICK_BREAK, MOVE_COUNTER, MOVE_DOUBLE_EDGE, MOVE_ENDURE, + MOVE_FACADE, MOVE_FURY_CUTTER, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_SMASH, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; static const u16 sSirfetchdTeachableLearnset[] = { MOVE_ATTRACT, - MOVE_BRICK_BREAK, - MOVE_FACADE, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, MOVE_BODY_SLAM, + MOVE_BRICK_BREAK, MOVE_COUNTER, MOVE_DOUBLE_EDGE, MOVE_ENDURE, + MOVE_FACADE, MOVE_FURY_CUTTER, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_SMASH, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; @@ -4366,55 +4366,55 @@ static const u16 sSirfetchdTeachableLearnset[] = { static const u16 sDoduoTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sDodrioTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_DODUO @@ -4423,59 +4423,59 @@ static const u16 sDodrioTeachableLearnset[] = { static const u16 sSeelTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; static const u16 sDewgongTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SEEL @@ -4483,170 +4483,170 @@ static const u16 sDewgongTeachableLearnset[] = { #if P_FAMILY_GRIMER static const u16 sGrimerTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_GIGA_DRAIN, + MOVE_ICE_PUNCH, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_PUNCH, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_THUNDER_PUNCH, MOVE_UNAVAILABLE, }; static const u16 sMukTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_PUNCH, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_PUNCH, MOVE_UNAVAILABLE, }; #if P_ALOLAN_FORMS static const u16 sGrimerAlolaTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_PUNCH, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_PUNCH, MOVE_UNAVAILABLE, }; static const u16 sMukAlolaTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_PUNCH, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_PUNCH, MOVE_UNAVAILABLE, }; #endif //P_ALOLAN_FORMS @@ -4657,57 +4657,57 @@ static const u16 sShellderTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; static const u16 sCloysterTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SHELLDER @@ -4716,117 +4716,117 @@ static const u16 sCloysterTeachableLearnset[] = { static const u16 sGastlyTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_GIGA_DRAIN, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_PUNCH, MOVE_TORMENT, MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_THUNDER_PUNCH, MOVE_UNAVAILABLE, }; static const u16 sHaunterTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_GIGA_DRAIN, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_PUNCH, MOVE_TORMENT, MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_METRONOME, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_THUNDER_PUNCH, MOVE_UNAVAILABLE, }; static const u16 sGengarTeachableLearnset[] = { MOVE_ATTRACT, - MOVE_BRICK_BREAK, - MOVE_DOUBLE_TEAM, - MOVE_FACADE, - MOVE_FOCUS_PUNCH, - MOVE_GIGA_DRAIN, - MOVE_HYPER_BEAM, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_SHADOW_BALL, - MOVE_SKILL_SWAP, - MOVE_SLUDGE_BOMB, - MOVE_SNATCH, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TORMENT, - MOVE_TOXIC, MOVE_BODY_SLAM, + MOVE_BRICK_BREAK, MOVE_COUNTER, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DREAM_EATER, MOVE_DYNAMIC_PUNCH, MOVE_ENDURE, MOVE_EXPLOSION, + MOVE_FACADE, MOVE_FIRE_PUNCH, + MOVE_FOCUS_PUNCH, + MOVE_GIGA_DRAIN, + MOVE_HYPER_BEAM, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROCK_SMASH, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_GASTLY @@ -4834,70 +4834,70 @@ static const u16 sGengarTeachableLearnset[] = { #if P_FAMILY_ONIX static const u16 sOnixTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #if P_GEN_2_CROSS_EVOS static const u16 sSteelixTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_GEN_2_CROSS_EVOS @@ -4906,92 +4906,92 @@ static const u16 sSteelixTeachableLearnset[] = { #if P_FAMILY_DROWZEE static const u16 sDrowzeeTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_FOCUS_PUNCH, + MOVE_ICE_PUNCH, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SEISMIC_TOSS, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_PSYCH_UP, - MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sHypnoTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SEISMIC_TOSS, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_PSYCH_UP, - MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_DROWZEE @@ -5000,78 +5000,81 @@ static const u16 sHypnoTeachableLearnset[] = { static const u16 sKrabbyTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CUT, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_THIEF, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; static const u16 sKinglerTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CUT, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_THIEF, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_KRABBY #if P_FAMILY_VOLTORB static const u16 sVoltorbTeachableLearnset[] = { + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLASH, MOVE_LIGHT_SCREEN, @@ -5079,27 +5082,27 @@ static const u16 sVoltorbTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, - MOVE_SHOCK_WAVE, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, MOVE_ROLLOUT, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sElectrodeTeachableLearnset[] = { + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, @@ -5108,51 +5111,51 @@ static const u16 sElectrodeTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, - MOVE_SHOCK_WAVE, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, MOVE_ROLLOUT, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #if P_HISUIAN_FORMS static const u16 sVoltorbHisuiTeachableLearnset[] = { MOVE_BULLET_SEED, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SWIFT, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; static const u16 sElectrodeHisuiTeachableLearnset[] = { MOVE_BULLET_SEED, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, @@ -5160,17 +5163,14 @@ static const u16 sElectrodeHisuiTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SWIFT, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -5181,41 +5181,46 @@ static const u16 sElectrodeHisuiTeachableLearnset[] = { static const u16 sExeggcuteTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULLET_SEED, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, + MOVE_ROLLOUT, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_PSYCH_UP, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sExeggutorTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -5223,37 +5228,37 @@ static const u16 sExeggutorTeachableLearnset[] = { MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, + MOVE_ROLLOUT, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_PSYCH_UP, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #if P_ALOLAN_FORMS static const u16 sExeggutorAlolaTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULLET_SEED, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLAMETHROWER, MOVE_GIGA_DRAIN, @@ -5262,24 +5267,19 @@ static const u16 sExeggutorAlolaTeachableLearnset[] = { MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_ALOLAN_FORMS @@ -5290,44 +5290,44 @@ static const u16 sCuboneTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, - MOVE_ICE_BEAM, - MOVE_IRON_TAIL, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_FURY_CUTTER, + MOVE_ICE_BEAM, MOVE_ICY_WIND, + MOVE_IRON_TAIL, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -5335,45 +5335,45 @@ static const u16 sMarowakTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, - MOVE_IRON_TAIL, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, MOVE_ICY_WIND, + MOVE_IRON_TAIL, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -5382,45 +5382,45 @@ static const u16 sMarowakAlolaTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, - MOVE_IRON_TAIL, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_SHADOW_BALL, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICY_WIND, + MOVE_IRON_TAIL, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_ALOLAN_FORMS @@ -5430,110 +5430,110 @@ static const u16 sMarowakAlolaTeachableLearnset[] = { #if P_GEN_2_CROSS_EVOS static const u16 sTyrogueTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, - MOVE_DOUBLE_TEAM, - MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, MOVE_COUNTER, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, MOVE_ENDURE, + MOVE_FACADE, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_GEN_2_CROSS_EVOS static const u16 sHitmonleeTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, - MOVE_DOUBLE_TEAM, - MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_FOCUS_PUNCH, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, MOVE_COUNTER, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DYNAMIC_PUNCH, + MOVE_EARTHQUAKE, MOVE_ENDURE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sHitmonchanTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, - MOVE_DOUBLE_TEAM, - MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_FOCUS_PUNCH, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, MOVE_COUNTER, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DYNAMIC_PUNCH, + MOVE_EARTHQUAKE, MOVE_ENDURE, + MOVE_FACADE, MOVE_FIRE_PUNCH, + MOVE_FOCUS_PUNCH, MOVE_ICE_PUNCH, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -5541,35 +5541,35 @@ static const u16 sHitmonchanTeachableLearnset[] = { static const u16 sHitmontopTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, MOVE_ENDURE, + MOVE_FACADE, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, MOVE_ROLLOUT, + MOVE_SANDSTORM, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_GEN_2_CROSS_EVOS @@ -5579,57 +5579,57 @@ static const u16 sHitmontopTeachableLearnset[] = { static const u16 sLickitungTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, + MOVE_SEISMIC_TOSS, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_PUNCH, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, - MOVE_THUNDER_PUNCH, MOVE_UNAVAILABLE, }; @@ -5637,55 +5637,55 @@ static const u16 sLickitungTeachableLearnset[] = { static const u16 sLickilickyTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_PUNCH, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, - MOVE_THUNDER_PUNCH, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS @@ -5694,7 +5694,10 @@ static const u16 sLickilickyTeachableLearnset[] = { #if P_FAMILY_KOFFING static const u16 sKoffingTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -5702,29 +5705,29 @@ static const u16 sKoffingTeachableLearnset[] = { MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROLLOUT, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; static const u16 sWeezingTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -5733,29 +5736,30 @@ static const u16 sWeezingTeachableLearnset[] = { MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROLLOUT, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #if P_GALARIAN_FORMS static const u16 sWeezingGalarTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -5765,19 +5769,15 @@ static const u16 sWeezingGalarTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SUNNY_DAY, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_UNAVAILABLE, }; #endif //P_GALARIAN_FORMS @@ -5787,93 +5787,93 @@ static const u16 sWeezingGalarTeachableLearnset[] = { static const u16 sRhyhornTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; static const u16 sRhydonTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, + MOVE_SEISMIC_TOSS, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -5881,51 +5881,51 @@ static const u16 sRhydonTeachableLearnset[] = { static const u16 sRhyperiorTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS @@ -5936,40 +5936,40 @@ static const u16 sRhyperiorTeachableLearnset[] = { static const u16 sHappinyTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_HAIL, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_SAFEGUARD, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, MOVE_ICY_WIND, + MOVE_LIGHT_SCREEN, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROLLOUT, + MOVE_SAFEGUARD, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SOFT_BOILED, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS @@ -5977,66 +5977,66 @@ static const u16 sHappinyTeachableLearnset[] = { static const u16 sChanseyTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, - MOVE_IRON_TAIL, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REFLECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SAFEGUARD, - MOVE_SANDSTORM, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_ICY_WIND, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, MOVE_SOFT_BOILED, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; @@ -6044,65 +6044,65 @@ static const u16 sChanseyTeachableLearnset[] = { static const u16 sBlisseyTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, - MOVE_IRON_TAIL, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SAFEGUARD, - MOVE_SANDSTORM, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_ICY_WIND, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, MOVE_SOFT_BOILED, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_GEN_2_CROSS_EVOS @@ -6111,31 +6111,31 @@ static const u16 sBlisseyTeachableLearnset[] = { #if P_FAMILY_TANGELA static const u16 sTangelaTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, MOVE_ROCK_SMASH, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -6143,36 +6143,36 @@ static const u16 sTangelaTeachableLearnset[] = { static const u16 sTangrowthTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULLET_SEED, MOVE_CUT, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS @@ -6183,56 +6183,56 @@ static const u16 sKangaskhanTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SANDSTORM, + MOVE_SEISMIC_TOSS, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_PUNCH, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_THUNDER_PUNCH, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_KANGASKHAN @@ -6242,24 +6242,24 @@ static const u16 sHorseaTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; @@ -6267,25 +6267,25 @@ static const u16 sSeadraTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; @@ -6293,27 +6293,27 @@ static const u16 sSeadraTeachableLearnset[] = { static const u16 sKingdraTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_GEN_2_CROSS_EVOS @@ -6323,59 +6323,59 @@ static const u16 sKingdraTeachableLearnset[] = { static const u16 sGoldeenTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_SURF, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SURF, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sSeakingTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_SURF, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SURF, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_GOLDEEN @@ -6385,33 +6385,33 @@ static const u16 sStaryuTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, - MOVE_SURF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SURF, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; @@ -6419,36 +6419,36 @@ static const u16 sStarmieTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROLLOUT, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_STARYU @@ -6460,12 +6460,17 @@ static const u16 sMimeJrTeachableLearnset[] = { MOVE_BRICK_BREAK, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FOCUS_PUNCH, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -6473,24 +6478,19 @@ static const u16 sMimeJrTeachableLearnset[] = { MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TORMENT, MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS @@ -6498,52 +6498,52 @@ static const u16 sMimeJrTeachableLearnset[] = { static const u16 sMrMimeTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, - MOVE_DOUBLE_TEAM, - MOVE_FACADE, - MOVE_FLASH, - MOVE_FOCUS_PUNCH, - MOVE_HYPER_BEAM, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REFLECT, - MOVE_REST, - MOVE_SAFEGUARD, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, MOVE_COUNTER, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DREAM_EATER, MOVE_DYNAMIC_PUNCH, MOVE_ENDURE, + MOVE_FACADE, MOVE_FIRE_PUNCH, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_HYPER_BEAM, MOVE_ICE_PUNCH, MOVE_ICY_WIND, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_SAFEGUARD, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -6551,13 +6551,20 @@ static const u16 sMrMimeTeachableLearnset[] = { static const u16 sMrMimeGalarTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_RAIN_DANCE, @@ -6566,21 +6573,14 @@ static const u16 sMrMimeGalarTeachableLearnset[] = { MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -6588,13 +6588,20 @@ static const u16 sMrMimeGalarTeachableLearnset[] = { static const u16 sMrRimeTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_RAIN_DANCE, @@ -6603,21 +6610,14 @@ static const u16 sMrRimeTeachableLearnset[] = { MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -6630,9 +6630,13 @@ static const u16 sScytherTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_COUNTER, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, MOVE_PROTECT, @@ -6640,19 +6644,15 @@ static const u16 sScytherTeachableLearnset[] = { MOVE_REST, MOVE_ROCK_SMASH, MOVE_SAFEGUARD, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -6662,9 +6662,13 @@ static const u16 sScizorTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_COUNTER, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, MOVE_PROTECT, @@ -6673,20 +6677,16 @@ static const u16 sScizorTeachableLearnset[] = { MOVE_ROCK_SMASH, MOVE_SAFEGUARD, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_GEN_2_CROSS_EVOS @@ -6696,26 +6696,26 @@ static const u16 sKleavorTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, + MOVE_SUNNY_DAY, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, MOVE_UNAVAILABLE, }; #endif //P_GEN_8_CROSS_EVOS @@ -6726,40 +6726,40 @@ static const u16 sKleavorTeachableLearnset[] = { static const u16 sSmoochumTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HAIL, MOVE_ICE_BEAM, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REFLECT, - MOVE_REST, - MOVE_SHADOW_BALL, - MOVE_SKILL_SWAP, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, MOVE_ICE_PUNCH, MOVE_ICY_WIND, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_GEN_2_CROSS_EVOS @@ -6767,45 +6767,45 @@ static const u16 sSmoochumTeachableLearnset[] = { static const u16 sJynxTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_SEISMIC_TOSS, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_JYNX @@ -6814,136 +6814,136 @@ static const u16 sJynxTeachableLearnset[] = { #if P_GEN_2_CROSS_EVOS static const u16 sElekidTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_FOCUS_PUNCH, + MOVE_ICE_PUNCH, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, - MOVE_SHOCK_WAVE, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, MOVE_SEISMIC_TOSS, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_GEN_2_CROSS_EVOS static const u16 sElectabuzzTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROCK_SMASH, + MOVE_SEISMIC_TOSS, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #if P_GEN_4_CROSS_EVOS static const u16 sElectivireTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS @@ -6953,119 +6953,119 @@ static const u16 sElectivireTeachableLearnset[] = { #if P_GEN_2_CROSS_EVOS static const u16 sMagbyTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_REST, MOVE_ROCK_SMASH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_GEN_2_CROSS_EVOS static const u16 sMagmarTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #if P_GEN_4_CROSS_EVOS static const u16 sMagmortarTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDERBOLT, + MOVE_THUNDER_PUNCH, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_THUNDER_PUNCH, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS @@ -7074,34 +7074,34 @@ static const u16 sMagmortarTeachableLearnset[] = { #if P_FAMILY_PINSIR static const u16 sPinsirTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ROCK_SLIDE, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_PINSIR @@ -7110,71 +7110,74 @@ static const u16 sPinsirTeachableLearnset[] = { static const u16 sTaurosTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #if P_PALDEAN_FORMS static const u16 sTaurosPaldeaCombatTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BULK_UP, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, MOVE_SURF, - MOVE_THIEF, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, MOVE_SWAGGER, + MOVE_THIEF, MOVE_UNAVAILABLE, }; static const u16 sTaurosPaldeaBlazeTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BULK_UP, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -7183,39 +7186,36 @@ static const u16 sTaurosPaldeaBlazeTeachableLearnset[] = { MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_THIEF, MOVE_UNAVAILABLE, }; static const u16 sTaurosPaldeaAquaTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BULK_UP, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SURF, + MOVE_SWAGGER, MOVE_THIEF, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_PALDEAN_FORMS @@ -7229,15 +7229,19 @@ static const u16 sMagikarpTeachableLearnset[] = { static const u16 sGyaradosTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_RAIN_DANCE, @@ -7246,24 +7250,20 @@ static const u16 sGyaradosTeachableLearnset[] = { MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MAGIKARP @@ -7272,13 +7272,18 @@ static const u16 sGyaradosTeachableLearnset[] = { static const u16 sLaprasTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_PSYCHIC, @@ -7289,22 +7294,17 @@ static const u16 sLaprasTeachableLearnset[] = { MOVE_ROCK_SMASH, MOVE_SAFEGUARD, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_LAPRAS @@ -7318,42 +7318,47 @@ static const u16 sDittoTeachableLearnset[] = { #if P_FAMILY_EEVEE static const u16 sEeveeTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, MOVE_SHADOW_BALL, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sVaporeonTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, @@ -7361,34 +7366,33 @@ static const u16 sVaporeonTeachableLearnset[] = { MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; static const u16 sJolteonTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, @@ -7397,33 +7401,33 @@ static const u16 sJolteonTeachableLearnset[] = { MOVE_ROCK_SMASH, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sFlareonTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_RAIN_DANCE, @@ -7432,34 +7436,36 @@ static const u16 sFlareonTeachableLearnset[] = { MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SHADOW_BALL, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #if P_GEN_2_CROSS_EVOS static const u16 sEspeonTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -7467,35 +7473,35 @@ static const u16 sEspeonTeachableLearnset[] = { MOVE_ROCK_SMASH, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sUmbreonTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -7503,23 +7509,17 @@ static const u16 sUmbreonTeachableLearnset[] = { MOVE_ROCK_SMASH, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_GEN_2_CROSS_EVOS @@ -7528,68 +7528,68 @@ static const u16 sUmbreonTeachableLearnset[] = { static const u16 sLeafeonTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, MOVE_CALM_MIND, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sGlaceonTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SHADOW_BALL, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS @@ -7597,17 +7597,22 @@ static const u16 sGlaceonTeachableLearnset[] = { #if P_GEN_6_CROSS_EVOS static const u16 sSylveonTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -7616,17 +7621,12 @@ static const u16 sSylveonTeachableLearnset[] = { MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_GEN_6_CROSS_EVOS @@ -7636,35 +7636,35 @@ static const u16 sSylveonTeachableLearnset[] = { static const u16 sPorygonTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BLIZZARD, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -7672,35 +7672,35 @@ static const u16 sPorygonTeachableLearnset[] = { static const u16 sPorygon2TeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BLIZZARD, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -7708,35 +7708,35 @@ static const u16 sPorygon2TeachableLearnset[] = { static const u16 sPorygonZTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BLIZZARD, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS @@ -7747,66 +7747,66 @@ static const u16 sPorygonZTeachableLearnset[] = { static const u16 sOmanyteTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; static const u16 sOmastarTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_OMANYTE @@ -7816,34 +7816,34 @@ static const u16 sKabutoTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; @@ -7851,42 +7851,42 @@ static const u16 sKabutopsTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CUT, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_KABUTO @@ -7895,9 +7895,11 @@ static const u16 sKabutopsTeachableLearnset[] = { static const u16 sAerodactylTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -7909,23 +7911,21 @@ static const u16 sAerodactylTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_AERODACTYL @@ -7935,51 +7935,51 @@ static const u16 sAerodactylTeachableLearnset[] = { static const u16 sMunchlaxTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_ICE_BEAM, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SNATCH, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_SURF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, + MOVE_SANDSTORM, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, MOVE_SWAGGER, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS @@ -7987,56 +7987,56 @@ static const u16 sMunchlaxTeachableLearnset[] = { static const u16 sSnorlaxTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REFLECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SNATCH, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_SURF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, + MOVE_SANDSTORM, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, MOVE_SWAGGER, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SNORLAX @@ -8045,13 +8045,17 @@ static const u16 sSnorlaxTeachableLearnset[] = { static const u16 sArticunoTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BLIZZARD, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, @@ -8059,18 +8063,14 @@ static const u16 sArticunoTeachableLearnset[] = { MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SANDSTORM, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; @@ -8078,6 +8078,8 @@ static const u16 sArticunoTeachableLearnset[] = { static const u16 sArticunoGalarTeachableLearnset[] = { MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, @@ -8089,12 +8091,10 @@ static const u16 sArticunoGalarTeachableLearnset[] = { MOVE_REST, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_DREAM_EATER, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWIFT, MOVE_UNAVAILABLE, }; @@ -8104,13 +8104,16 @@ static const u16 sArticunoGalarTeachableLearnset[] = { #if P_FAMILY_ZAPDOS static const u16 sZapdosTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FLY, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, @@ -8119,19 +8122,16 @@ static const u16 sZapdosTeachableLearnset[] = { MOVE_ROCK_SMASH, MOVE_SANDSTORM, MOVE_SHOCK_WAVE, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -8140,25 +8140,25 @@ static const u16 sZapdosGalarTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, MOVE_SANDSTORM, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MEGA_KICK, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWIFT, + MOVE_TAUNT, MOVE_UNAVAILABLE, }; #endif //P_GALARIAN_FORMS @@ -8167,12 +8167,15 @@ static const u16 sZapdosGalarTeachableLearnset[] = { #if P_FAMILY_MOLTRES static const u16 sMoltresTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_FLY, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_RAIN_DANCE, @@ -8182,23 +8185,21 @@ static const u16 sMoltresTeachableLearnset[] = { MOVE_ROCK_SMASH, MOVE_SAFEGUARD, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STEEL_WING, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #if P_GALARIAN_FORMS static const u16 sMoltresGalarTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, @@ -8208,14 +8209,13 @@ static const u16 sMoltresGalarTeachableLearnset[] = { MOVE_SAFEGUARD, MOVE_SANDSTORM, MOVE_SHADOW_BALL, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, MOVE_UNAVAILABLE, }; #endif //P_GALARIAN_FORMS @@ -8225,13 +8225,17 @@ static const u16 sMoltresGalarTeachableLearnset[] = { static const u16 sDratiniTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, MOVE_PROTECT, @@ -8240,35 +8244,35 @@ static const u16 sDratiniTeachableLearnset[] = { MOVE_REST, MOVE_SAFEGUARD, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; static const u16 sDragonairTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, MOVE_PROTECT, @@ -8277,22 +8281,18 @@ static const u16 sDragonairTeachableLearnset[] = { MOVE_REST, MOVE_SAFEGUARD, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -8300,60 +8300,60 @@ static const u16 sDragoniteTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CUT, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FLY, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SANDSTORM, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_PUNCH, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_DRATINI @@ -8362,66 +8362,66 @@ static const u16 sDragoniteTeachableLearnset[] = { static const u16 sMewtwoTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_CALM_MIND, + MOVE_COUNTER, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, - MOVE_IRON_TAIL, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REFLECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SAFEGUARD, - MOVE_SANDSTORM, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_ICY_WIND, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MEWTWO @@ -8436,97 +8436,97 @@ static const u16 sMewTeachableLearnset[] = { #if P_FAMILY_CHIKORITA static const u16 sChikoritaTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, + MOVE_COUNTER, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sBayleefTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, + MOVE_COUNTER, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, MOVE_ROCK_SMASH, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sMeganiumTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, + MOVE_COUNTER, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, MOVE_ROCK_SMASH, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CHIKORITA @@ -8535,122 +8535,127 @@ static const u16 sMeganiumTeachableLearnset[] = { static const u16 sCyndaquilTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sQuilavaTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sTyphlosionTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #if P_HISUIAN_FORMS static const u16 sTyphlosionHisuiTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, @@ -8659,18 +8664,13 @@ static const u16 sTyphlosionHisuiTeachableLearnset[] = { MOVE_PROTECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, + MOVE_ROLLOUT, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, MOVE_SWIFT, MOVE_THUNDER_PUNCH, MOVE_UNAVAILABLE, @@ -8683,42 +8683,42 @@ static const u16 sTotodileTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; @@ -8726,46 +8726,46 @@ static const u16 sCroconawTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; @@ -8773,48 +8773,48 @@ static const u16 sFeraligatrTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TOTODILE @@ -8823,89 +8823,89 @@ static const u16 sFeraligatrTeachableLearnset[] = { static const u16 sSentretTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROLLOUT, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_PUNCH, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_PUNCH, MOVE_UNAVAILABLE, }; static const u16 sFurretTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, + MOVE_ROLLOUT, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_PUNCH, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_PUNCH, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SENTRET @@ -8915,63 +8915,63 @@ static const u16 sHoothootTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FLY, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sNoctowlTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FLY, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_HOOTHOOT @@ -8981,34 +8981,34 @@ static const u16 sLedybaTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_GIGA_DRAIN, + MOVE_ICE_PUNCH, MOVE_LIGHT_SCREEN, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, - MOVE_SAFEGUARD, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_MEGA_PUNCH, MOVE_ROLLOUT, + MOVE_SAFEGUARD, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -9016,37 +9016,37 @@ static const u16 sLedianTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, MOVE_LIGHT_SCREEN, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, MOVE_ROCK_SMASH, + MOVE_ROLLOUT, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_MEGA_PUNCH, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_LEDYBA @@ -9054,32 +9054,35 @@ static const u16 sLedianTeachableLearnset[] = { #if P_FAMILY_SPINARAK static const u16 sSpinarakTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_THIEF, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; static const u16 sAriadosTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -9087,18 +9090,15 @@ static const u16 sAriadosTeachableLearnset[] = { MOVE_PROTECT, MOVE_PSYCHIC, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SPINARAK @@ -9108,28 +9108,28 @@ static const u16 sChinchouTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -9137,29 +9137,29 @@ static const u16 sLanturnTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CHINCHOU @@ -9168,54 +9168,60 @@ static const u16 sLanturnTeachableLearnset[] = { static const u16 sTogepiTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REFLECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_SAFEGUARD, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_ROCK_SMASH, MOVE_ROLLOUT, + MOVE_SAFEGUARD, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SOFT_BOILED, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sTogeticTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -9224,39 +9230,33 @@ static const u16 sTogeticTeachableLearnset[] = { MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REFLECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_SAFEGUARD, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_ROCK_SMASH, MOVE_ROLLOUT, + MOVE_SAFEGUARD, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SOFT_BOILED, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; @@ -9264,9 +9264,13 @@ static const u16 sTogeticTeachableLearnset[] = { static const u16 sTogekissTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -9275,35 +9279,31 @@ static const u16 sTogekissTeachableLearnset[] = { MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REFLECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_SAFEGUARD, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, + MOVE_ROCK_SMASH, MOVE_ROLLOUT, + MOVE_SAFEGUARD, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS @@ -9314,32 +9314,32 @@ static const u16 sNatuTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STEEL_WING, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -9347,7 +9347,10 @@ static const u16 sXatuTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FLY, @@ -9356,25 +9359,22 @@ static const u16 sXatuTeachableLearnset[] = { MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STEEL_WING, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_NATU @@ -9382,8 +9382,12 @@ static const u16 sXatuTeachableLearnset[] = { #if P_FAMILY_MAREEP static const u16 sMareepTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_IRON_TAIL, @@ -9394,32 +9398,38 @@ static const u16 sMareepTeachableLearnset[] = { MOVE_REST, MOVE_SAFEGUARD, MOVE_SHOCK_WAVE, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sFlaaffyTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_FOCUS_PUNCH, + MOVE_ICE_PUNCH, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, @@ -9427,43 +9437,43 @@ static const u16 sFlaaffyTeachableLearnset[] = { MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SAFEGUARD, - MOVE_SHOCK_WAVE, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, MOVE_SEISMIC_TOSS, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sAmpharosTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, @@ -9471,29 +9481,19 @@ static const u16 sAmpharosTeachableLearnset[] = { MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SAFEGUARD, - MOVE_SHOCK_WAVE, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, MOVE_SEISMIC_TOSS, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MAREEP @@ -9503,30 +9503,30 @@ static const u16 sAmpharosTeachableLearnset[] = { static const u16 sAzurillTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, - MOVE_DOUBLE_TEAM, - MOVE_FACADE, - MOVE_HAIL, - MOVE_ICE_BEAM, - MOVE_IRON_TAIL, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_SURF, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_DEFENSE_CURL, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_ENDURE, + MOVE_FACADE, + MOVE_HAIL, + MOVE_ICE_BEAM, MOVE_ICY_WIND, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SURF, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_GEN_3_CROSS_EVOS @@ -9534,85 +9534,85 @@ static const u16 sAzurillTeachableLearnset[] = { static const u16 sMarillTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_DEFENSE_CURL, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_HAIL, MOVE_ICE_BEAM, - MOVE_IRON_TAIL, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_STRENGTH, - MOVE_SURF, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, MOVE_ICE_PUNCH, MOVE_ICY_WIND, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROCK_SMASH, MOVE_ROLLOUT, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SURF, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sAzumarillTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_DEFENSE_CURL, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, - MOVE_IRON_TAIL, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_STRENGTH, - MOVE_SURF, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, MOVE_ICE_PUNCH, MOVE_ICY_WIND, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROCK_SMASH, MOVE_ROLLOUT, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SURF, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MARILL @@ -9621,77 +9621,77 @@ static const u16 sAzumarillTeachableLearnset[] = { #if P_GEN_4_CROSS_EVOS static const u16 sBonslyTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, - MOVE_DIG, - MOVE_DOUBLE_TEAM, - MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, MOVE_COUNTER, MOVE_DEFENSE_CURL, + MOVE_DIG, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, MOVE_ENDURE, MOVE_EXPLOSION, + MOVE_FACADE, MOVE_MUD_SLAP, + MOVE_PROTECT, MOVE_PSYCH_UP, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, + MOVE_SANDSTORM, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS static const u16 sSudowoodoTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, - MOVE_DIG, - MOVE_DOUBLE_TEAM, - MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_FOCUS_PUNCH, - MOVE_HYPER_BEAM, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, MOVE_COUNTER, MOVE_DEFENSE_CURL, + MOVE_DIG, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DYNAMIC_PUNCH, + MOVE_EARTHQUAKE, MOVE_ENDURE, MOVE_EXPLOSION, + MOVE_FACADE, MOVE_FIRE_PUNCH, + MOVE_FOCUS_PUNCH, + MOVE_HYPER_BEAM, MOVE_ICE_PUNCH, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, MOVE_PSYCH_UP, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, + MOVE_SANDSTORM, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SUDOWOODO @@ -9701,27 +9701,27 @@ static const u16 sHoppipTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BULLET_SEED, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_LIGHT_SCREEN, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -9729,27 +9729,27 @@ static const u16 sSkiploomTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BULLET_SEED, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_LIGHT_SCREEN, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -9757,28 +9757,28 @@ static const u16 sJumpluffTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BULLET_SEED, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_HOPPIP @@ -9787,50 +9787,50 @@ static const u16 sJumpluffTeachableLearnset[] = { static const u16 sAipomTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, - MOVE_BRICK_BREAK, - MOVE_CUT, - MOVE_DIG, - MOVE_DOUBLE_TEAM, - MOVE_FACADE, - MOVE_FOCUS_PUNCH, - MOVE_IRON_TAIL, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SNATCH, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, MOVE_BODY_SLAM, + MOVE_BRICK_BREAK, MOVE_COUNTER, + MOVE_CUT, MOVE_DEFENSE_CURL, + MOVE_DIG, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DREAM_EATER, MOVE_DYNAMIC_PUNCH, MOVE_ENDURE, + MOVE_FACADE, MOVE_FIRE_PUNCH, + MOVE_FOCUS_PUNCH, MOVE_FURY_CUTTER, MOVE_ICE_PUNCH, + MOVE_IRON_TAIL, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROCK_SMASH, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; @@ -9839,44 +9839,44 @@ static const u16 sAmbipomTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, MOVE_IRON_TAIL, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS @@ -9887,7 +9887,9 @@ static const u16 sSunkernTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULLET_SEED, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -9896,16 +9898,14 @@ static const u16 sSunkernTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -9913,7 +9913,9 @@ static const u16 sSunfloraTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULLET_SEED, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -9923,16 +9925,14 @@ static const u16 sSunfloraTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SUNKERN @@ -9941,28 +9941,28 @@ static const u16 sSunfloraTeachableLearnset[] = { static const u16 sYanmaTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STEEL_WING, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -9970,30 +9970,30 @@ static const u16 sYanmaTeachableLearnset[] = { static const u16 sYanmegaTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STEEL_WING, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS @@ -10003,140 +10003,140 @@ static const u16 sYanmegaTeachableLearnset[] = { static const u16 sWooperTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SAFEGUARD, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; static const u16 sQuagsireTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SAFEGUARD, MOVE_SANDSTORM, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #if P_PALDEAN_FORMS static const u16 sWooperPaldeaTeachableLearnset[] = { + MOVE_BODY_SLAM, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SURF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; static const u16 sClodsireTeachableLearnset[] = { + MOVE_BODY_SLAM, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SURF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; #endif //P_PALDEAN_FORMS @@ -10147,33 +10147,33 @@ static const u16 sMurkrowTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -10182,33 +10182,33 @@ static const u16 sHonchkrowTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS @@ -10219,36 +10219,36 @@ static const u16 sMisdreavusTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_CALM_MIND, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TORMENT, MOVE_TOXIC, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -10258,33 +10258,33 @@ static const u16 sMismagiusTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TORMENT, MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS @@ -10299,15 +10299,15 @@ static const u16 sUnownTeachableLearnset[] = { #if P_FAMILY_WOBBUFFET #if P_GEN_3_CROSS_EVOS static const u16 sWynautTeachableLearnset[] = { - MOVE_SAFEGUARD, MOVE_COUNTER, + MOVE_SAFEGUARD, MOVE_UNAVAILABLE, }; #endif //P_GEN_3_CROSS_EVOS static const u16 sWobbuffetTeachableLearnset[] = { - MOVE_SAFEGUARD, MOVE_COUNTER, + MOVE_SAFEGUARD, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_WOBBUFFET @@ -10315,16 +10315,22 @@ static const u16 sWobbuffetTeachableLearnset[] = { #if P_FAMILY_GIRAFARIG static const u16 sGirafarigTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -10332,51 +10338,45 @@ static const u16 sGirafarigTeachableLearnset[] = { MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #if P_GEN_9_CROSS_EVOS static const u16 sFarigirafTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SWIFT, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -10386,9 +10386,15 @@ static const u16 sFarigirafTeachableLearnset[] = { #if P_FAMILY_PINECO static const u16 sPinecoTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_LIGHT_SCREEN, @@ -10396,33 +10402,33 @@ static const u16 sPinecoTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sForretressTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, @@ -10431,26 +10437,20 @@ static const u16 sForretressTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_PINECO @@ -10459,81 +10459,81 @@ static const u16 sForretressTeachableLearnset[] = { static const u16 sDunsparceTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #if P_GEN_9_CROSS_EVOS static const u16 sDudunsparceTeachableLearnset[] = { MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; #endif //P_GEN_9_CROSS_EVOS @@ -10544,38 +10544,38 @@ static const u16 sGligarTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; @@ -10584,38 +10584,38 @@ static const u16 sGliscorTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS @@ -10624,15 +10624,27 @@ static const u16 sGliscorTeachableLearnset[] = { #if P_FAMILY_SNUBBULL static const u16 sSnubbullTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_RAIN_DANCE, @@ -10640,93 +10652,81 @@ static const u16 sSnubbullTeachableLearnset[] = { MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, + MOVE_SEISMIC_TOSS, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_THUNDER_PUNCH, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; static const u16 sGranbullTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SEISMIC_TOSS, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_THUNDER_PUNCH, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SNUBBULL @@ -10735,82 +10735,82 @@ static const u16 sGranbullTeachableLearnset[] = { static const u16 sQwilfishTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_DEFENSE_CURL, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROLLOUT, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, - MOVE_SLUDGE_BOMB, - MOVE_SURF, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_ICY_WIND, - MOVE_ROLLOUT, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, MOVE_SNORE, + MOVE_SURF, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #if P_HISUIAN_FORMS static const u16 sQwilfishHisuiTeachableLearnset[] = { MOVE_BLIZZARD, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SURF, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; static const u16 sOverqwilTeachableLearnset[] = { MOVE_BLIZZARD, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SURF, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; #endif //P_HISUIAN_FORMS @@ -10819,31 +10819,31 @@ static const u16 sOverqwilTeachableLearnset[] = { #if P_FAMILY_SHUCKLE static const u16 sShuckleTeachableLearnset[] = { MOVE_ATTRACT, - MOVE_DIG, - MOVE_DOUBLE_TEAM, - MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_FLASH, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SAFEGUARD, - MOVE_SANDSTORM, - MOVE_SLUDGE_BOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, MOVE_BODY_SLAM, MOVE_DEFENSE_CURL, + MOVE_DIG, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, MOVE_ENDURE, + MOVE_FACADE, + MOVE_FLASH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SHUCKLE @@ -10852,37 +10852,37 @@ static const u16 sShuckleTeachableLearnset[] = { static const u16 sHeracrossTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_BULLET_SEED, MOVE_CALM_MIND, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ROCK_SLIDE, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_HERACROSS @@ -10894,47 +10894,47 @@ static const u16 sSneaselTeachableLearnset[] = { MOVE_BLIZZARD, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_COUNTER, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROCK_SMASH, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; @@ -10945,46 +10945,46 @@ static const u16 sWeavileTeachableLearnset[] = { MOVE_BLIZZARD, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROCK_SMASH, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_COUNTER, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS @@ -10995,7 +10995,9 @@ static const u16 sSneaselHisuiTeachableLearnset[] = { MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_CALM_MIND, + MOVE_COUNTER, MOVE_DIG, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_IRON_TAIL, @@ -11004,16 +11006,14 @@ static const u16 sSneaselHisuiTeachableLearnset[] = { MOVE_REST, MOVE_ROCK_SMASH, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SUNNY_DAY, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_TOXIC, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; @@ -11022,29 +11022,29 @@ static const u16 sSneaslerTeachableLearnset[] = { MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_CALM_MIND, + MOVE_COUNTER, MOVE_DIG, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SUNNY_DAY, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_TOXIC, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; #endif //P_HISUIAN_FORMS @@ -11054,166 +11054,166 @@ static const u16 sSneaslerTeachableLearnset[] = { static const u16 sTeddiursaTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, - MOVE_CUT, - MOVE_DIG, - MOVE_DOUBLE_TEAM, - MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_FOCUS_PUNCH, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROAR, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, MOVE_COUNTER, + MOVE_CUT, MOVE_DEFENSE_CURL, + MOVE_DIG, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DYNAMIC_PUNCH, + MOVE_EARTHQUAKE, MOVE_ENDURE, + MOVE_FACADE, MOVE_FIRE_PUNCH, + MOVE_FOCUS_PUNCH, MOVE_FURY_CUTTER, MOVE_ICE_PUNCH, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROAR, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sUrsaringTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, - MOVE_CUT, - MOVE_DIG, - MOVE_DOUBLE_TEAM, - MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_FOCUS_PUNCH, - MOVE_HYPER_BEAM, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROAR, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, MOVE_COUNTER, + MOVE_CUT, MOVE_DEFENSE_CURL, + MOVE_DIG, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DYNAMIC_PUNCH, + MOVE_EARTHQUAKE, MOVE_ENDURE, + MOVE_FACADE, MOVE_FIRE_PUNCH, + MOVE_FOCUS_PUNCH, MOVE_FURY_CUTTER, + MOVE_HYPER_BEAM, MOVE_ICE_PUNCH, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROAR, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #if P_GEN_8_CROSS_EVOS static const u16 sUrsalunaTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, + MOVE_METRONOME, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_METRONOME, - MOVE_ROCK_SLIDE, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, MOVE_UNAVAILABLE, }; static const u16 sUrsalunaBloodmoonTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, - MOVE_ROCK_TOMB, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, MOVE_UNAVAILABLE, }; @@ -11223,65 +11223,65 @@ static const u16 sUrsalunaBloodmoonTeachableLearnset[] = { #if P_FAMILY_SLUGMA static const u16 sSlugmaTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_ROLLOUT, + MOVE_SANDSTORM, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sMagcargoTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SLUGMA @@ -11290,67 +11290,67 @@ static const u16 sMagcargoTeachableLearnset[] = { static const u16 sSwinubTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sPiloswineTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -11358,34 +11358,34 @@ static const u16 sPiloswineTeachableLearnset[] = { static const u16 sMamoswineTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS @@ -11395,41 +11395,41 @@ static const u16 sMamoswineTeachableLearnset[] = { static const u16 sCorsolaTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SAFEGUARD, MOVE_SANDSTORM, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; @@ -11437,65 +11437,65 @@ static const u16 sCorsolaTeachableLearnset[] = { static const u16 sCorsolaGalarTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_DIG, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SANDSTORM, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, MOVE_SURF, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_UNAVAILABLE, }; static const u16 sCursolaTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_DIG, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SANDSTORM, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, MOVE_SURF, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_UNAVAILABLE, }; #endif //P_GALARIAN_FORMS @@ -11506,33 +11506,33 @@ static const u16 sRemoraidTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, MOVE_BULLET_SEED, + MOVE_DEFENSE_CURL, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, + MOVE_THUNDER_WAVE, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -11540,35 +11540,35 @@ static const u16 sOctilleryTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, MOVE_BULLET_SEED, + MOVE_DEFENSE_CURL, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, + MOVE_THUNDER_WAVE, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_REMORAID @@ -11578,36 +11578,36 @@ static const u16 sDelibirdTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_FOCUS_PUNCH, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_STEEL_WING, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROLLOUT, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_DELIBIRD @@ -11619,27 +11619,27 @@ static const u16 sMantykeTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_SURF, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SURF, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS @@ -11648,32 +11648,32 @@ static const u16 sMantineTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MANTINE @@ -11682,36 +11682,36 @@ static const u16 sMantineTeachableLearnset[] = { static const u16 sSkarmoryTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_COUNTER, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FLY, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SKARMORY @@ -11719,11 +11719,17 @@ static const u16 sSkarmoryTeachableLearnset[] = { #if P_FAMILY_HOUNDOUR static const u16 sHoundourTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_RAIN_DANCE, @@ -11731,35 +11737,35 @@ static const u16 sHoundourTeachableLearnset[] = { MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; static const u16 sHoundoomTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_RAIN_DANCE, @@ -11767,25 +11773,19 @@ static const u16 sHoundoomTeachableLearnset[] = { MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_HOUNDOUR @@ -11793,66 +11793,66 @@ static const u16 sHoundoomTeachableLearnset[] = { #if P_FAMILY_PHANPY static const u16 sPhanpyTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_ROLLOUT, + MOVE_SANDSTORM, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sDonphanTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_ROLLOUT, + MOVE_SANDSTORM, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_PHANPY @@ -11860,17 +11860,23 @@ static const u16 sDonphanTeachableLearnset[] = { #if P_FAMILY_STANTLER static const u16 sStantlerTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -11878,54 +11884,48 @@ static const u16 sStantlerTeachableLearnset[] = { MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #if P_GEN_8_CROSS_EVOS static const u16 sWyrdeerTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SWIFT, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -11942,68 +11942,73 @@ static const u16 sSmeargleTeachableLearnset[] = { static const u16 sMiltankTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, - MOVE_BRICK_BREAK, - MOVE_DOUBLE_TEAM, - MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_FOCUS_PUNCH, - MOVE_HYPER_BEAM, - MOVE_ICE_BEAM, - MOVE_IRON_TAIL, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_SURF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, MOVE_BODY_SLAM, + MOVE_BRICK_BREAK, MOVE_COUNTER, MOVE_DEFENSE_CURL, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DYNAMIC_PUNCH, + MOVE_EARTHQUAKE, MOVE_ENDURE, + MOVE_FACADE, MOVE_FIRE_PUNCH, + MOVE_FOCUS_PUNCH, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, MOVE_ICE_PUNCH, MOVE_ICY_WIND, + MOVE_IRON_TAIL, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, + MOVE_SANDSTORM, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, MOVE_SWAGGER, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MILTANK #if P_FAMILY_RAIKOU static const u16 sRaikouTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -12012,39 +12017,39 @@ static const u16 sRaikouTeachableLearnset[] = { MOVE_SANDSTORM, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_RAIKOU #if P_FAMILY_ENTEI static const u16 sEnteiTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -12052,19 +12057,14 @@ static const u16 sEnteiTeachableLearnset[] = { MOVE_ROCK_SMASH, MOVE_SANDSTORM, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ENTEI @@ -12072,17 +12072,23 @@ static const u16 sEnteiTeachableLearnset[] = { #if P_FAMILY_SUICUNE static const u16 sSuicuneTeachableLearnset[] = { MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_CUT, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -12090,21 +12096,15 @@ static const u16 sSuicuneTeachableLearnset[] = { MOVE_ROCK_SMASH, MOVE_SANDSTORM, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SUICUNE @@ -12112,62 +12112,62 @@ static const u16 sSuicuneTeachableLearnset[] = { #if P_FAMILY_LARVITAR static const u16 sLarvitarTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; static const u16 sPupitarTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; @@ -12175,55 +12175,55 @@ static const u16 sTyranitarTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SEISMIC_TOSS, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_THUNDER_PUNCH, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_LARVITAR @@ -12232,10 +12232,14 @@ static const u16 sTyranitarTeachableLearnset[] = { static const u16 sLugiaTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FLY, @@ -12243,10 +12247,13 @@ static const u16 sLugiaTeachableLearnset[] = { MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -12257,27 +12264,20 @@ static const u16 sLugiaTeachableLearnset[] = { MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_LUGIA @@ -12285,9 +12285,13 @@ static const u16 sLugiaTeachableLearnset[] = { #if P_FAMILY_HO_OH static const u16 sHoOhTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -12296,9 +12300,11 @@ static const u16 sHoOhTeachableLearnset[] = { MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -12308,24 +12314,18 @@ static const u16 sHoOhTeachableLearnset[] = { MOVE_SANDSTORM, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STEEL_WING, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_HO_OH @@ -12335,14 +12335,21 @@ static const u16 sCelebiTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_CALM_MIND, MOVE_CUT, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -12351,23 +12358,16 @@ static const u16 sCelebiTeachableLearnset[] = { MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CELEBI @@ -12376,133 +12376,133 @@ static const u16 sCelebiTeachableLearnset[] = { static const u16 sTreeckoTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULLET_SEED, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_IRON_TAIL, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SAFEGUARD, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FURY_CUTTER, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sGrovyleTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULLET_SEED, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_IRON_TAIL, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SAFEGUARD, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FURY_CUTTER, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sSceptileTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULLET_SEED, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROAR, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SAFEGUARD, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FURY_CUTTER, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROAR, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TREECKO @@ -12511,122 +12511,122 @@ static const u16 sSceptileTeachableLearnset[] = { static const u16 sTorchicTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, - MOVE_OVERHEAT, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sCombuskenTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, - MOVE_DOUBLE_TEAM, - MOVE_FACADE, - MOVE_FIRE_BLAST, - MOVE_FLAMETHROWER, - MOVE_FOCUS_PUNCH, - MOVE_OVERHEAT, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DYNAMIC_PUNCH, MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_BLAST, MOVE_FIRE_PUNCH, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, MOVE_FURY_CUTTER, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sBlazikenTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TORCHIC @@ -12635,126 +12635,126 @@ static const u16 sBlazikenTeachableLearnset[] = { static const u16 sMudkipTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SURF, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SURF, MOVE_SWAGGER, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sMarshtompTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SURF, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_ROLLOUT, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SURF, MOVE_SWAGGER, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sSwampertTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SURF, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_ROLLOUT, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SURF, MOVE_SWAGGER, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MUDKIP @@ -12762,63 +12762,63 @@ static const u16 sSwampertTeachableLearnset[] = { #if P_FAMILY_POOCHYENA static const u16 sPoochyenaTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; static const u16 sMightyenaTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_POOCHYENA @@ -12827,79 +12827,79 @@ static const u16 sMightyenaTeachableLearnset[] = { static const u16 sZigzagoonTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, + MOVE_ROLLOUT, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; static const u16 sLinooneTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, + MOVE_ROLLOUT, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -12907,28 +12907,28 @@ static const u16 sLinooneTeachableLearnset[] = { static const u16 sZigzagoonGalarTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWIFT, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -12936,29 +12936,29 @@ static const u16 sZigzagoonGalarTeachableLearnset[] = { static const u16 sLinooneGalarTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWIFT, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -12966,35 +12966,35 @@ static const u16 sLinooneGalarTeachableLearnset[] = { static const u16 sObstagoonTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWIFT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, @@ -13015,7 +13015,9 @@ static const u16 sSilcoonTeachableLearnset[] = { static const u16 sBeautiflyTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -13025,16 +13027,14 @@ static const u16 sBeautiflyTeachableLearnset[] = { MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -13045,7 +13045,9 @@ static const u16 sCascoonTeachableLearnset[] = { static const u16 sDustoxTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -13055,17 +13057,15 @@ static const u16 sDustoxTeachableLearnset[] = { MOVE_PSYCHIC, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_WURMPLE @@ -13074,123 +13074,123 @@ static const u16 sDustoxTeachableLearnset[] = { static const u16 sLotadTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_THIEF, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; static const u16 sLombreTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULLET_SEED, + MOVE_COUNTER, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_HAIL, MOVE_ICE_BEAM, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_SURF, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROCK_SMASH, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sLudicoloTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULLET_SEED, + MOVE_COUNTER, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_GIGA_DRAIN, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_SURF, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROCK_SMASH, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_LOTAD @@ -13198,9 +13198,14 @@ static const u16 sLudicoloTeachableLearnset[] = { #if P_FAMILY_SEEDOT static const u16 sSeedotTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -13208,107 +13213,102 @@ static const u16 sSeedotTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, - MOVE_SHADOW_BALL, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, MOVE_ROLLOUT, + MOVE_SHADOW_BALL, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sNuzleafTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULLET_SEED, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_MEGA_KICK, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_FURY_CUTTER, - MOVE_MEGA_KICK, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sShiftryTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULLET_SEED, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_ICY_WIND, + MOVE_MEGA_KICK, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SEEDOT @@ -13317,49 +13317,49 @@ static const u16 sShiftryTeachableLearnset[] = { static const u16 sTaillowTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sSwellowTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TAILLOW @@ -13369,29 +13369,29 @@ static const u16 sWingullTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; @@ -13399,31 +13399,31 @@ static const u16 sPelipperTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_WINGULL @@ -13431,14 +13431,27 @@ static const u16 sPelipperTeachableLearnset[] = { #if P_FAMILY_RALTS static const u16 sRaltsTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -13446,46 +13459,46 @@ static const u16 sRaltsTeachableLearnset[] = { MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDERBOLT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sKirliaTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -13493,46 +13506,46 @@ static const u16 sKirliaTeachableLearnset[] = { MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDERBOLT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sGardevoirTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -13540,32 +13553,19 @@ static const u16 sGardevoirTeachableLearnset[] = { MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDERBOLT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -13573,57 +13573,57 @@ static const u16 sGardevoirTeachableLearnset[] = { static const u16 sGalladeTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_CALM_MIND, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_THUNDERBOLT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS @@ -13633,31 +13633,31 @@ static const u16 sGalladeTeachableLearnset[] = { static const u16 sSurskitTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; @@ -13665,32 +13665,32 @@ static const u16 sMasquerainTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SURSKIT @@ -13698,8 +13698,11 @@ static const u16 sMasquerainTeachableLearnset[] = { #if P_FAMILY_SHROOMISH static const u16 sShroomishTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FOCUS_PUNCH, @@ -13708,66 +13711,63 @@ static const u16 sShroomishTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sBreloomTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_BULLET_SEED, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SAFEGUARD, - MOVE_SLUDGE_BOMB, - MOVE_SNATCH, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FURY_CUTTER, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SHROOMISH @@ -13777,49 +13777,49 @@ static const u16 sSlakothTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, - MOVE_CUT, - MOVE_DOUBLE_TEAM, - MOVE_FACADE, - MOVE_FIRE_BLAST, - MOVE_FLAMETHROWER, - MOVE_FOCUS_PUNCH, - MOVE_ICE_BEAM, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, MOVE_COUNTER, + MOVE_CUT, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DYNAMIC_PUNCH, MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_BLAST, MOVE_FIRE_PUNCH, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH, MOVE_FURY_CUTTER, + MOVE_ICE_BEAM, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; @@ -13827,54 +13827,54 @@ static const u16 sVigorothTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, - MOVE_ICE_BEAM, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROAR, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_FURY_CUTTER, + MOVE_ICE_BEAM, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROAR, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; @@ -13882,55 +13882,55 @@ static const u16 sSlakingTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROAR, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROAR, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SLAKOTH @@ -13940,24 +13940,24 @@ static const u16 sNincadaTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, MOVE_SANDSTORM, MOVE_SHADOW_BALL, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -13966,28 +13966,28 @@ static const u16 sNinjaskTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, MOVE_SANDSTORM, MOVE_SHADOW_BALL, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -13995,27 +13995,27 @@ static const u16 sShedinjaTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, MOVE_SANDSTORM, MOVE_SHADOW_BALL, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_NINCADA @@ -14024,140 +14024,140 @@ static const u16 sShedinjaTeachableLearnset[] = { static const u16 sWhismurTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, - MOVE_DOUBLE_TEAM, - MOVE_FACADE, - MOVE_FIRE_BLAST, - MOVE_FLAMETHROWER, - MOVE_ICE_BEAM, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROAR, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_COUNTER, MOVE_DEFENSE_CURL, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DYNAMIC_PUNCH, MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_BLAST, MOVE_FIRE_PUNCH, + MOVE_FLAMETHROWER, + MOVE_ICE_BEAM, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROAR, MOVE_ROLLOUT, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sLoudredTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, - MOVE_BRICK_BREAK, - MOVE_DOUBLE_TEAM, - MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_FIRE_BLAST, - MOVE_FLAMETHROWER, - MOVE_ICE_BEAM, - MOVE_OVERHEAT, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROAR, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_WATER_PULSE, MOVE_BODY_SLAM, + MOVE_BRICK_BREAK, MOVE_COUNTER, MOVE_DEFENSE_CURL, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DYNAMIC_PUNCH, + MOVE_EARTHQUAKE, MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_BLAST, MOVE_FIRE_PUNCH, + MOVE_FLAMETHROWER, + MOVE_ICE_BEAM, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_OVERHEAT, + MOVE_PROTECT, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROAR, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TAUNT, MOVE_THUNDER_PUNCH, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sExploudTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, - MOVE_BRICK_BREAK, - MOVE_DOUBLE_TEAM, - MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_FIRE_BLAST, - MOVE_FLAMETHROWER, - MOVE_HYPER_BEAM, - MOVE_ICE_BEAM, - MOVE_OVERHEAT, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROAR, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_SURF, - MOVE_TAUNT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_WATER_PULSE, MOVE_BODY_SLAM, + MOVE_BRICK_BREAK, MOVE_COUNTER, MOVE_DEFENSE_CURL, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DYNAMIC_PUNCH, + MOVE_EARTHQUAKE, MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_BLAST, MOVE_FIRE_PUNCH, + MOVE_FLAMETHROWER, + MOVE_HYPER_BEAM, + MOVE_ICE_BEAM, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_OVERHEAT, + MOVE_PROTECT, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROAR, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, MOVE_SWAGGER, + MOVE_TAUNT, MOVE_THUNDER_PUNCH, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_WHISMUR @@ -14165,84 +14165,84 @@ static const u16 sExploudTeachableLearnset[] = { #if P_FAMILY_MAKUHITA static const u16 sMakuhitaTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, - MOVE_DIG, - MOVE_DOUBLE_TEAM, - MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_FOCUS_PUNCH, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_SURF, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, MOVE_COUNTER, + MOVE_DIG, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DYNAMIC_PUNCH, + MOVE_EARTHQUAKE, MOVE_ENDURE, + MOVE_FACADE, MOVE_FIRE_PUNCH, + MOVE_FOCUS_PUNCH, MOVE_ICE_PUNCH, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sHariyamaTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_SURF, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, + MOVE_SURF, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MAKUHITA @@ -14250,75 +14250,75 @@ static const u16 sHariyamaTeachableLearnset[] = { #if P_FAMILY_NOSEPASS static const u16 sNosepassTeachableLearnset[] = { MOVE_ATTRACT, - MOVE_DOUBLE_TEAM, - MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_SHOCK_WAVE, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TORMENT, - MOVE_TOXIC, MOVE_BODY_SLAM, MOVE_DEFENSE_CURL, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DYNAMIC_PUNCH, + MOVE_EARTHQUAKE, MOVE_ENDURE, MOVE_EXPLOSION, + MOVE_FACADE, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, + MOVE_SANDSTORM, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #if P_GEN_4_CROSS_EVOS static const u16 sProbopassTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS @@ -14328,81 +14328,81 @@ static const u16 sProbopassTeachableLearnset[] = { static const u16 sSkittyTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROLLOUT, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sDelcattyTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, + MOVE_ROLLOUT, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SKITTY @@ -14411,56 +14411,56 @@ static const u16 sDelcattyTeachableLearnset[] = { static const u16 sSableyeTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_CALM_MIND, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SEISMIC_TOSS, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_THUNDER_PUNCH, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SABLEYE @@ -14468,47 +14468,47 @@ static const u16 sSableyeTeachableLearnset[] = { #if P_FAMILY_MAWILE static const u16 sMawileTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_SHADOW_BALL, - MOVE_SLUDGE_BOMB, - MOVE_SNATCH, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TAUNT, MOVE_THUNDER_PUNCH, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MAWILE @@ -14517,70 +14517,70 @@ static const u16 sMawileTeachableLearnset[] = { static const u16 sAronTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, MOVE_SHOCK_WAVE, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sLaironTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, MOVE_SHOCK_WAVE, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; @@ -14588,57 +14588,57 @@ static const u16 sAggronTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, + MOVE_SEISMIC_TOSS, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ARON @@ -14647,97 +14647,97 @@ static const u16 sAggronTeachableLearnset[] = { static const u16 sMedititeTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_CALM_MIND, - MOVE_DOUBLE_TEAM, - MOVE_FACADE, - MOVE_FLASH, - MOVE_FOCUS_PUNCH, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REFLECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SHADOW_BALL, - MOVE_SKILL_SWAP, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, MOVE_COUNTER, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DREAM_EATER, MOVE_DYNAMIC_PUNCH, MOVE_ENDURE, + MOVE_FACADE, MOVE_FIRE_PUNCH, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, MOVE_ICE_PUNCH, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sMedichamTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_CALM_MIND, - MOVE_DOUBLE_TEAM, - MOVE_FACADE, - MOVE_FLASH, - MOVE_FOCUS_PUNCH, - MOVE_HYPER_BEAM, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REFLECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SHADOW_BALL, - MOVE_SKILL_SWAP, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, MOVE_COUNTER, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DREAM_EATER, MOVE_DYNAMIC_PUNCH, MOVE_ENDURE, + MOVE_FACADE, MOVE_FIRE_PUNCH, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_HYPER_BEAM, MOVE_ICE_PUNCH, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MEDITITE @@ -14745,63 +14745,63 @@ static const u16 sMedichamTeachableLearnset[] = { #if P_FAMILY_ELECTRIKE static const u16 sElectrikeTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sManectricTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ELECTRIKE @@ -14809,37 +14809,37 @@ static const u16 sManectricTeachableLearnset[] = { #if P_FAMILY_PLUSLE static const u16 sPlusleTeachableLearnset[] = { MOVE_ATTRACT, - MOVE_DOUBLE_TEAM, - MOVE_FACADE, - MOVE_FLASH, - MOVE_IRON_TAIL, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_SHOCK_WAVE, - MOVE_SKILL_SWAP, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, MOVE_BODY_SLAM, MOVE_COUNTER, MOVE_DEFENSE_CURL, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DYNAMIC_PUNCH, MOVE_ENDURE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROLLOUT, MOVE_SEISMIC_TOSS, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_PLUSLE @@ -14847,36 +14847,36 @@ static const u16 sPlusleTeachableLearnset[] = { #if P_FAMILY_MINUN static const u16 sMinunTeachableLearnset[] = { MOVE_ATTRACT, - MOVE_DOUBLE_TEAM, - MOVE_FACADE, - MOVE_FLASH, - MOVE_IRON_TAIL, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_SHOCK_WAVE, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, MOVE_BODY_SLAM, MOVE_COUNTER, MOVE_DEFENSE_CURL, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DYNAMIC_PUNCH, MOVE_ENDURE, + MOVE_FACADE, + MOVE_FLASH, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROLLOUT, MOVE_SEISMIC_TOSS, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MINUN @@ -14885,87 +14885,87 @@ static const u16 sMinunTeachableLearnset[] = { static const u16 sVolbeatTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_GIGA_DRAIN, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, MOVE_ICE_PUNCH, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sIllumiseTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_GIGA_DRAIN, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, MOVE_ICE_PUNCH, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_VOLBEAT_ILLUMISE @@ -14977,87 +14977,87 @@ static const u16 sBudewTeachableLearnset[] = { MOVE_BULLET_SEED, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS static const u16 sRoseliaTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #if P_GEN_4_CROSS_EVOS static const u16 sRoseradeTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS @@ -15066,89 +15066,89 @@ static const u16 sRoseradeTeachableLearnset[] = { #if P_FAMILY_GULPIN static const u16 sGulpinTeachableLearnset[] = { MOVE_ATTRACT, - MOVE_BULLET_SEED, - MOVE_DOUBLE_TEAM, - MOVE_FACADE, - MOVE_GIGA_DRAIN, - MOVE_ICE_BEAM, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SLUDGE_BOMB, - MOVE_SNATCH, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_WATER_PULSE, MOVE_BODY_SLAM, + MOVE_BULLET_SEED, MOVE_COUNTER, MOVE_DEFENSE_CURL, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DREAM_EATER, MOVE_DYNAMIC_PUNCH, MOVE_ENDURE, MOVE_EXPLOSION, + MOVE_FACADE, MOVE_FIRE_PUNCH, + MOVE_GIGA_DRAIN, + MOVE_ICE_BEAM, MOVE_ICE_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROCK_SMASH, MOVE_ROLLOUT, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THIEF, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sSwalotTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULLET_SEED, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, + MOVE_ROLLOUT, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THIEF, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_GULPIN @@ -15158,29 +15158,29 @@ static const u16 sCarvanhaTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; @@ -15188,35 +15188,35 @@ static const u16 sSharpedoTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CARVANHA @@ -15225,65 +15225,65 @@ static const u16 sSharpedoTeachableLearnset[] = { static const u16 sWailmerTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SURF, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SURF, MOVE_SWAGGER, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sWailordTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SURF, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SURF, MOVE_SWAGGER, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_WAILMER @@ -15291,68 +15291,68 @@ static const u16 sWailordTeachableLearnset[] = { #if P_FAMILY_NUMEL static const u16 sNumelTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_ROLLOUT, + MOVE_SANDSTORM, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sCameruptTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_NUMEL @@ -15360,34 +15360,34 @@ static const u16 sCameruptTeachableLearnset[] = { #if P_FAMILY_TORKOAL static const u16 sTorkoalTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TORKOAL @@ -15395,87 +15395,87 @@ static const u16 sTorkoalTeachableLearnset[] = { #if P_FAMILY_SPOINK static const u16 sSpoinkTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sGrumpigTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, - MOVE_DIG, - MOVE_DOUBLE_TEAM, - MOVE_FACADE, - MOVE_FLASH, - MOVE_FOCUS_PUNCH, - MOVE_HYPER_BEAM, - MOVE_IRON_TAIL, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REFLECT, - MOVE_REST, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, MOVE_COUNTER, + MOVE_DIG, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DREAM_EATER, MOVE_DYNAMIC_PUNCH, MOVE_ENDURE, + MOVE_FACADE, MOVE_FIRE_PUNCH, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, + MOVE_HYPER_BEAM, MOVE_ICE_PUNCH, MOVE_ICY_WIND, + MOVE_IRON_TAIL, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SPOINK @@ -15483,52 +15483,52 @@ static const u16 sGrumpigTeachableLearnset[] = { #if P_FAMILY_SPINDA static const u16 sSpindaTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, - MOVE_DIG, - MOVE_DOUBLE_TEAM, - MOVE_FACADE, - MOVE_FLASH, - MOVE_FOCUS_PUNCH, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SAFEGUARD, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, MOVE_COUNTER, MOVE_DEFENSE_CURL, + MOVE_DIG, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DREAM_EATER, MOVE_DYNAMIC_PUNCH, MOVE_ENDURE, + MOVE_FACADE, MOVE_FIRE_PUNCH, + MOVE_FLASH, + MOVE_FOCUS_PUNCH, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, + MOVE_SAFEGUARD, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SPINDA @@ -15536,105 +15536,105 @@ static const u16 sSpindaTeachableLearnset[] = { #if P_FAMILY_TRAPINCH static const u16 sTrapinchTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sVibravaTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STEEL_WING, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sFlygonTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FLY, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STEEL_WING, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TRAPINCH @@ -15642,80 +15642,80 @@ static const u16 sFlygonTeachableLearnset[] = { #if P_FAMILY_CACNEA static const u16 sCacneaTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULLET_SEED, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SANDSTORM, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sCacturneTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULLET_SEED, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SANDSTORM, + MOVE_SEISMIC_TOSS, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CACNEA @@ -15724,38 +15724,42 @@ static const u16 sCacturneTeachableLearnset[] = { static const u16 sSwabluTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_ICE_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STEEL_WING, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sAltariaTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -15763,27 +15767,23 @@ static const u16 sAltariaTeachableLearnset[] = { MOVE_HYPER_BEAM, MOVE_ICE_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STEEL_WING, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SWABLU @@ -15793,58 +15793,58 @@ static const u16 sZangooseTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, + MOVE_SEISMIC_TOSS, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ZANGOOSE @@ -15852,36 +15852,36 @@ static const u16 sZangooseTeachableLearnset[] = { #if P_FAMILY_SEVIPER static const u16 sSeviperTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLAMETHROWER, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SEVIPER @@ -15889,49 +15889,55 @@ static const u16 sSeviperTeachableLearnset[] = { #if P_FAMILY_LUNATONE static const u16 sLunatoneTeachableLearnset[] = { MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLASH, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SAFEGUARD, MOVE_SANDSTORM, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_LUNATONE #if P_FAMILY_SOLROCK static const u16 sSolrockTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -15941,31 +15947,25 @@ static const u16 sSolrockTeachableLearnset[] = { MOVE_OVERHEAT, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SAFEGUARD, MOVE_SANDSTORM, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SOLROCK @@ -15975,30 +15975,30 @@ static const u16 sBarboachTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; @@ -16006,35 +16006,35 @@ static const u16 sWhiscashTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_BARBOACH @@ -16044,38 +16044,38 @@ static const u16 sCorphishTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; @@ -16083,41 +16083,41 @@ static const u16 sCrawdauntTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CORPHISH @@ -16126,73 +16126,73 @@ static const u16 sCrawdauntTeachableLearnset[] = { static const u16 sBaltoyTeachableLearnset[] = { MOVE_CALM_MIND, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLASH, MOVE_ICE_BEAM, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SANDSTORM, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sClaydolTeachableLearnset[] = { MOVE_CALM_MIND, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SANDSTORM, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_BALTOY @@ -16200,62 +16200,62 @@ static const u16 sClaydolTeachableLearnset[] = { #if P_FAMILY_LILEEP static const u16 sLileepTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sCradilyTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_LILEEP @@ -16264,63 +16264,63 @@ static const u16 sCradilyTeachableLearnset[] = { static const u16 sAnorithTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sArmaldoTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ANORITH @@ -16330,58 +16330,58 @@ static const u16 sFeebasTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; static const u16 sMiloticTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_FEEBAS @@ -16390,37 +16390,37 @@ static const u16 sMiloticTeachableLearnset[] = { static const u16 sCastformTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SANDSTORM, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CASTFORM @@ -16430,58 +16430,58 @@ static const u16 sKecleonTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_FOCUS_PUNCH, - MOVE_ICE_BEAM, - MOVE_IRON_TAIL, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_FURY_CUTTER, + MOVE_ICE_BEAM, MOVE_ICE_PUNCH, MOVE_ICY_WIND, + MOVE_IRON_TAIL, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_KECLEON @@ -16489,74 +16489,74 @@ static const u16 sKecleonTeachableLearnset[] = { #if P_FAMILY_SHUPPET static const u16 sShuppetTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_ICY_WIND, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_METRONOME, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; static const u16 sBanetteTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, + MOVE_ICY_WIND, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SHUPPET @@ -16565,82 +16565,82 @@ static const u16 sBanetteTeachableLearnset[] = { static const u16 sDuskullTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; static const u16 sDusclopsTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SHADOW_BALL, - MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -16648,47 +16648,47 @@ static const u16 sDusclopsTeachableLearnset[] = { static const u16 sDusknoirTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SHADOW_BALL, - MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS @@ -16698,36 +16698,36 @@ static const u16 sDusknoirTeachableLearnset[] = { static const u16 sTropiusTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, MOVE_CALM_MIND, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FLY, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STEEL_WING, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TROPIUS @@ -16737,35 +16737,35 @@ static const u16 sTropiusTeachableLearnset[] = { static const u16 sChinglingTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROLLOUT, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_ROLLOUT, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS @@ -16773,36 +16773,36 @@ static const u16 sChinglingTeachableLearnset[] = { static const u16 sChimechoTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROLLOUT, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_ROLLOUT, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CHIMECHO @@ -16812,51 +16812,51 @@ static const u16 sAbsolTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_COUNTER, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ABSOL @@ -16865,60 +16865,60 @@ static const u16 sAbsolTeachableLearnset[] = { static const u16 sSnoruntTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROLLOUT, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sGlalieTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLASH, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROLLOUT, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_ICY_WIND, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; @@ -16926,40 +16926,40 @@ static const u16 sGlalieTeachableLearnset[] = { static const u16 sFroslassTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROLLOUT, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #endif //P_GEN_4_CROSS_EVOS @@ -16969,107 +16969,107 @@ static const u16 sFroslassTeachableLearnset[] = { static const u16 sSphealTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SURF, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SURF, MOVE_SWAGGER, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sSealeoTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SURF, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SURF, MOVE_SWAGGER, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sWalreinTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SURF, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SURF, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SPHEAL @@ -17078,87 +17078,87 @@ static const u16 sWalreinTeachableLearnset[] = { static const u16 sClamperlTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; static const u16 sHuntailTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; static const u16 sGorebyssTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CLAMPERL @@ -17167,35 +17167,35 @@ static const u16 sGorebyssTeachableLearnset[] = { static const u16 sRelicanthTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_RELICANTH @@ -17205,26 +17205,26 @@ static const u16 sLuvdiscTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_LUVDISC @@ -17233,104 +17233,104 @@ static const u16 sLuvdiscTeachableLearnset[] = { static const u16 sBagonTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CUT, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, + MOVE_FURY_CUTTER, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sShelgonTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CUT, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, + MOVE_FURY_CUTTER, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sSalamenceTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CUT, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_FLY, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_STEEL_WING, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_BAGON @@ -17342,137 +17342,137 @@ static const u16 sBeldumTeachableLearnset[] = { static const u16 sMetangTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CUT, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLASH, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sMetagrossTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CUT, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLASH, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_BELDUM #if P_FAMILY_REGIROCK static const u16 sRegirockTeachableLearnset[] = { - MOVE_BRICK_BREAK, - MOVE_DIG, - MOVE_DOUBLE_TEAM, - MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_FOCUS_PUNCH, - MOVE_HYPER_BEAM, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SAFEGUARD, - MOVE_SANDSTORM, - MOVE_SHOCK_WAVE, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, MOVE_BODY_SLAM, + MOVE_BRICK_BREAK, MOVE_COUNTER, MOVE_DEFENSE_CURL, + MOVE_DIG, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DYNAMIC_PUNCH, + MOVE_EARTHQUAKE, MOVE_ENDURE, MOVE_EXPLOSION, + MOVE_FACADE, MOVE_FIRE_PUNCH, + MOVE_FOCUS_PUNCH, + MOVE_HYPER_BEAM, MOVE_ICE_PUNCH, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, MOVE_PSYCH_UP, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, MOVE_SEISMIC_TOSS, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_REGIROCK @@ -17480,46 +17480,46 @@ static const u16 sRegirockTeachableLearnset[] = { #if P_FAMILY_REGICE static const u16 sRegiceTeachableLearnset[] = { MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SAFEGUARD, - MOVE_SHOCK_WAVE, - MOVE_STRENGTH, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_EXPLOSION, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, + MOVE_SAFEGUARD, MOVE_SEISMIC_TOSS, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, MOVE_SWAGGER, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_REGICE @@ -17527,45 +17527,45 @@ static const u16 sRegiceTeachableLearnset[] = { #if P_FAMILY_REGISTEEL static const u16 sRegisteelTeachableLearnset[] = { MOVE_AERIAL_ACE, - MOVE_BRICK_BREAK, - MOVE_DOUBLE_TEAM, - MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_FOCUS_PUNCH, - MOVE_HYPER_BEAM, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SAFEGUARD, - MOVE_SANDSTORM, - MOVE_SHOCK_WAVE, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, MOVE_BODY_SLAM, + MOVE_BRICK_BREAK, MOVE_COUNTER, MOVE_DEFENSE_CURL, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DYNAMIC_PUNCH, + MOVE_EARTHQUAKE, MOVE_ENDURE, MOVE_EXPLOSION, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_HYPER_BEAM, MOVE_ICE_PUNCH, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, MOVE_SEISMIC_TOSS, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_REGISTEEL @@ -17574,20 +17574,28 @@ static const u16 sRegisteelTeachableLearnset[] = { static const u16 sLatiasTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_CUT, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FLY, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -17596,28 +17604,20 @@ static const u16 sLatiasTeachableLearnset[] = { MOVE_SANDSTORM, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STEEL_WING, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_LATIAS @@ -17626,20 +17626,28 @@ static const u16 sLatiasTeachableLearnset[] = { static const u16 sLatiosTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_CUT, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FLY, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -17648,28 +17656,20 @@ static const u16 sLatiosTeachableLearnset[] = { MOVE_SANDSTORM, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STEEL_WING, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_LATIOS @@ -17677,43 +17677,43 @@ static const u16 sLatiosTeachableLearnset[] = { #if P_FAMILY_KYOGRE static const u16 sKyogreTeachableLearnset[] = { MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_DEFENSE_CURL, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_KYOGRE @@ -17721,56 +17721,56 @@ static const u16 sKyogreTeachableLearnset[] = { #if P_FAMILY_GROUDON static const u16 sGroudonTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, - MOVE_OVERHEAT, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROAR, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SAFEGUARD, - MOVE_SANDSTORM, - MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_OVERHEAT, + MOVE_PROTECT, MOVE_PSYCH_UP, + MOVE_REST, + MOVE_ROAR, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, MOVE_SEISMIC_TOSS, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_GROUDON @@ -17779,51 +17779,51 @@ static const u16 sGroudonTeachableLearnset[] = { static const u16 sRayquazaTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_FLY, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_RAYQUAZA @@ -17831,14 +17831,28 @@ static const u16 sRayquazaTeachableLearnset[] = { #if P_FAMILY_JIRACHI static const u16 sJirachiTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -17847,31 +17861,17 @@ static const u16 sJirachiTeachableLearnset[] = { MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_JIRACHI @@ -17879,223 +17879,223 @@ static const u16 sJirachiTeachableLearnset[] = { #if P_FAMILY_DEOXYS static const u16 sDeoxysNormalTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, + MOVE_SEISMIC_TOSS, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_PUNCH, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; static const u16 sDeoxysAttackTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_COUNTER, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REFLECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SAFEGUARD, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_ICY_WIND, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sDeoxysDefenseTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_COUNTER, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REFLECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SAFEGUARD, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_ICY_WIND, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sDeoxysSpeedTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_COUNTER, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_DYNAMIC_PUNCH, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REFLECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SAFEGUARD, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_ICY_WIND, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, MOVE_SEISMIC_TOSS, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_DEOXYS @@ -18103,99 +18103,99 @@ static const u16 sDeoxysSpeedTeachableLearnset[] = { #if P_FAMILY_TURTWIG static const u16 sTurtwigTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sGrotleTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sTorterraTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TURTWIG @@ -18206,40 +18206,40 @@ static const u16 sChimcharTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_IRON_TAIL, - MOVE_OVERHEAT, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_OVERHEAT, + MOVE_PROTECT, MOVE_PSYCH_UP, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -18248,88 +18248,88 @@ static const u16 sMonfernoTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_IRON_TAIL, - MOVE_OVERHEAT, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_OVERHEAT, + MOVE_PROTECT, MOVE_PSYCH_UP, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sInfernapeTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_CALM_MIND, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, - MOVE_OVERHEAT, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROAR, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_OVERHEAT, + MOVE_PROTECT, MOVE_PSYCH_UP, + MOVE_REST, + MOVE_ROAR, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CHIMCHAR @@ -18343,28 +18343,28 @@ static const u16 sPiplupTeachableLearnset[] = { MOVE_CUT, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; @@ -18376,29 +18376,29 @@ static const u16 sPrinplupTeachableLearnset[] = { MOVE_CUT, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; @@ -18406,41 +18406,41 @@ static const u16 sEmpoleonTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CUT, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_STRENGTH, MOVE_SURF, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_PIPLUP @@ -18449,70 +18449,70 @@ static const u16 sEmpoleonTeachableLearnset[] = { static const u16 sStarlyTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sStaraviaTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sStaraptorTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_STARLY @@ -18522,36 +18522,36 @@ static const u16 sBidoofTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, + MOVE_ROLLOUT, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -18559,43 +18559,43 @@ static const u16 sBibarelTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, + MOVE_ROLLOUT, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_BIDOOF @@ -18613,25 +18613,25 @@ static const u16 sKricketuneTeachableLearnset[] = { MOVE_BRICK_BREAK, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_KRICKETOT @@ -18639,93 +18639,93 @@ static const u16 sKricketuneTeachableLearnset[] = { #if P_FAMILY_SHINX static const u16 sShinxTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sLuxioTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sLuxrayTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SHINX @@ -18734,84 +18734,84 @@ static const u16 sLuxrayTeachableLearnset[] = { static const u16 sCranidosTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_ICE_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sRampardosTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CRANIDOS @@ -18820,78 +18820,78 @@ static const u16 sRampardosTeachableLearnset[] = { static const u16 sShieldonTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_ICE_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; static const u16 sBastiodonTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SHIELDON @@ -18908,27 +18908,27 @@ static const u16 sWormadamPlantTeachableLearnset[] = { MOVE_BULLET_SEED, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -18936,32 +18936,32 @@ static const u16 sWormadamSandyTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SAFEGUARD, MOVE_SANDSTORM, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -18969,27 +18969,27 @@ static const u16 sWormadamTrashTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -18997,29 +18997,29 @@ static const u16 sMothimTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_BURMY @@ -19038,24 +19038,24 @@ static const u16 sVespiquenTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TOXIC, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_COMBEE @@ -19065,32 +19065,32 @@ static const u16 sPachirisuTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROLLOUT, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_DEFENSE_CURL, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_PACHIRISU @@ -19104,76 +19104,76 @@ static const u16 sBuizelTeachableLearnset[] = { MOVE_DIG, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; static const u16 sFloatzelTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_BUIZEL @@ -19182,49 +19182,49 @@ static const u16 sFloatzelTeachableLearnset[] = { static const u16 sCherubiTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULLET_SEED, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_PROTECT, MOVE_REST, - MOVE_SAFEGUARD, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_ROLLOUT, + MOVE_SAFEGUARD, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sCherrimTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULLET_SEED, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_REST, - MOVE_SAFEGUARD, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_ROLLOUT, + MOVE_SAFEGUARD, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CHERUBI @@ -19233,65 +19233,65 @@ static const u16 sCherrimTeachableLearnset[] = { static const u16 sShellosTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_COUNTER, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; static const u16 sGastrodonTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_COUNTER, MOVE_DIG, MOVE_DIVE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SHELLOS @@ -19300,75 +19300,75 @@ static const u16 sGastrodonTeachableLearnset[] = { static const u16 sDrifloonTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_CUT, MOVE_DOUBLE_TEAM, - MOVE_FACADE, - MOVE_FLASH, - MOVE_FLY, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SKILL_SWAP, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, MOVE_DREAM_EATER, MOVE_ENDURE, MOVE_EXPLOSION, + MOVE_FACADE, + MOVE_FLASH, + MOVE_FLY, MOVE_ICY_WIND, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROLLOUT, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, + MOVE_SKILL_SWAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sDrifblimTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLASH, MOVE_FLY, MOVE_HYPER_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROLLOUT, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_DRIFLOON @@ -19377,37 +19377,37 @@ static const u16 sDrifblimTeachableLearnset[] = { static const u16 sBunearyTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FOCUS_PUNCH, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; @@ -19415,41 +19415,41 @@ static const u16 sLopunnyTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_BUNEARY @@ -19460,17 +19460,27 @@ static const u16 sGlameowTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, @@ -19478,37 +19488,39 @@ static const u16 sGlameowTeachableLearnset[] = { MOVE_TORMENT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; static const u16 sPuruglyTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROLLOUT, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, @@ -19516,18 +19528,6 @@ static const u16 sPuruglyTeachableLearnset[] = { MOVE_TORMENT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_GLAMEOW @@ -19535,143 +19535,143 @@ static const u16 sPuruglyTeachableLearnset[] = { #if P_FAMILY_STUNKY static const u16 sStunkyTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, + MOVE_FURY_CUTTER, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; static const u16 sSkuntankTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_STUNKY #if P_FAMILY_BRONZOR static const u16 sBronzorTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SAFEGUARD, MOVE_SANDSTORM, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sBronzongTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SAFEGUARD, MOVE_SANDSTORM, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_BRONZOR @@ -19681,23 +19681,23 @@ static const u16 sChatotTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CHATOT @@ -19705,34 +19705,34 @@ static const u16 sChatotTeachableLearnset[] = { #if P_FAMILY_SPIRITOMB static const u16 sSpiritombTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_TOMB, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SPIRITOMB @@ -19741,111 +19741,111 @@ static const u16 sSpiritombTeachableLearnset[] = { static const u16 sGibleTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, + MOVE_FURY_CUTTER, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sGabiteTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, + MOVE_FURY_CUTTER, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sGarchompTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_GIBLE @@ -19856,81 +19856,81 @@ static const u16 sRioluTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_DIG, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, - MOVE_IRON_TAIL, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROAR, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_COUNTER, - MOVE_ENDURE, MOVE_FURY_CUTTER, MOVE_ICE_PUNCH, + MOVE_IRON_TAIL, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROAR, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sLucarioTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_CALM_MIND, + MOVE_COUNTER, MOVE_DIG, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, - MOVE_HYPER_BEAM, - MOVE_IRON_TAIL, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROAR, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SHADOW_BALL, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_ENDURE, MOVE_FURY_CUTTER, + MOVE_HYPER_BEAM, MOVE_ICE_PUNCH, + MOVE_IRON_TAIL, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROAR, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SHADOW_BALL, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_RIOLU @@ -19938,58 +19938,58 @@ static const u16 sLucarioTeachableLearnset[] = { #if P_FAMILY_HIPPOPOTAS static const u16 sHippopotasTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sHippowdonTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_HIPPOPOTAS @@ -20002,29 +20002,29 @@ static const u16 sSkorupiTeachableLearnset[] = { MOVE_CUT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; @@ -20036,32 +20036,32 @@ static const u16 sDrapionTeachableLearnset[] = { MOVE_DIG, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SKORUPI @@ -20072,39 +20072,39 @@ static const u16 sCroagunkTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SHADOW_BALL, - MOVE_SLUDGE_BOMB, - MOVE_SNATCH, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_COUNTER, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, MOVE_FURY_CUTTER, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SHADOW_BALL, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -20113,42 +20113,42 @@ static const u16 sToxicroakTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, - MOVE_HYPER_BEAM, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SHADOW_BALL, - MOVE_SLUDGE_BOMB, - MOVE_SNATCH, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_COUNTER, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, MOVE_FURY_CUTTER, + MOVE_HYPER_BEAM, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SHADOW_BALL, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CROAGUNK @@ -20159,24 +20159,24 @@ static const u16 sCarnivineTeachableLearnset[] = { MOVE_BULLET_SEED, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CARNIVINE @@ -20187,26 +20187,26 @@ static const u16 sFinneonTeachableLearnset[] = { MOVE_BLIZZARD, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; @@ -20216,27 +20216,27 @@ static const u16 sLumineonTeachableLearnset[] = { MOVE_BLIZZARD, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_FINNEON @@ -20245,44 +20245,47 @@ static const u16 sLumineonTeachableLearnset[] = { static const u16 sSnoverTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, - MOVE_SOLAR_BEAM, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sAbomasnowTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULLET_SEED, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FOCUS_PUNCH, @@ -20290,32 +20293,29 @@ static const u16 sAbomasnowTeachableLearnset[] = { MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SNOVER @@ -20323,30 +20323,30 @@ static const u16 sAbomasnowTeachableLearnset[] = { #if P_FAMILY_ROTOM static const u16 sRotomTeachableLearnset[] = { MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ROTOM @@ -20355,14 +20355,21 @@ static const u16 sRotomTeachableLearnset[] = { static const u16 sUxieTeachableLearnset[] = { MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -20371,25 +20378,18 @@ static const u16 sUxieTeachableLearnset[] = { MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_UXIE @@ -20398,15 +20398,23 @@ static const u16 sUxieTeachableLearnset[] = { static const u16 sMespritTeachableLearnset[] = { MOVE_BLIZZARD, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -20415,25 +20423,17 @@ static const u16 sMespritTeachableLearnset[] = { MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MESPRIT @@ -20441,16 +20441,25 @@ static const u16 sMespritTeachableLearnset[] = { #if P_FAMILY_AZELF static const u16 sAzelfTeachableLearnset[] = { MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -20459,28 +20468,19 @@ static const u16 sAzelfTeachableLearnset[] = { MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_PUNCH, + MOVE_THUNDER_WAVE, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_PUNCH, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_AZELF @@ -20489,45 +20489,45 @@ static const u16 sAzelfTeachableLearnset[] = { static const u16 sDialgaTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_CUT, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SANDSTORM, MOVE_SHOCK_WAVE, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_DIALGA @@ -20536,6 +20536,7 @@ static const u16 sDialgaTeachableLearnset[] = { static const u16 sPalkiaTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_CUT, @@ -20543,42 +20544,41 @@ static const u16 sPalkiaTeachableLearnset[] = { MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SANDSTORM, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_PALKIA @@ -20586,34 +20586,34 @@ static const u16 sPalkiaTeachableLearnset[] = { #if P_FAMILY_HEATRAN static const u16 sHeatranTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIG, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_HEATRAN @@ -20621,40 +20621,40 @@ static const u16 sHeatranTeachableLearnset[] = { #if P_FAMILY_REGIGIGAS static const u16 sRegigigasTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SAFEGUARD, - MOVE_SHOCK_WAVE, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SAFEGUARD, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_REGIGIGAS @@ -20662,17 +20662,24 @@ static const u16 sRegigigasTeachableLearnset[] = { #if P_FAMILY_GIRATINA static const u16 sGiratinaTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_CUT, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, @@ -20680,24 +20687,17 @@ static const u16 sGiratinaTeachableLearnset[] = { MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_GIRATINA @@ -20705,38 +20705,38 @@ static const u16 sGiratinaTeachableLearnset[] = { #if P_FAMILY_CRESSELIA static const u16 sCresseliaTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CRESSELIA @@ -20747,25 +20747,25 @@ static const u16 sPhioneTeachableLearnset[] = { MOVE_CALM_MIND, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; @@ -20774,32 +20774,32 @@ static const u16 sManaphyTeachableLearnset[] = { MOVE_CALM_MIND, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MANAPHY @@ -20812,41 +20812,41 @@ static const u16 sDarkraiTeachableLearnset[] = { MOVE_CALM_MIND, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TORMENT, MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_DARKRAI @@ -20855,55 +20855,55 @@ static const u16 sDarkraiTeachableLearnset[] = { static const u16 sShayminLandTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BULLET_SEED, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REST, MOVE_SAFEGUARD, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sShayminSkyTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BULLET_SEED, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REST, MOVE_SAFEGUARD, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SHAYMIN @@ -20912,66 +20912,66 @@ static const u16 sShayminSkyTeachableLearnset[] = { static const u16 sArceusTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_BULLET_SEED, MOVE_CALM_MIND, MOVE_CUT, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_FLY, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SANDSTORM, + MOVE_SEISMIC_TOSS, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, - MOVE_TAUNT, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ARCEUS @@ -20979,40 +20979,40 @@ static const u16 sArceusTeachableLearnset[] = { #if P_FAMILY_VICTINI static const u16 sVictiniTeachableLearnset[] = { MOVE_BRICK_BREAK, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REST, MOVE_ROCK_SMASH, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_VICTINI @@ -21024,7 +21024,9 @@ static const u16 sSnivyTeachableLearnset[] = { MOVE_BULLET_SEED, MOVE_CALM_MIND, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -21034,19 +21036,17 @@ static const u16 sSnivyTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -21056,7 +21056,9 @@ static const u16 sServineTeachableLearnset[] = { MOVE_BULLET_SEED, MOVE_CALM_MIND, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -21066,29 +21068,30 @@ static const u16 sServineTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sSerperiorTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, MOVE_CALM_MIND, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -21100,21 +21103,18 @@ static const u16 sSerperiorTeachableLearnset[] = { MOVE_REST, MOVE_ROCK_SMASH, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SNIVY @@ -21122,109 +21122,109 @@ static const u16 sSerperiorTeachableLearnset[] = { #if P_FAMILY_TEPIG static const u16 sTepigTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_MUD_SLAP, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sPigniteTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TAUNT, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sEmboarTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TAUNT, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TEPIG @@ -21238,28 +21238,28 @@ static const u16 sOshawottTeachableLearnset[] = { MOVE_DIG, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; @@ -21272,28 +21272,28 @@ static const u16 sDewottTeachableLearnset[] = { MOVE_DIG, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; @@ -21301,36 +21301,36 @@ static const u16 sSamurottTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CUT, MOVE_DIG, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; @@ -21338,28 +21338,28 @@ static const u16 sSamurottTeachableLearnset[] = { static const u16 sSamurottHisuiTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_DIG, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, + MOVE_SLEEP_TALK, MOVE_SURF, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; #endif //P_HISUIAN_FORMS @@ -21379,13 +21379,13 @@ static const u16 sPatratTeachableLearnset[] = { MOVE_REST, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, - MOVE_SUNNY_DAY, - MOVE_THUNDERBOLT, - MOVE_TOXIC, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THUNDERBOLT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -21395,34 +21395,34 @@ static const u16 sWatchogTeachableLearnset[] = { MOVE_CUT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_PATRAT @@ -21433,7 +21433,9 @@ static const u16 sLillipupTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, @@ -21442,15 +21444,13 @@ static const u16 sLillipupTeachableLearnset[] = { MOVE_ROCK_TOMB, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, - MOVE_SUNNY_DAY, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -21459,7 +21459,9 @@ static const u16 sHerdierTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, @@ -21468,17 +21470,15 @@ static const u16 sHerdierTeachableLearnset[] = { MOVE_ROCK_TOMB, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -21487,8 +21487,10 @@ static const u16 sStoutlandTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, @@ -21497,18 +21499,16 @@ static const u16 sStoutlandTeachableLearnset[] = { MOVE_ROCK_TOMB, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_LILLIPUP @@ -21519,26 +21519,26 @@ static const u16 sPurrloinTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_IRON_TAIL, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, - MOVE_SNATCH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -21547,28 +21547,28 @@ static const u16 sLiepardTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, MOVE_SHADOW_BALL, - MOVE_SNATCH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_PURRLOIN @@ -21589,15 +21589,15 @@ static const u16 sPansageTeachableLearnset[] = { MOVE_REST, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; @@ -21616,18 +21616,18 @@ static const u16 sSimisageTeachableLearnset[] = { MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_PANSAGE @@ -21640,6 +21640,7 @@ static const u16 sPansearTeachableLearnset[] = { MOVE_DOUBLE_TEAM, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_IRON_TAIL, @@ -21648,16 +21649,15 @@ static const u16 sPansearTeachableLearnset[] = { MOVE_REST, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_FIRE_PUNCH, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; @@ -21669,6 +21669,7 @@ static const u16 sSimisearTeachableLearnset[] = { MOVE_DOUBLE_TEAM, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, @@ -21676,19 +21677,18 @@ static const u16 sSimisearTeachableLearnset[] = { MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_FIRE_PUNCH, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_PANSEAR @@ -21705,24 +21705,24 @@ static const u16 sPanpourTeachableLearnset[] = { MOVE_FOCUS_PUNCH, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; @@ -21739,25 +21739,25 @@ static const u16 sSimipourTeachableLearnset[] = { MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_PANPOUR @@ -21766,65 +21766,65 @@ static const u16 sSimipourTeachableLearnset[] = { static const u16 sMunnaTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, + MOVE_DEFENSE_CURL, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_DEFENSE_CURL, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sMusharnaTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, + MOVE_DEFENSE_CURL, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_DEFENSE_CURL, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MUNNA @@ -21834,20 +21834,20 @@ static const u16 sPidoveTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -21855,20 +21855,20 @@ static const u16 sTranquillTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -21876,22 +21876,22 @@ static const u16 sUnfezantTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_PIDOVE @@ -21899,7 +21899,10 @@ static const u16 sUnfezantTeachableLearnset[] = { #if P_FAMILY_BLITZLE static const u16 sBlitzleTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_LIGHT_SCREEN, @@ -21907,25 +21910,25 @@ static const u16 sBlitzleTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHOCK_WAVE, - MOVE_SNATCH, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sZebstrikaTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, @@ -21937,20 +21940,17 @@ static const u16 sZebstrikaTeachableLearnset[] = { MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_BLITZLE @@ -21960,21 +21960,21 @@ static const u16 sRoggenrolaTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -21982,21 +21982,21 @@ static const u16 sBoldoreTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -22004,23 +22004,23 @@ static const u16 sGigalithTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ROGGENROLA @@ -22031,6 +22031,8 @@ static const u16 sWoobatTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FLY, @@ -22038,6 +22040,7 @@ static const u16 sWoobatTeachableLearnset[] = { MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -22045,19 +22048,16 @@ static const u16 sWoobatTeachableLearnset[] = { MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, - MOVE_STEEL_WING, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -22066,6 +22066,8 @@ static const u16 sSwoobatTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FLY, @@ -22074,6 +22076,7 @@ static const u16 sSwoobatTeachableLearnset[] = { MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -22081,19 +22084,16 @@ static const u16 sSwoobatTeachableLearnset[] = { MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, - MOVE_STEEL_WING, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_WOOBAT @@ -22105,57 +22105,57 @@ static const u16 sDrilburTeachableLearnset[] = { MOVE_BRICK_BREAK, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sExcadrillTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_DRILBUR @@ -22164,48 +22164,48 @@ static const u16 sExcadrillTeachableLearnset[] = { static const u16 sAudinoTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_AUDINO @@ -22215,33 +22215,33 @@ static const u16 sTimburrTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BRICK_BREAK, MOVE_BULK_UP, - MOVE_DIG, - MOVE_DOUBLE_TEAM, - MOVE_FACADE, - MOVE_FOCUS_PUNCH, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TOXIC, MOVE_COUNTER, + MOVE_DIG, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DYNAMIC_PUNCH, MOVE_ENDURE, + MOVE_FACADE, MOVE_FIRE_PUNCH, + MOVE_FOCUS_PUNCH, MOVE_ICE_PUNCH, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -22249,70 +22249,70 @@ static const u16 sGurdurrTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BRICK_BREAK, MOVE_BULK_UP, - MOVE_DIG, - MOVE_DOUBLE_TEAM, - MOVE_FACADE, - MOVE_FOCUS_PUNCH, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TOXIC, MOVE_COUNTER, + MOVE_DIG, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, MOVE_DYNAMIC_PUNCH, MOVE_ENDURE, + MOVE_FACADE, MOVE_FIRE_PUNCH, + MOVE_FOCUS_PUNCH, MOVE_ICE_PUNCH, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sConkeldurrTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TIMBURR @@ -22321,44 +22321,44 @@ static const u16 sConkeldurrTeachableLearnset[] = { static const u16 sTympoleTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; static const u16 sPalpitoadTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_HAIL, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; @@ -22369,30 +22369,30 @@ static const u16 sSeismitoadTeachableLearnset[] = { MOVE_DIVE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_HAIL, MOVE_HYPER_BEAM, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SLUDGE_BOMB, - MOVE_STRENGTH, - MOVE_SURF, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_ENDURE, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SURF, MOVE_SWAGGER, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TYMPOLE @@ -22400,34 +22400,34 @@ static const u16 sSeismitoadTeachableLearnset[] = { #if P_FAMILY_THROH static const u16 sThrohTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_DIG, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_FOCUS_PUNCH, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_BODY_SLAM, MOVE_ENDURE, + MOVE_FACADE, MOVE_FIRE_PUNCH, + MOVE_FOCUS_PUNCH, MOVE_ICE_PUNCH, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TAUNT, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_THROH @@ -22437,31 +22437,31 @@ static const u16 sSawkTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_DIG, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_FOCUS_PUNCH, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_COUNTER, MOVE_ENDURE, + MOVE_FACADE, MOVE_FIRE_PUNCH, + MOVE_FOCUS_PUNCH, MOVE_ICE_PUNCH, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TAUNT, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SAWK @@ -22472,6 +22472,8 @@ static const u16 sSewaddleTeachableLearnset[] = { MOVE_CALM_MIND, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -22480,14 +22482,12 @@ static const u16 sSewaddleTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -22496,6 +22496,8 @@ static const u16 sSwadloonTeachableLearnset[] = { MOVE_CALM_MIND, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -22504,14 +22506,12 @@ static const u16 sSwadloonTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -22522,6 +22522,8 @@ static const u16 sLeavannyTeachableLearnset[] = { MOVE_CALM_MIND, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -22532,16 +22534,14 @@ static const u16 sLeavannyTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STEEL_WING, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SEWADDLE @@ -22549,77 +22549,77 @@ static const u16 sLeavannyTeachableLearnset[] = { #if P_FAMILY_VENIPEDE static const u16 sVenipedeTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_PROTECT, MOVE_REST, MOVE_ROCK_SMASH, - MOVE_SLUDGE_BOMB, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, MOVE_ROLLOUT, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sWhirlipedeTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_PROTECT, MOVE_REST, MOVE_ROCK_SMASH, - MOVE_SLUDGE_BOMB, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, MOVE_ROLLOUT, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sScolipedeTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_VENIPEDE @@ -22628,28 +22628,30 @@ static const u16 sScolipedeTeachableLearnset[] = { static const u16 sCottoneeTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_PROTECT, MOVE_REST, MOVE_SAFEGUARD, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sWhimsicottTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -22660,17 +22662,15 @@ static const u16 sWhimsicottTeachableLearnset[] = { MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_COTTONEE @@ -22681,20 +22681,20 @@ static const u16 sPetililTeachableLearnset[] = { MOVE_BULLET_SEED, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_PROTECT, MOVE_REST, MOVE_SAFEGUARD, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -22703,24 +22703,24 @@ static const u16 sLilligantTeachableLearnset[] = { MOVE_BULLET_SEED, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_REST, MOVE_SAFEGUARD, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -22729,20 +22729,20 @@ static const u16 sLilligantHisuiTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BRICK_BREAK, MOVE_BULLET_SEED, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_MEGA_KICK, + MOVE_METRONOME, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_ENDURE, - MOVE_MEGA_KICK, - MOVE_METRONOME, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; @@ -22755,67 +22755,67 @@ static const u16 sBasculinTeachableLearnset[] = { MOVE_BLIZZARD, MOVE_CUT, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #if P_HISUIAN_FORMS static const u16 sBasculinWhiteStripedTeachableLearnset[] = { MOVE_BLIZZARD, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SURF, + MOVE_SWIFT, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; static const u16 sBasculegionTeachableLearnset[] = { MOVE_BLIZZARD, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SURF, + MOVE_SWIFT, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_HISUIAN_FORMS @@ -22824,113 +22824,113 @@ static const u16 sBasculegionTeachableLearnset[] = { #if P_FAMILY_SANDILE static const u16 sSandileTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; static const u16 sKrokorokTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_STRENGTH, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; static const u16 sKrookodileTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_STRENGTH, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SANDILE @@ -22941,72 +22941,72 @@ static const u16 sDarumakaTeachableLearnset[] = { MOVE_BRICK_BREAK, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_TOXIC, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; static const u16 sDarmanitanTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_DIG, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; @@ -23016,61 +23016,61 @@ static const u16 sDarumakaGalarTeachableLearnset[] = { MOVE_BLIZZARD, MOVE_BRICK_BREAK, MOVE_DIG, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_TAUNT, MOVE_THIEF, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_UNAVAILABLE, }; static const u16 sDarmanitanGalarTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_DIG, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_TAUNT, MOVE_THIEF, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_UNAVAILABLE, }; #endif //P_GALARIAN_FORMS @@ -23082,19 +23082,19 @@ static const u16 sMaractusTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULLET_SEED, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MARACTUS @@ -23103,55 +23103,55 @@ static const u16 sMaractusTeachableLearnset[] = { static const u16 sDwebbleTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_TOXIC, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sCrustleTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_TOXIC, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_DWEBBLE @@ -23161,81 +23161,81 @@ static const u16 sScraggyTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FOCUS_PUNCH, + MOVE_ICE_PUNCH, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, + MOVE_THUNDER_PUNCH, MOVE_TORMENT, MOVE_TOXIC, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_THUNDER_PUNCH, MOVE_UNAVAILABLE, }; static const u16 sScraftyTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SCRAGGY @@ -23246,14 +23246,18 @@ static const u16 sSigilyphTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FLY, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -23261,19 +23265,15 @@ static const u16 sSigilyphTeachableLearnset[] = { MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, - MOVE_SOLAR_BEAM, - MOVE_STEEL_WING, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STEEL_WING, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SIGILYPH @@ -23283,25 +23283,25 @@ static const u16 sYamaskTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, MOVE_SWAGGER, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -23309,26 +23309,26 @@ static const u16 sCofagrigusTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, MOVE_SWAGGER, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -23337,21 +23337,21 @@ static const u16 sYamaskGalarTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SANDSTORM, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_THIEF, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_THIEF, MOVE_UNAVAILABLE, }; @@ -23359,23 +23359,23 @@ static const u16 sRunerigusTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SANDSTORM, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_TAUNT, + MOVE_THIEF, MOVE_UNAVAILABLE, }; #endif //P_GALARIAN_FORMS @@ -23385,65 +23385,65 @@ static const u16 sRunerigusTeachableLearnset[] = { static const u16 sTirtougaTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIG, MOVE_DIVE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; static const u16 sCarracostaTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIG, MOVE_DIVE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TIRTOUGA @@ -23457,24 +23457,24 @@ static const u16 sArchenTeachableLearnset[] = { MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STEEL_WING, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_TORMENT, MOVE_TOXIC, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; @@ -23486,6 +23486,7 @@ static const u16 sArcheopsTeachableLearnset[] = { MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, @@ -23493,19 +23494,18 @@ static const u16 sArcheopsTeachableLearnset[] = { MOVE_PROTECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STEEL_WING, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_TORMENT, MOVE_TOXIC, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ARCHEN @@ -23514,27 +23514,30 @@ static const u16 sArcheopsTeachableLearnset[] = { static const u16 sTrubbishTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_SLUDGE_BOMB, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_EXPLOSION, MOVE_ROLLOUT, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sGarbodorTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, @@ -23542,19 +23545,16 @@ static const u16 sGarbodorTeachableLearnset[] = { MOVE_PSYCHIC, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_THIEF, MOVE_THUNDERBOLT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TRUBBISH @@ -23564,69 +23564,69 @@ static const u16 sZoruaTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_CALM_MIND, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; static const u16 sZoroarkTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; @@ -23635,53 +23635,53 @@ static const u16 sZoruaHisuiTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_CALM_MIND, MOVE_DIG, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; static const u16 sZoroarkHisuiTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, MOVE_DIG, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; #endif //P_HISUIAN_FORMS @@ -23694,24 +23694,24 @@ static const u16 sMinccinoTeachableLearnset[] = { MOVE_CALM_MIND, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHOCK_WAVE, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -23720,29 +23720,29 @@ static const u16 sCinccinoTeachableLearnset[] = { MOVE_BULLET_SEED, MOVE_CALM_MIND, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MINCCINO @@ -23752,34 +23752,34 @@ static const u16 sGothitaTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_THUNDERBOLT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -23787,74 +23787,74 @@ static const u16 sGothoritaTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_THUNDERBOLT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_METRONOME, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sGothitelleTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_THUNDERBOLT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_METRONOME, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_GOTHITA @@ -23864,34 +23864,34 @@ static const u16 sSolosisTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLASH, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -23899,78 +23899,78 @@ static const u16 sDuosionTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLASH, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sReuniclusTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, MOVE_LIGHT_SCREEN, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_MEGA_PUNCH, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SOLOSIS @@ -23980,25 +23980,25 @@ static const u16 sDucklettTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_STEEL_WING, - MOVE_SURF, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SURF, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; @@ -24006,26 +24006,26 @@ static const u16 sSwannaTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_STEEL_WING, - MOVE_SURF, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SURF, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_DUCKLETT @@ -24035,22 +24035,22 @@ static const u16 sVanilliteTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_ICY_WIND, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; @@ -24058,22 +24058,22 @@ static const u16 sVanillishTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_ICY_WIND, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; @@ -24081,23 +24081,23 @@ static const u16 sVanilluxeTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_ICY_WIND, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_VANILLITE @@ -24105,9 +24105,12 @@ static const u16 sVanilluxeTeachableLearnset[] = { #if P_FAMILY_DEERLING static const u16 sDeerlingTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -24117,25 +24120,25 @@ static const u16 sDeerlingTeachableLearnset[] = { MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sSawsbuckTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -24147,17 +24150,14 @@ static const u16 sSawsbuckTeachableLearnset[] = { MOVE_ROCK_SMASH, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_DEERLING @@ -24168,6 +24168,7 @@ static const u16 sEmolgaTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_IRON_TAIL, @@ -24176,17 +24177,16 @@ static const u16 sEmolgaTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_EMOLGA @@ -24195,47 +24195,47 @@ static const u16 sEmolgaTeachableLearnset[] = { static const u16 sKarrablastTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_COUNTER, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_TOXIC, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sEscavalierTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_COUNTER, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_KARRABLAST @@ -24243,32 +24243,35 @@ static const u16 sEscavalierTeachableLearnset[] = { #if P_FAMILY_FOONGUS static const u16 sFoongusTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, + MOVE_DEFENSE_CURL, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_SLUDGE_BOMB, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_ENDURE, MOVE_ROLLOUT, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sAmoongussTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, + MOVE_DEFENSE_CURL, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -24276,17 +24279,14 @@ static const u16 sAmoongussTeachableLearnset[] = { MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_SLUDGE_BOMB, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_ENDURE, MOVE_ROLLOUT, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_FOONGUS @@ -24297,31 +24297,31 @@ static const u16 sFrillishTeachableLearnset[] = { MOVE_BLIZZARD, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; @@ -24330,32 +24330,32 @@ static const u16 sJellicentTeachableLearnset[] = { MOVE_BLIZZARD, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_FRILLISH @@ -24364,32 +24364,32 @@ static const u16 sJellicentTeachableLearnset[] = { static const u16 sAlomomolaTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ALOMOMOLA @@ -24399,25 +24399,25 @@ static const u16 sJoltikTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHOCK_WAVE, - MOVE_THIEF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_FURY_CUTTER, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -24425,8 +24425,10 @@ static const u16 sGalvantulaTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, @@ -24434,17 +24436,15 @@ static const u16 sGalvantulaTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHOCK_WAVE, - MOVE_THIEF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_FURY_CUTTER, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_JOLTIK @@ -24454,23 +24454,23 @@ static const u16 sFerroseedTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULLET_SEED, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_PROTECT, MOVE_REST, MOVE_ROCK_SMASH, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_EXPLOSION, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -24480,6 +24480,8 @@ static const u16 sFerrothornTeachableLearnset[] = { MOVE_BULLET_SEED, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -24487,21 +24489,19 @@ static const u16 sFerrothornTeachableLearnset[] = { MOVE_PROTECT, MOVE_REST, MOVE_ROCK_SMASH, + MOVE_ROLLOUT, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_FERROSEED @@ -24509,6 +24509,7 @@ static const u16 sFerrothornTeachableLearnset[] = { #if P_FAMILY_KLINK static const u16 sKlinkTeachableLearnset[] = { MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_PROTECT, @@ -24516,18 +24517,18 @@ static const u16 sKlinkTeachableLearnset[] = { MOVE_ROCK_SMASH, MOVE_SANDSTORM, MOVE_SHOCK_WAVE, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sKlangTeachableLearnset[] = { MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_PROTECT, @@ -24535,18 +24536,18 @@ static const u16 sKlangTeachableLearnset[] = { MOVE_ROCK_SMASH, MOVE_SANDSTORM, MOVE_SHOCK_WAVE, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sKlinklangTeachableLearnset[] = { MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_PROTECT, @@ -24554,14 +24555,13 @@ static const u16 sKlinklangTeachableLearnset[] = { MOVE_ROCK_SMASH, MOVE_SANDSTORM, MOVE_SHOCK_WAVE, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_KLINK @@ -24574,7 +24574,9 @@ static const u16 sTynamoTeachableLearnset[] = { static const u16 sEelektrikTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -24584,26 +24586,27 @@ static const u16 sEelektrikTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHOCK_WAVE, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sEelektrossTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_CUT, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_FOCUS_PUNCH, @@ -24615,24 +24618,21 @@ static const u16 sEelektrossTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SHOCK_WAVE, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TYNAMO @@ -24642,32 +24642,32 @@ static const u16 sElgyemTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_STEEL_WING, + MOVE_SWAGGER, MOVE_THIEF, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -24675,33 +24675,33 @@ static const u16 sBeheeyemTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_STEEL_WING, + MOVE_SWAGGER, MOVE_THIEF, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ELGYEM @@ -24711,6 +24711,8 @@ static const u16 sLitwickTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -24718,21 +24720,19 @@ static const u16 sLitwickTeachableLearnset[] = { MOVE_OVERHEAT, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; @@ -24740,6 +24740,8 @@ static const u16 sLampentTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -24747,21 +24749,19 @@ static const u16 sLampentTeachableLearnset[] = { MOVE_OVERHEAT, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; @@ -24769,6 +24769,8 @@ static const u16 sChandelureTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -24777,21 +24779,19 @@ static const u16 sChandelureTeachableLearnset[] = { MOVE_OVERHEAT, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_LITWICK @@ -24801,10 +24801,13 @@ static const u16 sAxewTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_ENDURE, MOVE_FACADE, MOVE_IRON_TAIL, MOVE_PROTECT, @@ -24814,19 +24817,16 @@ static const u16 sAxewTeachableLearnset[] = { MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -24834,10 +24834,13 @@ static const u16 sFraxureTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_ENDURE, MOVE_FACADE, MOVE_IRON_TAIL, MOVE_PROTECT, @@ -24847,31 +24850,32 @@ static const u16 sFraxureTeachableLearnset[] = { MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sHaxorusTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, @@ -24879,24 +24883,20 @@ static const u16 sHaxorusTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_AXEW @@ -24906,35 +24906,35 @@ static const u16 sCubchooTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CUT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_HAIL, MOVE_ICE_BEAM, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SURF, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_ENDURE, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SURF, MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; @@ -24942,43 +24942,43 @@ static const u16 sBearticTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_CUT, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROAR, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SURF, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, + MOVE_ROAR, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SURF, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CUBCHOO @@ -24987,26 +24987,26 @@ static const u16 sBearticTeachableLearnset[] = { static const u16 sCryogonalTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, - MOVE_SOLAR_BEAM, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_ICY_WIND, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, MOVE_SWAGGER, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CRYOGONAL @@ -25014,44 +25014,44 @@ static const u16 sCryogonalTeachableLearnset[] = { #if P_FAMILY_SHELMET static const u16 sShelmetTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_SLUDGE_BOMB, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, MOVE_SNORE, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sAccelgorTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SANDSTORM, - MOVE_SLUDGE_BOMB, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SHELMET @@ -25062,49 +25062,49 @@ static const u16 sStunfiskTeachableLearnset[] = { MOVE_DIG, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #if P_GALARIAN_FORMS static const u16 sStunfiskGalarTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_COUNTER, MOVE_DIG, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_SLUDGE_BOMB, - MOVE_SURF, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, MOVE_SNORE, + MOVE_SURF, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -25120,28 +25120,28 @@ static const u16 sMienfooTeachableLearnset[] = { MOVE_CALM_MIND, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -25152,31 +25152,31 @@ static const u16 sMienshaoTeachableLearnset[] = { MOVE_BULK_UP, MOVE_CALM_MIND, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MIENFOO @@ -25185,135 +25185,135 @@ static const u16 sMienshaoTeachableLearnset[] = { static const u16 sDruddigonTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CUT, MOVE_DIG, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, MOVE_TAUNT, + MOVE_THUNDER_PUNCH, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_MEGA_PUNCH, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_THUNDER_PUNCH, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_DRUDDIGON #if P_FAMILY_GOLETT static const u16 sGolettTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_ICE_BEAM, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REFLECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SAFEGUARD, - MOVE_SANDSTORM, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sGolurkTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_FLY, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, - MOVE_PROTECT, - MOVE_PSYCHIC, - MOVE_RAIN_DANCE, - MOVE_REFLECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SAFEGUARD, - MOVE_SANDSTORM, - MOVE_SHADOW_BALL, - MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_PSYCHIC, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REFLECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, + MOVE_SAFEGUARD, + MOVE_SANDSTORM, + MOVE_SHADOW_BALL, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_THIEF, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_GOLETT @@ -25326,25 +25326,25 @@ static const u16 sPawniardTeachableLearnset[] = { MOVE_CUT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_SNATCH, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_FURY_CUTTER, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -25355,7 +25355,9 @@ static const u16 sBisharpTeachableLearnset[] = { MOVE_CUT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_RAIN_DANCE, @@ -25363,18 +25365,16 @@ static const u16 sBisharpTeachableLearnset[] = { MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_SNATCH, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_FURY_CUTTER, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -25383,21 +25383,21 @@ static const u16 sKingambitTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BRICK_BREAK, MOVE_DIG, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_ENDURE, - MOVE_FURY_CUTTER, MOVE_SLEEP_TALK, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_WAVE, + MOVE_TORMENT, MOVE_UNAVAILABLE, }; #endif //P_GEN_9_CROSS_EVOS @@ -25407,28 +25407,28 @@ static const u16 sKingambitTeachableLearnset[] = { static const u16 sBouffalantTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CUT, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_BOUFFALANT @@ -25437,83 +25437,83 @@ static const u16 sBouffalantTeachableLearnset[] = { static const u16 sRuffletTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULK_UP, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sBraviaryTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULK_UP, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #if P_HISUIAN_FORMS static const u16 sBraviaryHisuiTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_BULK_UP, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SHADOW_BALL, - MOVE_SUNNY_DAY, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, + MOVE_SUNNY_DAY, MOVE_SWIFT, MOVE_UNAVAILABLE, }; @@ -25525,29 +25525,29 @@ static const u16 sVullabyTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; @@ -25555,31 +25555,31 @@ static const u16 sMandibuzzTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_VULLABY @@ -25588,11 +25588,14 @@ static const u16 sMandibuzzTeachableLearnset[] = { static const u16 sHeatmorTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CUT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_GIGA_DRAIN, @@ -25602,19 +25605,16 @@ static const u16 sHeatmorTeachableLearnset[] = { MOVE_REST, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_HEATMOR @@ -25626,21 +25626,21 @@ static const u16 sDurantTeachableLearnset[] = { MOVE_CUT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, MOVE_SWAGGER, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_DURANT @@ -25648,60 +25648,62 @@ static const u16 sDurantTeachableLearnset[] = { #if P_FAMILY_DEINO static const u16 sDeinoTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SHOCK_WAVE, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sZweilousTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SHOCK_WAVE, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sHydreigonTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -25709,29 +25711,27 @@ static const u16 sHydreigonTeachableLearnset[] = { MOVE_HYPER_BEAM, MOVE_IRON_TAIL, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, + MOVE_THUNDER_WAVE, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_DEINO @@ -25739,8 +25739,11 @@ static const u16 sHydreigonTeachableLearnset[] = { #if P_FAMILY_LARVESTA static const u16 sLarvestaTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -25751,23 +25754,23 @@ static const u16 sLarvestaTeachableLearnset[] = { MOVE_PSYCHIC, MOVE_REST, MOVE_SAFEGUARD, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sVolcaronaTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -25781,15 +25784,12 @@ static const u16 sVolcaronaTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_LARVESTA @@ -25797,13 +25797,17 @@ static const u16 sVolcaronaTeachableLearnset[] = { #if P_FAMILY_COBALION static const u16 sCobalionTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -25811,20 +25815,16 @@ static const u16 sCobalionTeachableLearnset[] = { MOVE_ROCK_SMASH, MOVE_SAFEGUARD, MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_COBALION @@ -25832,34 +25832,34 @@ static const u16 sCobalionTeachableLearnset[] = { #if P_FAMILY_TERRAKION static const u16 sTerrakionTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TERRAKION @@ -25867,36 +25867,36 @@ static const u16 sTerrakionTeachableLearnset[] = { #if P_FAMILY_VIRIZION static const u16 sVirizionTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULLET_SEED, MOVE_CALM_MIND, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_VIRIZION @@ -25905,33 +25905,33 @@ static const u16 sVirizionTeachableLearnset[] = { static const u16 sTornadusTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_METRONOME, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TORNADUS @@ -25939,9 +25939,11 @@ static const u16 sTornadusTeachableLearnset[] = { #if P_FAMILY_THUNDURUS static const u16 sThundurusTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, @@ -25952,31 +25954,32 @@ static const u16 sThundurusTeachableLearnset[] = { MOVE_REST, MOVE_ROCK_SMASH, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_THUNDURUS #if P_FAMILY_RESHIRAM static const u16 sReshiramTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -25990,33 +25993,33 @@ static const u16 sReshiramTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STEEL_WING, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_RESHIRAM #if P_FAMILY_ZEKROM static const u16 sZekromTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FLY, @@ -26029,27 +26032,24 @@ static const u16 sZekromTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ZEKROM @@ -26057,37 +26057,37 @@ static const u16 sZekromTeachableLearnset[] = { #if P_FAMILY_LANDORUS static const u16 sLandorusTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_CALM_MIND, MOVE_DIG, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_LANDORUS @@ -26096,14 +26096,17 @@ static const u16 sLandorusTeachableLearnset[] = { static const u16 sKyuremTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CUT, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, @@ -26111,22 +26114,19 @@ static const u16 sKyuremTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_KYUREM @@ -26137,32 +26137,32 @@ static const u16 sKeldeoTeachableLearnset[] = { MOVE_BRICK_BREAK, MOVE_CALM_MIND, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_KELDEO @@ -26172,13 +26172,19 @@ static const u16 sMeloettaTeachableLearnset[] = { MOVE_BRICK_BREAK, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, @@ -26186,25 +26192,19 @@ static const u16 sMeloettaTeachableLearnset[] = { MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_METRONOME, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MELOETTA @@ -26214,10 +26214,13 @@ static const u16 sGenesectTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BLIZZARD, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_FLY, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, @@ -26227,18 +26230,15 @@ static const u16 sGenesectTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_FURY_CUTTER, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_GENESECT @@ -26247,12 +26247,15 @@ static const u16 sGenesectTeachableLearnset[] = { static const u16 sChespinTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_BULLET_SEED, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FOCUS_PUNCH, @@ -26263,37 +26266,37 @@ static const u16 sChespinTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sQuilladinTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_BULLET_SEED, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FOCUS_PUNCH, @@ -26304,71 +26307,68 @@ static const u16 sQuilladinTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sChesnaughtTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_BULLET_SEED, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CHESPIN @@ -26379,30 +26379,30 @@ static const u16 sFennekinTeachableLearnset[] = { MOVE_CALM_MIND, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, MOVE_SKILL_SWAP, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -26411,34 +26411,34 @@ static const u16 sBraixenTeachableLearnset[] = { MOVE_CALM_MIND, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -26447,15 +26447,21 @@ static const u16 sDelphoxTeachableLearnset[] = { MOVE_CALM_MIND, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -26463,22 +26469,16 @@ static const u16 sDelphoxTeachableLearnset[] = { MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_FENNEKIN @@ -26488,34 +26488,34 @@ static const u16 sFroakieTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; @@ -26523,36 +26523,36 @@ static const u16 sFrogadierTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; @@ -26561,37 +26561,37 @@ static const u16 sGreninjaTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, MOVE_BRICK_BREAK, + MOVE_COUNTER, MOVE_CUT, MOVE_DIG, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_FROAKIE @@ -26602,73 +26602,73 @@ static const u16 sBunnelbyTeachableLearnset[] = { MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_DEFENSE_CURL, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; static const u16 sDiggersbyTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_CUT, + MOVE_DEFENSE_CURL, MOVE_DIG, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, - MOVE_IRON_TAIL, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_SLUDGE_BOMB, - MOVE_SNATCH, - MOVE_STRENGTH, - MOVE_SURF, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, + MOVE_IRON_TAIL, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, + MOVE_SANDSTORM, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SURF, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_BUNNELBY @@ -26677,33 +26677,35 @@ static const u16 sDiggersbyTeachableLearnset[] = { static const u16 sFletchlingTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sFletchinderTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -26712,19 +26714,17 @@ static const u16 sFletchinderTeachableLearnset[] = { MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -26732,7 +26732,9 @@ static const u16 sTalonflameTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BULK_UP, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -26742,20 +26744,18 @@ static const u16 sTalonflameTeachableLearnset[] = { MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STEEL_WING, MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_FLETCHLING @@ -26775,6 +26775,8 @@ static const u16 sVivillonTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -26782,20 +26784,18 @@ static const u16 sVivillonTeachableLearnset[] = { MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SCATTERBUG @@ -26803,66 +26803,66 @@ static const u16 sVivillonTeachableLearnset[] = { #if P_FAMILY_LITLEO static const u16 sLitleoTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; static const u16 sPyroarTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_LITLEO @@ -26872,6 +26872,7 @@ static const u16 sFlabebeTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -26881,14 +26882,13 @@ static const u16 sFlabebeTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -26896,25 +26896,25 @@ static const u16 sFloetteTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, MOVE_SKILL_SWAP, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_METRONOME, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -26922,25 +26922,25 @@ static const u16 sFloetteEternalTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, MOVE_SKILL_SWAP, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_METRONOME, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -26948,26 +26948,26 @@ static const u16 sFlorgesTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, MOVE_SKILL_SWAP, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_METRONOME, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_FLABEBE @@ -26975,70 +26975,70 @@ static const u16 sFlorgesTeachableLearnset[] = { #if P_FAMILY_SKIDDO static const u16 sSkiddoTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_BULLET_SEED, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sGogoatTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_BULLET_SEED, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SKIDDO @@ -27047,46 +27047,47 @@ static const u16 sGogoatTeachableLearnset[] = { static const u16 sPanchamTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_CUT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FOCUS_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, - MOVE_TAUNT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_ROCK_SLIDE, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TAUNT, MOVE_THUNDER_PUNCH, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sPangoroTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_CUT, @@ -27094,37 +27095,36 @@ static const u16 sPangoroTeachableLearnset[] = { MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SEISMIC_TOSS, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_ROCK_SLIDE, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_PANCHAM @@ -27142,13 +27142,13 @@ static const u16 sFurfrouTeachableLearnset[] = { MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, - MOVE_SUNNY_DAY, - MOVE_SURF, - MOVE_TOXIC, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, + MOVE_SURF, MOVE_SWAGGER, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_FURFROU @@ -27159,12 +27159,15 @@ static const u16 sEspurrTeachableLearnset[] = { MOVE_CALM_MIND, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -27172,19 +27175,16 @@ static const u16 sEspurrTeachableLearnset[] = { MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_SUNNY_DAY, - MOVE_THUNDERBOLT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -27194,6 +27194,8 @@ static const u16 sMeowsticMTeachableLearnset[] = { MOVE_CUT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, @@ -27201,6 +27203,7 @@ static const u16 sMeowsticMTeachableLearnset[] = { MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -27208,19 +27211,16 @@ static const u16 sMeowsticMTeachableLearnset[] = { MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_SUNNY_DAY, - MOVE_THUNDERBOLT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -27230,6 +27230,8 @@ static const u16 sMeowsticFTeachableLearnset[] = { MOVE_CUT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, @@ -27237,6 +27239,7 @@ static const u16 sMeowsticFTeachableLearnset[] = { MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -27244,19 +27247,16 @@ static const u16 sMeowsticFTeachableLearnset[] = { MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_SUNNY_DAY, - MOVE_THUNDERBOLT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ESPURR @@ -27268,21 +27268,21 @@ static const u16 sHonedgeTeachableLearnset[] = { MOVE_BRICK_BREAK, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_SHOCK_WAVE, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -27292,21 +27292,21 @@ static const u16 sDoubladeTeachableLearnset[] = { MOVE_BRICK_BREAK, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_SHOCK_WAVE, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -27316,24 +27316,24 @@ static const u16 sAegislashTeachableLearnset[] = { MOVE_BRICK_BREAK, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_HONEDGE @@ -27343,25 +27343,25 @@ static const u16 sSpritzeeTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_THUNDERBOLT, MOVE_TORMENT, MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; @@ -27369,28 +27369,28 @@ static const u16 sAromatisseTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_TORMENT, MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_METRONOME, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SPRITZEE @@ -27400,26 +27400,26 @@ static const u16 sSwirlixTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, MOVE_THIEF, MOVE_THUNDERBOLT, MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; @@ -27427,29 +27427,29 @@ static const u16 sSlurpuffTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_METRONOME, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SWIRLIX @@ -27461,30 +27461,30 @@ static const u16 sInkayTeachableLearnset[] = { MOVE_CALM_MIND, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLAMETHROWER, MOVE_FLASH, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDERBOLT, MOVE_TORMENT, MOVE_TOXIC, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; @@ -27494,6 +27494,7 @@ static const u16 sMalamarTeachableLearnset[] = { MOVE_CALM_MIND, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLAMETHROWER, MOVE_FLASH, @@ -27501,24 +27502,23 @@ static const u16 sMalamarTeachableLearnset[] = { MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDERBOLT, MOVE_TORMENT, MOVE_TOXIC, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_INKAY @@ -27533,32 +27533,32 @@ static const u16 sBinacleTeachableLearnset[] = { MOVE_DIG, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; @@ -27574,33 +27574,33 @@ static const u16 sBarbaracleTeachableLearnset[] = { MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_BINACLE @@ -27610,27 +27610,27 @@ static const u16 sSkrelpTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, MOVE_THIEF, MOVE_THUNDERBOLT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; @@ -27638,29 +27638,29 @@ static const u16 sDragalgeTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SKRELP @@ -27672,58 +27672,58 @@ static const u16 sClauncherTeachableLearnset[] = { MOVE_CUT, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; static const u16 sClawitzerTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CUT, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_THIEF, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CLAUNCHER @@ -27734,29 +27734,29 @@ static const u16 sHelioptileTeachableLearnset[] = { MOVE_CUT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, MOVE_SHOCK_WAVE, - MOVE_SURF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SURF, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -27765,36 +27765,36 @@ static const u16 sHelioliskTeachableLearnset[] = { MOVE_CUT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_SURF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_SURF, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_HELIOPTILE @@ -27803,57 +27803,57 @@ static const u16 sHelioliskTeachableLearnset[] = { static const u16 sTyruntTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_DIG, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sTyrantrumTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_DIG, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TYRUNT @@ -27862,77 +27862,77 @@ static const u16 sTyrantrumTeachableLearnset[] = { static const u16 sAmauraTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SANDSTORM, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sAurorusTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SANDSTORM, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_AMAURA @@ -27941,39 +27941,39 @@ static const u16 sAurorusTeachableLearnset[] = { static const u16 sHawluchaTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_CUT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLY, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_HAWLUCHA @@ -27985,6 +27985,7 @@ static const u16 sDedenneTeachableLearnset[] = { MOVE_CUT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HYPER_BEAM, @@ -27994,26 +27995,29 @@ static const u16 sDedenneTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_DEDENNE #if P_FAMILY_CARBINK static const u16 sCarbinkTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLASH, MOVE_HAIL, @@ -28021,24 +28025,20 @@ static const u16 sCarbinkTeachableLearnset[] = { MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SANDSTORM, MOVE_SKILL_SWAP, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CARBINK @@ -28046,126 +28046,130 @@ static const u16 sCarbinkTeachableLearnset[] = { #if P_FAMILY_GOOMY static const u16 sGoomyTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_COUNTER, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_THUNDERBOLT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; static const u16 sSliggooTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_COUNTER, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_ICE_BEAM, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; static const u16 sGoodraTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_COUNTER, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_STRENGTH, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWAGGER, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_PUNCH, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_THUNDER_PUNCH, MOVE_UNAVAILABLE, }; #if P_HISUIAN_FORMS static const u16 sSliggooHisuiTeachableLearnset[] = { MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_COUNTER, + MOVE_ENDURE, MOVE_FACADE, MOVE_ICE_BEAM, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SUNNY_DAY, MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; static const u16 sGoodraHisuiTeachableLearnset[] = { MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_COUNTER, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, @@ -28173,22 +28177,18 @@ static const u16 sGoodraHisuiTeachableLearnset[] = { MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SUNNY_DAY, MOVE_SURF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, MOVE_THUNDER_PUNCH, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_HISUIAN_FORMS @@ -28200,27 +28200,27 @@ static const u16 sKlefkiTeachableLearnset[] = { MOVE_CALM_MIND, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, MOVE_SANDSTORM, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_KLEFKI @@ -28231,29 +28231,29 @@ static const u16 sPhantumpTeachableLearnset[] = { MOVE_CUT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_THIEF, MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; @@ -28263,31 +28263,31 @@ static const u16 sTrevenantTeachableLearnset[] = { MOVE_CUT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_THIEF, MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_PHANTUMP @@ -28297,6 +28297,9 @@ static const u16 sPumpkabooTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULLET_SEED, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -28306,22 +28309,19 @@ static const u16 sPumpkabooTeachableLearnset[] = { MOVE_PROTECT, MOVE_PSYCHIC, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_THIEF, MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; @@ -28329,6 +28329,9 @@ static const u16 sGourgeistTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULLET_SEED, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -28339,22 +28342,19 @@ static const u16 sGourgeistTeachableLearnset[] = { MOVE_PROTECT, MOVE_PSYCHIC, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_THIEF, MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_PUMPKABOO @@ -28363,85 +28363,85 @@ static const u16 sGourgeistTeachableLearnset[] = { static const u16 sBergmiteTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, - MOVE_STRENGTH, - MOVE_SURF, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SURF, MOVE_SWAGGER, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sAvaluggTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, - MOVE_STRENGTH, - MOVE_SURF, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SURF, MOVE_SWAGGER, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #if P_HISUIAN_FORMS static const u16 sAvaluggHisuiTeachableLearnset[] = { MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_HISUIAN_FORMS @@ -28455,6 +28455,8 @@ static const u16 sNoibatTeachableLearnset[] = { MOVE_CUT, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_IRON_TAIL, @@ -28462,31 +28464,33 @@ static const u16 sNoibatTeachableLearnset[] = { MOVE_PSYCHIC, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STEEL_WING, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; static const u16 sNoivernTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CUT, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLAMETHROWER, MOVE_FLY, @@ -28496,32 +28500,30 @@ static const u16 sNoivernTeachableLearnset[] = { MOVE_PSYCHIC, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STEEL_WING, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_NOIBAT #if P_FAMILY_XERNEAS static const u16 sXerneasTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_HAIL, @@ -28529,23 +28531,21 @@ static const u16 sXerneasTeachableLearnset[] = { MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_XERNEAS @@ -28553,9 +28553,12 @@ static const u16 sXerneasTeachableLearnset[] = { #if P_FAMILY_YVELTAL static const u16 sYveltalTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_CUT, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, @@ -28563,84 +28566,81 @@ static const u16 sYveltalTeachableLearnset[] = { MOVE_PSYCHIC, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_YVELTAL #if P_FAMILY_ZYGARDE static const u16 sZygardeTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_DIG, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_SAFEGUARD, MOVE_SANDSTORM, MOVE_SHOCK_WAVE, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ZYGARDE #if P_FAMILY_DIANCIE static const u16 sDiancieTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLASH, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SANDSTORM, MOVE_SKILL_SWAP, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_METRONOME, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_DIANCIE @@ -28650,13 +28650,18 @@ static const u16 sHoopaConfinedTeachableLearnset[] = { MOVE_BRICK_BREAK, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -28666,24 +28671,19 @@ static const u16 sHoopaConfinedTeachableLearnset[] = { MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDERBOLT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -28691,13 +28691,18 @@ static const u16 sHoopaUnboundTeachableLearnset[] = { MOVE_BRICK_BREAK, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLASH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -28707,35 +28712,34 @@ static const u16 sHoopaUnboundTeachableLearnset[] = { MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDERBOLT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_HOOPA #if P_FAMILY_VOLCANION static const u16 sVolcanionTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CUT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -28745,24 +28749,20 @@ static const u16 sVolcanionTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_VOLCANION @@ -28773,6 +28773,7 @@ static const u16 sRowletTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULLET_SEED, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_LIGHT_SCREEN, @@ -28780,16 +28781,15 @@ static const u16 sRowletTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STEEL_WING, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -28798,6 +28798,7 @@ static const u16 sDartrixTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULLET_SEED, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_LIGHT_SCREEN, @@ -28805,16 +28806,15 @@ static const u16 sDartrixTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STEEL_WING, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -28823,6 +28823,7 @@ static const u16 sDecidueyeTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULLET_SEED, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, @@ -28832,16 +28833,15 @@ static const u16 sDecidueyeTeachableLearnset[] = { MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STEEL_WING, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -28852,6 +28852,7 @@ static const u16 sDecidueyeHisuiTeachableLearnset[] = { MOVE_BULK_UP, MOVE_BULLET_SEED, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_GIGA_DRAIN, @@ -28862,13 +28863,12 @@ static const u16 sDecidueyeHisuiTeachableLearnset[] = { MOVE_REST, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_ENDURE, - MOVE_SLEEP_TALK, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, MOVE_UNAVAILABLE, }; #endif //P_HISUIAN_FORMS @@ -28877,8 +28877,11 @@ static const u16 sDecidueyeHisuiTeachableLearnset[] = { #if P_FAMILY_LITTEN static const u16 sLittenTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULK_UP, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -28886,24 +28889,24 @@ static const u16 sLittenTeachableLearnset[] = { MOVE_PROTECT, MOVE_REST, MOVE_ROAR, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; static const u16 sTorracatTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULK_UP, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -28911,53 +28914,50 @@ static const u16 sTorracatTeachableLearnset[] = { MOVE_PROTECT, MOVE_REST, MOVE_ROAR, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; static const u16 sIncineroarTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, - MOVE_SNATCH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_LITTEN @@ -28968,82 +28968,82 @@ static const u16 sPopplioTeachableLearnset[] = { MOVE_BLIZZARD, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; static const u16 sBrionneTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; static const u16 sPrimarinaTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_POPPLIO @@ -29055,20 +29055,20 @@ static const u16 sPikipekTeachableLearnset[] = { MOVE_BRICK_BREAK, MOVE_BULLET_SEED, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_PROTECT, MOVE_REST, MOVE_ROCK_SMASH, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -29078,21 +29078,21 @@ static const u16 sTrumbeakTeachableLearnset[] = { MOVE_BRICK_BREAK, MOVE_BULLET_SEED, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_PROTECT, MOVE_REST, MOVE_ROCK_SMASH, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -29102,24 +29102,24 @@ static const u16 sToucannonTeachableLearnset[] = { MOVE_BRICK_BREAK, MOVE_BULLET_SEED, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, MOVE_OVERHEAT, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_REST, MOVE_ROCK_SMASH, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_PIKIPEK @@ -29128,39 +29128,45 @@ static const u16 sToucannonTeachableLearnset[] = { static const u16 sYungoosTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_TOMB, MOVE_SANDSTORM, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; static const u16 sGumshoosTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, @@ -29168,21 +29174,15 @@ static const u16 sGumshoosTeachableLearnset[] = { MOVE_ROCK_TOMB, MOVE_SANDSTORM, MOVE_SHOCK_WAVE, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_YUNGOOS @@ -29192,20 +29192,20 @@ static const u16 sGrubbinTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHOCK_WAVE, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -29213,21 +29213,21 @@ static const u16 sCharjabugTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHOCK_WAVE, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -29235,25 +29235,25 @@ static const u16 sVikavoltTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_GRUBBIN @@ -29261,68 +29261,68 @@ static const u16 sVikavoltTeachableLearnset[] = { #if P_FAMILY_CRABRAWLER static const u16 sCrabrawlerTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, + MOVE_ICE_PUNCH, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sCrabominableTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_DIG, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, MOVE_ICE_PUNCH, MOVE_ICY_WIND, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CRABRAWLER @@ -29333,25 +29333,25 @@ static const u16 sOricorioTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, + MOVE_ICY_WIND, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, MOVE_SANDSTORM, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ORICORIO @@ -29362,24 +29362,24 @@ static const u16 sCutieflyTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, MOVE_SKILL_SWAP, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -29388,26 +29388,26 @@ static const u16 sRibombeeTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, MOVE_SKILL_SWAP, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CUTIEFLY @@ -29415,117 +29415,117 @@ static const u16 sRibombeeTeachableLearnset[] = { #if P_FAMILY_ROCKRUFF static const u16 sRockruffTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sLycanrocMiddayTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sLycanrocMidnightTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FOCUS_PUNCH, MOVE_IRON_TAIL, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROAR, - MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROAR, MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TAUNT, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sLycanrocDuskTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ROCKRUFF @@ -29534,8 +29534,10 @@ static const u16 sLycanrocDuskTeachableLearnset[] = { static const u16 sWishiwashiTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_ICE_BEAM, @@ -29543,15 +29545,13 @@ static const u16 sWishiwashiTeachableLearnset[] = { MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_WISHIWASHI @@ -29561,50 +29561,50 @@ static const u16 sMareanieTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; static const u16 sToxapexTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MAREANIE @@ -29612,56 +29612,56 @@ static const u16 sToxapexTeachableLearnset[] = { #if P_FAMILY_MUDBRAY static const u16 sMudbrayTeachableLearnset[] = { MOVE_ATTRACT, - MOVE_DOUBLE_TEAM, - MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROAR, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, MOVE_BODY_SLAM, MOVE_COUNTER, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, MOVE_ENDURE, + MOVE_FACADE, MOVE_MEGA_KICK, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROAR, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sMudsdaleTeachableLearnset[] = { MOVE_ATTRACT, - MOVE_DOUBLE_TEAM, - MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_HYPER_BEAM, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROAR, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_SUNNY_DAY, - MOVE_TOXIC, MOVE_BODY_SLAM, MOVE_COUNTER, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, MOVE_ENDURE, + MOVE_FACADE, + MOVE_HYPER_BEAM, MOVE_MEGA_KICK, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROAR, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, + MOVE_SANDSTORM, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MUDBRAY @@ -29671,48 +29671,48 @@ static const u16 sDewpiderTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; static const u16 sAraquanidTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_DEWPIDER @@ -29722,20 +29722,20 @@ static const u16 sFomantisTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULLET_SEED, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_PROTECT, MOVE_REST, MOVE_SAFEGUARD, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_FURY_CUTTER, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -29745,22 +29745,22 @@ static const u16 sLurantisTeachableLearnset[] = { MOVE_BRICK_BREAK, MOVE_BULLET_SEED, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_FURY_CUTTER, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_FOMANTIS @@ -29769,6 +29769,8 @@ static const u16 sLurantisTeachableLearnset[] = { static const u16 sMorelullTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -29776,22 +29778,22 @@ static const u16 sMorelullTeachableLearnset[] = { MOVE_PROTECT, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sShiinoticTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLASH, MOVE_GIGA_DRAIN, @@ -29801,16 +29803,14 @@ static const u16 sShiinoticTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MORELULL @@ -29820,57 +29820,57 @@ static const u16 sSalanditTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sSalazzleTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SALANDIT @@ -29881,65 +29881,65 @@ static const u16 sStuffulTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BRICK_BREAK, MOVE_BULK_UP, - MOVE_DOUBLE_TEAM, - MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_FOCUS_PUNCH, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROAR, - MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_TAUNT, - MOVE_TOXIC, MOVE_DEFENSE_CURL, MOVE_DOUBLE_EDGE, + MOVE_DOUBLE_TEAM, + MOVE_EARTHQUAKE, MOVE_ENDURE, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, MOVE_ICE_PUNCH, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROAR, MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TAUNT, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sBewearTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROAR, - MOVE_ROCK_TOMB, - MOVE_STRENGTH, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_ICE_PUNCH, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROAR, MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TAUNT, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_STUFFUL @@ -29949,6 +29949,7 @@ static const u16 sBounsweetTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULLET_SEED, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_LIGHT_SCREEN, @@ -29956,14 +29957,13 @@ static const u16 sBounsweetTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -29971,6 +29971,7 @@ static const u16 sSteeneeTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULLET_SEED, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_LIGHT_SCREEN, @@ -29978,14 +29979,13 @@ static const u16 sSteeneeTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -29993,24 +29993,24 @@ static const u16 sTsareenaTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULLET_SEED, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_MEGA_KICK, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_BOUNSWEET @@ -30021,24 +30021,24 @@ static const u16 sComfeyTeachableLearnset[] = { MOVE_BULLET_SEED, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TOXIC, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_COMFEY @@ -30046,38 +30046,38 @@ static const u16 sComfeyTeachableLearnset[] = { #if P_FAMILY_ORANGURU static const u16 sOranguruTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ORANGURU @@ -30086,37 +30086,37 @@ static const u16 sOranguruTeachableLearnset[] = { static const u16 sPassimianTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SEISMIC_TOSS, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_ROCK_SLIDE, - MOVE_SEISMIC_TOSS, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_PASSIMIAN @@ -30124,23 +30124,23 @@ static const u16 sPassimianTeachableLearnset[] = { #if P_FAMILY_WIMPOD static const u16 sWimpodTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_DEFENSE_CURL, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_SURF, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_WATERFALL, - MOVE_DEFENSE_CURL, - MOVE_ENDURE, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SURF, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_TOXIC, + MOVE_WATERFALL, MOVE_UNAVAILABLE, }; @@ -30150,35 +30150,35 @@ static const u16 sGolisopodTeachableLearnset[] = { MOVE_BLIZZARD, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_DEFENSE_CURL, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FURY_CUTTER, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DEFENSE_CURL, - MOVE_ENDURE, - MOVE_FURY_CUTTER, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_WIMPOD @@ -30188,53 +30188,53 @@ static const u16 sSandygastTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_SLUDGE_BOMB, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sPalossandTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_SLUDGE_BOMB, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SANDYGAST @@ -30242,21 +30242,21 @@ static const u16 sPalossandTeachableLearnset[] = { #if P_FAMILY_PYUKUMUKU static const u16 sPyukumukuTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_COUNTER, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_HAIL, MOVE_LIGHT_SCREEN, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_PYUKUMUKU @@ -30264,62 +30264,62 @@ static const u16 sPyukumukuTeachableLearnset[] = { #if P_FAMILY_TYPE_NULL static const u16 sTypeNullTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, - MOVE_SANDSTORM, - MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, MOVE_ROCK_SLIDE, + MOVE_SANDSTORM, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sSilvallyTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FLAMETHROWER, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_SANDSTORM, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_SUNNY_DAY, MOVE_SURF, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_ICY_WIND, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TYPE_NULL @@ -30328,31 +30328,31 @@ static const u16 sSilvallyTeachableLearnset[] = { static const u16 sMiniorTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SAFEGUARD, MOVE_SANDSTORM, - MOVE_SOLAR_BEAM, - MOVE_TOXIC, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MINIOR @@ -30360,30 +30360,30 @@ static const u16 sMiniorTeachableLearnset[] = { #if P_FAMILY_KOMALA static const u16 sKomalaTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_CALM_MIND, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_ROCK_TOMB, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_KOMALA @@ -30391,33 +30391,33 @@ static const u16 sKomalaTeachableLearnset[] = { #if P_FAMILY_TURTONATOR static const u16 sTurtonatorTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULK_UP, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, MOVE_ROCK_TOMB, MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TURTONATOR @@ -30425,26 +30425,26 @@ static const u16 sTurtonatorTeachableLearnset[] = { #if P_FAMILY_TOGEDEMARU static const u16 sTogedemaruTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_DEFENSE_CURL, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, - MOVE_SHOCK_WAVE, - MOVE_THIEF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_DEFENSE_CURL, - MOVE_ENDURE, MOVE_ROLLOUT, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TOGEDEMARU @@ -30454,31 +30454,31 @@ static const u16 sMimikyuTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULK_UP, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MIMIKYU @@ -30491,9 +30491,12 @@ static const u16 sBruxishTeachableLearnset[] = { MOVE_BULK_UP, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, MOVE_LIGHT_SCREEN, MOVE_PROTECT, @@ -30502,20 +30505,17 @@ static const u16 sBruxishTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_BRUXISH @@ -30528,36 +30528,36 @@ static const u16 sDrampaTeachableLearnset[] = { MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_FLY, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STEEL_WING, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWIFT, MOVE_THUNDER, MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWIFT, - MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_DRAMPA @@ -30569,24 +30569,24 @@ static const u16 sDhelmiseTeachableLearnset[] = { MOVE_BRICK_BREAK, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_SURF, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_DHELMISE @@ -30595,106 +30595,106 @@ static const u16 sDhelmiseTeachableLearnset[] = { static const u16 sJangmoOTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SANDSTORM, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sHakamoOTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SANDSTORM, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sKommoOTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SANDSTORM, MOVE_SHOCK_WAVE, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TAUNT, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_JANGMO_O @@ -30704,32 +30704,32 @@ static const u16 sTapuKokoTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, MOVE_SAFEGUARD, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STEEL_WING, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TAPU_KOKO @@ -30738,28 +30738,28 @@ static const u16 sTapuKokoTeachableLearnset[] = { static const u16 sTapuLeleTeachableLearnset[] = { MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_TORMENT, MOVE_TOXIC, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TAPU_LELE @@ -30770,31 +30770,31 @@ static const u16 sTapuBuluTeachableLearnset[] = { MOVE_BULK_UP, MOVE_BULLET_SEED, MOVE_CALM_MIND, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_MEGA_PUNCH, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_TORMENT, MOVE_TOXIC, - MOVE_ENDURE, - MOVE_MEGA_PUNCH, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TAPU_BULU @@ -30805,29 +30805,29 @@ static const u16 sTapuFiniTeachableLearnset[] = { MOVE_CALM_MIND, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_TORMENT, MOVE_TOXIC, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TAPU_FINI @@ -30842,9 +30842,12 @@ static const u16 sCosmoemTeachableLearnset[] = { }; static const u16 sSolgaleoTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -30853,27 +30856,24 @@ static const u16 sSolgaleoTeachableLearnset[] = { MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -30882,13 +30882,17 @@ static const u16 sLunalaTeachableLearnset[] = { MOVE_BLIZZARD, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_DREAM_EATER, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, @@ -30896,75 +30900,71 @@ static const u16 sLunalaTeachableLearnset[] = { MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_DREAM_EATER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_COSMOG #if P_FAMILY_NIHILEGO static const u16 sNihilegoTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SANDSTORM, - MOVE_SLUDGE_BOMB, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, MOVE_SNORE, MOVE_SWAGGER, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_NIHILEGO #if P_FAMILY_BUZZWOLE static const u16 sBuzzwoleTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_DOUBLE_TEAM, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROCK_TOMB, - MOVE_TAUNT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, MOVE_ICE_PUNCH, MOVE_MEGA_PUNCH, + MOVE_PROTECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, + MOVE_TAUNT, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_BUZZWOLE @@ -30974,22 +30974,22 @@ static const u16 sPheromosaTeachableLearnset[] = { MOVE_BLIZZARD, MOVE_BRICK_BREAK, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_REST, MOVE_SHOCK_WAVE, - MOVE_SNATCH, - MOVE_TAUNT, - MOVE_TORMENT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_ICY_WIND, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_TORMENT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_PHEROMOSA @@ -30998,6 +30998,7 @@ static const u16 sPheromosaTeachableLearnset[] = { static const u16 sXurkitreeTeachableLearnset[] = { MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, @@ -31006,25 +31007,28 @@ static const u16 sXurkitreeTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_XURKITREE #if P_FAMILY_CELESTEELA static const u16 sCelesteelaTeachableLearnset[] = { + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -31033,17 +31037,13 @@ static const u16 sCelesteelaTeachableLearnset[] = { MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_REST, - MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, MOVE_ROCK_SLIDE, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, MOVE_SWAGGER, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CELESTEELA @@ -31055,45 +31055,45 @@ static const u16 sKartanaTeachableLearnset[] = { MOVE_CALM_MIND, MOVE_CUT, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_PROTECT, MOVE_REST, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_FURY_CUTTER, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWORDS_DANCE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_KARTANA #if P_FAMILY_GUZZLORD static const u16 sGuzzlordTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROCK_TOMB, - MOVE_SHOCK_WAVE, - MOVE_SLUDGE_BOMB, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, + MOVE_PROTECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, + MOVE_SHOCK_WAVE, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, MOVE_SNORE, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_GUZZLORD @@ -31101,10 +31101,12 @@ static const u16 sGuzzlordTeachableLearnset[] = { #if P_FAMILY_NECROZMA static const u16 sNecrozmaTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, @@ -31112,31 +31114,33 @@ static const u16 sNecrozmaTeachableLearnset[] = { MOVE_PSYCHIC, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, MOVE_SHOCK_WAVE, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_THIEF, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_NECROZMA #if P_FAMILY_MAGEARNA static const u16 sMagearnaTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_DEFENSE_CURL, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, @@ -31145,21 +31149,17 @@ static const u16 sMagearnaTeachableLearnset[] = { MOVE_PSYCHIC, MOVE_REFLECT, MOVE_REST, + MOVE_ROLLOUT, MOVE_SHADOW_BALL, MOVE_SHOCK_WAVE, MOVE_SKILL_SWAP, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_THUNDERBOLT, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -31170,46 +31170,46 @@ static const u16 sMarshadowTeachableLearnset[] = { MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_CALM_MIND, + MOVE_COUNTER, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROCK_TOMB, - MOVE_SHADOW_BALL, - MOVE_SNATCH, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, + MOVE_PROTECT, MOVE_PSYCH_UP, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, + MOVE_SHADOW_BALL, MOVE_SLEEP_TALK, + MOVE_SNATCH, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MARSHADOW #if P_FAMILY_POIPOLE static const u16 sPoipoleTeachableLearnset[] = { + MOVE_ENDURE, MOVE_FACADE, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; @@ -31217,6 +31217,7 @@ static const u16 sNaganadelTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -31226,39 +31227,38 @@ static const u16 sNaganadelTeachableLearnset[] = { MOVE_PROTECT, MOVE_REST, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SNATCH, + MOVE_SNORE, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDERBOLT, MOVE_TOXIC, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_POIPOLE #if P_FAMILY_STAKATAKA static const u16 sStakatakaTeachableLearnset[] = { + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_LIGHT_SCREEN, + MOVE_MEGA_KICK, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SANDSTORM, MOVE_SKILL_SWAP, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MEGA_KICK, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_STAKATAKA @@ -31267,8 +31267,11 @@ static const u16 sStakatakaTeachableLearnset[] = { static const u16 sBlacephalonTeachableLearnset[] = { MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, @@ -31277,18 +31280,15 @@ static const u16 sBlacephalonTeachableLearnset[] = { MOVE_PSYCHIC, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_FIRE_PUNCH, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_BLACEPHALON @@ -31300,69 +31300,69 @@ static const u16 sZeraoraTeachableLearnset[] = { MOVE_BULK_UP, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_REST, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SNATCH, + MOVE_SNORE, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWIFT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ZERAORA #if P_FAMILY_MELTAN static const u16 sMeltanTeachableLearnset[] = { + MOVE_ENDURE, MOVE_FACADE, MOVE_PROTECT, MOVE_REST, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sMelmetalTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_DYNAMIC_PUNCH, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROCK_TOMB, - MOVE_SOLAR_BEAM, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DYNAMIC_PUNCH, - MOVE_ENDURE, MOVE_ICE_PUNCH, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, + MOVE_PROTECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MELTAN @@ -31370,77 +31370,77 @@ static const u16 sMelmetalTeachableLearnset[] = { #if P_FAMILY_GROOKEY static const u16 sGrookeyTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, MOVE_UNAVAILABLE, }; static const u16 sThwackeyTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, MOVE_UNAVAILABLE, }; static const u16 sRillaboomTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_BULLET_SEED, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STRENGTH, MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_GROOKEY @@ -31448,69 +31448,69 @@ static const u16 sRillaboomTeachableLearnset[] = { #if P_FAMILY_SCORBUNNY static const u16 sScorbunnyTeachableLearnset[] = { MOVE_ATTRACT, - MOVE_FACADE, - MOVE_FIRE_BLAST, - MOVE_FLAMETHROWER, - MOVE_OVERHEAT, - MOVE_PROTECT, - MOVE_REST, - MOVE_SUNNY_DAY, - MOVE_TAUNT, MOVE_COUNTER, MOVE_DOUBLE_EDGE, MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, MOVE_MEGA_KICK, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWIFT, + MOVE_TAUNT, MOVE_UNAVAILABLE, }; static const u16 sRabootTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULK_UP, - MOVE_FACADE, - MOVE_FIRE_BLAST, - MOVE_FLAMETHROWER, - MOVE_OVERHEAT, - MOVE_PROTECT, - MOVE_REST, - MOVE_SUNNY_DAY, - MOVE_TAUNT, MOVE_COUNTER, MOVE_DOUBLE_EDGE, MOVE_ENDURE, + MOVE_FACADE, + MOVE_FIRE_BLAST, + MOVE_FLAMETHROWER, MOVE_MEGA_KICK, + MOVE_OVERHEAT, + MOVE_PROTECT, + MOVE_REST, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, MOVE_UNAVAILABLE, }; static const u16 sCinderaceTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULK_UP, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, + MOVE_MEGA_KICK, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REST, MOVE_SHADOW_BALL, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SCORBUNNY @@ -31520,6 +31520,7 @@ static const u16 sSobbleTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_LIGHT_SCREEN, MOVE_PROTECT, @@ -31527,13 +31528,12 @@ static const u16 sSobbleTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, - MOVE_SURF, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SURF, MOVE_SWIFT, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; @@ -31541,6 +31541,7 @@ static const u16 sDrizzileTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_LIGHT_SCREEN, MOVE_PROTECT, @@ -31548,13 +31549,12 @@ static const u16 sDrizzileTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, - MOVE_SURF, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SURF, MOVE_SWIFT, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; @@ -31563,28 +31563,28 @@ static const u16 sInteleonTeachableLearnset[] = { MOVE_BLIZZARD, MOVE_DIVE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, + MOVE_SWIFT, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_METRONOME, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWIFT, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SOBBLE @@ -31592,48 +31592,48 @@ static const u16 sInteleonTeachableLearnset[] = { #if P_FAMILY_SKWOVET static const u16 sSkwovetTeachableLearnset[] = { MOVE_ATTRACT, - MOVE_BULLET_SEED, - MOVE_DIG, - MOVE_FACADE, - MOVE_IRON_TAIL, - MOVE_PROTECT, - MOVE_REST, - MOVE_THIEF, MOVE_BODY_SLAM, + MOVE_BULLET_SEED, MOVE_COUNTER, MOVE_DEFENSE_CURL, + MOVE_DIG, MOVE_DOUBLE_EDGE, MOVE_ENDURE, + MOVE_FACADE, + MOVE_IRON_TAIL, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_REST, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_THIEF, MOVE_UNAVAILABLE, }; static const u16 sGreedentTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, + MOVE_COUNTER, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWORDS_DANCE, + MOVE_THIEF, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SKWOVET @@ -31642,44 +31642,47 @@ static const u16 sGreedentTeachableLearnset[] = { static const u16 sRookideeTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_PROTECT, MOVE_REST, MOVE_ROCK_SMASH, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, MOVE_UNAVAILABLE, }; static const u16 sCorvisquireTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_PROTECT, MOVE_REST, MOVE_ROCK_SMASH, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, MOVE_UNAVAILABLE, }; static const u16 sCorviknightTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULK_UP, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, @@ -31689,17 +31692,14 @@ static const u16 sCorviknightTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_ROCK_SMASH, - MOVE_STEEL_WING, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STEEL_WING, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ROOKIDEE @@ -31712,6 +31712,7 @@ static const u16 sBlipbugTeachableLearnset[] = { static const u16 sDottlerTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, + MOVE_ENDURE, MOVE_FACADE, MOVE_LIGHT_SCREEN, MOVE_PROTECT, @@ -31721,16 +31722,16 @@ static const u16 sDottlerTeachableLearnset[] = { MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_SOLAR_BEAM, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, MOVE_UNAVAILABLE, }; static const u16 sOrbeetleTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, @@ -31742,10 +31743,9 @@ static const u16 sOrbeetleTeachableLearnset[] = { MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_SOLAR_BEAM, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_BLIPBUG @@ -31754,35 +31754,35 @@ static const u16 sOrbeetleTeachableLearnset[] = { static const u16 sNickitTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DIG, + MOVE_ENDURE, MOVE_FACADE, MOVE_PROTECT, MOVE_REST, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, MOVE_UNAVAILABLE, }; static const u16 sThievulTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DIG, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_REST, MOVE_SHADOW_BALL, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TORMENT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_NICKIT @@ -31791,33 +31791,33 @@ static const u16 sThievulTeachableLearnset[] = { static const u16 sGossifleurTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULLET_SEED, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_REST, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_UNAVAILABLE, }; static const u16 sEldegossTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULLET_SEED, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_REST, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_GOSSIFLEUR @@ -31825,13 +31825,13 @@ static const u16 sEldegossTeachableLearnset[] = { #if P_FAMILY_WOOLOO static const u16 sWoolooTeachableLearnset[] = { MOVE_ATTRACT, - MOVE_FACADE, - MOVE_PROTECT, - MOVE_REST, MOVE_COUNTER, MOVE_DEFENSE_CURL, MOVE_DOUBLE_EDGE, MOVE_ENDURE, + MOVE_FACADE, + MOVE_PROTECT, + MOVE_REST, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, @@ -31841,16 +31841,16 @@ static const u16 sWoolooTeachableLearnset[] = { static const u16 sDubwoolTeachableLearnset[] = { MOVE_ATTRACT, - MOVE_FACADE, - MOVE_HYPER_BEAM, - MOVE_PROTECT, - MOVE_REST, MOVE_BODY_SLAM, MOVE_COUNTER, MOVE_DEFENSE_CURL, MOVE_DOUBLE_EDGE, MOVE_ENDURE, + MOVE_FACADE, + MOVE_HYPER_BEAM, MOVE_MEGA_KICK, + MOVE_PROTECT, + MOVE_REST, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, @@ -31863,28 +31863,32 @@ static const u16 sDubwoolTeachableLearnset[] = { #if P_FAMILY_CHEWTLE static const u16 sChewtleTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_COUNTER, MOVE_DIVE, + MOVE_ENDURE, MOVE_FACADE, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_UNAVAILABLE, }; static const u16 sDrednawTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_COUNTER, MOVE_DIG, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, @@ -31892,19 +31896,15 @@ static const u16 sDrednawTeachableLearnset[] = { MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_SURF, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SURF, MOVE_SWORDS_DANCE, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CHEWTLE @@ -31913,17 +31913,17 @@ static const u16 sDrednawTeachableLearnset[] = { static const u16 sYamperTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DIG, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -31932,18 +31932,18 @@ static const u16 sBoltundTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BULK_UP, MOVE_DIG, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -31952,18 +31952,18 @@ static const u16 sBoltundTeachableLearnset[] = { #if P_FAMILY_ROLYCOLY static const u16 sRolycolyTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_UNAVAILABLE, @@ -31971,53 +31971,53 @@ static const u16 sRolycolyTeachableLearnset[] = { static const u16 sCarkolTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_SUNNY_DAY, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_UNAVAILABLE, }; static const u16 sCoalossalTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIG, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_FIRE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ROLYCOLY @@ -32034,26 +32034,29 @@ static const u16 sFlappleTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BULLET_SEED, + MOVE_DEFENSE_CURL, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_REST, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_DEFENSE_CURL, - MOVE_ENDURE, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_UNAVAILABLE, }; static const u16 sAppletunTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, + MOVE_DEFENSE_CURL, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, @@ -32062,40 +32065,40 @@ static const u16 sAppletunTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, - MOVE_SAFEGUARD, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_ENDURE, MOVE_ROLLOUT, + MOVE_SAFEGUARD, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_UNAVAILABLE, }; #if P_GEN_9_CROSS_EVOS static const u16 sDipplinTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BULLET_SEED, + MOVE_DEFENSE_CURL, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_ENDURE, MOVE_ROLLOUT, MOVE_SLEEP_TALK, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_UNAVAILABLE, }; static const u16 sHydrappleTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BULLET_SEED, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, @@ -32103,12 +32106,9 @@ static const u16 sHydrappleTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; #endif //P_GEN_9_CROSS_EVOS @@ -32117,17 +32117,17 @@ static const u16 sHydrappleTeachableLearnset[] = { #if P_FAMILY_SILICOBRA static const u16 sSilicobraTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIG, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_UNAVAILABLE, @@ -32135,18 +32135,18 @@ static const u16 sSilicobraTeachableLearnset[] = { static const u16 sSandacondaTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIG, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_UNAVAILABLE, @@ -32159,21 +32159,21 @@ static const u16 sCramorantTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, MOVE_DIVE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_SURF, MOVE_THIEF, MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CRAMORANT @@ -32183,18 +32183,18 @@ static const u16 sArrokudaTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BRICK_BREAK, MOVE_DIVE, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_SURF, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SURF, MOVE_SWIFT, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; @@ -32203,20 +32203,20 @@ static const u16 sBarraskewdaTeachableLearnset[] = { MOVE_BLIZZARD, MOVE_BRICK_BREAK, MOVE_DIVE, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_SURF, - MOVE_WATERFALL, - MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SURF, MOVE_SWIFT, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ARROKUDA @@ -32224,10 +32224,10 @@ static const u16 sBarraskewdaTeachableLearnset[] = { #if P_FAMILY_TOXEL static const u16 sToxelTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_ENDURE, MOVE_FACADE, MOVE_PROTECT, MOVE_REST, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_UNAVAILABLE, @@ -32236,60 +32236,60 @@ static const u16 sToxelTeachableLearnset[] = { static const u16 sToxtricityAmpedTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BRICK_BREAK, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_HYPER_BEAM, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; static const u16 sToxtricityLowKeyTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BRICK_BREAK, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_HYPER_BEAM, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, + MOVE_METRONOME, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_METRONOME, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWAGGER, - MOVE_SWIFT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TOXEL @@ -32297,20 +32297,22 @@ static const u16 sToxtricityLowKeyTeachableLearnset[] = { #if P_FAMILY_SIZZLIPEDE static const u16 sSizzlipedeTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_DEFENSE_CURL, + MOVE_ENDURE, MOVE_FACADE, MOVE_PROTECT, MOVE_REST, - MOVE_SUNNY_DAY, - MOVE_DEFENSE_CURL, - MOVE_ENDURE, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_UNAVAILABLE, }; static const u16 sCentiskorchTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_DEFENSE_CURL, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -32318,13 +32320,11 @@ static const u16 sCentiskorchTeachableLearnset[] = { MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REST, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_DEFENSE_CURL, - MOVE_ENDURE, MOVE_ROLLOUT, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SIZZLIPEDE @@ -32332,46 +32332,46 @@ static const u16 sCentiskorchTeachableLearnset[] = { #if P_FAMILY_CLOBBOPUS static const u16 sClobbopusTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_DIVE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_ICE_PUNCH, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_REST, MOVE_ROCK_SMASH, - MOVE_TAUNT, - MOVE_WATERFALL, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_MEGA_PUNCH, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_TAUNT, + MOVE_WATERFALL, MOVE_UNAVAILABLE, }; static const u16 sGrapploctTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_DIG, MOVE_DIVE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_REST, MOVE_ROCK_SMASH, - MOVE_SURF, - MOVE_TAUNT, - MOVE_WATERFALL, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_MEGA_PUNCH, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SURF, + MOVE_TAUNT, + MOVE_WATERFALL, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CLOBBOPUS @@ -32379,15 +32379,15 @@ static const u16 sGrapploctTeachableLearnset[] = { #if P_FAMILY_SINISTEA static const u16 sSinisteaTeachableLearnset[] = { MOVE_CALM_MIND, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_REST, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_ENDURE, - MOVE_METRONOME, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_UNAVAILABLE, @@ -32395,18 +32395,18 @@ static const u16 sSinisteaTeachableLearnset[] = { static const u16 sPolteageistTeachableLearnset[] = { MOVE_CALM_MIND, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_REST, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_ENDURE, - MOVE_METRONOME, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_UNAVAILABLE, @@ -32417,18 +32417,18 @@ static const u16 sPolteageistTeachableLearnset[] = { static const u16 sHatennaTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, MOVE_SKILL_SWAP, - MOVE_ENDURE, - MOVE_METRONOME, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWIFT, @@ -32439,18 +32439,18 @@ static const u16 sHatennaTeachableLearnset[] = { static const u16 sHattremTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, MOVE_SKILL_SWAP, - MOVE_ENDURE, - MOVE_METRONOME, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWIFT, @@ -32461,20 +32461,20 @@ static const u16 sHattremTeachableLearnset[] = { static const u16 sHattereneTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_ENDURE, - MOVE_METRONOME, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWIFT, @@ -32487,72 +32487,72 @@ static const u16 sHattereneTeachableLearnset[] = { #if P_FAMILY_IMPIDIMP static const u16 sImpidimpTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_ENDURE, MOVE_FACADE, MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_REFLECT, - MOVE_REST, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_ENDURE, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_WAVE, + MOVE_TORMENT, MOVE_UNAVAILABLE, }; static const u16 sMorgremTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_ENDURE, MOVE_FACADE, MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_REFLECT, - MOVE_REST, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_ENDURE, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_WAVE, + MOVE_TORMENT, MOVE_UNAVAILABLE, }; static const u16 sGrimmsnarlTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_REFLECT, - MOVE_REST, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TORMENT, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, + MOVE_LIGHT_SCREEN, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, MOVE_METRONOME, + MOVE_PROTECT, + MOVE_REFLECT, + MOVE_REST, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_THIEF, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TORMENT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_IMPIDIMP @@ -32560,10 +32560,10 @@ static const u16 sGrimmsnarlTeachableLearnset[] = { #if P_FAMILY_MILCERY static const u16 sMilceryTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_ENDURE, MOVE_FACADE, MOVE_PROTECT, MOVE_REST, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_UNAVAILABLE, @@ -32572,43 +32572,43 @@ static const u16 sMilceryTeachableLearnset[] = { static const u16 sAlcremieTeachableLearnset[] = { MOVE_ATTRACT, MOVE_CALM_MIND, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REST, MOVE_SAFEGUARD, - MOVE_SOLAR_BEAM, - MOVE_ENDURE, - MOVE_METRONOME, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MILCERY #if P_FAMILY_FALINKS static const u16 sFalinksTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_SUNNY_DAY, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; @@ -32617,19 +32617,19 @@ static const u16 sFalinksTeachableLearnset[] = { #if P_FAMILY_PINCURCHIN static const u16 sPincurchinTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_SURF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_BODY_SLAM, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SURF, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -32638,11 +32638,11 @@ static const u16 sPincurchinTeachableLearnset[] = { #if P_FAMILY_SNOM static const u16 sSnomTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_ENDURE, MOVE_FACADE, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_REST, - MOVE_ENDURE, - MOVE_ICY_WIND, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_UNAVAILABLE, @@ -32652,18 +32652,18 @@ static const u16 sFrosmothTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, MOVE_CALM_MIND, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, - MOVE_ENDURE, - MOVE_ICY_WIND, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWIFT, @@ -32674,22 +32674,22 @@ static const u16 sFrosmothTeachableLearnset[] = { #if P_FAMILY_STONJOURNER static const u16 sStonjournerTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, + MOVE_MEGA_KICK, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SAFEGUARD, MOVE_SANDSTORM, - MOVE_SUNNY_DAY, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_MEGA_KICK, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SUNNY_DAY, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_STONJOURNER @@ -32698,25 +32698,25 @@ static const u16 sStonjournerTeachableLearnset[] = { static const u16 sEiscueTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIVE, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_EISCUE @@ -32724,17 +32724,17 @@ static const u16 sEiscueTeachableLearnset[] = { #if P_FAMILY_INDEEDEE static const u16 sIndeedeeMTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_ENDURE, MOVE_FACADE, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REST, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_METRONOME, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWIFT, @@ -32743,20 +32743,20 @@ static const u16 sIndeedeeMTeachableLearnset[] = { static const u16 sIndeedeeFTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_ENDURE, MOVE_FACADE, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_METRONOME, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWIFT, @@ -32769,22 +32769,22 @@ static const u16 sMorpekoTeachableLearnset[] = { MOVE_ATTRACT, MOVE_BRICK_BREAK, MOVE_BULLET_SEED, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_PROTECT, MOVE_REST, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TORMENT, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWAGGER, MOVE_SWIFT, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_TORMENT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MORPEKO @@ -32792,53 +32792,53 @@ static const u16 sMorpekoTeachableLearnset[] = { #if P_FAMILY_CUFANT static const u16 sCufantTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_MEGA_KICK, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MEGA_KICK, - MOVE_ROCK_SLIDE, MOVE_ROLLOUT, + MOVE_SANDSTORM, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, MOVE_SWAGGER, MOVE_UNAVAILABLE, }; static const u16 sCopperajahTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, + MOVE_MEGA_KICK, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_STRENGTH, - MOVE_TAUNT, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MEGA_KICK, - MOVE_ROCK_SLIDE, MOVE_ROLLOUT, + MOVE_SANDSTORM, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_STRENGTH, MOVE_SWAGGER, + MOVE_TAUNT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CUFANT @@ -32846,28 +32846,28 @@ static const u16 sCopperajahTeachableLearnset[] = { #if P_FAMILY_DRACOZOLT static const u16 sDracozoltTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SUNNY_DAY, MOVE_TAUNT, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, @@ -32877,27 +32877,27 @@ static const u16 sDracozoltTeachableLearnset[] = { #if P_FAMILY_ARCTOZOLT static const u16 sArctozoltTeachableLearnset[] = { MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SURF, MOVE_TAUNT, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, @@ -32906,22 +32906,22 @@ static const u16 sArctozoltTeachableLearnset[] = { #if P_FAMILY_DRACOVISH static const u16 sDracovishTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_DIVE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, + MOVE_MEGA_KICK, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_ROCK_TOMB, - MOVE_SURF, - MOVE_WATERFALL, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_MEGA_KICK, MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SURF, + MOVE_WATERFALL, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_DRACOVISH @@ -32929,23 +32929,23 @@ static const u16 sDracovishTeachableLearnset[] = { #if P_FAMILY_ARCTOVISH static const u16 sArctovishTeachableLearnset[] = { MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIVE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_ROCK_TOMB, - MOVE_SURF, - MOVE_WATERFALL, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ICY_WIND, MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SURF, + MOVE_WATERFALL, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ARCTOVISH @@ -32953,8 +32953,11 @@ static const u16 sArctovishTeachableLearnset[] = { #if P_FAMILY_DURALUDON static const u16 sDuraludonTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_DOUBLE_EDGE, MOVE_DRAGON_CLAW, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, @@ -32962,27 +32965,27 @@ static const u16 sDuraludonTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, - MOVE_SOLAR_BEAM, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, MOVE_SWORDS_DANCE, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; #if P_GEN_9_CROSS_EVOS static const u16 sArchaludonTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_DOUBLE_EDGE, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, @@ -32990,17 +32993,14 @@ static const u16 sArchaludonTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, + MOVE_SWORDS_DANCE, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SWORDS_DANCE, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -33011,10 +33011,10 @@ static const u16 sArchaludonTeachableLearnset[] = { static const u16 sDreepyTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_PROTECT, MOVE_REST, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWIFT, @@ -33025,7 +33025,9 @@ static const u16 sDreepyTeachableLearnset[] = { static const u16 sDrakloakTeachableLearnset[] = { MOVE_ATTRACT, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -33034,26 +33036,27 @@ static const u16 sDrakloakTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_STEEL_WING, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWIFT, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; static const u16 sDragapultTeachableLearnset[] = { MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_DOUBLE_TEAM, MOVE_DRAGON_CLAW, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -33064,19 +33067,16 @@ static const u16 sDragapultTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_STEEL_WING, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, - MOVE_SWIFT, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -33084,15 +33084,15 @@ static const u16 sDragapultTeachableLearnset[] = { #if P_FAMILY_ZACIAN static const u16 sZacianTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_DIG, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, MOVE_PROTECT, MOVE_REST, - MOVE_BODY_SLAM, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWIFT, @@ -33103,8 +33103,10 @@ static const u16 sZacianTeachableLearnset[] = { #if P_FAMILY_ZAMAZENTA static const u16 sZamazentaTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_DIG, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, @@ -33116,12 +33118,10 @@ static const u16 sZamazentaTeachableLearnset[] = { MOVE_ROAR, MOVE_SAFEGUARD, MOVE_SANDSTORM, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_BODY_SLAM, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWIFT, MOVE_UNAVAILABLE, }; @@ -33129,6 +33129,8 @@ static const u16 sZamazentaTeachableLearnset[] = { #if P_FAMILY_ETERNATUS static const u16 sEternatusTeachableLearnset[] = { + MOVE_BODY_SLAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -33140,14 +33142,12 @@ static const u16 sEternatusTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SNORE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SNORE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ETERNATUS @@ -33156,23 +33156,23 @@ static const u16 sEternatusTeachableLearnset[] = { static const u16 sKubfuTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, - MOVE_DIG, - MOVE_FACADE, - MOVE_FOCUS_PUNCH, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_BODY_SLAM, MOVE_COUNTER, + MOVE_DIG, MOVE_DOUBLE_EDGE, MOVE_DYNAMIC_PUNCH, MOVE_ENDURE, + MOVE_FACADE, MOVE_FIRE_PUNCH, + MOVE_FOCUS_PUNCH, MOVE_ICE_PUNCH, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROCK_SMASH, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWORDS_DANCE, @@ -33183,31 +33183,31 @@ static const u16 sKubfuTeachableLearnset[] = { static const u16 sUrshifuSingleStrikeTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, - MOVE_DIG, - MOVE_FACADE, - MOVE_FOCUS_PUNCH, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROAR, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_TAUNT, - MOVE_BODY_SLAM, MOVE_COUNTER, + MOVE_DIG, MOVE_DOUBLE_EDGE, MOVE_DYNAMIC_PUNCH, MOVE_ENDURE, + MOVE_FACADE, MOVE_FIRE_PUNCH, + MOVE_FOCUS_PUNCH, MOVE_ICE_PUNCH, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, + MOVE_PROTECT, + MOVE_REST, + MOVE_ROAR, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, MOVE_THUNDER_PUNCH, MOVE_UNAVAILABLE, }; @@ -33215,34 +33215,34 @@ static const u16 sUrshifuSingleStrikeTeachableLearnset[] = { static const u16 sUrshifuRapidStrikeTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_DIG, MOVE_DIVE, - MOVE_FACADE, - MOVE_FOCUS_PUNCH, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_ROCK_SMASH, - MOVE_ROCK_TOMB, - MOVE_TAUNT, - MOVE_WATERFALL, - MOVE_BODY_SLAM, - MOVE_COUNTER, MOVE_DOUBLE_EDGE, MOVE_DYNAMIC_PUNCH, MOVE_ENDURE, + MOVE_FACADE, MOVE_FIRE_PUNCH, + MOVE_FOCUS_PUNCH, MOVE_ICE_PUNCH, MOVE_MEGA_KICK, MOVE_MEGA_PUNCH, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_SMASH, + MOVE_ROCK_TOMB, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, MOVE_THUNDER_PUNCH, + MOVE_WATERFALL, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_KUBFU @@ -33250,40 +33250,43 @@ static const u16 sUrshifuRapidStrikeTeachableLearnset[] = { #if P_FAMILY_ZARUDE static const u16 sZarudeTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_BULLET_SEED, MOVE_DIG, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MEGA_KICK, + MOVE_MEGA_PUNCH, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, - MOVE_ROCK_TOMB, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MEGA_KICK, - MOVE_MEGA_PUNCH, MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ZARUDE #if P_FAMILY_REGIELEKI static const u16 sRegielekiTeachableLearnset[] = { + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, @@ -33292,14 +33295,11 @@ static const u16 sRegielekiTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_SHOCK_WAVE, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_EXPLOSION, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -33307,17 +33307,17 @@ static const u16 sRegielekiTeachableLearnset[] = { #if P_FAMILY_REGIDRAGO static const u16 sRegidragoTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_EXPLOSION, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWIFT, @@ -33328,42 +33328,42 @@ static const u16 sRegidragoTeachableLearnset[] = { #if P_FAMILY_GLASTRIER static const u16 sGlastrierTeachableLearnset[] = { MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, - MOVE_TAUNT, - MOVE_TORMENT, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_TORMENT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_GLASTRIER #if P_FAMILY_SPECTRIER static const u16 sSpectrierTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_REST, MOVE_SHADOW_BALL, - MOVE_TAUNT, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SNORE, MOVE_SWIFT, + MOVE_TAUNT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SPECTRIER @@ -33372,23 +33372,23 @@ static const u16 sSpectrierTeachableLearnset[] = { static const u16 sCalyrexTeachableLearnset[] = { MOVE_BULLET_SEED, MOVE_CALM_MIND, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, MOVE_SKILL_SWAP, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_ENDURE, - MOVE_METRONOME, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWIFT, MOVE_UNAVAILABLE, }; @@ -33396,63 +33396,63 @@ static const u16 sCalyrexTeachableLearnset[] = { #if P_FUSION_FORMS static const u16 sCalyrexIceTeachableLearnset[] = { MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BULLET_SEED, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HAIL, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, MOVE_SAFEGUARD, MOVE_SKILL_SWAP, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_TORMENT, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_METRONOME, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_TORMENT, MOVE_UNAVAILABLE, }; static const u16 sCalyrexShadowTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BULLET_SEED, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_SOLAR_BEAM, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_METRONOME, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SNORE, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, MOVE_SWIFT, + MOVE_TAUNT, MOVE_UNAVAILABLE, }; #endif //P_FUSION_FORMS @@ -33460,23 +33460,23 @@ static const u16 sCalyrexShadowTeachableLearnset[] = { #if P_FAMILY_ENAMORUS static const u16 sEnamorusTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_SMASH, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SUNNY_DAY, MOVE_TAUNT, MOVE_TORMENT, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ENAMORUS @@ -33484,32 +33484,32 @@ static const u16 sEnamorusTeachableLearnset[] = { #if P_FAMILY_SPRIGATITO static const u16 sSprigatitoTeachableLearnset[] = { MOVE_BULLET_SEED, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, - MOVE_SOLAR_BEAM, - MOVE_TAUNT, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, + MOVE_SOLAR_BEAM, MOVE_SWIFT, + MOVE_TAUNT, MOVE_UNAVAILABLE, }; static const u16 sFloragatoTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BULLET_SEED, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, - MOVE_SOLAR_BEAM, - MOVE_TAUNT, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, + MOVE_SOLAR_BEAM, MOVE_SWIFT, + MOVE_TAUNT, MOVE_THUNDER_PUNCH, MOVE_UNAVAILABLE, }; @@ -33519,21 +33519,21 @@ static const u16 sMeowscaradaTeachableLearnset[] = { MOVE_BRICK_BREAK, MOVE_BULLET_SEED, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_REST, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SWIFT, MOVE_THUNDER_PUNCH, MOVE_UNAVAILABLE, }; @@ -33541,57 +33541,57 @@ static const u16 sMeowscaradaTeachableLearnset[] = { #if P_FAMILY_FUECOCO static const u16 sFuecocoTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, - MOVE_SUNNY_DAY, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, + MOVE_SUNNY_DAY, MOVE_UNAVAILABLE, }; static const u16 sCrocalorTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, - MOVE_SUNNY_DAY, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, + MOVE_SUNNY_DAY, MOVE_UNAVAILABLE, }; static const u16 sSkeledirgeTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_DIG, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_FUECOCO @@ -33599,30 +33599,30 @@ static const u16 sSkeledirgeTeachableLearnset[] = { #if P_FAMILY_QUAXLY static const u16 sQuaxlyTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_ENDURE, MOVE_FACADE, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_SURF, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, + MOVE_SURF, MOVE_SWIFT, MOVE_UNAVAILABLE, }; static const u16 sQuaxwellTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_ENDURE, MOVE_FACADE, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_SURF, - MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, + MOVE_SURF, MOVE_SWIFT, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; @@ -33630,130 +33630,130 @@ static const u16 sQuaquavalTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BRICK_BREAK, MOVE_BULK_UP, - MOVE_FACADE, - MOVE_HYPER_BEAM, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_SURF, - MOVE_TAUNT, - MOVE_WATER_PULSE, MOVE_COUNTER, MOVE_ENDURE, + MOVE_FACADE, + MOVE_HYPER_BEAM, MOVE_ICY_WIND, MOVE_MEGA_KICK, + MOVE_PROTECT, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_SLEEP_TALK, + MOVE_SURF, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_QUAXLY #if P_FAMILY_LECHONK static const u16 sLechonkTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BULLET_SEED, MOVE_DIG, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, MOVE_THIEF, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; static const u16 sOinkologneTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BULLET_SEED, MOVE_DIG, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, MOVE_THIEF, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_LECHONK #if P_FAMILY_TAROUNTULA static const u16 sTarountulaTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BULLET_SEED, + MOVE_COUNTER, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, MOVE_THIEF, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; static const u16 sSpidopsTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULLET_SEED, + MOVE_COUNTER, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, MOVE_TAUNT, MOVE_THIEF, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TAROUNTULA #if P_FAMILY_NYMBLE static const u16 sNymbleTeachableLearnset[] = { + MOVE_COUNTER, + MOVE_ENDURE, MOVE_FACADE, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, MOVE_THIEF, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; static const u16 sLokixTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BRICK_BREAK, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_NYMBLE @@ -33761,35 +33761,35 @@ static const u16 sLokixTeachableLearnset[] = { #if P_FAMILY_PAWMI static const u16 sPawmiTeachableLearnset[] = { MOVE_DIG, + MOVE_ENDURE, MOVE_FACADE, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SWIFT, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; static const u16 sPawmoTeachableLearnset[] = { MOVE_DIG, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SWIFT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, @@ -33799,24 +33799,24 @@ static const u16 sPawmotTeachableLearnset[] = { MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_DIG, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, + MOVE_METRONOME, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, + MOVE_SWIFT, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_METRONOME, - MOVE_SLEEP_TALK, - MOVE_SWIFT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, @@ -33828,20 +33828,20 @@ static const u16 sTandemausTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BULLET_SEED, MOVE_DIG, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, - MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; @@ -33849,58 +33849,58 @@ static const u16 sMausholdTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BULLET_SEED, MOVE_DIG, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, - MOVE_WATER_PULSE, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SWIFT, MOVE_THUNDER_WAVE, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TANDEMAUS #if P_FAMILY_FIDOUGH static const u16 sFidoughTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, - MOVE_SUNNY_DAY, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, + MOVE_SUNNY_DAY, MOVE_UNAVAILABLE, }; static const u16 sDachsbunTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, - MOVE_SUNNY_DAY, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, + MOVE_SUNNY_DAY, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_FIDOUGH @@ -33908,48 +33908,48 @@ static const u16 sDachsbunTeachableLearnset[] = { #if P_FAMILY_SMOLIV static const u16 sSmolivTeachableLearnset[] = { MOVE_BULLET_SEED, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_PROTECT, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_ENDURE, - MOVE_SLEEP_TALK, MOVE_SWIFT, MOVE_UNAVAILABLE, }; static const u16 sDollivTeachableLearnset[] = { MOVE_BULLET_SEED, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_PROTECT, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_ENDURE, - MOVE_SLEEP_TALK, MOVE_SWIFT, MOVE_UNAVAILABLE, }; static const u16 sArbolivaTeachableLearnset[] = { MOVE_BULLET_SEED, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, MOVE_SAFEGUARD, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_ENDURE, - MOVE_METRONOME, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, MOVE_SWIFT, MOVE_UNAVAILABLE, }; @@ -33958,79 +33958,79 @@ static const u16 sArbolivaTeachableLearnset[] = { #if P_FAMILY_SQUAWKABILLY static const u16 sSquawkabillyTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SQUAWKABILLY #if P_FAMILY_NACLI static const u16 sNacliTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_DIG, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_SANDSTORM, - MOVE_SUNNY_DAY, - MOVE_BODY_SLAM, - MOVE_ENDURE, MOVE_ROCK_SLIDE, + MOVE_SANDSTORM, MOVE_SLEEP_TALK, + MOVE_SUNNY_DAY, MOVE_UNAVAILABLE, }; static const u16 sNaclstackTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_SANDSTORM, - MOVE_SUNNY_DAY, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_ROCK_SLIDE, + MOVE_SANDSTORM, MOVE_SLEEP_TALK, + MOVE_SUNNY_DAY, MOVE_UNAVAILABLE, }; static const u16 sGarganaclTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_SUNNY_DAY, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, + MOVE_SUNNY_DAY, MOVE_THUNDER_PUNCH, MOVE_UNAVAILABLE, }; @@ -34038,20 +34038,21 @@ static const u16 sGarganaclTeachableLearnset[] = { #if P_FAMILY_CHARCADET static const u16 sCharcadetTeachableLearnset[] = { + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REST, - MOVE_SUNNY_DAY, - MOVE_ENDURE, MOVE_SLEEP_TALK, + MOVE_SUNNY_DAY, MOVE_UNAVAILABLE, }; static const u16 sArmarougeTeachableLearnset[] = { MOVE_CALM_MIND, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -34059,15 +34060,14 @@ static const u16 sArmarougeTeachableLearnset[] = { MOVE_OVERHEAT, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_TAUNT, - MOVE_ENDURE, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; @@ -34075,59 +34075,59 @@ static const u16 sCeruledgeTeachableLearnset[] = { MOVE_BRICK_BREAK, MOVE_BULK_UP, MOVE_DRAGON_CLAW, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_LIGHT_SCREEN, MOVE_OVERHEAT, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, MOVE_SHADOW_BALL, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, + MOVE_SUNNY_DAY, MOVE_SWORDS_DANCE, + MOVE_TAUNT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CHARCADET #if P_FAMILY_TADBULB static const u16 sTadbulbTeachableLearnset[] = { + MOVE_ENDURE, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sBelliboltTeachableLearnset[] = { + MOVE_ENDURE, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_TOXIC, - MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TADBULB @@ -34135,31 +34135,31 @@ static const u16 sBelliboltTeachableLearnset[] = { #if P_FAMILY_WATTREL static const u16 sWattrelTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_PROTECT, MOVE_REST, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; static const u16 sKilowattrelTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_REST, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SWIFT, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -34167,39 +34167,39 @@ static const u16 sKilowattrelTeachableLearnset[] = { #if P_FAMILY_MASCHIFF static const u16 sMaschiffTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; static const u16 sMabosstiffTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MASCHIFF @@ -34207,45 +34207,45 @@ static const u16 sMabosstiffTeachableLearnset[] = { #if P_FAMILY_SHROODLE static const u16 sShroodleTeachableLearnset[] = { MOVE_DIG, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; static const u16 sGrafaiaiTeachableLearnset[] = { MOVE_DIG, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SUNNY_DAY, + MOVE_SWAGGER, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_TOXIC, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SWAGGER, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SHROODLE @@ -34253,34 +34253,34 @@ static const u16 sGrafaiaiTeachableLearnset[] = { #if P_FAMILY_BRAMBLIN static const u16 sBramblinTeachableLearnset[] = { MOVE_BULLET_SEED, + MOVE_DEFENSE_CURL, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_PROTECT, MOVE_REST, + MOVE_ROLLOUT, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, MOVE_THIEF, - MOVE_DEFENSE_CURL, - MOVE_ENDURE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; static const u16 sBrambleghastTeachableLearnset[] = { MOVE_BULLET_SEED, + MOVE_DEFENSE_CURL, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_REST, + MOVE_ROLLOUT, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, MOVE_THIEF, - MOVE_DEFENSE_CURL, - MOVE_ENDURE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_BRAMBLIN @@ -34288,64 +34288,64 @@ static const u16 sBrambleghastTeachableLearnset[] = { #if P_FAMILY_TOEDSCOOL static const u16 sToedscoolTeachableLearnset[] = { MOVE_BULLET_SEED, + MOVE_ENDURE, MOVE_GIGA_DRAIN, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SOLAR_BEAM, + MOVE_SWIFT, MOVE_TAUNT, MOVE_TOXIC, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; static const u16 sToedscruelTeachableLearnset[] = { MOVE_BULLET_SEED, + MOVE_ENDURE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SOLAR_BEAM, + MOVE_SWIFT, MOVE_TAUNT, MOVE_TOXIC, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TOEDSCOOL #if P_FAMILY_KLAWF static const u16 sKlawfTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_DIG, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, + MOVE_SUNNY_DAY, MOVE_SWORDS_DANCE, + MOVE_THIEF, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_KLAWF @@ -34353,22 +34353,23 @@ static const u16 sKlawfTeachableLearnset[] = { #if P_FAMILY_CAPSAKID static const u16 sCapsakidTeachableLearnset[] = { MOVE_BULLET_SEED, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_PROTECT, MOVE_REST, + MOVE_ROLLOUT, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_THIEF, - MOVE_ENDURE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; static const u16 sScovillainTeachableLearnset[] = { MOVE_BULLET_SEED, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -34377,59 +34378,58 @@ static const u16 sScovillainTeachableLearnset[] = { MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REST, + MOVE_ROLLOUT, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_THIEF, - MOVE_ENDURE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CAPSAKID #if P_FAMILY_RELLOR static const u16 sRellorTeachableLearnset[] = { + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_ENDURE, MOVE_FACADE, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, MOVE_ROCK_TOMB, - MOVE_SLUDGE_BOMB, - MOVE_THIEF, - MOVE_DEFENSE_CURL, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_ROLLOUT, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, + MOVE_THIEF, MOVE_UNAVAILABLE, }; static const u16 sRabscaTeachableLearnset[] = { MOVE_CALM_MIND, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SAFEGUARD, MOVE_SANDSTORM, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SUNNY_DAY, MOVE_THIEF, - MOVE_DEFENSE_CURL, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_RELLOR @@ -34437,8 +34437,10 @@ static const u16 sRabscaTeachableLearnset[] = { #if P_FAMILY_FLITTLE static const u16 sFlittleTeachableLearnset[] = { MOVE_CALM_MIND, + MOVE_ENDURE, MOVE_FACADE, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_RAIN_DANCE, @@ -34446,98 +34448,96 @@ static const u16 sFlittleTeachableLearnset[] = { MOVE_REST, MOVE_SANDSTORM, MOVE_SKILL_SWAP, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, + MOVE_SUNNY_DAY, MOVE_SWIFT, + MOVE_THIEF, MOVE_UNAVAILABLE, }; static const u16 sEspathraTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_SANDSTORM, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_SUNNY_DAY, - MOVE_THIEF, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, + MOVE_SUNNY_DAY, MOVE_SWIFT, + MOVE_THIEF, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_FLITTLE #if P_FAMILY_TINKATINK static const u16 sTinkatinkTeachableLearnset[] = { + MOVE_ENDURE, MOVE_FACADE, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SKILL_SWAP, - MOVE_THIEF, - MOVE_ENDURE, - MOVE_METRONOME, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SWORDS_DANCE, + MOVE_THIEF, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; static const u16 sTinkatuffTeachableLearnset[] = { MOVE_BRICK_BREAK, + MOVE_ENDURE, MOVE_FACADE, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SKILL_SWAP, - MOVE_THIEF, - MOVE_ENDURE, - MOVE_METRONOME, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SWORDS_DANCE, + MOVE_THIEF, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; static const u16 sTinkatonTeachableLearnset[] = { MOVE_BRICK_BREAK, + MOVE_ENDURE, MOVE_FACADE, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_SMASH, MOVE_ROCK_TOMB, MOVE_SKILL_SWAP, - MOVE_THIEF, - MOVE_ENDURE, - MOVE_METRONOME, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_SWORDS_DANCE, + MOVE_THIEF, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -34547,37 +34547,37 @@ static const u16 sTinkatonTeachableLearnset[] = { static const u16 sWiglettTeachableLearnset[] = { MOVE_BLIZZARD, MOVE_DIG, + MOVE_ENDURE, MOVE_FACADE, MOVE_ICE_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SANDSTORM, - MOVE_SURF, - MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, + MOVE_SURF, MOVE_SWIFT, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sWugtrioTeachableLearnset[] = { MOVE_BLIZZARD, MOVE_DIG, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SANDSTORM, - MOVE_SURF, - MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_MUD_SLAP, MOVE_SLEEP_TALK, + MOVE_SURF, MOVE_SWIFT, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_WIGLETT @@ -34585,23 +34585,23 @@ static const u16 sWugtrioTeachableLearnset[] = { #if P_FAMILY_BOMBIRDIER static const u16 sBombirdierTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_BOMBIRDIER @@ -34609,74 +34609,77 @@ static const u16 sBombirdierTeachableLearnset[] = { #if P_FAMILY_FINIZEN static const u16 sFinizenTeachableLearnset[] = { MOVE_BLIZZARD, - MOVE_DIVE, - MOVE_FACADE, - MOVE_ICE_BEAM, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_REST, - MOVE_SURF, - MOVE_WATERFALL, - MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_COUNTER, + MOVE_DIVE, MOVE_ENDURE, + MOVE_FACADE, + MOVE_ICE_BEAM, MOVE_ICY_WIND, + MOVE_PROTECT, MOVE_PSYCH_UP, + MOVE_RAIN_DANCE, + MOVE_REST, MOVE_SLEEP_TALK, + MOVE_SURF, MOVE_SWIFT, + MOVE_WATERFALL, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sPalafinTeachableLearnset[] = { MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_DIVE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SURF, + MOVE_SWIFT, MOVE_TAUNT, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_FINIZEN #if P_FAMILY_VAROOM static const u16 sVaroomTeachableLearnset[] = { + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; static const u16 sRevavroomTeachableLearnset[] = { + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_OVERHEAT, @@ -34684,17 +34687,14 @@ static const u16 sRevavroomTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REST, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SUNNY_DAY, + MOVE_SWAGGER, MOVE_TAUNT, MOVE_THIEF, MOVE_TORMENT, MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SWAGGER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_VAROOM @@ -34702,43 +34702,43 @@ static const u16 sRevavroomTeachableLearnset[] = { #if P_FAMILY_CYCLIZAR static const u16 sCyclizarTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_DRAGON_CLAW, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, MOVE_TAUNT, MOVE_THIEF, MOVE_THUNDERBOLT, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CYCLIZAR #if P_FAMILY_ORTHWORM static const u16 sOrthwormTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_IRON_TAIL, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; @@ -34746,25 +34746,27 @@ static const u16 sOrthwormTeachableLearnset[] = { #if P_FAMILY_GLIMMET static const u16 sGlimmetTeachableLearnset[] = { + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SUNNY_DAY, MOVE_TOXIC, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; static const u16 sGlimmoraTeachableLearnset[] = { + MOVE_ENDURE, + MOVE_EXPLOSION, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, @@ -34772,16 +34774,14 @@ static const u16 sGlimmoraTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_TOXIC, - MOVE_ENDURE, - MOVE_EXPLOSION, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_GLIMMET @@ -34789,38 +34789,38 @@ static const u16 sGlimmoraTeachableLearnset[] = { #if P_FAMILY_GREAVARD static const u16 sGreavardTeachableLearnset[] = { MOVE_DIG, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_SANDSTORM, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, MOVE_THIEF, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; static const u16 sHoundstoneTeachableLearnset[] = { MOVE_DIG, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, MOVE_SANDSTORM, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, MOVE_THIEF, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_GREAVARD @@ -34830,19 +34830,19 @@ static const u16 sFlamigoTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BULK_UP, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, + MOVE_MEGA_KICK, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THIEF, MOVE_WATER_PULSE, - MOVE_ENDURE, - MOVE_MEGA_KICK, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_FLAMIGO @@ -34850,38 +34850,38 @@ static const u16 sFlamigoTeachableLearnset[] = { #if P_FAMILY_CETODDLE static const u16 sCetoddleTeachableLearnset[] = { MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, MOVE_SLEEP_TALK, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; static const u16 sCetitanTeachableLearnset[] = { MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, MOVE_SLEEP_TALK, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CETODDLE @@ -34889,86 +34889,86 @@ static const u16 sCetitanTeachableLearnset[] = { #if P_FAMILY_VELUZA static const u16 sVeluzaTeachableLearnset[] = { MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SURF, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_VELUZA #if P_FAMILY_DONDOZO static const u16 sDondozoTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_DIVE, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, MOVE_SURF, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_DONDOZO #if P_FAMILY_TATSUGIRI static const u16 sTatsugiriTeachableLearnset[] = { + MOVE_COUNTER, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SURF, MOVE_TAUNT, MOVE_WATER_PULSE, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TATSUGIRI #if P_FAMILY_GREAT_TUSK static const u16 sGreatTuskTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_DEFENSE_CURL, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, + MOVE_ROLLOUT, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, MOVE_TAUNT, - MOVE_BODY_SLAM, - MOVE_DEFENSE_CURL, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_ROLLOUT, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_GREAT_TUSK @@ -34976,57 +34976,57 @@ static const u16 sGreatTuskTeachableLearnset[] = { #if P_FAMILY_SCREAM_TAIL static const u16 sScreamTailTeachableLearnset[] = { MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BULK_UP, MOVE_CALM_MIND, MOVE_DIG, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, MOVE_ROAR, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_METRONOME, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, + MOVE_WATER_PULSE, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SCREAM_TAIL #if P_FAMILY_BRUTE_BONNET static const u16 sBruteBonnetTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BULLET_SEED, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_TAUNT, MOVE_THIEF, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_BRUTE_BONNET @@ -35034,18 +35034,18 @@ static const u16 sBruteBonnetTeachableLearnset[] = { #if P_FAMILY_FLUTTER_MANE static const u16 sFlutterManeTeachableLearnset[] = { MOVE_CALM_MIND, + MOVE_ENDURE, MOVE_HYPER_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SWIFT, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -35054,9 +35054,12 @@ static const u16 sFlutterManeTeachableLearnset[] = { #if P_FAMILY_SLITHER_WING static const u16 sSlitherWingTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, @@ -35064,18 +35067,17 @@ static const u16 sSlitherWingTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REST, MOVE_SANDSTORM, - MOVE_SUNNY_DAY, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_SLEEP_TALK, + MOVE_SUNNY_DAY, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_SLITHER_WING #if P_FAMILY_SANDY_SHOCKS static const u16 sSandyShocksTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, @@ -35083,13 +35085,11 @@ static const u16 sSandyShocksTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, + MOVE_SWIFT, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SWIFT, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -35097,21 +35097,21 @@ static const u16 sSandyShocksTeachableLearnset[] = { #if P_FAMILY_IRON_TREADS static const u16 sIronTreadsTeachableLearnset[] = { - MOVE_EARTHQUAKE, - MOVE_FACADE, - MOVE_HYPER_BEAM, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROCK_TOMB, - MOVE_SANDSTORM, - MOVE_THUNDER, MOVE_BODY_SLAM, MOVE_DEFENSE_CURL, MOVE_DOUBLE_EDGE, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_HYPER_BEAM, MOVE_MUD_SLAP, + MOVE_PROTECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, MOVE_ROLLOUT, + MOVE_SANDSTORM, MOVE_SLEEP_TALK, + MOVE_THUNDER, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_IRON_TREADS @@ -35119,47 +35119,47 @@ static const u16 sIronTreadsTeachableLearnset[] = { #if P_FAMILY_IRON_BUNDLE static const u16 sIronBundleTeachableLearnset[] = { MOVE_BLIZZARD, + MOVE_BODY_SLAM, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_SLEEP_TALK, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_SLEEP_TALK, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_IRON_BUNDLE #if P_FAMILY_IRON_HANDS static const u16 sIronHandsTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, - MOVE_PROTECT, - MOVE_REST, - MOVE_ROCK_TOMB, - MOVE_THUNDER, - MOVE_THUNDERBOLT, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_METRONOME, + MOVE_PROTECT, + MOVE_REST, MOVE_ROCK_SLIDE, + MOVE_ROCK_TOMB, MOVE_SEISMIC_TOSS, MOVE_SLEEP_TALK, MOVE_SWORDS_DANCE, + MOVE_THUNDER, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_UNAVAILABLE, }; @@ -35167,6 +35167,9 @@ static const u16 sIronHandsTeachableLearnset[] = { #if P_FAMILY_IRON_JUGULIS static const u16 sIronJugulisTeachableLearnset[] = { + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -35177,18 +35180,16 @@ static const u16 sIronJugulisTeachableLearnset[] = { MOVE_REST, MOVE_ROAR, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, MOVE_TAUNT, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_IRON_JUGULIS #if P_FAMILY_IRON_MOTH static const u16 sIronMothTeachableLearnset[] = { + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -35198,12 +35199,11 @@ static const u16 sIronMothTeachableLearnset[] = { MOVE_PROTECT, MOVE_PSYCHIC, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_SLEEP_TALK, MOVE_SWIFT, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_IRON_MOTH @@ -35211,32 +35211,32 @@ static const u16 sIronMothTeachableLearnset[] = { #if P_FAMILY_IRON_THORNS static const u16 sIronThornsTeachableLearnset[] = { MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, + MOVE_FIRE_PUNCH, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICE_PUNCH, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, - MOVE_SWORDS_DANCE, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, @@ -35246,16 +35246,16 @@ static const u16 sIronThornsTeachableLearnset[] = { #if P_FAMILY_FRIGIBAX static const u16 sFrigibaxTeachableLearnset[] = { MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_DIG, MOVE_DRAGON_CLAW, + MOVE_ENDURE, MOVE_FACADE, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ICY_WIND, MOVE_SLEEP_TALK, MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, @@ -35264,17 +35264,17 @@ static const u16 sFrigibaxTeachableLearnset[] = { static const u16 sArctibaxTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_DIG, MOVE_DRAGON_CLAW, + MOVE_ENDURE, MOVE_FACADE, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_ICY_WIND, MOVE_SLEEP_TALK, MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, @@ -35283,20 +35283,20 @@ static const u16 sArctibaxTeachableLearnset[] = { static const u16 sBaxcaliburTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BLIZZARD, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_ICE_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ICY_WIND, MOVE_SLEEP_TALK, MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, @@ -35305,18 +35305,19 @@ static const u16 sBaxcaliburTeachableLearnset[] = { #if P_FAMILY_GIMMIGHOUL static const u16 sGimmighoulTeachableLearnset[] = { + MOVE_ENDURE, MOVE_LIGHT_SCREEN, MOVE_PROTECT, MOVE_REFLECT, MOVE_REST, MOVE_SHADOW_BALL, - MOVE_THIEF, - MOVE_ENDURE, MOVE_SLEEP_TALK, + MOVE_THIEF, MOVE_UNAVAILABLE, }; static const u16 sGholdengoTeachableLearnset[] = { + MOVE_ENDURE, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, @@ -35326,11 +35327,10 @@ static const u16 sGholdengoTeachableLearnset[] = { MOVE_REST, MOVE_SANDSTORM, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_THIEF, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_ENDURE, - MOVE_SLEEP_TALK, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, @@ -35339,22 +35339,22 @@ static const u16 sGholdengoTeachableLearnset[] = { #if P_FAMILY_WO_CHIEN static const u16 sWoChienTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BULLET_SEED, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REFLECT, MOVE_REST, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_TAUNT, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_WO_CHIEN @@ -35364,44 +35364,45 @@ static const u16 sChienPaoTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BLIZZARD, MOVE_BRICK_BREAK, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, + MOVE_ICY_WIND, MOVE_PROTECT, MOVE_RAIN_DANCE, MOVE_REST, - MOVE_TAUNT, - MOVE_ENDURE, - MOVE_ICY_WIND, MOVE_SLEEP_TALK, MOVE_SWORDS_DANCE, + MOVE_TAUNT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CHIEN_PAO #if P_FAMILY_TING_LU static const u16 sTingLuTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_REST, + MOVE_ROCK_SLIDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, MOVE_TAUNT, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TING_LU #if P_FAMILY_CHI_YU static const u16 sChiYuTeachableLearnset[] = { + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -35412,11 +35413,10 @@ static const u16 sChiYuTeachableLearnset[] = { MOVE_PSYCHIC, MOVE_REFLECT, MOVE_REST, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_ENDURE, MOVE_SLEEP_TALK, + MOVE_SUNNY_DAY, MOVE_SWAGGER, + MOVE_TAUNT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_CHI_YU @@ -35424,10 +35424,13 @@ static const u16 sChiYuTeachableLearnset[] = { #if P_FAMILY_ROARING_MOON static const u16 sRoaringMoonTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -35436,13 +35439,10 @@ static const u16 sRoaringMoonTeachableLearnset[] = { MOVE_PROTECT, MOVE_REST, MOVE_ROAR, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_ROCK_SLIDE, MOVE_SLEEP_TALK, + MOVE_SUNNY_DAY, + MOVE_TAUNT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_ROARING_MOON @@ -35453,26 +35453,26 @@ static const u16 sIronValiantTeachableLearnset[] = { MOVE_BRICK_BREAK, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, + MOVE_ENDURE, + MOVE_FIRE_PUNCH, + MOVE_FURY_CUTTER, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP, - MOVE_TAUNT, - MOVE_THUNDERBOLT, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_FURY_CUTTER, - MOVE_ICE_PUNCH, - MOVE_ICY_WIND, - MOVE_METRONOME, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, @@ -35481,38 +35481,40 @@ static const u16 sIronValiantTeachableLearnset[] = { #if P_FAMILY_KORAIDON static const u16 sKoraidonTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, MOVE_DRAGON_CLAW, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, + MOVE_MUD_SLAP, MOVE_OVERHEAT, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, MOVE_ROCK_SMASH, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_MUD_SLAP, - MOVE_SLEEP_TALK, MOVE_SWORDS_DANCE, + MOVE_TAUNT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_KORAIDON #if P_FAMILY_MIRAIDON static const u16 sMiraidonTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_CALM_MIND, MOVE_DRAGON_CLAW, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, @@ -35521,14 +35523,12 @@ static const u16 sMiraidonTeachableLearnset[] = { MOVE_REFLECT, MOVE_REST, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, + MOVE_SWORDS_DANCE, MOVE_TAUNT, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_BODY_SLAM, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SWORDS_DANCE, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -35536,7 +35536,10 @@ static const u16 sMiraidonTeachableLearnset[] = { #if P_FAMILY_WALKING_WAKE static const u16 sWalkingWakeTeachableLearnset[] = { + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_DRAGON_CLAW, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, @@ -35544,15 +35547,12 @@ static const u16 sWalkingWakeTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_SLEEP_TALK, MOVE_SUNNY_DAY, MOVE_SURF, + MOVE_SWIFT, MOVE_WATERFALL, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_WALKING_WAKE @@ -35562,18 +35562,18 @@ static const u16 sIronLeavesTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_REST, - MOVE_SOLAR_BEAM, - MOVE_TAUNT, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_SLEEP_TALK, + MOVE_SOLAR_BEAM, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_IRON_LEAVES @@ -35581,58 +35581,58 @@ static const u16 sIronLeavesTeachableLearnset[] = { #if P_FAMILY_POLTCHAGEIST static const u16 sPoltchageistTeachableLearnset[] = { MOVE_CALM_MIND, + MOVE_ENDURE, MOVE_GIGA_DRAIN, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, MOVE_SHADOW_BALL, - MOVE_SOLAR_BEAM, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, + MOVE_SOLAR_BEAM, MOVE_UNAVAILABLE, }; static const u16 sSinistchaTeachableLearnset[] = { MOVE_CALM_MIND, + MOVE_ENDURE, MOVE_GIGA_DRAIN, MOVE_HYPER_BEAM, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_REFLECT, MOVE_REST, MOVE_SHADOW_BALL, - MOVE_SOLAR_BEAM, - MOVE_ENDURE, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, + MOVE_SOLAR_BEAM, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_POLTCHAGEIST #if P_FAMILY_OKIDOGI static const u16 sOkidogiTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_BULK_UP, + MOVE_COUNTER, MOVE_DIG, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, + MOVE_FIRE_PUNCH, MOVE_FOCUS_PUNCH, MOVE_HYPER_BEAM, + MOVE_ICE_PUNCH, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, MOVE_ROCK_TOMB, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, MOVE_TAUNT, MOVE_THIEF, - MOVE_TOXIC, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_FIRE_PUNCH, - MOVE_ICE_PUNCH, - MOVE_SLEEP_TALK, MOVE_THUNDER_PUNCH, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_OKIDOGI @@ -35640,23 +35640,23 @@ static const u16 sOkidogiTeachableLearnset[] = { #if P_FAMILY_MUNKIDORI static const u16 sMunkidoriTeachableLearnset[] = { MOVE_CALM_MIND, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_LIGHT_SCREEN, + MOVE_METRONOME, + MOVE_MUD_SLAP, MOVE_PROTECT, MOVE_PSYCHIC, + MOVE_PSYCH_UP, MOVE_REST, MOVE_SHADOW_BALL, + MOVE_SLEEP_TALK, MOVE_SLUDGE_BOMB, + MOVE_SWIFT, MOVE_TAUNT, MOVE_THIEF, MOVE_TOXIC, - MOVE_ENDURE, - MOVE_METRONOME, - MOVE_MUD_SLAP, - MOVE_PSYCH_UP, - MOVE_SLEEP_TALK, - MOVE_SWIFT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_MUNKIDORI @@ -35666,24 +35666,24 @@ static const u16 sFezandipitiTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_CALM_MIND, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLY, MOVE_HYPER_BEAM, + MOVE_ICY_WIND, MOVE_LIGHT_SCREEN, MOVE_PROTECT, + MOVE_PSYCH_UP, MOVE_REST, MOVE_SHADOW_BALL, - MOVE_SLUDGE_BOMB, - MOVE_TAUNT, - MOVE_THIEF, - MOVE_TOXIC, - MOVE_ENDURE, - MOVE_ICY_WIND, - MOVE_PSYCH_UP, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, MOVE_SWAGGER, MOVE_SWIFT, MOVE_SWORDS_DANCE, + MOVE_TAUNT, + MOVE_THIEF, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_FEZANDIPITI @@ -35692,6 +35692,8 @@ static const u16 sFezandipitiTeachableLearnset[] = { static const u16 sOgerponTeachableLearnset[] = { MOVE_BRICK_BREAK, MOVE_BULLET_SEED, + MOVE_COUNTER, + MOVE_ENDURE, MOVE_FACADE, MOVE_GIGA_DRAIN, MOVE_PROTECT, @@ -35699,21 +35701,22 @@ static const u16 sOgerponTeachableLearnset[] = { MOVE_REST, MOVE_ROCK_TOMB, MOVE_SANDSTORM, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_COUNTER, - MOVE_ENDURE, - MOVE_SLEEP_TALK, MOVE_SWORDS_DANCE, + MOVE_TAUNT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_OGERPON #if P_FAMILY_GOUGING_FIRE static const u16 sGougingFireTeachableLearnset[] = { + MOVE_BODY_SLAM, + MOVE_DOUBLE_EDGE, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FIRE_BLAST, MOVE_FLAMETHROWER, @@ -35722,34 +35725,31 @@ static const u16 sGougingFireTeachableLearnset[] = { MOVE_PROTECT, MOVE_REST, MOVE_ROAR, - MOVE_SUNNY_DAY, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_SLEEP_TALK, + MOVE_SUNNY_DAY, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_GOUGING_FIRE #if P_FAMILY_RAGING_BOLT static const u16 sRagingBoltTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_REST, MOVE_ROAR, MOVE_SHOCK_WAVE, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_TAUNT, MOVE_THUNDER, MOVE_THUNDERBOLT, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_SLEEP_TALK, MOVE_THUNDER_WAVE, MOVE_UNAVAILABLE, }; @@ -35758,8 +35758,12 @@ static const u16 sRagingBoltTeachableLearnset[] = { #if P_FAMILY_IRON_BOULDER static const u16 sIronBoulderTeachableLearnset[] = { MOVE_AERIAL_ACE, + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, + MOVE_COUNTER, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_PROTECT, @@ -35767,29 +35771,25 @@ static const u16 sIronBoulderTeachableLearnset[] = { MOVE_REST, MOVE_ROCK_TOMB, MOVE_SANDSTORM, - MOVE_TAUNT, - MOVE_BODY_SLAM, - MOVE_COUNTER, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SWORDS_DANCE, + MOVE_TAUNT, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_IRON_BOULDER #if P_FAMILY_IRON_CROWN static const u16 sIronCrownTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_BRICK_BREAK, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, + MOVE_ENDURE, MOVE_FACADE, MOVE_HYPER_BEAM, MOVE_PROTECT, MOVE_PSYCHIC, MOVE_REST, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, MOVE_SLEEP_TALK, MOVE_SWORDS_DANCE, MOVE_UNAVAILABLE, @@ -35798,8 +35798,11 @@ static const u16 sIronCrownTeachableLearnset[] = { #if P_FAMILY_TERAPAGOS static const u16 sTerapagosTeachableLearnset[] = { + MOVE_BODY_SLAM, MOVE_CALM_MIND, + MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, + MOVE_ENDURE, MOVE_FACADE, MOVE_FLAMETHROWER, MOVE_HYPER_BEAM, @@ -35808,6 +35811,8 @@ static const u16 sTerapagosTeachableLearnset[] = { MOVE_RAIN_DANCE, MOVE_REST, MOVE_ROAR, + MOVE_ROCK_SLIDE, + MOVE_SLEEP_TALK, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_SURF, @@ -35815,26 +35820,21 @@ static const u16 sTerapagosTeachableLearnset[] = { MOVE_THUNDERBOLT, MOVE_TOXIC, MOVE_WATER_PULSE, - MOVE_BODY_SLAM, - MOVE_DOUBLE_EDGE, - MOVE_ENDURE, - MOVE_ROCK_SLIDE, - MOVE_SLEEP_TALK, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_TERAPAGOS #if P_FAMILY_PECHARUNT static const u16 sPecharuntTeachableLearnset[] = { - MOVE_PROTECT, - MOVE_REST, - MOVE_SHADOW_BALL, - MOVE_SLUDGE_BOMB, - MOVE_TOXIC, MOVE_DEFENSE_CURL, MOVE_ENDURE, + MOVE_PROTECT, + MOVE_REST, MOVE_ROLLOUT, + MOVE_SHADOW_BALL, MOVE_SLEEP_TALK, + MOVE_SLUDGE_BOMB, + MOVE_TOXIC, MOVE_UNAVAILABLE, }; #endif //P_FAMILY_PECHARUNT diff --git a/tools/learnset_helpers/make_learnables.py b/tools/learnset_helpers/make_learnables.py new file mode 100755 index 0000000000..347e189347 --- /dev/null +++ b/tools/learnset_helpers/make_learnables.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python3 + +""" +Usage: python3 make_learnables.py INPUTS_DIR OUTPUT_FILE + +Build a primary store of learnable moves for each species based on input documents. This script +is meant to be run to generate a pre-processed store of data that should not change very much; +thus, it can safely be pre-computed in order to speed up incremental builds for end-users. +""" + +from functools import reduce + +import json +import pathlib +import sys + + +def from_single(fname: pathlib.Path) -> dict[str, set[str]]: + with open(fname, "r") as fp: + return { + species: set([level_up["Move"] for level_up in by_method["LevelMoves"]]) + | set([move for move in by_method["TMMoves"]]) + | set([move for move in by_method["EggMoves"]]) + | set([move for move in by_method["TutorMoves"]]) + for species, by_method in json.load(fp).items() + } + + +def from_batch(dir: pathlib.Path) -> dict[str, set[str]]: + return reduce( + lambda acc, single: { + species: acc.get(species, set()) | single.get(species, set()) + for species in acc.keys() | single.keys() + }, + map(from_single, dir.glob("*.json")), + {}, + ) + + +def main(): + if len(sys.argv) < 3: + print("Missing required arguments", file=sys.stderr) + print(__doc__, file=sys.stderr) + quit(1) + + INPUTS_DIR = pathlib.Path(sys.argv[1]) + OUTPUT_FILE = pathlib.Path(sys.argv[2]) + + assert INPUTS_DIR.exists(), f"{INPUTS_DIR=} does not exist" + assert INPUTS_DIR.is_dir(), f"{INPUTS_DIR=} is not a directory" + assert OUTPUT_FILE.parent.exists(), f"parent of {OUTPUT_FILE=} does not exist" + + batch = { + species: list(sorted(learnables)) + for species, learnables in from_batch(INPUTS_DIR).items() + } + with open(OUTPUT_FILE, "w") as fp: + json.dump(batch, fp, indent=2) + + +if __name__ == "__main__": + main() diff --git a/tools/learnset_helpers/make_teachables.py b/tools/learnset_helpers/make_teachables.py new file mode 100644 index 0000000000..6507610f44 --- /dev/null +++ b/tools/learnset_helpers/make_teachables.py @@ -0,0 +1,204 @@ +#!/usr/bin/env python3 + +""" +Usage: python3 make_teachable.py SOURCE_LEARNSETS_JSON + +Build a C-header defining the set of teachable moves for each configured-on +species-family based on the learnable moves defined in SOURCE_LEARNSETS_JSON. + +A move is "teachable" if it is: + 1. Can be taught by some Move Tutor in the overworld, which is identified by + using the ChooseMonForMoveTutor special in a script and setting VAR_0x8005 + to the offered MOVE constant. (e.g., MOVE_SWAGGER) + 2. Assigned to some TM or HM in include/constants/tms_hms.h using the + FOREACH_TM macro. + 3. Not a universal move, as defined by sUniversalMoves in src/pokemon.c. + +For a given species, a move is considered teachable to that species if: + 1. The species is not NONE -- which learns nothing -- nor MEW -- which + learns everything. + 2. The species can learn the move via *any* method within any Expansion- + supported game. +""" + +from itertools import chain +from textwrap import dedent + +import glob +import json +import pathlib +import re +import sys +import typing + + +CONFIG_ENABLED_PAT = re.compile(r"#define P_LEARNSET_HELPER_TEACHABLE\s+(?P[^ ]*)") +INCFILE_HAS_TUTOR_PAT = re.compile(r"special ChooseMonForMoveTutor") +INCFILE_MOVE_PAT = re.compile(r"setvar VAR_0x8005, (MOVE_.*)") +TMHM_MACRO_PAT = re.compile(r"F\((\w+)\)") +UNIVERSAL_MOVES_PAT = re.compile(r"static const u16 sUniversalMoves\[\]\s*=\s*{((.|\n)*?)\n};") +TEACHABLE_ARRAY_DECL_PAT = re.compile(r"(?Pstatic const u16 s(?P\w+)TeachableLearnset\[\]) = {[\s\S]*?};") +SNAKIFY_PAT = re.compile(r"(?!^)([A-Z]+)") + + +def enabled() -> bool: + """ + Check if the user has explicitly enabled this opt-in helper. + """ + with open("./include/config/pokemon.h", "r") as cfg_pokemon_fp: + cfg_pokemon = cfg_pokemon_fp.read() + cfg_defined = CONFIG_ENABLED_PAT.search(cfg_pokemon) + return cfg_defined is not None and cfg_defined.group("cfg_val") in ("TRUE", "1") + + +def extract_repo_tutors() -> typing.Generator[str, None, None]: + """ + Yield MOVE constants which are *likely* assigned to a move tutor. This isn't + foolproof, but it's suitable. + """ + for inc_fname in chain(glob.glob("./data/scripts/*.inc"), glob.glob("./data/maps/*/scripts.inc")): + with open(inc_fname, "r") as inc_fp: + incfile = inc_fp.read() + if not INCFILE_HAS_TUTOR_PAT.search(incfile): + continue + + for move in INCFILE_MOVE_PAT.finditer(incfile): + yield move.group(1) + + +def extract_repo_tms() -> typing.Generator[str, None, None]: + """ + Yield MOVE constants assigned to a TM or HM in the user's repo. + """ + with open("./include/constants/tms_hms.h", "r") as tmshms_fp: + tmshms = tmshms_fp.read() + match_it = TMHM_MACRO_PAT.finditer(tmshms) + if not match_it: + return + + for match in match_it: + yield f"MOVE_{match.group(1)}" + + +def extract_repo_universals() -> list[str]: + """ + Return a list of MOVE constants which are deemed to be universal and can + thus be learned by any species. + """ + with open("./src/pokemon.c", "r") as pokemon_fp: + if match := UNIVERSAL_MOVES_PAT.search(pokemon_fp.read()): + return list(filter(lambda s: s, map(lambda s: s.strip(), match.group(1).split(',')))) + return list() + + +def prepare_output(all_learnables: dict[str, set[str]], repo_teachables: set[str], header: str) -> str: + """ + Build the file content for teachable_learnsets.h. + """ + with open("./src/data/pokemon/teachable_learnsets.h", "r") as teachables_fp: + old = teachables_fp.read() + + cursor = 0 + new = header + dedent(""" + static const u16 sNoneTeachableLearnset[] = { + MOVE_UNAVAILABLE, + }; + """) + + joinpat = ",\n " + for species in TEACHABLE_ARRAY_DECL_PAT.finditer(old): + match_b, match_e = species.span() + species_upper = SNAKIFY_PAT.sub(r"_\1", species.group("name")).upper() + if species_upper == "NONE": + # NONE is hard-coded to be at the start of the file to keep this code simple. + cursor = match_e + 1 + continue + + if species_upper == "MEW": + new += old[cursor:match_e + 1] # copy the original content and skip. + cursor = match_e + 1 + continue + + repo_species_teachables = filter(lambda m: m in repo_teachables, all_learnables[species_upper]) + + new += old[cursor:match_b] + new += "\n".join([ + f"{species.group('decl')} = {{", + f" {joinpat.join(chain(repo_species_teachables, ('MOVE_UNAVAILABLE',)))},", + "};\n", + ]) + cursor = match_e + 1 + + new += old[cursor:] + + return new + + +def prepare_header(h_align: int, tmshms: list[str], tutors: list[str], universals: list[str]) -> str: + universals_title = "Near-universal moves found from sUniversalMoves:" + tmhm_title = "TM/HM moves found in \"include/constants/tms_hms.h\":" + tutor_title = "Tutor moves found from map scripts:" + h_align = max(h_align, len(universals_title), len(tmhm_title), len(tutor_title)) + + lines = [ + "//", + "// DO NOT MODIFY THIS FILE! It is auto-generated by tools/learnset_helpers/make_teachables.py", + "//", + "", + f"// {'*' * h_align} //", + f"// {tmhm_title: >{h_align}} //", + ] + lines.extend([f"// - {move: <{h_align - 2}} //" for move in tmshms]) + lines.extend([ + f"// {'*' * h_align} //", + f"// {tutor_title: <{h_align}} //", + ]) + lines.extend([f"// - {move: <{h_align - 2}} //" for move in sorted(tutors)]) + lines.extend([ + f"// {'*' * h_align} //", + f"// {universals_title: <{h_align}} //", + ]) + lines.extend([f"// - {move: <{h_align - 2}} //" for move in universals]) + lines.extend([ + f"// {'*' * h_align} //", + "", + ]) + + return "\n".join(lines) + + +def main(): + if not enabled(): + quit() + + if len(sys.argv) < 2: + print("Missing required arguments", file=sys.stderr) + print(__doc__, file=sys.stderr) + quit(1) + + SOURCE_LEARNSETS_JSON = pathlib.Path(sys.argv[1]) + + assert SOURCE_LEARNSETS_JSON.exists(), f"{SOURCE_LEARNSETS_JSON=} does not exist" + assert SOURCE_LEARNSETS_JSON.is_file(), f"{SOURCE_LEARNSETS_JSON=} is not a file" + + repo_universals = extract_repo_universals() + repo_tms = list(extract_repo_tms()) + repo_tutors = list(extract_repo_tutors()) + repo_teachables = set(filter( + lambda move: move not in set(repo_universals), + chain(repo_tms, repo_tutors) + )) + + h_align = max(map(lambda move: len(move), chain(repo_universals, repo_teachables))) + 2 + header = prepare_header(h_align, repo_tms, repo_tutors, repo_universals) + + with open(SOURCE_LEARNSETS_JSON, "r") as source_fp: + all_learnables = json.load(source_fp) + + content = prepare_output(all_learnables, repo_teachables, header) + with open("./src/data/pokemon/teachable_learnsets.h", "w") as teachables_fp: + teachables_fp.write(content) + + +if __name__ == "__main__": + main() diff --git a/tools/learnset_helpers/teachable.py b/tools/learnset_helpers/teachable.py deleted file mode 100644 index eb109e7a46..0000000000 --- a/tools/learnset_helpers/teachable.py +++ /dev/null @@ -1,214 +0,0 @@ -import glob -import re -import json -import os - -# before all else, abort if the config is off -with open("./include/config/pokemon.h", "r") as file: - learnset_config = re.findall(r"#define P_LEARNSET_HELPER_TEACHABLE *([^ ]*)", file.read()) - if len(learnset_config) != 1: - quit() - if learnset_config[0] != "TRUE": - quit() - -def parse_mon_name(name): - return re.sub(r'(?!^)([A-Z]+)', r'_\1', name).upper() - -tm_moves = [] -tutor_moves = [] - -# scan incs -incs_to_check = glob.glob('./data/scripts/*.inc') # all .incs in the script folder -incs_to_check += glob.glob('./data/maps/*/scripts.inc') # all map scripts - -if len(incs_to_check) == 0: # disabled if no jsons present - quit() - -for file in incs_to_check: - with open(file, 'r') as f2: - raw = f2.read() - if 'special ChooseMonForMoveTutor' in raw: - for x in re.findall(r'setvar VAR_0x8005, (MOVE_.*)', raw): - if not x in tutor_moves: - tutor_moves.append(x) - -# scan TMs and HMs -with open("./include/constants/tms_hms.h", 'r') as file: - for x in re.findall(r'F\((.*)\)', file.read()): - if not 'MOVE_' + x in tm_moves: - tm_moves.append('MOVE_' + x) - -# look up universal moves to exclude them -universal_moves = [] -with open("./src/pokemon.c", "r") as file: - for x in re.findall(r"static const u16 sUniversalMoves\[\] =(.|\n)*?{((.|\n)*?)};", file.read())[0]: - x = x.replace("\n", "") - for y in x.split(","): - y = y.strip() - if y == "": - continue - universal_moves.append(y) - -# get compatibility from jsons -def construct_compatibility_dict(force_custom_check): - dict_out = {} - for pth in glob.glob('./tools/learnset_helpers/porymoves_files/*.json'): - f = open(pth, 'r') - data = json.load(f) - for mon in data.keys(): - if not mon in dict_out: - dict_out[mon] = [] - for move in data[mon]['LevelMoves']: - if not move['Move'] in dict_out[mon]: - dict_out[mon].append(move['Move']) - #for move in data[mon]['PreEvoMoves']: - # if not move in dict_out[mon]: - # dict_out[mon].append(move) - for move in data[mon]['TMMoves']: - if not move in dict_out[mon]: - dict_out[mon].append(move) - for move in data[mon]['EggMoves']: - if not move in dict_out[mon]: - dict_out[mon].append(move) - for move in data[mon]['TutorMoves']: - if not move in dict_out[mon]: - dict_out[mon].append(move) - - # if the file was not previously generated, check if there is custom data there that needs to be preserved - with open("./src/data/pokemon/teachable_learnsets.h", 'r') as file: - raw = file.read() - if not "// DO NOT MODIFY THIS FILE!" in raw and force_custom_check == True: - custom_teachable_compatibilities = {} - for entry in re.findall(r"static const u16 s(.*)TeachableLearnset\[\] = {\n((.|\n)*?)\n};", raw): - monname = parse_mon_name(entry[0]) - if monname == "NONE": - continue - compatibility = entry[1].split("\n") - if not monname in custom_teachable_compatibilities: - custom_teachable_compatibilities[monname] = [] - if not monname in dict_out: - # this mon is unknown, so all data needs to be preserved - for move in compatibility: - move = move.replace(",", "").strip() - if move == "" or move == "MOVE_UNAVAILABLE": - continue - custom_teachable_compatibilities[monname].append(move) - else: - # this mon is known, so check if the moves in the old teachable_learnsets.h are not in the jsons - for move in compatibility: - move = move.replace(",", "").strip() - if move == "" or move == "MOVE_UNAVAILABLE": - continue - if not move in dict_out[monname]: - custom_teachable_compatibilities[monname].append(move) - # actually store the data in custom.json - if os.path.exists("./tools/learnset_helpers/porymoves_files/custom.json"): - f2 = open("./tools/learnset_helpers/porymoves_files/custom.json", "r") - custom_json = json.load(f2) - f2.close() - else: - custom_json = {} - for x in custom_teachable_compatibilities: - if len(custom_teachable_compatibilities[x]) == 0: - continue - if not x in custom_json: - custom_json[x] = {"LevelMoves": [], "PreEvoMoves": [], "TMMoves": [], "EggMoves": [], "TutorMoves": []} - for move in custom_teachable_compatibilities[x]: - custom_json[x]["TutorMoves"].append(move) - f2 = open("./tools/learnset_helpers/porymoves_files/custom.json", "w") - f2.write(json.dumps(custom_json, indent=2)) - f2.close() - print("FIRST RUN: Updated custom.json with teachable_learnsets.h's data") - # rerun the process - dict_out = construct_compatibility_dict(False) - return dict_out - -compatibility_dict = construct_compatibility_dict(True) - -# actually prepare the file -with open("./src/data/pokemon/teachable_learnsets.h", 'r') as file: - out = file.read() - list_of_mons = re.findall(r'static const u16 s(.*)TeachableLearnset', out) -for mon in list_of_mons: - mon_parsed = parse_mon_name(mon) - tm_learnset = [] - tutor_learnset = [] - if mon_parsed == "NONE" or mon_parsed == "MEW": - continue - if not mon_parsed in compatibility_dict: - print("Unable to find %s in json" % mon) - continue - for move in tm_moves: - if move in universal_moves: - continue - if move in tm_learnset: - continue - if move in compatibility_dict[mon_parsed]: - tm_learnset.append(move) - continue - for move in tutor_moves: - if move in universal_moves: - continue - if move in tutor_learnset: - continue - if move in compatibility_dict[mon_parsed]: - tutor_learnset.append(move) - continue - tm_learnset.sort() - tutor_learnset.sort() - tm_learnset += tutor_learnset - repl = "static const u16 s%sTeachableLearnset[] = {\n " % mon - if len(tm_learnset) > 0: - repl += ",\n ".join(tm_learnset) + ",\n " - repl += "MOVE_UNAVAILABLE,\n};" - newout = re.sub(r'static const u16 s%sTeachableLearnset\[\] = {[\s\S]*?};' % mon, repl, out) - if newout != out: - out = newout - print("Updated %s" % mon) - -# add/update header -header = "//\n// DO NOT MODIFY THIS FILE! It is auto-generated from tools/learnset_helpers/teachable.py\n//\n\n" -longest_move_name = 0 -for move in tm_moves + tutor_moves: - if len(move) > longest_move_name: - longest_move_name = len(move) -longest_move_name += 2 # + 2 for a hyphen and a space - -universal_title = "Near-universal moves found in sUniversalMoves:" -tmhm_title = "TM/HM moves found in \"include/constants/tms_hms.h\":" -tutor_title = "Tutor moves found in map scripts:" - -if longest_move_name < len(universal_title): - longest_move_name = len(universal_title) -if longest_move_name < len(tmhm_title): - longest_move_name = len(tmhm_title) -if longest_move_name < len(tutor_title): - longest_move_name = len(tutor_title) - -def header_print(str): - global header - header += "// " + str + " " * (longest_move_name - len(str)) + " //\n" - -header += "// " + longest_move_name * "*" + " //\n" -header_print(tmhm_title) -for move in tm_moves: - header_print("- " + move) -header += "// " + longest_move_name * "*" + " //\n" -header_print(tutor_title) -tutor_moves.sort() # alphabetically sort tutor moves for easier referencing -for move in tutor_moves: - header_print("- " + move) -header += "// " + longest_move_name * "*" + " //\n" -header_print(universal_title) -universal_moves.sort() # alphabetically sort near-universal moves for easier referencing -for move in universal_moves: - header_print("- " + move) -header += "// " + longest_move_name * "*" + " //\n\n" - -if not "// DO NOT MODIFY THIS FILE!" in out: - out = header + out -else: - out = re.sub(r"\/\/\n\/\/ DO NOT MODIFY THIS FILE!(.|\n)*\* \/\/\n\n", header, out) - -with open("./src/data/pokemon/teachable_learnsets.h", 'w') as file: - file.write(out) From ce99d6e75c66a385dc1a7a6f5634cb9faed5a96f Mon Sep 17 00:00:00 2001 From: Dana Yatsuta Date: Wed, 5 Mar 2025 15:44:11 +0300 Subject: [PATCH 026/115] Fix roamers having 0 hp on repeat encounters (#6366) --- src/battle_main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/battle_main.c b/src/battle_main.c index c2779e2b9a..03c58f8bf4 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -5668,7 +5668,7 @@ static void FreeResetData_ReturnToOvOrDoEvolutions(void) { // To account for Battle Factory and Slateport Battle Tent, enemy parties are zeroed out in the facilitites respective src/xxx.c files // The ZeroEnemyPartyMons() call happens in SaveXXXChallenge function (eg. SaveFactoryChallenge) - if (!(gBattleTypeFlags & BATTLE_TYPE_FRONTIER)) + if (!(gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_ROAMER))) { ZeroEnemyPartyMons(); } @@ -5741,6 +5741,7 @@ static void ReturnFromBattleToOverworld(void) if (gBattleTypeFlags & BATTLE_TYPE_ROAMER) { UpdateRoamerHPStatus(&gEnemyParty[0]); + ZeroEnemyPartyMons(); #ifndef BUGFIX if ((gBattleOutcome & B_OUTCOME_WON) || gBattleOutcome == B_OUTCOME_CAUGHT) From f747deb6ca1470e76e0c2fb3b76ab5ef36491d2a Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Wed, 5 Mar 2025 10:58:35 -0600 Subject: [PATCH 027/115] Fix Melmetal's weight (#6382) --- src/data/pokemon/species_info/gen_7_families.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/pokemon/species_info/gen_7_families.h b/src/data/pokemon/species_info/gen_7_families.h index fb97530b74..d510cab5e6 100644 --- a/src/data/pokemon/species_info/gen_7_families.h +++ b/src/data/pokemon/species_info/gen_7_families.h @@ -7397,7 +7397,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .natDexNum = NATIONAL_DEX_MELMETAL, .categoryName = _("Hex Nut"), .height = 25, - .weight = 800, + .weight = 8000, .description = COMPOUND_STRING( "Revered long ago for its capacity to\n" "create iron from nothing, for some reason\n" From 3eae7a0c96136d5bca974dc3e8573d5ca4f72f0f Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Thu, 6 Mar 2025 07:09:53 -0300 Subject: [PATCH 028/115] Gen 1's Special base stat (#6330) --- .../pokemon/species_info/gen_1_families.h | 274 ++++++++++-------- 1 file changed, 150 insertions(+), 124 deletions(-) diff --git a/src/data/pokemon/species_info/gen_1_families.h b/src/data/pokemon/species_info/gen_1_families.h index b1b58928e5..0bde1f347a 100644 --- a/src/data/pokemon/species_info/gen_1_families.h +++ b/src/data/pokemon/species_info/gen_1_families.h @@ -369,7 +369,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 52, .baseDefense = 43, .baseSpeed = 65, - .baseSpAttack = 60, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 60 : 50, .baseSpDefense = 50, .types = MON_TYPES(TYPE_FIRE), .catchRate = 45, @@ -438,7 +438,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 64, .baseDefense = 58, .baseSpeed = 80, - .baseSpAttack = 80, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 80 : 65, .baseSpDefense = 65, .types = MON_TYPES(TYPE_FIRE), .catchRate = 45, @@ -507,7 +507,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 84, .baseDefense = 78, .baseSpeed = 100, - .baseSpAttack = 109, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 109 : 85, .baseSpDefense = 85, .types = MON_TYPES(TYPE_FIRE, TYPE_FLYING), .catchRate = 45, @@ -719,7 +719,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 84, .baseDefense = 78, .baseSpeed = 100, - .baseSpAttack = 109, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 109 : 85, .baseSpDefense = 85, .types = MON_TYPES(TYPE_FIRE, TYPE_FLYING), .catchRate = 45, @@ -780,7 +780,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 65, .baseSpeed = 43, .baseSpAttack = 50, - .baseSpDefense = 64, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 64 : 50, .types = MON_TYPES(TYPE_WATER), .catchRate = 45, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 63 : 66, @@ -850,7 +850,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 80, .baseSpeed = 58, .baseSpAttack = 65, - .baseSpDefense = 80, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 80 : 65, .types = MON_TYPES(TYPE_WATER), .catchRate = 45, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 142 : 143, @@ -919,7 +919,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 100, .baseSpeed = 78, .baseSpAttack = 85, - .baseSpDefense = 105, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 105 : 85, .types = MON_TYPES(TYPE_WATER), .catchRate = 45, #if P_UPDATED_EXP_YIELDS >= GEN_8 @@ -1067,7 +1067,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 100, .baseSpeed = 78, .baseSpAttack = 85, - .baseSpDefense = 105, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 105 : 85, .types = MON_TYPES(TYPE_WATER), .catchRate = 45, .expYield = 239, @@ -1592,7 +1592,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 40, .baseSpeed = 75, .baseSpAttack = 45, - .baseSpDefense = 80, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 80 : 45, .types = MON_TYPES(TYPE_BUG, TYPE_POISON), .catchRate = 45, #if P_UPDATED_EXP_YIELDS >= GEN_8 @@ -2055,7 +2055,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 35, .baseSpeed = 72, .baseSpAttack = 25, - .baseSpDefense = 35, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 35 : 25, .types = MON_TYPES(TYPE_NORMAL), .catchRate = 255, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 51 : 57, @@ -2139,7 +2139,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 60, .baseSpeed = 97, .baseSpAttack = 50, - .baseSpDefense = 70, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 70 : 50, .types = MON_TYPES(TYPE_NORMAL), .catchRate = 127, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 145 : 116, @@ -2576,7 +2576,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 44, .baseSpeed = 55, .baseSpAttack = 40, - .baseSpDefense = 54, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 54 : 40, .types = MON_TYPES(TYPE_POISON), .catchRate = 255, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 58 : 62, @@ -2649,7 +2649,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 69, .baseSpeed = 80, .baseSpAttack = 65, - .baseSpDefense = 79, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 79 : 65, .types = MON_TYPES(TYPE_POISON), .catchRate = 90, #if P_UPDATED_EXP_YIELDS >= GEN_7 @@ -2873,7 +2873,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = P_UPDATED_STATS >= GEN_6 ? 40 : 30, .baseSpeed = 90, .baseSpAttack = 50, - .baseSpDefense = P_UPDATED_STATS >= GEN_6 ? 50 : 40, + .baseSpDefense = P_UPDATED_STATS >= GEN_6 || P_UPDATED_STATS == GEN_1 ? 50 : 40, .types = MON_TYPES(TYPE_ELECTRIC), .catchRate = 190, .expYield = PIKACHU_EXP_YIELD, @@ -3731,7 +3731,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = P_UPDATED_STATS >= GEN_6 ? 40 : 30, .baseSpeed = 90, .baseSpAttack = 50, - .baseSpDefense = P_UPDATED_STATS >= GEN_6 ? 50 : 40, + .baseSpDefense = P_UPDATED_STATS >= GEN_6 || P_UPDATED_STATS == GEN_1 ? 50 : 40, .types = MON_TYPES(TYPE_ELECTRIC), .catchRate = 190, .expYield = PIKACHU_EXP_YIELD, @@ -3881,7 +3881,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 55, .baseSpeed = RAICHU_SPEED, .baseSpAttack = 90, - .baseSpDefense = 80, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 80 : 90, .types = MON_TYPES(TYPE_ELECTRIC), .catchRate = 75, .expYield = RAICHU_EXP_YIELD, @@ -4031,7 +4031,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 75, .baseDefense = 85, .baseSpeed = 40, - .baseSpAttack = 20, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 20 : 30, .baseSpDefense = 30, .types = MON_TYPES(TYPE_GROUND), .catchRate = 255, @@ -4104,7 +4104,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 100, .baseDefense = 110, .baseSpeed = 65, - .baseSpAttack = 45, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 45 : 55, .baseSpDefense = 55, .types = MON_TYPES(TYPE_GROUND), .catchRate = 90, @@ -4465,7 +4465,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 87, .baseSpeed = 76, .baseSpAttack = 75, - .baseSpDefense = 85, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 85 : 75, .types = MON_TYPES(TYPE_POISON, TYPE_GROUND), .catchRate = 45, #if P_UPDATED_EXP_YIELDS >= GEN_8 @@ -4687,7 +4687,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = P_UPDATED_STATS >= GEN_6 ? 102 : 92, .baseDefense = 77, .baseSpeed = 85, - .baseSpAttack = 85, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 85 : 75, .baseSpDefense = 75, .types = MON_TYPES(TYPE_POISON, TYPE_GROUND), .catchRate = 45, @@ -4855,7 +4855,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 48, .baseSpeed = 35, .baseSpAttack = 60, - .baseSpDefense = 65, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 65 : 60, .types = CLEFAIRY_FAMILY_TYPES, .catchRate = 150, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 113 : 68, @@ -4929,7 +4929,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 73, .baseSpeed = 60, .baseSpAttack = P_UPDATED_STATS >= GEN_6 ? 95 : 85, - .baseSpDefense = 90, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 90 : 85, .types = CLEFAIRY_FAMILY_TYPES, .catchRate = 25, #if P_UPDATED_EXP_YIELDS >= GEN_8 @@ -5011,7 +5011,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 41, .baseDefense = 40, .baseSpeed = 65, - .baseSpAttack = 50, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 50 : 65, .baseSpDefense = 65, .types = MON_TYPES(TYPE_FIRE), .catchRate = 190, @@ -5084,7 +5084,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 76, .baseDefense = 75, .baseSpeed = 100, - .baseSpAttack = 81, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 81 : 100, .baseSpDefense = 100, .types = MON_TYPES(TYPE_FIRE), .catchRate = 75, @@ -5379,7 +5379,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 45, .baseDefense = 20, .baseSpeed = 20, - .baseSpAttack = 45, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 45 : 25, .baseSpDefense = 25, .types = JIGGLYPUFF_FAMILY_TYPES, .catchRate = 170, @@ -5449,13 +5449,21 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .evolutions = EVOLUTION({EVO_ITEM, ITEM_MOON_STONE, SPECIES_WIGGLYTUFF}), }, +#if P_UPDATED_STATS >= GEN_6 +#define WIGGLYTUFF_SP_ATK 85 +#elif P_UPDATED_STATS >= GEN_2 +#define WIGGLYTUFF_SP_ATK 75 +#else +#define WIGGLYTUFF_SP_ATK 50 +#endif + [SPECIES_WIGGLYTUFF] = { .baseHP = 140, .baseAttack = 70, .baseDefense = 45, .baseSpeed = 45, - .baseSpAttack = P_UPDATED_STATS >= GEN_6 ? 85 : 75, + .baseSpAttack = WIGGLYTUFF_SP_ATK, .baseSpDefense = 50, .types = JIGGLYPUFF_FAMILY_TYPES, .catchRate = 50, @@ -5540,7 +5548,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 45, .baseDefense = 35, .baseSpeed = 55, - .baseSpAttack = 30, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 30 : 40, .baseSpDefense = 40, .types = MON_TYPES(TYPE_POISON, TYPE_FLYING), .catchRate = 255, @@ -5633,7 +5641,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 80, .baseDefense = 70, .baseSpeed = 90, - .baseSpAttack = 65, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 65 : 75, .baseSpDefense = 75, .types = MON_TYPES(TYPE_POISON, TYPE_FLYING), .catchRate = 90, @@ -5824,7 +5832,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 55, .baseSpeed = 30, .baseSpAttack = 75, - .baseSpDefense = 65, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 65 : 75, .types = MON_TYPES(TYPE_GRASS, TYPE_POISON), .catchRate = 255, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 64 : 78, @@ -5898,7 +5906,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 70, .baseSpeed = 40, .baseSpAttack = 85, - .baseSpDefense = 75, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 75 : 85, .types = MON_TYPES(TYPE_GRASS, TYPE_POISON), .catchRate = 120, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 138 : 132, @@ -5982,7 +5990,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 85, .baseSpeed = 50, .baseSpAttack = P_UPDATED_STATS >= GEN_6 ? 110 : 100, - .baseSpDefense = 90, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 90 : 100, .types = MON_TYPES(TYPE_GRASS, TYPE_POISON), .catchRate = 45, #if P_UPDATED_EXP_YIELDS >= GEN_8 @@ -6162,7 +6170,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 70, .baseDefense = 55, .baseSpeed = 25, - .baseSpAttack = 45, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 45 : 55, .baseSpDefense = 55, .types = MON_TYPES(TYPE_BUG, TYPE_GRASS), .catchRate = 190, @@ -6251,7 +6259,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 95, .baseDefense = 80, .baseSpeed = 30, - .baseSpAttack = 60, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 60 : 80, .baseSpDefense = 80, .types = MON_TYPES(TYPE_BUG, TYPE_GRASS), .catchRate = 75, @@ -6332,7 +6340,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 50, .baseSpeed = 45, .baseSpAttack = 40, - .baseSpDefense = 55, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 55 : 40, .types = MON_TYPES(TYPE_BUG, TYPE_POISON), .catchRate = 190, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 61 : 75, @@ -6409,7 +6417,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 60, .baseSpeed = 90, .baseSpAttack = 90, - .baseSpDefense = 75, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 75 : 90, .types = MON_TYPES(TYPE_BUG, TYPE_POISON), .catchRate = 75, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 158 : 138, @@ -6506,15 +6514,13 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = #define DUGTRIO_EXP_YIELD 153 #endif -#define DUGTRIO_ATTACK (P_UPDATED_STATS >= GEN_7 ? 100 : 80) - [SPECIES_DIGLETT] = { .baseHP = 10, .baseAttack = 55, .baseDefense = 25, .baseSpeed = 95, - .baseSpAttack = 35, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 35 : 45, .baseSpDefense = 45, .types = MON_TYPES(TYPE_GROUND), .catchRate = 255, @@ -6583,10 +6589,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = [SPECIES_DUGTRIO] = { .baseHP = 35, - .baseAttack = DUGTRIO_ATTACK, + .baseAttack = P_UPDATED_STATS >= GEN_7 ? 100 : 80, .baseDefense = 50, .baseSpeed = 120, - .baseSpAttack = 50, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 50 : 70, .baseSpDefense = 70, .types = MON_TYPES(TYPE_GROUND), .catchRate = 50, @@ -6729,7 +6735,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = [SPECIES_DUGTRIO_ALOLA] = { .baseHP = 35, - .baseAttack = DUGTRIO_ATTACK, + .baseAttack = 100, .baseDefense = 60, .baseSpeed = 110, .baseSpAttack = 50, @@ -7285,7 +7291,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 52, .baseDefense = 48, .baseSpeed = 55, - .baseSpAttack = 65, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 65 : 50, .baseSpDefense = 50, .types = MON_TYPES(TYPE_WATER), .catchRate = 190, @@ -7356,7 +7362,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 82, .baseDefense = 78, .baseSpeed = 85, - .baseSpAttack = 95, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 95 : 80, .baseSpDefense = 80, .types = MON_TYPES(TYPE_WATER), .catchRate = 75, @@ -7428,7 +7434,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 35, .baseSpeed = 70, .baseSpAttack = 35, - .baseSpDefense = 45, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 45 : 35, .types = MON_TYPES(TYPE_FIGHTING), .catchRate = 190, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 61 : 74, @@ -7505,7 +7511,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 60, .baseSpeed = 95, .baseSpAttack = 60, - .baseSpDefense = 70, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 70 : 60, .types = MON_TYPES(TYPE_FIGHTING), .catchRate = 75, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 159 : 149, @@ -7647,7 +7653,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 70, .baseDefense = 45, .baseSpeed = 60, - .baseSpAttack = 70, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 70 : 50, .baseSpDefense = 50, .types = MON_TYPES(TYPE_FIRE), .catchRate = 190, @@ -7721,7 +7727,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 110, .baseDefense = 80, .baseSpeed = 95, - .baseSpAttack = 100, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 100 : 80, .baseSpDefense = 80, .types = MON_TYPES(TYPE_FIRE), .catchRate = 75, @@ -8070,7 +8076,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 95, .baseSpeed = 70, .baseSpAttack = 70, - .baseSpDefense = 90, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 90 : 70, .types = MON_TYPES(TYPE_WATER, TYPE_FIGHTING), .catchRate = 45, #if P_UPDATED_EXP_YIELDS >= GEN_8 @@ -8242,7 +8248,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 15, .baseSpeed = 90, .baseSpAttack = 105, - .baseSpDefense = 55, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 55 : 105, .types = MON_TYPES(TYPE_PSYCHIC), .catchRate = 200, #if P_UPDATED_EXP_YIELDS >= GEN_5 @@ -8320,7 +8326,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 30, .baseSpeed = 105, .baseSpAttack = 120, - .baseSpDefense = 70, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 70 : 120, .types = MON_TYPES(TYPE_PSYCHIC), .catchRate = 100, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 140 : 145, @@ -8397,7 +8403,13 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = {EVO_ITEM, ITEM_LINKING_CORD, SPECIES_ALAKAZAM}), }, -#define ALAKAZAM_SP_DEF (P_UPDATED_STATS >= GEN_6 ? 95 : 85) +#if P_UPDATED_STATS >= GEN_6 +#define ALAKAZAM_SP_DEF 95 +#elif P_UPDATED_STATS >= GEN_2 +#define ALAKAZAM_SP_DEF 85 +#else +#define ALAKAZAM_SP_DEF 135 +#endif [SPECIES_ALAKAZAM] = { @@ -8498,7 +8510,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 65, .baseSpeed = 150, .baseSpAttack = 175, - .baseSpDefense = ALAKAZAM_SP_DEF + 10, + .baseSpDefense = 105, .types = MON_TYPES(TYPE_PSYCHIC), .catchRate = 50, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 300 : 270, @@ -8652,7 +8664,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 70, .baseSpeed = 45, .baseSpAttack = 50, - .baseSpDefense = 60, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 60 : 50, .types = MON_TYPES(TYPE_FIGHTING), .catchRate = 90, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 142 : 146, @@ -8735,7 +8747,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 80, .baseSpeed = 55, .baseSpAttack = 65, - .baseSpDefense = 85, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 85 : 65, .types = MON_TYPES(TYPE_FIGHTING), .catchRate = 45, .expYield = MACHAMP_EXP_YIELD, @@ -8814,7 +8826,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 80, .baseSpeed = 55, .baseSpAttack = 65, - .baseSpDefense = 85, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 85 : 65, .types = MON_TYPES(TYPE_FIGHTING), .catchRate = 45, .expYield = MACHAMP_EXP_YIELD, @@ -8879,7 +8891,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 35, .baseSpeed = 40, .baseSpAttack = 70, - .baseSpDefense = 30, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 30 : 70, .types = MON_TYPES(TYPE_GRASS, TYPE_POISON), .catchRate = 255, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 60 : 84, @@ -8948,7 +8960,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 50, .baseSpeed = 55, .baseSpAttack = 85, - .baseSpDefense = 45, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 45 : 85, .types = MON_TYPES(TYPE_GRASS, TYPE_POISON), .catchRate = 120, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 137 : 151, @@ -9014,6 +9026,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .evolutions = EVOLUTION({EVO_ITEM, ITEM_LEAF_STONE, SPECIES_VICTREEBEL}), }, +#if P_UPDATED_STATS >= GEN_6 + #define VICTREEBEL_SP_DEF 70 +#elif P_UPDATED_STATS >= GEN_2 + #define VICTREEBEL_SP_DEF 60 +#else + #define VICTREEBEL_SP_DEF 100 +#endif + [SPECIES_VICTREEBEL] = { .baseHP = 80, @@ -9021,7 +9041,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 65, .baseSpeed = 70, .baseSpAttack = 100, - .baseSpDefense = P_UPDATED_STATS >= GEN_6 ? 70 : 60, + .baseSpDefense = VICTREEBEL_SP_DEF, .types = MON_TYPES(TYPE_GRASS, TYPE_POISON), .catchRate = 45, #if P_UPDATED_EXP_YIELDS >= GEN_8 @@ -9101,7 +9121,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 40, .baseDefense = 35, .baseSpeed = 70, - .baseSpAttack = 50, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 50 : 100, .baseSpDefense = 100, .types = MON_TYPES(TYPE_WATER, TYPE_POISON), .catchRate = 190, @@ -9173,7 +9193,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 70, .baseDefense = 65, .baseSpeed = 100, - .baseSpAttack = 80, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 80 : 120, .baseSpDefense = 120, .types = MON_TYPES(TYPE_WATER, TYPE_POISON), .catchRate = 60, @@ -9412,7 +9432,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 130, .baseSpeed = 45, .baseSpAttack = 55, - .baseSpDefense = 65, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 65 : 55, .types = MON_TYPES(TYPE_ROCK, TYPE_GROUND), .catchRate = 45, .expYield = GOLEM_EXP_YIELD, @@ -10036,7 +10056,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 75, .baseDefense = 110, .baseSpeed = 30, - .baseSpAttack = 100, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 100 : 80, .baseSpDefense = 80, .types = MON_TYPES(TYPE_WATER, TYPE_PSYCHIC), .catchRate = 75, @@ -10453,7 +10473,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 70, .baseSpeed = 45, .baseSpAttack = 95, - .baseSpDefense = 55, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 55 : 95, .types = MON_TYPES(TYPE_ELECTRIC, TYPE_STEEL), .catchRate = 190, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 65 : 89, @@ -10525,7 +10545,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 95, .baseSpeed = 70, .baseSpAttack = 120, - .baseSpDefense = 70, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 70 : 120, .types = MON_TYPES(TYPE_ELECTRIC, TYPE_STEEL), .catchRate = 60, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 163 : 161, @@ -10691,7 +10711,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 55, .baseSpeed = 60, .baseSpAttack = 58, - .baseSpDefense = 62, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 62 : 58, .types = MON_TYPES(TYPE_NORMAL, TYPE_FLYING), .catchRate = 45, .expYield = FARFETCHD_EXP_YIELD, @@ -11083,7 +11103,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 45, .baseDefense = 55, .baseSpeed = 45, - .baseSpAttack = 45, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 45 : 70, .baseSpDefense = 70, .types = MON_TYPES(TYPE_WATER), .catchRate = 190, @@ -11157,7 +11177,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 70, .baseDefense = 80, .baseSpeed = 70, - .baseSpAttack = 70, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 70 : 95, .baseSpDefense = 95, .types = MON_TYPES(TYPE_WATER, TYPE_ICE), .catchRate = 75, @@ -11231,7 +11251,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 50, .baseSpeed = 25, .baseSpAttack = 40, - .baseSpDefense = 50, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 50 : 40, .types = MON_TYPES(TYPE_POISON), .catchRate = 190, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 65 : 90, @@ -11304,7 +11324,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 75, .baseSpeed = 50, .baseSpAttack = 65, - .baseSpDefense = 100, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 100 : 65, .types = MON_TYPES(TYPE_POISON), .catchRate = 75, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 175 : 157, @@ -11517,7 +11537,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 100, .baseSpeed = 40, .baseSpAttack = 45, - .baseSpDefense = 25, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 25 : 45, .types = MON_TYPES(TYPE_WATER), .catchRate = 190, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 61 : 97, @@ -11594,7 +11614,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 180, .baseSpeed = 70, .baseSpAttack = 85, - .baseSpDefense = 45, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 45 : 85, .types = MON_TYPES(TYPE_WATER, TYPE_ICE), .catchRate = 60, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 184 : 203, @@ -11670,7 +11690,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 30, .baseSpeed = 80, .baseSpAttack = 100, - .baseSpDefense = 35, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 35 : 100, .types = MON_TYPES(TYPE_GHOST, TYPE_POISON), .catchRate = 190, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 62 : 95, @@ -11744,7 +11764,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 45, .baseSpeed = 95, .baseSpAttack = 115, - .baseSpDefense = 55, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 55 : 115, .types = MON_TYPES(TYPE_GHOST, TYPE_POISON), .catchRate = 90, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 142 : 126, @@ -11823,7 +11843,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 60, .baseSpeed = 110, .baseSpAttack = 130, - .baseSpDefense = 75, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 75 : 130, .types = MON_TYPES(TYPE_GHOST, TYPE_POISON), .catchRate = 45, #if P_UPDATED_EXP_YIELDS >= GEN_8 @@ -11969,7 +11989,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 60, .baseSpeed = 110, .baseSpAttack = 130, - .baseSpDefense = 75, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 75 : 130, .types = MON_TYPES(TYPE_GHOST, TYPE_POISON), .catchRate = 45, .expYield = 225, @@ -12029,7 +12049,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 160, .baseSpeed = 70, .baseSpAttack = 30, - .baseSpDefense = 45, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 45 : 30, .types = MON_TYPES(TYPE_ROCK, TYPE_GROUND), .catchRate = 45, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 77 : 108, @@ -12258,7 +12278,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 48, .baseDefense = 45, .baseSpeed = 42, - .baseSpAttack = 43, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 43 : 90, .baseSpDefense = 90, .types = MON_TYPES(TYPE_PSYCHIC), .catchRate = 190, @@ -12335,7 +12355,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 73, .baseDefense = 70, .baseSpeed = 67, - .baseSpAttack = 73, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 73 : 115, .baseSpDefense = 115, .types = MON_TYPES(TYPE_PSYCHIC), .catchRate = 75, @@ -12916,7 +12936,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 80, .baseSpeed = 40, .baseSpAttack = 60, - .baseSpDefense = 45, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 45 : 60, .types = MON_TYPES(TYPE_GRASS, TYPE_PSYCHIC), .catchRate = 90, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 65 : 98, @@ -12994,7 +13014,13 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = #define EXEGGUTOR_EXP_YIELD 212 #endif -#define EXEGGUTOR_SP_DEF (P_UPDATED_STATS >= GEN_7 ? 75 : 65) +#if P_UPDATED_STATS >= GEN_7 + #define EXEGGUTOR_SP_DEF 75 +#elif P_UPDATED_STATS >= GEN_2 + #define EXEGGUTOR_SP_DEF 65 +#else + #define EXEGGUTOR_SP_DEF 125 +#endif [SPECIES_EXEGGUTOR] = { @@ -13139,7 +13165,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 95, .baseSpeed = 35, .baseSpAttack = 40, - .baseSpDefense = 50, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 50 : 40, .types = MON_TYPES(TYPE_GROUND), .catchRate = 190, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 64 : 87, @@ -13215,7 +13241,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 110, .baseSpeed = 45, .baseSpAttack = 50, - .baseSpDefense = 80, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 80 : 50, .types = MON_TYPES(TYPE_GROUND), .catchRate = 75, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 149 : 124, @@ -13493,7 +13519,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 53, .baseSpeed = 87, .baseSpAttack = 35, - .baseSpDefense = 110, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 110 : 35, .types = MON_TYPES(TYPE_FIGHTING), .catchRate = 45, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 159 : 139, @@ -13564,7 +13590,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 79, .baseSpeed = 76, .baseSpAttack = 35, - .baseSpDefense = 110, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 110 : 35, .types = MON_TYPES(TYPE_FIGHTING), .catchRate = 45, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 159 : 140, @@ -13720,7 +13746,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 75, .baseSpeed = 30, .baseSpAttack = 60, - .baseSpDefense = 75, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 75 : 60, .types = MON_TYPES(TYPE_NORMAL), .catchRate = 45, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 77 : 127, @@ -13867,7 +13893,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 95, .baseSpeed = 35, .baseSpAttack = 60, - .baseSpDefense = 45, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 45 : 60, .types = MON_TYPES(TYPE_POISON), .catchRate = 190, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 68 : 114, @@ -13945,7 +13971,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 120, .baseSpeed = 60, .baseSpAttack = 85, - .baseSpDefense = 70, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 70 : 85, .types = MON_TYPES(TYPE_POISON), .catchRate = 60, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 172 : 173, @@ -14423,7 +14449,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 5, .baseDefense = 5, .baseSpeed = 50, - .baseSpAttack = 35, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 35 : 105, .baseSpDefense = 105, .types = MON_TYPES(TYPE_NORMAL), .catchRate = 30, @@ -14566,7 +14592,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 115, .baseSpeed = 60, .baseSpAttack = 100, - .baseSpDefense = 40, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 40 : 100, .types = MON_TYPES(TYPE_GRASS), .catchRate = 45, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 87 : 166, @@ -14725,7 +14751,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 80, .baseSpeed = 90, .baseSpAttack = 40, - .baseSpDefense = 80, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 80 : 40, .types = MON_TYPES(TYPE_NORMAL), .catchRate = 45, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 172 : 175, @@ -14869,7 +14895,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 70, .baseSpeed = 60, .baseSpAttack = 70, - .baseSpDefense = 25, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 25 : 70, .types = MON_TYPES(TYPE_WATER), .catchRate = 225, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 59 : 83, @@ -14945,7 +14971,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 95, .baseSpeed = 85, .baseSpAttack = 95, - .baseSpDefense = 45, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 45 : 95, .types = MON_TYPES(TYPE_WATER), .catchRate = 75, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 154 : 155, @@ -15107,7 +15133,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 67, .baseDefense = 60, .baseSpeed = 63, - .baseSpAttack = 35, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 35 : 50, .baseSpDefense = 50, .types = MON_TYPES(TYPE_WATER), .catchRate = 225, @@ -15196,7 +15222,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 92, .baseDefense = 65, .baseSpeed = 68, - .baseSpAttack = 65, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 65 : 80, .baseSpDefense = 80, .types = MON_TYPES(TYPE_WATER), .catchRate = 60, @@ -15282,7 +15308,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 55, .baseSpeed = 85, .baseSpAttack = 70, - .baseSpDefense = 55, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 55 : 70, .types = MON_TYPES(TYPE_WATER), .catchRate = 225, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 68 : 106, @@ -15355,7 +15381,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 85, .baseSpeed = 115, .baseSpAttack = 100, - .baseSpDefense = 85, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 85 : 100, .types = MON_TYPES(TYPE_WATER, TYPE_PSYCHIC), .catchRate = 60, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 182 : 207, @@ -15511,7 +15537,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 65, .baseSpeed = 90, .baseSpAttack = 100, - .baseSpDefense = 120, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 120 : 100, #if P_UPDATED_TYPES >= GEN_6 .types = MON_TYPES(TYPE_PSYCHIC, TYPE_FAIRY), #else @@ -15720,7 +15746,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 80, .baseSpeed = 105, .baseSpAttack = 55, - .baseSpDefense = 80, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 80 : 55, .types = MON_TYPES(TYPE_BUG, TYPE_FLYING), .catchRate = 45, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 100 : 187, @@ -16109,7 +16135,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 50, .baseDefense = 35, .baseSpeed = 95, - .baseSpAttack = 115, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 115 : 95, .baseSpDefense = 95, .types = MON_TYPES(TYPE_ICE, TYPE_PSYCHIC), .catchRate = 45, @@ -16257,7 +16283,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 83, .baseDefense = 57, .baseSpeed = 105, - .baseSpAttack = 95, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 95 : 85, .baseSpDefense = 85, .types = MON_TYPES(TYPE_ELECTRIC), .catchRate = 45, @@ -16482,7 +16508,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 95, .baseDefense = 57, .baseSpeed = 93, - .baseSpAttack = 100, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 100 : 85, .baseSpDefense = 85, .types = MON_TYPES(TYPE_FIRE), .catchRate = 45, @@ -16630,7 +16656,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 100, .baseSpeed = 85, .baseSpAttack = 55, - .baseSpDefense = 70, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 70 : 55, .types = MON_TYPES(TYPE_BUG), .catchRate = 45, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 175 : 200, @@ -16779,7 +16805,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 100, .baseDefense = 95, .baseSpeed = 110, - .baseSpAttack = 40, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 40 : 70, .baseSpDefense = 70, .types = MON_TYPES(TYPE_NORMAL), .catchRate = 45, @@ -17056,7 +17082,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 10, .baseDefense = 55, .baseSpeed = 80, - .baseSpAttack = 15, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 15 : 20, .baseSpDefense = 20, .types = MON_TYPES(TYPE_WATER), .catchRate = 255, @@ -17144,7 +17170,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 125, .baseDefense = 79, .baseSpeed = 81, - .baseSpAttack = 60, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 60 : 100, .baseSpDefense = 100, .types = MON_TYPES(TYPE_WATER, TYPE_FLYING), .catchRate = 45, @@ -17299,7 +17325,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 85, .baseDefense = 80, .baseSpeed = 60, - .baseSpAttack = 85, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 85 : 95, .baseSpDefense = 95, .types = MON_TYPES(TYPE_WATER, TYPE_ICE), .catchRate = 45, @@ -17371,7 +17397,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 85, .baseDefense = 80, .baseSpeed = 60, - .baseSpAttack = 85, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 85 : 95, .baseSpDefense = 95, .types = MON_TYPES(TYPE_WATER, TYPE_ICE), .catchRate = 45, @@ -17507,7 +17533,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 55, .baseDefense = 50, .baseSpeed = 55, - .baseSpAttack = 45, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 45 : 65, .baseSpDefense = 65, .types = MON_TYPES(TYPE_NORMAL), .catchRate = 45, @@ -17600,7 +17626,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 55, .baseDefense = 50, .baseSpeed = 55, - .baseSpAttack = 45, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 45 : 65, .baseSpDefense = 65, .types = MON_TYPES(TYPE_NORMAL), .catchRate = 45, @@ -17736,7 +17762,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 60, .baseSpeed = 65, .baseSpAttack = 110, - .baseSpDefense = 95, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 95 : 110, .types = MON_TYPES(TYPE_WATER), .catchRate = 45, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 184 : 196, @@ -17802,7 +17828,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 60, .baseSpeed = 130, .baseSpAttack = 110, - .baseSpDefense = 95, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 95 : 110, .types = MON_TYPES(TYPE_ELECTRIC), .catchRate = 45, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 184 : 197, @@ -17867,7 +17893,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 130, .baseDefense = 60, .baseSpeed = 65, - .baseSpAttack = 95, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 95 : 110, .baseSpDefense = 110, .types = MON_TYPES(TYPE_FIRE), .catchRate = 45, @@ -18276,7 +18302,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 60, .baseDefense = 70, .baseSpeed = 40, - .baseSpAttack = 85, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 85 : 75, .baseSpDefense = 75, .types = MON_TYPES(TYPE_NORMAL), .catchRate = 45, @@ -18508,7 +18534,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 100, .baseSpeed = 35, .baseSpAttack = 90, - .baseSpDefense = 55, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 55 : 90, .types = MON_TYPES(TYPE_ROCK, TYPE_WATER), .catchRate = 45, #if P_UPDATED_EXP_YIELDS >= GEN_5 @@ -18588,7 +18614,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 125, .baseSpeed = 55, .baseSpAttack = 115, - .baseSpDefense = 70, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 70 : 115, .types = MON_TYPES(TYPE_ROCK, TYPE_WATER), .catchRate = 45, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 173 : 199, @@ -18657,7 +18683,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 80, .baseDefense = 90, .baseSpeed = 55, - .baseSpAttack = 55, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 55 : 45, .baseSpDefense = 45, .types = MON_TYPES(TYPE_ROCK, TYPE_WATER), .catchRate = 45, @@ -18737,7 +18763,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 115, .baseDefense = 105, .baseSpeed = 80, - .baseSpAttack = 65, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 65 : 70, .baseSpDefense = 70, .types = MON_TYPES(TYPE_ROCK, TYPE_WATER), .catchRate = 45, @@ -18814,7 +18840,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 65, .baseSpeed = 130, .baseSpAttack = 60, - .baseSpDefense = 75, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 75 : 60, .types = MON_TYPES(TYPE_ROCK, TYPE_FLYING), .catchRate = 45, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 180 : 202, @@ -19032,7 +19058,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 65, .baseSpeed = 30, .baseSpAttack = 65, - .baseSpDefense = 110, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 110 : 65, .types = MON_TYPES(TYPE_NORMAL), .catchRate = 25, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 189 : 154, @@ -19105,7 +19131,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 65, .baseSpeed = 30, .baseSpAttack = 65, - .baseSpDefense = 110, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 110 : 65, .types = MON_TYPES(TYPE_NORMAL), .catchRate = 25, .expYield = (P_UPDATED_EXP_YIELDS >= GEN_5) ? 189 : 154, @@ -19167,7 +19193,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseAttack = 85, .baseDefense = 100, .baseSpeed = 85, - .baseSpAttack = 95, + .baseSpAttack = P_UPDATED_STATS >= GEN_2 ? 95 : 125, .baseSpDefense = 125, .types = MON_TYPES(TYPE_ICE, TYPE_FLYING), .catchRate = 3, @@ -19318,7 +19344,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 85, .baseSpeed = 100, .baseSpAttack = 125, - .baseSpDefense = 90, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 90 : 125, .types = MON_TYPES(TYPE_ELECTRIC, TYPE_FLYING), .catchRate = 3, #if P_UPDATED_EXP_YIELDS >= GEN_8 @@ -19471,7 +19497,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 90, .baseSpeed = 90, .baseSpAttack = 125, - .baseSpDefense = 85, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 85 : 125, .types = MON_TYPES(TYPE_FIRE, TYPE_FLYING), .catchRate = 3, #if P_UPDATED_EXP_YIELDS >= GEN_8 @@ -19865,7 +19891,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .baseDefense = 90, .baseSpeed = 130, .baseSpAttack = 154, - .baseSpDefense = 90, + .baseSpDefense = P_UPDATED_STATS >= GEN_2 ? 90 : 154, .types = MON_TYPES(TYPE_PSYCHIC), .catchRate = 3, #if P_UPDATED_EXP_YIELDS >= GEN_8 From e0c7b630952633a1b2c16b806afc00a4f6986d47 Mon Sep 17 00:00:00 2001 From: wiz1989 <80073265+wiz1989@users.noreply.github.com> Date: Thu, 6 Mar 2025 12:47:03 +0100 Subject: [PATCH 029/115] "no additional effect" text for status Z moves without effects (#6368) --- include/config/battle.h | 1 + src/battle_z_move.c | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/include/config/battle.h b/include/config/battle.h index 8721ef317f..3fdea02ff4 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -243,6 +243,7 @@ #define B_WAIT_TIME_MULTIPLIER 16 // This determines how long text pauses in battle last. Vanilla is 16. Lower values result in faster battles. #define B_QUICK_MOVE_CURSOR_TO_RUN FALSE // If set to TRUE, pushing B in the battle options against a wild encounter will move the cursor to the run option #define B_MOVE_DESCRIPTION_BUTTON L_BUTTON // If set to a button other than B_LAST_USED_BALL_BUTTON, pressing this button will open the move description menu +#define B_SHOW_USELESS_Z_MOVE_INFO FALSE // If set to TRUE, Z-moves without additional effects like newer gen status moves will say "no additional effect" // Catching settings #define B_SEMI_INVULNERABLE_CATCH GEN_LATEST // In Gen4+, you cannot throw a ball against a Pokemon that is in a semi-invulnerable state (dig/fly/etc) diff --git a/src/battle_z_move.c b/src/battle_z_move.c index c878a2c12b..dda776d8ad 100644 --- a/src/battle_z_move.c +++ b/src/battle_z_move.c @@ -103,6 +103,7 @@ static const u8 sText_FollowMe[] = _("Follow Me"); static const u8 sText_RecoverHP[] = _("Recover HP"); static const u8 sText_HealAllyHP[] = _("Heal Replacement HP"); static const u8 sText_PowerColon[] = _("Power: "); +static const u8 sText_NoAdditionalEffect[] = _("No Additional Effect"); // Functions bool32 IsZMove(u32 move) @@ -352,6 +353,10 @@ bool32 MoveSelectionDisplayZMove(u16 zmove, u32 battler) PREPARE_STAT_BUFFER(gBattleTextBuff1, zEffect - Z_EFFECT_ATK_UP_3 + 1); ExpandBattleTextBuffPlaceholders(gBattleTextBuff1, gDisplayedStringBattle + 4); break; + default: + if (B_SHOW_USELESS_Z_MOVE_INFO == TRUE) + StringCopy(gDisplayedStringBattle, sText_NoAdditionalEffect); + break; } BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_NAME_3); From 6500f4653f1e1ec349d530c3f04965ab20f63a4e Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Fri, 7 Mar 2025 05:44:59 -0500 Subject: [PATCH 030/115] Switch AI will factor in player's choice lock when determining hits to KO (#6343) --- src/battle_ai_switch_items.c | 7 +++++++ test/battle/ai/ai_switching.c | 17 +++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index ef8f45fb17..0c3b31ed59 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -249,6 +249,11 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler) if (playerMove != MOVE_NONE && !IsBattleMoveStatus(playerMove) && GetMoveEffect(playerMove) != EFFECT_FOCUS_PUNCH) { damageTaken = AI_CalcDamage(playerMove, opposingBattler, battler, &effectiveness, FALSE, weather, DMG_ROLL_HIGHEST).expected; + if (playerMove == gBattleStruct->choicedMove[opposingBattler]) // If player is choiced, only care about the choice locked move + { + return maxDamageTaken = damageTaken; + break; + } if (damageTaken > maxDamageTaken) maxDamageTaken = damageTaken; } @@ -1818,6 +1823,8 @@ static s32 GetMaxDamagePlayerCouldDealToSwitchin(u32 battler, u32 opposingBattle if (playerMove != MOVE_NONE && !IsBattleMoveStatus(playerMove) && GetMoveEffect(playerMove) != EFFECT_FOCUS_PUNCH) { damageTaken = AI_CalcPartyMonDamage(playerMove, opposingBattler, battler, battleMon, FALSE, DMG_ROLL_HIGHEST); + if (playerMove == gBattleStruct->choicedMove[opposingBattler]) // If player is choiced, only care about the choice locked move + return damageTaken; if (damageTaken > maxDamageTaken) maxDamageTaken = damageTaken; } diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index 367afbc0f1..e41eba0a4c 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -1085,3 +1085,20 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI won't switch in absorbing mon TURN { MOVE(player, MOVE_CLOSE_COMBAT); EXPECT_MOVE(opponent, MOVE_DRACO_METEOR); } } } + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI will consider choice-locked player when determining which mon to send out") +{ + u32 item; + PARAMETRIZE { item = ITEM_NONE; } + PARAMETRIZE { item = ITEM_CHOICE_BAND; } + GIVEN { + ASSUME(gItemsInfo[ITEM_CHOICE_BAND].holdEffect == HOLD_EFFECT_CHOICE_BAND); + 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_FLAG_OMNISCIENT); + PLAYER(SPECIES_JOLTEON) { Speed(5); Moves(MOVE_EARTHQUAKE, MOVE_THUNDERBOLT); Item(item); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(4); HP(1); Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_MACHAMP) { Speed(4); Moves(MOVE_REVENGE); } + OPPONENT(SPECIES_GYARADOS) { Speed(4); Moves(MOVE_EARTHQUAKE); } + } WHEN { + TURN { MOVE(player, MOVE_EARTHQUAKE); EXPECT_MOVE(opponent, MOVE_TACKLE); item == ITEM_NONE ? EXPECT_SEND_OUT(opponent, 1) : EXPECT_SEND_OUT(opponent, 2); } + } +} From 752181bbcbb35a48c259eaf1b52e076af31ab741 Mon Sep 17 00:00:00 2001 From: innocenthedgehog <56793981+innocenthedgehog@users.noreply.github.com> Date: Fri, 7 Mar 2025 17:01:27 +0000 Subject: [PATCH 031/115] Switch AI considers Wind Rider (#6391) --- src/battle_ai_switch_items.c | 4 ++++ test/battle/ai/ai_switching.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 0c3b31ed59..c468bf6210 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -506,6 +506,10 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler) { absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_SOUNDPROOF; } + else if (IsWindMove(predictedMove) || (isOpposingBattlerChargingOrInvulnerable && IsWindMove(incomingMove))) + { + absorbingTypeAbilities[numAbsorbingAbilities++] = ABILITY_WIND_RIDER; + } else { return FALSE; diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index e41eba0a4c..d2ab5f0b7a 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -807,9 +807,9 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has an PARAMETRIZE { aiMon = SPECIES_ORTHWORM; absorbingAbility = ABILITY_EARTH_EATER; move = MOVE_EARTHQUAKE;} PARAMETRIZE { aiMon = SPECIES_BRONZONG; absorbingAbility = ABILITY_LEVITATE; move = MOVE_EARTHQUAKE;} PARAMETRIZE { aiMon = SPECIES_ELECTRODE; absorbingAbility = ABILITY_SOUNDPROOF; move = MOVE_HYPER_VOICE;} + PARAMETRIZE { aiMon = SPECIES_SHIFTRY; absorbingAbility = ABILITY_WIND_RIDER; move = MOVE_HURRICANE;} GIVEN { ASSUME(B_REDIRECT_ABILITY_IMMUNITY >= GEN_5); - ASSUME(GetMoveType(MOVE_WATER_GUN) == TYPE_WATER); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); PLAYER(SPECIES_ZIGZAGOON) { Moves(move); } OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_TACKLE); } From 46b821c1967cf095a662454dce9695b65bebaebc Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Fri, 7 Mar 2025 18:40:40 +0100 Subject: [PATCH 032/115] Fix damage roll order for AI calcs (#6356) --- include/battle_util.h | 1 + src/battle_ai_util.c | 61 ++++++++++++++++++++++++++++++++++--------- src/battle_util.c | 21 ++++++++++++--- 3 files changed, 66 insertions(+), 17 deletions(-) diff --git a/include/battle_util.h b/include/battle_util.h index 6b7fdef74a..21ce76de40 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -249,6 +249,7 @@ u32 CalcFuryCutterBasePower(u32 basePower, u32 furyCutterCounter); s32 CalculateMoveDamage(struct DamageCalculationData *damageCalcData, u32 fixedBasePower); s32 CalculateMoveDamageVars(struct DamageCalculationData *damageCalcData, u32 fixedBasePower, uq4_12_t typeEffectivenessModifier, u32 weather, u32 holdEffectAtk, u32 holdEffectDef, u32 abilityAtk, u32 abilityDef); +s32 ApplyModifiersAfterDmgRoll(s32 dmg, struct DamageCalculationData *damageCalcData, uq4_12_t typeEffectivenessModifier, u32 abilityAtk, u32 abilityDef, u32 holdEffectAtk, u32 holdEffectDef); uq4_12_t CalcTypeEffectivenessMultiplier(u32 move, u32 moveType, u32 battlerAtk, u32 battlerDef, u32 defAbility, bool32 recordAbilities); uq4_12_t CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u16 abilityDef); uq4_12_t GetTypeModifier(u32 atkType, u32 defType); diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 9a522fba09..2bafe83d22 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -686,19 +686,26 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u effectivenessMultiplier, weather, aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + + nonCritDmg = ApplyModifiersAfterDmgRoll(nonCritDmg, &damageCalcData, effectivenessMultiplier, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + damageCalcData.isCrit = TRUE; s32 critDmg = CalculateMoveDamageVars(&damageCalcData, fixedBasePower, effectivenessMultiplier, weather, 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. - simDamage.expected = GetDamageByRollType((critDmg + nonCritDmg * (critOdds - 1)) / critOdds, rollType); - if (critOdds == 1) - simDamage.minimum = LowestRollDmg(critDmg); - else - simDamage.minimum = LowestRollDmg(nonCritDmg); + simDamage.expected = GetDamageByRollType(critDmg, rollType); + simDamage.expected = ApplyModifiersAfterDmgRoll(simDamage.expected, &damageCalcData, effectivenessMultiplier, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + + simDamage.minimum = (GetCritHitOdds(critChanceIndex) == 1) ? LowestRollDmg(critDmg) : LowestRollDmg(nonCritDmg); + simDamage.minimum = ApplyModifiersAfterDmgRoll(simDamage.minimum, &damageCalcData, effectivenessMultiplier, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); } else if (critChanceIndex == -2) // Guaranteed critical { @@ -710,6 +717,14 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u simDamage.expected = GetDamageByRollType(critDmg, rollType); simDamage.minimum = LowestRollDmg(critDmg); + + simDamage.expected = ApplyModifiersAfterDmgRoll(simDamage.expected, &damageCalcData, effectivenessMultiplier, + aiData->abilities[battlerAtk], aiData->abilities[battlerDef], + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef]); + + simDamage.minimum = ApplyModifiersAfterDmgRoll(simDamage.minimum, &damageCalcData, effectivenessMultiplier, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); } else { @@ -718,10 +733,21 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u { for (gMultiHitCounter = GetMoveStrikeCount(move); gMultiHitCounter > 0; gMultiHitCounter--) // The global is used to simulate actual damage done { - nonCritDmg += CalculateMoveDamageVars(&damageCalcData, fixedBasePower, - effectivenessMultiplier, weather, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + s32 oneTripleKickHit = CalculateMoveDamageVars(&damageCalcData, fixedBasePower, + effectivenessMultiplier, weather, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + + simDamage.expected = GetDamageByRollType(oneTripleKickHit, rollType); + simDamage.minimum = LowestRollDmg(oneTripleKickHit); + + nonCritDmg += ApplyModifiersAfterDmgRoll(simDamage.expected, &damageCalcData, effectivenessMultiplier, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + + nonCritDmg += ApplyModifiersAfterDmgRoll(simDamage.minimum, &damageCalcData, effectivenessMultiplier, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); } } else @@ -730,9 +756,18 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u effectivenessMultiplier, weather, aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + + simDamage.expected = GetDamageByRollType(nonCritDmg, rollType); + simDamage.minimum = LowestRollDmg(nonCritDmg); + + simDamage.expected = ApplyModifiersAfterDmgRoll(simDamage.expected, &damageCalcData, effectivenessMultiplier, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + + simDamage.minimum = ApplyModifiersAfterDmgRoll(simDamage.minimum, &damageCalcData, effectivenessMultiplier, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); } - simDamage.expected = GetDamageByRollType(nonCritDmg, rollType); - simDamage.minimum = LowestRollDmg(nonCritDmg); } if (GetActiveGimmick(battlerAtk) != GIMMICK_Z_MOVE) diff --git a/src/battle_util.c b/src/battle_util.c index 44a0b678b4..737d894d0c 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -10462,9 +10462,24 @@ static inline s32 DoMoveDamageCalcVars(struct DamageCalculationData *damageCalcD dmg *= DMG_ROLL_PERCENT_HI - RandomUniform(RNG_DAMAGE_MODIFIER, 0, DMG_ROLL_PERCENT_HI - DMG_ROLL_PERCENT_LO); dmg /= 100; } + else // Apply rest of modifiers in the ai function + { + if (dmg == 0) + dmg = 1; + return dmg; + } - if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA) - DAMAGE_APPLY_MODIFIER(GetTeraMultiplier(battlerAtk, damageCalcData->moveType)); + dmg = ApplyModifiersAfterDmgRoll(dmg, damageCalcData, typeEffectivenessModifier, abilityAtk, abilityDef, holdEffectAtk, holdEffectDef); + + if (dmg == 0) + dmg = 1; + return dmg; +} + +s32 ApplyModifiersAfterDmgRoll(s32 dmg, struct DamageCalculationData *damageCalcData, uq4_12_t typeEffectivenessModifier, u32 abilityAtk, u32 abilityDef, u32 holdEffectAtk, u32 holdEffectDef) +{ + if (GetActiveGimmick(damageCalcData->battlerAtk) == GIMMICK_TERA) + DAMAGE_APPLY_MODIFIER(GetTeraMultiplier(damageCalcData->battlerAtk, damageCalcData->moveType)); else DAMAGE_APPLY_MODIFIER(GetSameTypeAttackBonusModifier(damageCalcData, abilityAtk)); DAMAGE_APPLY_MODIFIER(typeEffectivenessModifier); @@ -10472,8 +10487,6 @@ static inline s32 DoMoveDamageCalcVars(struct DamageCalculationData *damageCalcD DAMAGE_APPLY_MODIFIER(GetZMaxMoveAgainstProtectionModifier(damageCalcData)); DAMAGE_APPLY_MODIFIER(GetOtherModifiers(damageCalcData, typeEffectivenessModifier, abilityAtk, abilityDef, holdEffectAtk, holdEffectDef)); - if (dmg == 0) - dmg = 1; return dmg; } From b12f32667fa40042792ddb6754b00af471bc31fb Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Sat, 8 Mar 2025 03:53:14 -0500 Subject: [PATCH 033/115] Fix roll handling in AI damage calcs (#6396) Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- include/battle.h | 5 +- include/battle_ai_util.h | 27 ++- include/battle_script_commands.h | 1 + include/battle_util.h | 4 + include/config/ai.h | 4 + src/battle_ai_main.c | 60 +++--- src/battle_ai_switch_items.c | 17 +- src/battle_ai_util.c | 311 ++++++++++++++++++------------- src/battle_debug.c | 2 +- src/battle_script_commands.c | 4 - 10 files changed, 246 insertions(+), 189 deletions(-) diff --git a/include/battle.h b/include/battle.h index c9517b9b71..8342677484 100644 --- a/include/battle.h +++ b/include/battle.h @@ -335,8 +335,9 @@ struct SwitchinCandidate struct SimulatedDamage { - s32 expected; - s32 minimum; + u16 minimum; + u16 median; + u16 maximum; }; // Ai Data used when deciding which move to use, computed only once before each turn's start. diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 4855184fac..6d1f5a9ed4 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -15,6 +15,12 @@ enum DamageRollType DMG_ROLL_HIGHEST, }; +enum DamageCalcContext +{ + AI_DEFENDING, + AI_ATTACKING, +}; + enum AIPivot { DONT_PIVOT, @@ -25,7 +31,7 @@ enum AIPivot bool32 AI_IsFaster(u32 battlerAi, u32 battlerDef, u32 move); bool32 AI_IsSlower(u32 battlerAi, u32 battlerDef, u32 move); bool32 AI_RandLessThan(u32 val); -u32 GetDmgRollType(u32 battlerAtk); +u32 AI_GetDamage(u32 battlerAtk, u32 battlerDef, u32 moveIndex, enum DamageCalcContext calcContext, struct AiLogicData *aiData); bool32 IsAiVsAiBattle(void); bool32 BattlerHasAi(u32 battlerId); bool32 IsAiBattlerAware(u32 battlerId); @@ -50,8 +56,8 @@ bool32 IsBattlerTrapped(u32 battler, bool32 switching); s32 AI_WhoStrikesFirst(u32 battlerAI, u32 battler2, u32 moveConsidered); bool32 CanTargetFaintAi(u32 battlerDef, u32 battlerAtk); u32 NoOfHitsForTargetToFaintAI(u32 battlerDef, u32 battlerAtk); -u32 GetBestDmgMoveFromBattler(u32 battlerAtk, u32 battlerDef); -u32 GetBestDmgFromBattler(u32 battler, u32 battlerTarget); +u32 GetBestDmgMoveFromBattler(u32 battlerAtk, u32 battlerDef, enum DamageCalcContext calcContext); +u32 GetBestDmgFromBattler(u32 battler, u32 battlerTarget, enum DamageCalcContext calcContext); bool32 CanTargetMoveFaintAi(u32 move, u32 battlerDef, u32 battlerAtk, u32 nHits); bool32 CanTargetFaintAiWithMod(u32 battlerDef, u32 battlerAtk, s32 hpMod, s32 dmgMod); s32 AI_DecideKnownAbilityForTurn(u32 battlerId); @@ -59,7 +65,8 @@ u32 AI_DecideHoldEffectForTurn(u32 battlerId); bool32 DoesBattlerIgnoreAbilityChecks(u32 battlerAtk, u32 atkAbility, u32 move); u32 AI_GetWeather(void); bool32 CanAIFaintTarget(u32 battlerAtk, u32 battlerDef, u32 numHits); -bool32 CanIndexMoveFaintTarget(u32 battlerAtk, u32 battlerDef, u32 index, u32 numHits); +bool32 CanIndexMoveFaintTarget(u32 battlerAtk, u32 battlerDef, u32 index, enum DamageCalcContext calcContext); +bool32 CanIndexMoveGuaranteeFaintTarget(u32 battlerAtk, u32 battlerDef, u32 index); bool32 HasDamagingMove(u32 battlerId); bool32 HasDamagingMoveOfType(u32 battlerId, u32 type); u32 GetBattlerSecondaryDamage(u32 battlerId); @@ -69,7 +76,7 @@ bool32 ShouldTryOHKO(u32 battlerAtk, u32 battlerDef, u32 atkAbility, u32 defAbil bool32 ShouldUseRecoilMove(u32 battlerAtk, u32 battlerDef, u32 recoilDmg, u32 moveIndex); u32 GetBattlerSideSpeedAverage(u32 battler); bool32 ShouldAbsorb(u32 battlerAtk, u32 battlerDef, u32 move, s32 damage); -bool32 ShouldRecover(u32 battlerAtk, u32 battlerDef, u32 move, u32 healPercent); +bool32 ShouldRecover(u32 battlerAtk, u32 battlerDef, u32 move, u32 healPercent, enum DamageCalcContext calcContext); bool32 ShouldSetScreen(u32 battlerAtk, u32 battlerDef, u32 moveEffect); enum AIPivot ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 moveIndex); bool32 IsRecycleEncouragedItem(u32 item); @@ -101,13 +108,13 @@ bool32 ShouldLowerEvasion(u32 battlerAtk, u32 battlerDef, u32 defAbility); bool32 IsAffectedByPowder(u32 battler, u32 ability, u32 holdEffect); bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, u32 category); s32 AI_WhichMoveBetter(u32 move1, u32 move2, u32 battlerAtk, u32 battlerDef, s32 noOfHitsToKo); -struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, bool32 considerZPower, enum DamageRollType rollType); -struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, bool32 considerZPower, u32 weather, enum DamageRollType rollType); +struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, bool32 considerZPower); +struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, bool32 considerZPower, u32 weather); bool32 AI_IsDamagedByRecoil(u32 battler); u32 GetNoOfHitsToKO(u32 dmg, s32 hp); u32 GetNoOfHitsToKOBattlerDmg(u32 dmg, u32 battlerDef); -u32 GetNoOfHitsToKOBattler(u32 battlerAtk, u32 battlerDef, u32 moveIndex); -u32 GetCurrDamageHpPercent(u32 battlerAtk, u32 battlerDef); +u32 GetNoOfHitsToKOBattler(u32 battlerAtk, u32 battlerDef, u32 moveIndex, enum DamageCalcContext calcContext); +u32 GetCurrDamageHpPercent(u32 battlerAtk, u32 battlerDef, enum DamageCalcContext calcContext); uq4_12_t AI_GetMoveEffectiveness(u32 move, u32 battlerAtk, u32 battlerDef); u16 *GetMovesArray(u32 battler); bool32 IsConfusionMoveEffect(u32 moveEffect); @@ -210,7 +217,7 @@ void IncreaseSleepScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score); void IncreaseConfusionScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score); void IncreaseFrostbiteScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score); -s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct BattlePokemon switchinCandidate, bool32 isPartyMonAttacker, enum DamageRollType rollType); +s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct BattlePokemon switchinCandidate, bool32 isPartyMonAttacker); u32 AI_WhoStrikesFirstPartyMon(u32 battlerAtk, u32 battlerDef, struct BattlePokemon switchinCandidate, u32 moveConsidered); s32 AI_TryToClearStats(u32 battlerAtk, u32 battlerDef, bool32 isDoubleBattle); bool32 AI_ShouldCopyStatChanges(u32 battlerAtk, u32 battlerDef); diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h index cc6c09012c..1b72239d00 100644 --- a/include/battle_script_commands.h +++ b/include/battle_script_commands.h @@ -23,6 +23,7 @@ struct PickupItem }; s32 CalcCritChanceStage(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility, u32 abilityAtk, u32 abilityDef, u32 holdEffectAtk); +s32 CalcCritChanceStageGen1(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility, u32 abilityAtk, u32 abilityDef, u32 holdEffectAtk); s32 GetCritHitOdds(s32 critChanceIndex); u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, u32 atkAbility, u32 defAbility, u32 atkHoldEffect, u32 defHoldEffect); u8 GetBattlerTurnOrderNum(u8 battlerId); diff --git a/include/battle_util.h b/include/battle_util.h index 21ce76de40..37588d246d 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -96,6 +96,10 @@ enum ItemEffect #define DMG_ROLL_PERCENT_LO 85 #define DMG_ROLL_PERCENT_HI 100 +// Crit chance exceptions +#define CRITICAL_HIT_BLOCKED -1 +#define CRITICAL_HIT_ALWAYS -2 + // for Natural Gift and Fling struct TypePower { diff --git a/include/config/ai.h b/include/config/ai.h index 1fe0c822d2..b44fc46ba9 100644 --- a/include/config/ai.h +++ b/include/config/ai.h @@ -47,6 +47,10 @@ // AI held item-based move scoring #define LOW_ACCURACY_THRESHOLD 75 // Moves with accuracy equal OR below this value are considered low accuracy +// AI damage calc considerations +#define RISKY_AI_CRIT_STAGE_THRESHOLD 2 // Stat stages at which Risky will assume it gets a crit +#define RISKY_AI_CRIT_THRESHOLD_GEN_1 128 // "Stat stage" at which Risky will assume it gets a crit with gen 1 mechanics (this translates to an X / 255 % crit threshold) + // AI prediction chances #define PREDICT_SWITCH_CHANCE 50 diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index e04ca63e68..b95601f37d 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -413,7 +413,6 @@ static u32 Ai_SetMoveAccuracy(struct AiLogicData *aiData, u32 battlerAtk, u32 ba static void CalcBattlerAiMovesData(struct AiLogicData *aiData, u32 battlerAtk, u32 battlerDef, u32 weather) { u32 moveIndex, move; - u32 rollType = GetDmgRollType(battlerAtk); u16 *moves = GetMovesArray(battlerAtk); for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) @@ -427,7 +426,7 @@ static void CalcBattlerAiMovesData(struct AiLogicData *aiData, u32 battlerAtk, u //&& !IsBattleMoveStatus(move) /* we want to get effectiveness and accuracy of status moves */ && !(aiData->moveLimitations[battlerAtk] & (1u << moveIndex))) { - dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, TRUE, weather, rollType); + dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, TRUE, weather); aiData->moveAccuracy[battlerAtk][battlerDef][moveIndex] = Ai_SetMoveAccuracy(aiData, battlerAtk, battlerDef, move); } aiData->simulatedDmg[battlerAtk][battlerDef][moveIndex] = dmg; @@ -2734,8 +2733,10 @@ static s32 AI_TryToFaint(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (IsBattleMoveStatus(move)) return score; // status moves aren't accounted here - if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, movesetIndex, 0) && GetMoveEffect(move) != EFFECT_EXPLOSION) + if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, movesetIndex, AI_ATTACKING) && GetMoveEffect(move) != EFFECT_EXPLOSION) { + if (CanIndexMoveGuaranteeFaintTarget(battlerAtk, battlerDef, movesetIndex)) + ADJUST_SCORE(1); // Bonus point if the KO is guaranteed if (AI_IsFaster(battlerAtk, battlerDef, move)) ADJUST_SCORE(FAST_KILL); else @@ -2895,7 +2896,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (MoveAlwaysCrits(move) && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_ATK) && AI_IsFaster(battlerAtk, battlerAtkPartner, move) - && !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, 1)) + && !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, AI_ATTACKING)) { RETURN_SCORE_PLUS(GOOD_EFFECT); } @@ -2939,7 +2940,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } break; case ABILITY_WATER_COMPACTION: - if (moveType == TYPE_WATER && GetNoOfHitsToKOBattler(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex) >= 4) + if (moveType == TYPE_WATER && GetNoOfHitsToKOBattler(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, AI_ATTACKING) >= 4) { RETURN_SCORE_PLUS(WEAK_EFFECT); // only mon with this ability is weak to water so only make it okay if we do very little damage } @@ -2966,7 +2967,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) && !IsBattleMoveStatus(move) && HasMoveWithCategory(battlerAtkPartner, DAMAGE_CATEGORY_PHYSICAL) && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_ATK) - && !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, 1)) + && !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, AI_ATTACKING)) { RETURN_SCORE_PLUS(WEAK_EFFECT); } @@ -2975,7 +2976,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (!IsBattleMoveStatus(move) && (moveType == TYPE_DARK || moveType == TYPE_GHOST || moveType == TYPE_BUG) && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_SPEED) - && !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, 1)) + && !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, AI_ATTACKING)) { RETURN_SCORE_PLUS(WEAK_EFFECT); } @@ -3032,7 +3033,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) && !IsBattleMoveStatus(move) && HasMoveWithCategory(battlerAtkPartner, DAMAGE_CATEGORY_PHYSICAL) && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_ATK) - && !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, 0)) + && !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, AI_ATTACKING)) { RETURN_SCORE_PLUS(WEAK_EFFECT); } @@ -3180,7 +3181,7 @@ static s32 CompareMoveAccuracies(u32 battlerAtk, u32 battlerDef, u32 moveSlot1, static inline bool32 ShouldUseSpreadDamageMove(u32 battlerAtk, u32 move, u32 moveIndex, u32 hitsToFaintOpposingBattler) { u32 partnerBattler = BATTLE_PARTNER(battlerAtk); - u32 noOfHitsToFaintPartner = GetNoOfHitsToKOBattler(battlerAtk, partnerBattler, moveIndex); + u32 noOfHitsToFaintPartner = GetNoOfHitsToKOBattler(battlerAtk, partnerBattler, moveIndex, AI_ATTACKING); return (IsDoubleBattle() && noOfHitsToFaintPartner != 0 // Immunity check && IsBattlerAlive(partnerBattler) @@ -3205,7 +3206,7 @@ static s32 AI_CompareDamagingMoves(u32 battlerAtk, u32 battlerDef, u32 currId) { if (moves[i] != MOVE_NONE && GetMovePower(moves[i]) != 0) { - noOfHits[i] = GetNoOfHitsToKOBattler(battlerAtk, battlerDef, i); + noOfHits[i] = GetNoOfHitsToKOBattler(battlerAtk, battlerDef, i, AI_ATTACKING); if (ShouldUseSpreadDamageMove(battlerAtk,moves[i], i, noOfHits[i])) { noOfHits[i] = -1; @@ -3225,9 +3226,6 @@ static s32 AI_CompareDamagingMoves(u32 battlerAtk, u32 battlerDef, u32 currId) viableMoveScores[i] = 0; isTwoTurnNotSemiInvulnerableMove[i] = FALSE; } - /* - Test_MgbaPrintf("%S: required hits: %d Dmg: %d", gMoveNames[moves[i]], noOfHits[i], AI_DATA->simulatedDmg[battlerAtk][battlerDef][i]); - */ } // Priority list: @@ -3581,7 +3579,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) break; } - if (ShouldRecover(battlerAtk, battlerDef, move, healPercent)) + if (ShouldRecover(battlerAtk, battlerDef, move, healPercent, AI_DEFENDING)) ADJUST_SCORE(DECENT_EFFECT); } break; @@ -3591,7 +3589,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case EFFECT_MORNING_SUN: case EFFECT_SYNTHESIS: case EFFECT_MOONLIGHT: - if (ShouldRecover(battlerAtk, battlerDef, move, 50)) + if (ShouldRecover(battlerAtk, battlerDef, move, 50, AI_DEFENDING)) ADJUST_SCORE(GOOD_EFFECT); break; case EFFECT_TOXIC: @@ -3613,7 +3611,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) { break; } - else if (ShouldRecover(battlerAtk, battlerDef, move, 100)) + else if (ShouldRecover(battlerAtk, battlerDef, move, 100, AI_DEFENDING)) { if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_CURE_SLP || aiData->holdEffects[battlerAtk] == HOLD_EFFECT_CURE_STATUS @@ -3933,7 +3931,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case EFFECT_FELL_STINGER: if (gBattleMons[battlerAtk].statStages[STAT_ATK] < MAX_STAT_STAGE && aiData->abilities[battlerAtk] != ABILITY_CONTRARY - && CanIndexMoveFaintTarget(battlerAtk, battlerDef, movesetIndex, 0)) + && CanIndexMoveFaintTarget(battlerAtk, battlerDef, movesetIndex, AI_ATTACKING)) ADJUST_SCORE(BEST_EFFECT); break; case EFFECT_BELLY_DRUM: @@ -3965,7 +3963,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case EFFECT_FIRST_TURN_ONLY: if (ShouldFakeOut(battlerAtk, battlerDef, move) && MoveHasAdditionalEffectWithChance(move, MOVE_EFFECT_FLINCH, 100)) ADJUST_SCORE(GOOD_EFFECT); - else if (gDisableStructs[battlerAtk].isFirstTurn && GetBestDmgMoveFromBattler(battlerAtk, battlerDef) == move) + else if (gDisableStructs[battlerAtk].isFirstTurn && GetBestDmgMoveFromBattler(battlerAtk, battlerDef, AI_ATTACKING) == move) ADJUST_SCORE(BEST_EFFECT); break; case EFFECT_STOCKPILE: @@ -4538,20 +4536,20 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) break; case EFFECT_COUNTER: if ((!IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef]) && predictedMove != MOVE_NONE) - && (GetNoOfHitsToKOBattler(battlerDef, battlerAtk, predictedMoveSlot) >= 2) + && (GetNoOfHitsToKOBattler(battlerDef, battlerAtk, predictedMoveSlot, AI_DEFENDING) >= 2) && (GetBattleMoveCategory(predictedMove) == DAMAGE_CATEGORY_PHYSICAL)) ADJUST_SCORE(GOOD_EFFECT); break; case EFFECT_MIRROR_COAT: if ((!IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef]) && predictedMove != MOVE_NONE) - && (GetNoOfHitsToKOBattler(battlerDef, battlerAtk, predictedMoveSlot) >= 2) + && (GetNoOfHitsToKOBattler(battlerDef, battlerAtk, predictedMoveSlot, AI_DEFENDING) >= 2) && (GetBattleMoveCategory(predictedMove) == DAMAGE_CATEGORY_SPECIAL)) ADJUST_SCORE(GOOD_EFFECT); break; case EFFECT_SHORE_UP: - if ((AI_GetWeather() & B_WEATHER_SANDSTORM) && ShouldRecover(battlerAtk, battlerDef, move, 67)) + if ((AI_GetWeather() & B_WEATHER_SANDSTORM) && ShouldRecover(battlerAtk, battlerDef, move, 67, AI_DEFENDING)) ADJUST_SCORE(DECENT_EFFECT); - else if (ShouldRecover(battlerAtk, battlerDef, move, 50)) + else if (ShouldRecover(battlerAtk, battlerDef, move, 50, AI_DEFENDING)) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_ENDEAVOR: @@ -4577,8 +4575,8 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) //case EFFECT_SKY_DROP //break; case EFFECT_JUNGLE_HEALING: - if (ShouldRecover(battlerAtk, battlerDef, move, 25) - || ShouldRecover(BATTLE_PARTNER(battlerAtk), battlerDef, move, 25) + if (ShouldRecover(battlerAtk, battlerDef, move, 25, AI_DEFENDING) + || ShouldRecover(BATTLE_PARTNER(battlerAtk), battlerDef, move, 25, AI_DEFENDING) || gBattleMons[battlerAtk].status1 & STATUS1_ANY || gBattleMons[BATTLE_PARTNER(battlerAtk)].status1 & STATUS1_ANY) ADJUST_SCORE(GOOD_EFFECT); @@ -4816,7 +4814,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(GOOD_EFFECT); break; case MOVE_EFFECT_THROAT_CHOP: - if (IsSoundMove(GetBestDmgMoveFromBattler(battlerDef, battlerAtk))) + if (IsSoundMove(GetBestDmgMoveFromBattler(battlerDef, battlerAtk, AI_DEFENDING))) { if (AI_IsFaster(battlerAtk, battlerDef, move)) ADJUST_SCORE(GOOD_EFFECT); @@ -4849,12 +4847,12 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score if (GetMovePower(move) != 0) { - if (GetNoOfHitsToKOBattler(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex) == 0) + if (GetNoOfHitsToKOBattler(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, AI_ATTACKING) == 0) ADJUST_AND_RETURN_SCORE(NO_DAMAGE_OR_FAILS); // No point in checking the move further so return early else { if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & (AI_FLAG_RISKY | AI_FLAG_PREFER_HIGHEST_DAMAGE_MOVE) - && GetBestDmgMoveFromBattler(battlerAtk, battlerDef) == move) + && GetBestDmgMoveFromBattler(battlerAtk, battlerDef, AI_ATTACKING) == move) ADJUST_SCORE(BEST_DAMAGE_MOVE); else ADJUST_SCORE(AI_CompareDamagingMoves(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex)); @@ -5078,9 +5076,9 @@ static s32 AI_TryTo2HKO(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) return score; - if (GetNoOfHitsToKOBattler(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex) == 1) + if (GetNoOfHitsToKOBattler(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, AI_ATTACKING) == 1) ADJUST_SCORE(BEST_EFFECT); - else if (GetNoOfHitsToKOBattler(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex) == 2) + else if (GetNoOfHitsToKOBattler(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, AI_ATTACKING) == 2) ADJUST_SCORE(DECENT_EFFECT); return score; @@ -5256,7 +5254,7 @@ static s32 AI_HPAware(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } // consider target HP - if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, 0)) + if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, AI_ATTACKING)) { ADJUST_SCORE(DECENT_EFFECT); } @@ -5437,7 +5435,7 @@ static s32 AI_PredictSwitch(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { case EFFECT_PURSUIT: { - u32 hitsToKO = GetNoOfHitsToKOBattler(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex); + u32 hitsToKO = GetNoOfHitsToKOBattler(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, AI_ATTACKING); if (hitsToKO == 2) ADJUST_SCORE(GOOD_EFFECT); else if (hitsToKO == 1) diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index c468bf6210..466f6c5cdf 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -220,7 +220,7 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler) hasSuperEffectiveMove = TRUE; // Get maximum damage mon can deal - damageDealt = AI_DATA->simulatedDmg[battler][opposingBattler][i].expected; + damageDealt = AI_GetDamage(battler, opposingBattler, i, AI_ATTACKING, AI_DATA); if(damageDealt > maxDamageDealt) { maxDamageDealt = damageDealt; @@ -248,7 +248,7 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler) playerMove = gBattleMons[opposingBattler].moves[i]; if (playerMove != MOVE_NONE && !IsBattleMoveStatus(playerMove) && GetMoveEffect(playerMove) != EFFECT_FOCUS_PUNCH) { - damageTaken = AI_CalcDamage(playerMove, opposingBattler, battler, &effectiveness, FALSE, weather, DMG_ROLL_HIGHEST).expected; + damageTaken = AI_CalcDamage(playerMove, opposingBattler, battler, &effectiveness, FALSE, weather).median; if (playerMove == gBattleStruct->choicedMove[opposingBattler]) // If player is choiced, only care about the choice locked move { return maxDamageTaken = damageTaken; @@ -454,7 +454,7 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler) // Only check damage if it's a damaging move if (!IsBattleMoveStatus(aiMove)) { - if (AI_DATA->simulatedDmg[battler][opposingBattler][i].expected > gBattleMons[opposingBattler].hp) + if (AI_GetDamage(battler, opposingBattler, i, AI_ATTACKING, AI_DATA) > gBattleMons[opposingBattler].hp) return FALSE; } } @@ -1355,7 +1355,6 @@ static u32 GetBestMonDmg(struct Pokemon *party, int firstId, int lastId, u8 inva int i, j; int dmg, bestDmg = 0; int bestMonId = PARTY_SIZE; - u32 rollType = GetDmgRollType(battler); u32 aiMove; @@ -1371,7 +1370,7 @@ static u32 GetBestMonDmg(struct Pokemon *party, int firstId, int lastId, u8 inva if (aiMove != MOVE_NONE && !IsBattleMoveStatus(aiMove)) { aiMove = GetMonData(&party[i], MON_DATA_MOVE1 + j); - dmg = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, rollType); + dmg = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE); if (bestDmg < dmg) { bestDmg = dmg; @@ -1826,7 +1825,7 @@ static s32 GetMaxDamagePlayerCouldDealToSwitchin(u32 battler, u32 opposingBattle playerMove = gBattleMons[opposingBattler].moves[i]; if (playerMove != MOVE_NONE && !IsBattleMoveStatus(playerMove) && GetMoveEffect(playerMove) != EFFECT_FOCUS_PUNCH) { - damageTaken = AI_CalcPartyMonDamage(playerMove, opposingBattler, battler, battleMon, FALSE, DMG_ROLL_HIGHEST); + damageTaken = AI_CalcPartyMonDamage(playerMove, opposingBattler, battler, battleMon, FALSE); if (playerMove == gBattleStruct->choicedMove[opposingBattler]) // If player is choiced, only care about the choice locked move return damageTaken; if (damageTaken > maxDamageTaken) @@ -1959,9 +1958,9 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, if (aiMove != MOVE_NONE && !IsBattleMoveStatus(aiMove)) { if (AI_THINKING_STRUCT->aiFlags[GetThinkingBattler(battler)] & AI_FLAG_CONSERVATIVE) - damageDealt = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_LOWEST); + damageDealt = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE); else - damageDealt = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_DEFAULT); + damageDealt = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE); } // Offensive switchin decisions are based on which whether switchin moves first and whether it can win a 1v1 @@ -2208,7 +2207,7 @@ static bool32 AiExpectsToFaintPlayer(u32 battler) return FALSE; // AI not planning to use move if (GetBattlerSide(target) != GetBattlerSide(battler) - && CanIndexMoveFaintTarget(battler, target, gBattleStruct->aiMoveOrAction[battler], 0) + && CanIndexMoveFaintTarget(battler, target, gBattleStruct->aiMoveOrAction[battler], AI_ATTACKING) && AI_IsFaster(battler, target, GetAIChosenMove(battler))) { // We expect to faint the target and move first -> dont use an item diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 2bafe83d22..77cd3cc4ac 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -24,14 +24,29 @@ #include "constants/items.h" // Functions -u32 GetDmgRollType(u32 battlerAtk) +u32 AI_GetDamage(u32 battlerAtk, u32 battlerDef, u32 moveIndex, enum DamageCalcContext calcContext, struct AiLogicData *aiData) { - if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_RISKY) - return DMG_ROLL_HIGHEST; - if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_CONSERVATIVE) - return DMG_ROLL_LOWEST; + if (calcContext == AI_ATTACKING && BattlerHasAi(battlerAtk)) + { - return DMG_ROLL_DEFAULT; + if ((AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_RISKY) && !(AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_CONSERVATIVE)) // Risky assumes it deals max damage + return aiData->simulatedDmg[battlerAtk][battlerDef][moveIndex].maximum; + if ((AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_CONSERVATIVE) && !(AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_RISKY)) // Conservative assumes it deals min damage + return aiData->simulatedDmg[battlerAtk][battlerDef][moveIndex].minimum; + return aiData->simulatedDmg[battlerAtk][battlerDef][moveIndex].median; // Default assumes it deals median damage + } + else if (calcContext == AI_DEFENDING && BattlerHasAi(battlerDef)) + { + if ((AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_RISKY) && !(AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_CONSERVATIVE)) // Risky assumes it takes min damage + return aiData->simulatedDmg[battlerAtk][battlerDef][moveIndex].minimum; + if ((AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_CONSERVATIVE) && !(AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_RISKY)) // Conservative assumes it takes max damage + return aiData->simulatedDmg[battlerAtk][battlerDef][moveIndex].maximum; + return aiData->simulatedDmg[battlerAtk][battlerDef][moveIndex].median; // Default assumes it takes median damage + } + else + { + return aiData->simulatedDmg[battlerAtk][battlerDef][moveIndex].median; + } } bool32 AI_IsFaster(u32 battlerAi, u32 battlerDef, u32 move) @@ -385,7 +400,7 @@ bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, u32 category) } // To save computation time this function has 2 variants. One saves, sets and restores battlers, while the other doesn't. -struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, bool32 considerZPower, enum DamageRollType rollType) +struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, bool32 considerZPower) { struct SimulatedDamage dmg; @@ -393,7 +408,7 @@ struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 b SaveBattlerData(battlerDef); SetBattlerData(battlerAtk); SetBattlerData(battlerDef); - dmg = AI_CalcDamage(move, battlerAtk, battlerDef, typeEffectiveness, considerZPower, AI_GetWeather(), rollType); + dmg = AI_CalcDamage(move, battlerAtk, battlerDef, typeEffectiveness, considerZPower, AI_GetWeather()); RestoreBattlerData(battlerAtk); RestoreBattlerData(battlerDef); return dmg; @@ -538,58 +553,63 @@ static inline void AI_RestoreBattlerTypes(u32 battlerAtk, u32 *types) gBattleMons[battlerAtk].types[2] = types[2]; } -static inline void CalcDynamicMoveDamage(struct DamageCalculationData *damageCalcData, s32 *expectedDamage, s32 *minimumDamage, u32 holdEffectAtk, u32 abilityAtk) +static inline void CalcDynamicMoveDamage(struct DamageCalculationData *damageCalcData, u16 *medianDamage, u16 *minimumDamage, u16 *maximumDamage, u32 holdEffectAtk, u32 abilityAtk) { u32 move = damageCalcData->move; u32 effect = GetMoveEffect(move); - s32 expected = *expectedDamage; - s32 minimum = *minimumDamage; + u16 median = *medianDamage; + u16 minimum = *minimumDamage; + u16 maximum = *maximumDamage; switch (effect) { case EFFECT_LEVEL_DAMAGE: - expected = minimum = gBattleMons[damageCalcData->battlerAtk].level * (abilityAtk == ABILITY_PARENTAL_BOND ? 2 : 1); + median = maximum = minimum = gBattleMons[damageCalcData->battlerAtk].level * (abilityAtk == ABILITY_PARENTAL_BOND ? 2 : 1); break; case EFFECT_PSYWAVE: - expected = minimum = gBattleMons[damageCalcData->battlerAtk].level * (abilityAtk == ABILITY_PARENTAL_BOND ? 2 : 1); + median = maximum = minimum = gBattleMons[damageCalcData->battlerAtk].level * (abilityAtk == ABILITY_PARENTAL_BOND ? 2 : 1); break; case EFFECT_FIXED_DAMAGE_ARG: - expected = minimum = GetMoveFixedDamage(move) * (abilityAtk == ABILITY_PARENTAL_BOND ? 2 : 1); + median = maximum = minimum = GetMoveFixedDamage(move) * (abilityAtk == ABILITY_PARENTAL_BOND ? 2 : 1); break; case EFFECT_MULTI_HIT: if (move == MOVE_WATER_SHURIKEN && gBattleMons[damageCalcData->battlerAtk].species == SPECIES_GRENINJA_ASH) { - expected *= 3; + median *= 3; minimum *= 3; + maximum *= 3; } else if (abilityAtk == ABILITY_SKILL_LINK) { - expected *= 5; + median *= 5; minimum *= 5; + maximum *= 5; } else if (holdEffectAtk == HOLD_EFFECT_LOADED_DICE) { - expected *= 9; - expected /= 2; + median *= 9; + median /= 2; minimum *= 4; + maximum *= 5; } else { - expected *= 3; + median *= 3; minimum *= 2; + maximum *= 5; } break; case EFFECT_ENDEAVOR: // If target has less HP than user, Endeavor does no damage - expected = minimum = max(0, gBattleMons[damageCalcData->battlerDef].hp - gBattleMons[damageCalcData->battlerAtk].hp); + median = maximum = minimum = max(0, gBattleMons[damageCalcData->battlerDef].hp - gBattleMons[damageCalcData->battlerAtk].hp); break; case EFFECT_SUPER_FANG: - expected = minimum = (abilityAtk == ABILITY_PARENTAL_BOND + median = maximum = minimum = (abilityAtk == ABILITY_PARENTAL_BOND ? max(2, gBattleMons[damageCalcData->battlerDef].hp * 3 / 4) : max(1, gBattleMons[damageCalcData->battlerDef].hp / 2)); break; case EFFECT_FINAL_GAMBIT: - expected = minimum = gBattleMons[damageCalcData->battlerAtk].hp; + median = maximum = minimum = gBattleMons[damageCalcData->battlerAtk].hp; break; case EFFECT_BEAT_UP: if (B_BEAT_UP >= GEN_5) @@ -598,10 +618,10 @@ static inline void CalcDynamicMoveDamage(struct DamageCalculationData *damageCal u32 i; gBattleStruct->beatUpSlot = 0; damageCalcData->isCrit = FALSE; - expected = 0; + median = 0; for (i = 0; i < partyCount; i++) - expected += CalculateMoveDamage(damageCalcData, 0); - minimum = expected; + median += CalculateMoveDamage(damageCalcData, 0); + maximum = minimum = median; gBattleStruct->beatUpSlot = 0; } break; @@ -611,20 +631,39 @@ static inline void CalcDynamicMoveDamage(struct DamageCalculationData *damageCal u32 strikeCount = GetMoveStrikeCount(move); if (strikeCount > 1 && effect != EFFECT_TRIPLE_KICK) { - expected *= strikeCount; + median *= strikeCount; minimum *= strikeCount; + maximum *= strikeCount; } - if (expected == 0) - expected = 1; + if (median == 0) + median = 1; if (minimum == 0) minimum = 1; + if (maximum == 0) + maximum = 1; - *expectedDamage = expected; + *medianDamage = median; *minimumDamage = minimum; + *maximumDamage = maximum; } -struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, bool32 considerZPower, u32 weather, enum DamageRollType rollType) +static inline bool32 ShouldCalcCritDamage(s32 critChanceIndex, u32 battlerAtk) +{ + if (critChanceIndex == CRITICAL_HIT_ALWAYS) + return TRUE; + if (critChanceIndex >= RISKY_AI_CRIT_STAGE_THRESHOLD // Not guaranteed but above Risky threshold + && (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_RISKY) + && GetGenConfig(GEN_CONFIG_CRIT_CHANCE) != GEN_1) + return TRUE; + if (critChanceIndex >= RISKY_AI_CRIT_THRESHOLD_GEN_1 // Not guaranteed but above Risky threshold + && (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_RISKY) + && GetGenConfig(GEN_CONFIG_CRIT_CHANCE) == GEN_1) + return TRUE; + return FALSE; +} + +struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, uq4_12_t *typeEffectiveness, bool32 considerZPower, u32 weather) { struct SimulatedDamage simDamage; s32 moveType; @@ -678,57 +717,40 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u damageCalcData.randomFactor = FALSE; damageCalcData.updateFlags = FALSE; - critChanceIndex = CalcCritChanceStage(battlerAtk, battlerDef, move, FALSE, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], aiData->holdEffects[battlerAtk]); - if (critChanceIndex > 1) // Consider crit damage only if a move has at least +2 crit chance + // Get crit chance + if (GetGenConfig(GEN_CONFIG_CRIT_CHANCE) == GEN_1) + critChanceIndex = CalcCritChanceStageGen1(battlerAtk, battlerDef, move, FALSE, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], aiData->holdEffects[battlerAtk]); + else + critChanceIndex = CalcCritChanceStage(battlerAtk, battlerDef, move, FALSE, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], aiData->holdEffects[battlerAtk]); + // Use crit damage + if (ShouldCalcCritDamage(critChanceIndex, battlerAtk)) { - damageCalcData.isCrit = FALSE; - s32 nonCritDmg = CalculateMoveDamageVars(&damageCalcData, fixedBasePower, - effectivenessMultiplier, weather, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); - - nonCritDmg = ApplyModifiersAfterDmgRoll(nonCritDmg, &damageCalcData, effectivenessMultiplier, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); - damageCalcData.isCrit = TRUE; s32 critDmg = CalculateMoveDamageVars(&damageCalcData, fixedBasePower, effectivenessMultiplier, weather, aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); - simDamage.expected = GetDamageByRollType(critDmg, rollType); - simDamage.expected = ApplyModifiersAfterDmgRoll(simDamage.expected, &damageCalcData, effectivenessMultiplier, + simDamage.minimum = GetDamageByRollType(critDmg, DMG_ROLL_LOWEST); + simDamage.minimum = ApplyModifiersAfterDmgRoll(simDamage.minimum, &damageCalcData, effectivenessMultiplier, aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); - simDamage.minimum = (GetCritHitOdds(critChanceIndex) == 1) ? LowestRollDmg(critDmg) : LowestRollDmg(nonCritDmg); - simDamage.minimum = ApplyModifiersAfterDmgRoll(simDamage.minimum, &damageCalcData, effectivenessMultiplier, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + simDamage.median = GetDamageByRollType(critDmg, DMG_ROLL_DEFAULT); + simDamage.median = ApplyModifiersAfterDmgRoll(simDamage.median, &damageCalcData, effectivenessMultiplier, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + + simDamage.maximum = GetDamageByRollType(critDmg, DMG_ROLL_HIGHEST); + simDamage.maximum = ApplyModifiersAfterDmgRoll(simDamage.maximum, &damageCalcData, effectivenessMultiplier, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); } - else if (critChanceIndex == -2) // Guaranteed critical - { - damageCalcData.isCrit = TRUE; - s32 critDmg = CalculateMoveDamageVars(&damageCalcData, fixedBasePower, - effectivenessMultiplier, weather, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); - simDamage.expected = GetDamageByRollType(critDmg, rollType); - simDamage.minimum = LowestRollDmg(critDmg); - - simDamage.expected = ApplyModifiersAfterDmgRoll(simDamage.expected, &damageCalcData, effectivenessMultiplier, - aiData->abilities[battlerAtk], aiData->abilities[battlerDef], - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef]); - - simDamage.minimum = ApplyModifiersAfterDmgRoll(simDamage.minimum, &damageCalcData, effectivenessMultiplier, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); - } + // Use non-crit damage else { - s32 nonCritDmg = 0; + s32 nonCritDmg = 0, tripleKickDmgMin = 0, tripleKickDmgDefault = 0, tripleKickDmgMax = 0; if (moveEffect == EFFECT_TRIPLE_KICK) { for (gMultiHitCounter = GetMoveStrikeCount(move); gMultiHitCounter > 0; gMultiHitCounter--) // The global is used to simulate actual damage done @@ -738,17 +760,24 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); - simDamage.expected = GetDamageByRollType(oneTripleKickHit, rollType); - simDamage.minimum = LowestRollDmg(oneTripleKickHit); - - nonCritDmg += ApplyModifiersAfterDmgRoll(simDamage.expected, &damageCalcData, effectivenessMultiplier, + simDamage.minimum = GetDamageByRollType(oneTripleKickHit, DMG_ROLL_LOWEST); + tripleKickDmgMin += ApplyModifiersAfterDmgRoll(simDamage.minimum, &damageCalcData, effectivenessMultiplier, aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); - nonCritDmg += ApplyModifiersAfterDmgRoll(simDamage.minimum, &damageCalcData, effectivenessMultiplier, + simDamage.median = GetDamageByRollType(oneTripleKickHit, DMG_ROLL_DEFAULT); + tripleKickDmgDefault += ApplyModifiersAfterDmgRoll(simDamage.median, &damageCalcData, effectivenessMultiplier, aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + + simDamage.maximum = GetDamageByRollType(oneTripleKickHit, DMG_ROLL_HIGHEST); + tripleKickDmgMax += ApplyModifiersAfterDmgRoll(simDamage.maximum, &damageCalcData, effectivenessMultiplier, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); } + simDamage.minimum = tripleKickDmgMin; + simDamage.median = tripleKickDmgDefault; + simDamage.maximum = tripleKickDmgMax; } else { @@ -757,24 +786,29 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); - simDamage.expected = GetDamageByRollType(nonCritDmg, rollType); - simDamage.minimum = LowestRollDmg(nonCritDmg); + simDamage.minimum = GetDamageByRollType(nonCritDmg, DMG_ROLL_LOWEST); + simDamage.minimum = ApplyModifiersAfterDmgRoll(simDamage.minimum, &damageCalcData, effectivenessMultiplier, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); - simDamage.expected = ApplyModifiersAfterDmgRoll(simDamage.expected, &damageCalcData, effectivenessMultiplier, + simDamage.median = GetDamageByRollType(nonCritDmg, DMG_ROLL_DEFAULT); + simDamage.median = ApplyModifiersAfterDmgRoll(simDamage.median, &damageCalcData, effectivenessMultiplier, aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); - simDamage.minimum = ApplyModifiersAfterDmgRoll(simDamage.minimum, &damageCalcData, effectivenessMultiplier, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + simDamage.maximum = GetDamageByRollType(nonCritDmg, DMG_ROLL_HIGHEST); + simDamage.maximum = ApplyModifiersAfterDmgRoll(simDamage.maximum, &damageCalcData, effectivenessMultiplier, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); } } if (GetActiveGimmick(battlerAtk) != GIMMICK_Z_MOVE) { CalcDynamicMoveDamage(&damageCalcData, - &simDamage.expected, + &simDamage.median, &simDamage.minimum, + &simDamage.maximum, aiData->holdEffects[battlerAtk], aiData->abilities[battlerAtk]); } @@ -783,8 +817,9 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u } else { - simDamage.expected = 0; simDamage.minimum = 0; + simDamage.median = 0; + simDamage.maximum = 0; } // convert multiper to AI_EFFECTIVENESS_xX @@ -1065,14 +1100,14 @@ u32 GetNoOfHitsToKOBattlerDmg(u32 dmg, u32 battlerDef) return GetNoOfHitsToKO(dmg, gBattleMons[battlerDef].hp); } -u32 GetNoOfHitsToKOBattler(u32 battlerAtk, u32 battlerDef, u32 moveIndex) +u32 GetNoOfHitsToKOBattler(u32 battlerAtk, u32 battlerDef, u32 moveIndex, enum DamageCalcContext calcContext) { - return GetNoOfHitsToKOBattlerDmg(AI_DATA->simulatedDmg[battlerAtk][battlerDef][moveIndex].expected, battlerDef); + return GetNoOfHitsToKOBattlerDmg(AI_GetDamage(battlerAtk, battlerDef, moveIndex, calcContext, AI_DATA), battlerDef); } -u32 GetCurrDamageHpPercent(u32 battlerAtk, u32 battlerDef) +u32 GetCurrDamageHpPercent(u32 battlerAtk, u32 battlerDef, enum DamageCalcContext calcContext) { - int bestDmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex].expected; + int bestDmg = AI_GetDamage(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, calcContext, AI_DATA); return (bestDmg * 100) / gBattleMons[battlerDef].maxHP; } @@ -1182,15 +1217,15 @@ static bool32 CanEndureHit(u32 battler, u32 battlerTarget, u32 move) // Check if target has means to faint ai mon. bool32 CanTargetFaintAi(u32 battlerDef, u32 battlerAtk) { - s32 i; + s32 moveIndex; u32 unusable = AI_DATA->moveLimitations[battlerDef]; u16 *moves = GetMovesArray(battlerDef); - for (i = 0; i < MAX_MON_MOVES; i++) + for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) { - if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && !(unusable & (1u << i)) - && AI_DATA->simulatedDmg[battlerDef][battlerAtk][i].expected >= gBattleMons[battlerAtk].hp - && !CanEndureHit(battlerDef, battlerAtk, moves[i])) + if (moves[moveIndex] != MOVE_NONE && moves[moveIndex] != MOVE_UNAVAILABLE && !(unusable & (1u << moveIndex)) + && AI_GetDamage(battlerDef, battlerAtk, moveIndex, AI_DEFENDING, AI_DATA) >= gBattleMons[battlerAtk].hp + && !CanEndureHit(battlerDef, battlerAtk, moves[moveIndex])) { return TRUE; } @@ -1207,7 +1242,7 @@ u32 NoOfHitsForTargetToFaintAI(u32 battlerDef, u32 battlerAtk) for (i = 0; i < MAX_MON_MOVES; i++) { - currNumberOfHits = GetNoOfHitsToKOBattler(battlerDef, battlerAtk, i); + currNumberOfHits = GetNoOfHitsToKOBattler(battlerDef, battlerAtk, i, AI_DEFENDING); if (currNumberOfHits != 0) { if (currNumberOfHits < leastNumberOfHits) @@ -1217,41 +1252,41 @@ u32 NoOfHitsForTargetToFaintAI(u32 battlerDef, u32 battlerAtk) return leastNumberOfHits; } -u32 GetBestDmgMoveFromBattler(u32 battlerAtk, u32 battlerDef) +u32 GetBestDmgMoveFromBattler(u32 battlerAtk, u32 battlerDef, enum DamageCalcContext calcContext) { - u32 i; + u32 moveIndex; u32 move = 0; u32 bestDmg = 0; u32 unusable = AI_DATA->moveLimitations[battlerAtk]; u16 *moves = GetMovesArray(battlerAtk); - for (i = 0; i < MAX_MON_MOVES; i++) + for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) { - if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && !(unusable & (1u << i)) - && bestDmg < AI_DATA->simulatedDmg[battlerAtk][battlerDef][i].expected) + if (moves[moveIndex] != MOVE_NONE && moves[moveIndex] != MOVE_UNAVAILABLE && !(unusable & (1u << moveIndex)) + && bestDmg < AI_GetDamage(battlerAtk, battlerDef, moveIndex, calcContext, AI_DATA)) { - bestDmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][i].expected; - move = moves[i]; + bestDmg = AI_GetDamage(battlerAtk, battlerDef, moveIndex, calcContext, AI_DATA); + move = moves[moveIndex]; } } return move; } -u32 GetBestDmgFromBattler(u32 battler, u32 battlerTarget) +u32 GetBestDmgFromBattler(u32 battler, u32 battlerTarget, enum DamageCalcContext calcContext) { - u32 i; + u32 moveIndex; u32 bestDmg = 0; u32 unusable = AI_DATA->moveLimitations[battler]; u16 *moves = GetMovesArray(battler); - for (i = 0; i < MAX_MON_MOVES; i++) + for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) { - if (moves[i] != MOVE_NONE - && moves[i] != MOVE_UNAVAILABLE - && !(unusable & (1u << i)) - && bestDmg < AI_DATA->simulatedDmg[battler][battlerTarget][i].expected) + if (moves[moveIndex] != MOVE_NONE + && moves[moveIndex] != MOVE_UNAVAILABLE + && !(unusable & (1u << moveIndex)) + && bestDmg < AI_GetDamage(battler, battlerTarget, moveIndex, calcContext, AI_DATA)) { - bestDmg = AI_DATA->simulatedDmg[battler][battlerTarget][i].expected; + bestDmg = AI_GetDamage(battler, battlerTarget, moveIndex, calcContext, AI_DATA); } } @@ -1262,16 +1297,16 @@ u32 GetBestDmgFromBattler(u32 battler, u32 battlerTarget) // If numHits > 1, check if the target will be KO'ed by that number of hits (ignoring healing effects) bool32 CanAIFaintTarget(u32 battlerAtk, u32 battlerDef, u32 numHits) { - s32 i, dmg; + s32 moveIndex, dmg; u32 moveLimitations = AI_DATA->moveLimitations[battlerAtk]; u16 *moves = gBattleMons[battlerAtk].moves; - for (i = 0; i < MAX_MON_MOVES; i++) + for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) { - if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && !(moveLimitations & (1u << i))) + if (moves[moveIndex] != MOVE_NONE && moves[moveIndex] != MOVE_UNAVAILABLE && !(moveLimitations & (1u << moveIndex))) { // Use the pre-calculated value in simulatedDmg instead of re-calculating it - dmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][i].expected; + dmg = AI_GetDamage(battlerAtk, battlerDef, moveIndex, AI_ATTACKING, AI_DATA); if (numHits) dmg *= numHits; @@ -1281,7 +1316,7 @@ bool32 CanAIFaintTarget(u32 battlerAtk, u32 battlerDef, u32 numHits) if (numHits > 1) return TRUE; - if (!CanEndureHit(battlerAtk, battlerDef, moves[i])) + if (!CanEndureHit(battlerAtk, battlerDef, moves[moveIndex])) return TRUE; } } @@ -1295,7 +1330,7 @@ bool32 CanTargetMoveFaintAi(u32 move, u32 battlerDef, u32 battlerAtk, u32 nHits) u32 indexSlot = GetMoveSlot(GetMovesArray(battlerDef), move); if (indexSlot < MAX_MON_MOVES) { - if (GetNoOfHitsToKO(AI_DATA->simulatedDmg[battlerDef][battlerAtk][indexSlot].expected, gBattleMons[battlerAtk].hp) <= nHits) + if (GetNoOfHitsToKO(AI_GetDamage(battlerDef, battlerAtk, indexSlot, AI_DEFENDING, AI_DATA), gBattleMons[battlerAtk].hp) <= nHits) return TRUE; } return FALSE; @@ -1304,7 +1339,7 @@ bool32 CanTargetMoveFaintAi(u32 move, u32 battlerDef, u32 battlerAtk, u32 nHits) // Check if target has means to faint ai mon after modding hp/dmg bool32 CanTargetFaintAiWithMod(u32 battlerDef, u32 battlerAtk, s32 hpMod, s32 dmgMod) { - u32 i; + u32 moveIndex; u32 unusable = AI_DATA->moveLimitations[battlerDef]; s32 dmg; u16 *moves = gBattleResources->battleHistory->usedMoves[battlerDef]; @@ -1313,13 +1348,13 @@ bool32 CanTargetFaintAiWithMod(u32 battlerDef, u32 battlerAtk, s32 hpMod, s32 dm if (hpCheck > gBattleMons[battlerAtk].maxHP) hpCheck = gBattleMons[battlerAtk].maxHP; - for (i = 0; i < MAX_MON_MOVES; i++) + for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) { - dmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][i].expected; + dmg = AI_GetDamage(battlerAtk, battlerDef, moveIndex, AI_DEFENDING, AI_DATA); if (dmgMod) dmg *= dmgMod; - if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && !(unusable & (1u << i)) && dmg >= hpCheck) + if (moves[moveIndex] != MOVE_NONE && moves[moveIndex] != MOVE_UNAVAILABLE && !(unusable & (1u << moveIndex)) && dmg >= hpCheck) { return TRUE; } @@ -2009,17 +2044,29 @@ bool32 ShouldLowerEvasion(u32 battlerAtk, u32 battlerDef, u32 defAbility) return FALSE; } -bool32 CanIndexMoveFaintTarget(u32 battlerAtk, u32 battlerDef, u32 index, u32 numHits) +bool32 CanIndexMoveFaintTarget(u32 battlerAtk, u32 battlerDef, u32 moveIndex, enum DamageCalcContext calcContext) { s32 dmg; u16 *moves = gBattleMons[battlerAtk].moves; - if (numHits) - dmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][index].expected * numHits; + if (IsDoubleBattle() && battlerDef == BATTLE_PARTNER(battlerAtk)) + dmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][moveIndex].maximum; // Attacking partner, be careful else - dmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][index].minimum; + dmg = AI_GetDamage(battlerAtk, battlerDef, moveIndex, calcContext, AI_DATA); - if (gBattleMons[battlerDef].hp <= dmg && !CanEndureHit(battlerAtk, battlerDef, moves[index])) + if (gBattleMons[battlerDef].hp <= dmg && !CanEndureHit(battlerAtk, battlerDef, moves[moveIndex])) + return TRUE; + return FALSE; +} + +bool32 CanIndexMoveGuaranteeFaintTarget(u32 battlerAtk, u32 battlerDef, u32 moveIndex) +{ + s32 dmg; + u16 *moves = gBattleMons[battlerAtk].moves; + + dmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][moveIndex].minimum; // Explictly care about guaranteed KOs universally + + if (gBattleMons[battlerDef].hp <= dmg && !CanEndureHit(battlerAtk, battlerDef, moves[moveIndex])) return TRUE; return FALSE; } @@ -3362,12 +3409,12 @@ bool32 ShouldAbsorb(u32 battlerAtk, u32 battlerDef, u32 move, s32 damage) return FALSE; } -bool32 ShouldRecover(u32 battlerAtk, u32 battlerDef, u32 move, u32 healPercent) +bool32 ShouldRecover(u32 battlerAtk, u32 battlerDef, u32 move, u32 healPercent, enum DamageCalcContext calcContext) { if (move == 0xFFFF || AI_IsFaster(battlerAtk, battlerDef, move)) { // using item or user going first - s32 damage = AI_DATA->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex].expected; + s32 damage = AI_GetDamage(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, calcContext, AI_DATA); s32 healAmount = (healPercent * damage) / 100; if (gStatuses3[battlerAtk] & STATUS3_HEAL_BLOCK) healAmount = 0; @@ -3612,7 +3659,7 @@ bool32 ShouldUseWishAromatherapy(u32 battlerAtk, u32 battlerDef, u32 move) switch (GetMoveEffect(move)) { case EFFECT_WISH: - return ShouldRecover(battlerAtk, battlerDef, move, 50); // Switch recovery isn't good idea in doubles + return ShouldRecover(battlerAtk, battlerDef, move, 50, AI_DEFENDING); // Switch recovery isn't good idea in doubles case EFFECT_HEAL_BELL: if (hasStatus) return TRUE; @@ -3638,7 +3685,7 @@ void FreeRestoreBattleMons(struct BattlePokemon *savedBattleMons) } // party logic -s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct BattlePokemon switchinCandidate, bool32 isPartyMonAttacker, enum DamageRollType rollType) +s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct BattlePokemon switchinCandidate, bool32 isPartyMonAttacker) { struct SimulatedDamage dmg; uq4_12_t effectiveness; @@ -3659,7 +3706,7 @@ s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct Battl AI_THINKING_STRUCT->saved[battlerAtk].saved = FALSE; } - dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, FALSE, AI_GetWeather(), rollType); + dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, FALSE, AI_GetWeather()); // restores original gBattleMon struct FreeRestoreBattleMons(savedBattleMons); @@ -3668,7 +3715,7 @@ s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct Battl else SetBattlerAiData(battlerDef, AI_DATA); - return dmg.expected; + return dmg.median; } u32 AI_WhoStrikesFirstPartyMon(u32 battlerAtk, u32 battlerDef, struct BattlePokemon switchinCandidate, u32 moveConsidered) @@ -4034,7 +4081,7 @@ void IncreaseBurnScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score) || (!(AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_OMNISCIENT) // Not Omniscient but expects physical attacker && gSpeciesInfo[gBattleMons[battlerDef].species].baseAttack >= gSpeciesInfo[gBattleMons[battlerDef].species].baseSpAttack + 10)) { - if (GetMoveCategory(GetBestDmgMoveFromBattler(battlerDef, battlerAtk)) == DAMAGE_CATEGORY_PHYSICAL) + if (GetMoveCategory(GetBestDmgMoveFromBattler(battlerDef, battlerAtk, AI_DEFENDING)) == DAMAGE_CATEGORY_PHYSICAL) ADJUST_SCORE_PTR(DECENT_EFFECT); else ADJUST_SCORE_PTR(WEAK_EFFECT); @@ -4070,7 +4117,7 @@ void IncreaseParalyzeScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score) void IncreaseSleepScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score) { - if (((AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0) && GetMoveEffect(GetBestDmgMoveFromBattler(battlerAtk, battlerDef)) != EFFECT_FOCUS_PUNCH) + if (((AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT) && CanAIFaintTarget(battlerAtk, battlerDef, 0) && GetMoveEffect(GetBestDmgMoveFromBattler(battlerAtk, battlerDef, AI_ATTACKING)) != EFFECT_FOCUS_PUNCH) || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_CURE_SLP || AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_CURE_STATUS) return; @@ -4118,7 +4165,7 @@ void IncreaseFrostbiteScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score || (!(AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_OMNISCIENT) // Not Omniscient but expects special attacker && gSpeciesInfo[gBattleMons[battlerDef].species].baseSpAttack >= gSpeciesInfo[gBattleMons[battlerDef].species].baseAttack + 10)) { - if (GetMoveCategory(GetBestDmgMoveFromBattler(battlerDef, battlerAtk)) == DAMAGE_CATEGORY_SPECIAL) + if (GetMoveCategory(GetBestDmgMoveFromBattler(battlerDef, battlerAtk, AI_DEFENDING)) == DAMAGE_CATEGORY_SPECIAL) ADJUST_SCORE_PTR(DECENT_EFFECT); else ADJUST_SCORE_PTR(WEAK_EFFECT); @@ -4168,7 +4215,7 @@ bool32 ShouldUseZMove(u32 battlerAtk, u32 battlerDef, u32 chosenMove) else if (!IsBattleMoveStatus(chosenMove) && IsBattleMoveStatus(zMove)) return FALSE; - dmg = AI_CalcDamageSaveBattlers(chosenMove, battlerAtk, battlerDef, &effectiveness, FALSE, DMG_ROLL_DEFAULT); + dmg = AI_CalcDamageSaveBattlers(chosenMove, battlerAtk, battlerDef, &effectiveness, FALSE); if (!IsBattleMoveStatus(chosenMove) && dmg.minimum >= gBattleMons[battlerDef].hp) return FALSE; // don't waste damaging z move if can otherwise faint target @@ -4299,13 +4346,13 @@ u32 IncreaseSubstituteMoveScore(u32 battlerAtk, u32 battlerDef, u32 move) u32 scoreIncrease = 0; if (effect == EFFECT_SUBSTITUTE) // Substitute specific { - if (HasAnyKnownMove(battlerDef) && GetBestDmgFromBattler(battlerDef, battlerAtk) < gBattleMons[battlerAtk].maxHP / 4) + if (HasAnyKnownMove(battlerDef) && GetBestDmgFromBattler(battlerDef, battlerAtk, AI_DEFENDING) < gBattleMons[battlerAtk].maxHP / 4) scoreIncrease += GOOD_EFFECT; } else if (effect == EFFECT_SHED_TAIL) // Shed Tail specific { if ((ShouldPivot(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_THINKING_STRUCT->movesetIndex)) - && (HasAnyKnownMove(battlerDef) && (GetBestDmgFromBattler(battlerDef, battlerAtk) < gBattleMons[battlerAtk].maxHP / 2))) + && (HasAnyKnownMove(battlerDef) && (GetBestDmgFromBattler(battlerDef, battlerAtk, AI_DEFENDING) < gBattleMons[battlerAtk].maxHP / 2))) scoreIncrease += BEST_EFFECT; } diff --git a/src/battle_debug.c b/src/battle_debug.c index 44a92b5f93..61635cc815 100644 --- a/src/battle_debug.c +++ b/src/battle_debug.c @@ -946,7 +946,7 @@ static void PutMovesPointsText(struct BattleDebugMenu *data) AddTextPrinterParameterized(data->aiMovesWindowId, FONT_NORMAL, text, 83 + count * 54, i * 15, 0, NULL); ConvertIntToDecimalStringN(text, - AI_DATA->simulatedDmg[data->aiBattlerId][battlerDef][i].expected, + AI_GetDamage(data->aiBattlerId, battlerDef, i, AI_ATTACKING, AI_DATA), STR_CONV_MODE_RIGHT_ALIGN, 3); AddTextPrinterParameterized(data->aiMovesWindowId, FONT_NORMAL, text, 110 + count * 54, i * 15, 0, NULL); diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index cfceeb9845..6c73329c8a 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1830,8 +1830,6 @@ static inline u32 GetHoldEffectCritChanceIncrease(u32 battler, u32 holdEffect) return critStageIncrease; } -#define CRITICAL_HIT_BLOCKED -1 -#define CRITICAL_HIT_ALWAYS -2 s32 CalcCritChanceStage(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordAbility, u32 abilityAtk, u32 abilityDef, u32 holdEffectAtk) { s32 critChance = 0; @@ -1940,8 +1938,6 @@ s32 GetCritHitOdds(s32 critChanceIndex) else return GetCriticalHitOdds(critChanceIndex); } -#undef CRITICAL_HIT_BLOCKED -#undef CRITICAL_HIT_ALWAYS static void Cmd_critcalc(void) { From a94b96a02f2b74840a63c82a0cb44787950565b4 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Sat, 8 Mar 2025 09:54:25 +0100 Subject: [PATCH 034/115] B_FAST_INTRO_PKMN_TEXT fix (#6395) Co-authored-by: Hedara --- src/battle_main.c | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/battle_main.c b/src/battle_main.c index 03c58f8bf4..3ccbcd6873 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3513,16 +3513,9 @@ static void DoBattleIntro(void) } if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - { gBattleStruct->introState++; - } else // Skip party summary since it is a wild battle. - { - if (B_FAST_INTRO_PKMN_TEXT == TRUE) - gBattleStruct->introState = BATTLE_INTRO_STATE_INTRO_TEXT; // Don't wait for sprite, print message at the same time. - else - gBattleStruct->introState++; // Wait for sprite to load. - } + gBattleStruct->introState = BATTLE_INTRO_STATE_INTRO_TEXT; break; case BATTLE_INTRO_STATE_DRAW_PARTY_SUMMARY: if (!gBattleControllerExecFlags) From 7eaaa1f8d44a099287a3b15933234c5929d67c68 Mon Sep 17 00:00:00 2001 From: cawtds <38510667+cawtds@users.noreply.github.com> Date: Sun, 9 Mar 2025 15:05:05 +0100 Subject: [PATCH 035/115] remove/replace IsAlly leftovers --- include/battle_util.h | 1 - src/battle_util.c | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/include/battle_util.h b/include/battle_util.h index 6b7fdef74a..21760a47a3 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -303,7 +303,6 @@ bool32 CanTargetBattler(u32 battlerAtk, u32 battlerDef, u16 move); void CopyMonLevelAndBaseStatsToBattleMon(u32 battler, struct Pokemon *mon); void CopyMonAbilityAndTypesToBattleMon(u32 battler, struct Pokemon *mon); void RecalcBattlerStats(u32 battler, struct Pokemon *mon, bool32 isDynamaxing); -bool32 IsAlly(u32 battlerAtk, u32 battlerDef); bool32 IsGen6ExpShareEnabled(void); bool32 MoveHasAdditionalEffect(u32 move, u32 moveEffect); bool32 MoveHasAdditionalEffectWithChance(u32 move, u32 moveEffect, u32 chance); diff --git a/src/battle_util.c b/src/battle_util.c index 4a7a0faf0e..0406bb42e3 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -274,7 +274,7 @@ bool32 HandleMoveTargetRedirection(void) for (battler = 0; battler < gBattlersCount; battler++) { ability = GetBattlerAbility(battler); - if ((B_REDIRECT_ABILITY_ALLIES >= GEN_4 || !IsAlly(gBattlerAttacker, battler)) + if ((B_REDIRECT_ABILITY_ALLIES >= GEN_4 || !IsBattlerAlly(gBattlerAttacker, battler)) && battler != gBattlerAttacker && gBattleStruct->moveTarget[gBattlerAttacker] != battler && ((ability == ABILITY_LIGHTNING_ROD && moveType == TYPE_ELECTRIC) From 3def0e751b6659738c7971788064401317135dcc Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sun, 9 Mar 2025 20:54:58 +0100 Subject: [PATCH 036/115] Fixes crash damage move against absorbing abilities (#6361) --- data/battle_scripts_1.s | 44 ++------------- include/battle.h | 2 +- include/battle_scripts.h | 2 +- include/constants/battle_script_commands.h | 12 ++-- src/battle_script_commands.c | 42 +++++++------- src/data/battle_move_effects.h | 2 +- test/battle/move_effect/recoil_if_miss.c | 65 ++++++++++++++++++++-- 7 files changed, 95 insertions(+), 74 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index aaa03f0ac6..f66a698eed 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -3429,51 +3429,15 @@ BattleScript_EffectSuperFang:: damagetohalftargethp goto BattleScript_HitFromAtkAnimation -BattleScript_EffectRecoilIfMiss:: - attackcanceler - accuracycheck BattleScript_MoveMissedDoDamage, ACC_CURR_MOVE -.if B_CRASH_IF_TARGET_IMMUNE >= GEN_4 - typecalc - jumpifmoveresultflags MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_MoveMissedDoDamage -.endif - goto BattleScript_HitFromAtkString -BattleScript_MoveMissedDoDamage:: - jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_PrintMoveMissed - attackstring - ppreduce - pause B_WAIT_TIME_LONG - resultmessage - waitmessage B_WAIT_TIME_LONG -.if B_CRASH_IF_TARGET_IMMUNE < GEN_4 - jumpifmoveresultflags MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_MoveEnd -.endif - moveendcase MOVEEND_PROTECT_LIKE_EFFECT @ Spiky Shield's damage happens before recoil. - jumpifhasnohp BS_ATTACKER, BattleScript_MoveEnd +BattleScript_RecoilIfMiss:: printstring STRINGID_PKMNCRASHED waitmessage B_WAIT_TIME_LONG - damagecalc - typecalc - adjustdamage -.if B_CRASH_IF_TARGET_IMMUNE == GEN_4 - manipulatedamage DMG_RECOIL_FROM_IMMUNE -.else - manipulatedamage DMG_RECOIL_FROM_MISS -.endif -.if B_CRASH_IF_TARGET_IMMUNE >= GEN_4 - clearmoveresultflags MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE -.else - clearmoveresultflags MOVE_RESULT_MISSED -.endif - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE + jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_RecoilEnd + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_IGNORE_DISGUISE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER tryfaintmon BS_ATTACKER -.if B_CRASH_IF_TARGET_IMMUNE >= GEN_4 - setmoveresultflags MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE -.else - setmoveresultflags MOVE_RESULT_MISSED -.endif - goto BattleScript_MoveEnd + return BattleScript_EffectMist:: attackcanceler diff --git a/include/battle.h b/include/battle.h index c9517b9b71..a6ba6d92e5 100644 --- a/include/battle.h +++ b/include/battle.h @@ -830,7 +830,7 @@ struct BattleStruct u8 printedStrongWindsWeakenedAttack:1; u8 numSpreadTargets:2; u8 bypassMoldBreakerChecks:1; // for ABILITYEFFECT_IMMUNITY - u8 padding3:1; + u8 noTargetPresent:1; u8 usedEjectItem; u8 usedMicleBerry; struct MessageStatus slideMessageStatus; diff --git a/include/battle_scripts.h b/include/battle_scripts.h index ffa18d0343..f67ab67ec9 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -597,7 +597,7 @@ extern const u8 BattleScript_EffectOHKO[]; extern const u8 BattleScript_EffectSuperFang[]; extern const u8 BattleScript_EffectFixedDamageArg[]; extern const u8 BattleScript_EffectHealBlock[]; -extern const u8 BattleScript_EffectRecoilIfMiss[]; +extern const u8 BattleScript_RecoilIfMiss[]; extern const u8 BattleScript_EffectMist[]; extern const u8 BattleScript_EffectFocusEnergy[]; extern const u8 BattleScript_EffectConfuse[]; diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 2aa5799a9e..1b302a4347 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -219,13 +219,11 @@ enum CmdVarious // Cmd_manipulatedamage #define DMG_CHANGE_SIGN 1 -#define DMG_RECOIL_FROM_MISS 2 -#define DMG_DOUBLED 3 -#define DMG_1_8_TARGET_HP 4 -#define DMG_FULL_ATTACKER_HP 5 -#define DMG_CURR_ATTACKER_HP 6 -#define DMG_BIG_ROOT 7 -#define DMG_RECOIL_FROM_IMMUNE 8 // Used to calculate recoil for the Gen 4 version of Jump Kick +#define DMG_DOUBLED 2 +#define DMG_1_8_TARGET_HP 3 +#define DMG_FULL_ATTACKER_HP 4 +#define DMG_CURR_ATTACKER_HP 5 +#define DMG_BIG_ROOT 6 // Cmd_jumpifcantswitch #define SWITCH_IGNORE_ESCAPE_PREVENTION (1 << 7) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 0742c79aab..4db25d4743 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1216,6 +1216,8 @@ static void Cmd_attackcanceler(void) && (!gBattleMoveEffects[effect].twoTurnEffect || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS))) || (IsMoveNotAllowedInSkyBattles(gCurrentMove))) { + gBattleStruct->noTargetPresent = TRUE; + if (effect == EFFECT_FLING) // Edge case for removing a mon's item when there is no target available after using Fling. gBattlescriptCurrInstr = BattleScript_FlingFailConsumeItem; else @@ -6360,6 +6362,25 @@ static void Cmd_moveend(void) gBattleScripting.moveendState++; break; } + else if (gMovesInfo[gCurrentMove].effect == EFFECT_RECOIL_IF_MISS + && (!IsBattlerTurnDamaged(gBattlerTarget) || gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) + && !gBattleStruct->noTargetPresent + && IsBattlerAlive(gBattlerAttacker)) + { + if (B_RECOIL_IF_MISS_DMG >= GEN_5 || (B_CRASH_IF_TARGET_IMMUNE == GEN_4 && gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_DOESNT_AFFECT_FOE)) + gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerAttacker) / 2; + else if (B_RECOIL_IF_MISS_DMG == GEN_4 && (GetNonDynamaxMaxHP(gBattlerTarget) / 2) < gBattleStruct->moveDamage[gBattlerTarget]) + gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerTarget) / 2; + else // Fallback if B_RECOIL_IF_MISS_DMG is set to gen3 or lower. + gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerTarget) / 2; + + if (gBattleStruct->moveDamage[gBattlerAttacker] == 0) + gBattleStruct->moveDamage[gBattlerAttacker] = 1; + + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_RecoilIfMiss; + effect = TRUE; + } else if (moveRecoil > 0 && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && IsBattlerAlive(gBattlerAttacker) @@ -7253,6 +7274,7 @@ static void Cmd_moveend(void) gBattleStruct->fickleBeamBoosted = FALSE; gBattleStruct->redCardActivates = FALSE; gBattleStruct->battlerState[gBattlerAttacker].usedMicleBerry = FALSE; + gBattleStruct->noTargetPresent = FALSE; if (gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) gBattleStruct->pledgeMove = FALSE; if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE) @@ -11925,23 +11947,6 @@ static void Cmd_manipulatedamage(void) case DMG_CHANGE_SIGN: gBattleStruct->moveDamage[gBattlerAttacker] *= -1; break; - case DMG_RECOIL_FROM_MISS: - if (B_RECOIL_IF_MISS_DMG >= GEN_5) - { - gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerAttacker) / 2; - } - else if (B_RECOIL_IF_MISS_DMG == GEN_4) - { - if ((gBattleMons[gBattlerTarget].maxHP / 2) < gBattleStruct->moveDamage[gBattlerTarget]) - gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerTarget) / 2; - } - else - { - gBattleStruct->moveDamage[gBattlerAttacker] = gBattleStruct->moveDamage[gBattlerTarget] /= 2; - } - if (gBattleStruct->moveDamage[gBattlerAttacker] == 0) - gBattleStruct->moveDamage[gBattlerAttacker] = 1; - break; case DMG_DOUBLED: gBattleStruct->moveDamage[gBattlerTarget] *= 2; break; @@ -11959,9 +11964,6 @@ static void Cmd_manipulatedamage(void) case DMG_CURR_ATTACKER_HP: gBattleStruct->moveDamage[gBattlerTarget] = GetNonDynamaxHP(gBattlerAttacker); break; - case DMG_RECOIL_FROM_IMMUNE: - gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerTarget) / 2; - break; } gBattlescriptCurrInstr = cmd->nextInstr; diff --git a/src/data/battle_move_effects.h b/src/data/battle_move_effects.h index e2970afcaf..d5b3d5dc54 100644 --- a/src/data/battle_move_effects.h +++ b/src/data/battle_move_effects.h @@ -238,7 +238,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_RECOIL_IF_MISS] = { - .battleScript = BattleScript_EffectRecoilIfMiss, + .battleScript = BattleScript_EffectHit, .battleTvScore = 1, }, diff --git a/test/battle/move_effect/recoil_if_miss.c b/test/battle/move_effect/recoil_if_miss.c index 8695156dd0..0b65eb8541 100644 --- a/test/battle/move_effect/recoil_if_miss.c +++ b/test/battle/move_effect/recoil_if_miss.c @@ -6,7 +6,7 @@ ASSUMPTIONS ASSUME(GetMoveEffect(MOVE_JUMP_KICK) == EFFECT_RECOIL_IF_MISS); } -SINGLE_BATTLE_TEST("Jump Kick has 50% recoil on miss") +SINGLE_BATTLE_TEST("Recoil if miss: Jump Kick has 50% recoil on miss") { GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Jump Kick has 50% recoil on miss") } } -SINGLE_BATTLE_TEST("Jump Kick has 50% recoil on protect") +SINGLE_BATTLE_TEST("Recoil if miss: Jump Kick has 50% recoil on protect") { GIVEN { ASSUME(!MoveIgnoresProtect(MOVE_JUMP_KICK)); @@ -38,7 +38,7 @@ SINGLE_BATTLE_TEST("Jump Kick has 50% recoil on protect") } } -SINGLE_BATTLE_TEST("Jump Kick has no recoil if no target") +SINGLE_BATTLE_TEST("Recoil if miss: Jump Kick has no recoil if no target") { GIVEN { ASSUME(B_HEALING_WISH_SWITCH >= GEN_5); @@ -54,7 +54,7 @@ SINGLE_BATTLE_TEST("Jump Kick has no recoil if no target") } } -SINGLE_BATTLE_TEST("Jump Kick's recoil happens after Spiky Shield damage and Pokemon can faint from either of these") +SINGLE_BATTLE_TEST("Recoil if miss: Jump Kick's recoil happens after Spiky Shield damage and Pokemon can faint from either of these") { s16 hp, maxHp = 256; bool32 faintOnSpiky = FALSE, faintOnJumpKick = FALSE; @@ -98,3 +98,60 @@ SINGLE_BATTLE_TEST("Jump Kick's recoil happens after Spiky Shield damage and Pok } } } + +SINGLE_BATTLE_TEST("Recoil if miss: Jump Kick recoil happens after Spiky Shield damage") +{ + GIVEN { + ASSUME(!gMovesInfo[MOVE_JUMP_KICK].ignoresProtect); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SPIKY_SHIELD); MOVE(player, MOVE_JUMP_KICK); } + } SCENE { + s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKY_SHIELD, opponent); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_JUMP_KICK, player); + MESSAGE("Wobbuffet was hurt by the opposing Wobbuffet's Spiky Shield!"); + MESSAGE("Wobbuffet kept going and crashed!"); + HP_BAR(player, damage: maxHP / 2); + } +} + +SINGLE_BATTLE_TEST("Recoil if miss: Supercell Slam causes recoil if it is absorbed") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_PIKACHU) { Ability(ABILITY_LIGHTNING_ROD); } + } WHEN { + TURN { MOVE(player, MOVE_SUPERCELL_SLAM); } + } SCENE { + s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + ABILITY_POPUP(opponent, ABILITY_LIGHTNING_ROD); + MESSAGE("Wobbuffet kept going and crashed!"); + HP_BAR(player, damage: maxHP / 2); + } +} + +SINGLE_BATTLE_TEST("Recoil if miss: Disguise doesn't prevent crash damage from Jump Kick into ghost types") +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_EARLY_BIRD; } + PARAMETRIZE { ability = ABILITY_SCRAPPY; } + + GIVEN { + PLAYER(SPECIES_KANGASKHAN) { Ability(ability); }; + OPPONENT(SPECIES_MIMIKYU_DISGUISED) { Ability(ABILITY_DISGUISE); } + } WHEN { + TURN { MOVE(player, MOVE_JUMP_KICK); } + } SCENE { + s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + MESSAGE("Kangaskhan used Jump Kick!"); + if (ability == ABILITY_SCRAPPY) { + NONE_OF { + MESSAGE("Kangaskhan kept going and crashed!"); + HP_BAR(player, damage: maxHP / 2); + } + } + } +} + From 4a1d08d760fcb21d5f7cdee12e5f887831997b11 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Mon, 10 Mar 2025 00:34:27 +0100 Subject: [PATCH 037/115] Minor Clean up for AI_CalcDamage to remove some duplicate code (#6397) Co-authored-by: Pawkkie <61265402+Pawkkie@users.noreply.github.com> --- src/battle_ai_util.c | 128 +++++++++++++++++-------------------------- 1 file changed, 49 insertions(+), 79 deletions(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 77cd3cc4ac..952f638d36 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -648,8 +648,16 @@ static inline void CalcDynamicMoveDamage(struct DamageCalculationData *damageCal *maximumDamage = maximum; } -static inline bool32 ShouldCalcCritDamage(s32 critChanceIndex, u32 battlerAtk) +static inline bool32 ShouldCalcCritDamage(u32 battlerAtk, u32 battlerDef, u32 move, struct AiLogicData *aiData) { + s32 critChanceIndex = 0; + + // Get crit chance + if (GetGenConfig(GEN_CONFIG_CRIT_CHANCE) == GEN_1) + critChanceIndex = CalcCritChanceStageGen1(battlerAtk, battlerDef, move, FALSE, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], aiData->holdEffects[battlerAtk]); + else + critChanceIndex = CalcCritChanceStage(battlerAtk, battlerDef, move, FALSE, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], aiData->holdEffects[battlerAtk]); + if (critChanceIndex == CRITICAL_HIT_ALWAYS) return TRUE; if (critChanceIndex >= RISKY_AI_CRIT_STAGE_THRESHOLD // Not guaranteed but above Risky threshold @@ -700,107 +708,69 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u if (movePower && !isDamageMoveUnusable) { - s32 critChanceIndex, fixedBasePower; - u32 types[3]; AI_StoreBattlerTypes(battlerAtk, types); ProteanTryChangeType(battlerAtk, aiData->abilities[battlerAtk], move, moveType); - fixedBasePower = SetFixedMoveBasePower(battlerAtk, move); + s32 fixedBasePower = SetFixedMoveBasePower(battlerAtk, move); struct DamageCalculationData damageCalcData; damageCalcData.battlerAtk = battlerAtk; damageCalcData.battlerDef = battlerDef; damageCalcData.move = move; damageCalcData.moveType = moveType; - damageCalcData.isCrit = FALSE; + damageCalcData.isCrit = ShouldCalcCritDamage(battlerAtk, battlerDef, move, aiData); damageCalcData.randomFactor = FALSE; damageCalcData.updateFlags = FALSE; - // Get crit chance - if (GetGenConfig(GEN_CONFIG_CRIT_CHANCE) == GEN_1) - critChanceIndex = CalcCritChanceStageGen1(battlerAtk, battlerDef, move, FALSE, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], aiData->holdEffects[battlerAtk]); - else - critChanceIndex = CalcCritChanceStage(battlerAtk, battlerDef, move, FALSE, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], aiData->holdEffects[battlerAtk]); - // Use crit damage - if (ShouldCalcCritDamage(critChanceIndex, battlerAtk)) + if (moveEffect == EFFECT_TRIPLE_KICK) { - damageCalcData.isCrit = TRUE; - s32 critDmg = CalculateMoveDamageVars(&damageCalcData, fixedBasePower, - effectivenessMultiplier, weather, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + for (gMultiHitCounter = GetMoveStrikeCount(move); gMultiHitCounter > 0; gMultiHitCounter--) // The global is used to simulate actual damage done + { + s32 damageByRollType = 0; - simDamage.minimum = GetDamageByRollType(critDmg, DMG_ROLL_LOWEST); - simDamage.minimum = ApplyModifiersAfterDmgRoll(simDamage.minimum, &damageCalcData, effectivenessMultiplier, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + s32 oneTripleKickHit = CalculateMoveDamageVars(&damageCalcData, fixedBasePower, + effectivenessMultiplier, weather, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); - simDamage.median = GetDamageByRollType(critDmg, DMG_ROLL_DEFAULT); - simDamage.median = ApplyModifiersAfterDmgRoll(simDamage.median, &damageCalcData, effectivenessMultiplier, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + damageByRollType = GetDamageByRollType(oneTripleKickHit, DMG_ROLL_LOWEST); + simDamage.minimum += ApplyModifiersAfterDmgRoll(damageByRollType, &damageCalcData, effectivenessMultiplier, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); - simDamage.maximum = GetDamageByRollType(critDmg, DMG_ROLL_HIGHEST); - simDamage.maximum = ApplyModifiersAfterDmgRoll(simDamage.maximum, &damageCalcData, effectivenessMultiplier, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + damageByRollType = GetDamageByRollType(oneTripleKickHit, DMG_ROLL_DEFAULT); + simDamage.median += ApplyModifiersAfterDmgRoll(damageByRollType, &damageCalcData, effectivenessMultiplier, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + + damageByRollType = GetDamageByRollType(oneTripleKickHit, DMG_ROLL_HIGHEST); + simDamage.maximum += ApplyModifiersAfterDmgRoll(damageByRollType, &damageCalcData, effectivenessMultiplier, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + } } - - // Use non-crit damage else { - s32 nonCritDmg = 0, tripleKickDmgMin = 0, tripleKickDmgDefault = 0, tripleKickDmgMax = 0; - if (moveEffect == EFFECT_TRIPLE_KICK) - { - for (gMultiHitCounter = GetMoveStrikeCount(move); gMultiHitCounter > 0; gMultiHitCounter--) // The global is used to simulate actual damage done - { - s32 oneTripleKickHit = CalculateMoveDamageVars(&damageCalcData, fixedBasePower, - effectivenessMultiplier, weather, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + u32 damage = CalculateMoveDamageVars(&damageCalcData, fixedBasePower, + effectivenessMultiplier, weather, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); - simDamage.minimum = GetDamageByRollType(oneTripleKickHit, DMG_ROLL_LOWEST); - tripleKickDmgMin += ApplyModifiersAfterDmgRoll(simDamage.minimum, &damageCalcData, effectivenessMultiplier, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + simDamage.minimum = GetDamageByRollType(damage, DMG_ROLL_LOWEST); + simDamage.minimum = ApplyModifiersAfterDmgRoll(simDamage.minimum, &damageCalcData, effectivenessMultiplier, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); - simDamage.median = GetDamageByRollType(oneTripleKickHit, DMG_ROLL_DEFAULT); - tripleKickDmgDefault += ApplyModifiersAfterDmgRoll(simDamage.median, &damageCalcData, effectivenessMultiplier, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + simDamage.median = GetDamageByRollType(damage, DMG_ROLL_DEFAULT); + simDamage.median = ApplyModifiersAfterDmgRoll(simDamage.median, &damageCalcData, effectivenessMultiplier, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); - simDamage.maximum = GetDamageByRollType(oneTripleKickHit, DMG_ROLL_HIGHEST); - tripleKickDmgMax += ApplyModifiersAfterDmgRoll(simDamage.maximum, &damageCalcData, effectivenessMultiplier, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); - } - simDamage.minimum = tripleKickDmgMin; - simDamage.median = tripleKickDmgDefault; - simDamage.maximum = tripleKickDmgMax; - } - else - { - nonCritDmg = CalculateMoveDamageVars(&damageCalcData, fixedBasePower, - effectivenessMultiplier, weather, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); - - simDamage.minimum = GetDamageByRollType(nonCritDmg, DMG_ROLL_LOWEST); - simDamage.minimum = ApplyModifiersAfterDmgRoll(simDamage.minimum, &damageCalcData, effectivenessMultiplier, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); - - simDamage.median = GetDamageByRollType(nonCritDmg, DMG_ROLL_DEFAULT); - simDamage.median = ApplyModifiersAfterDmgRoll(simDamage.median, &damageCalcData, effectivenessMultiplier, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); - - simDamage.maximum = GetDamageByRollType(nonCritDmg, DMG_ROLL_HIGHEST); - simDamage.maximum = ApplyModifiersAfterDmgRoll(simDamage.maximum, &damageCalcData, effectivenessMultiplier, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); - } + simDamage.maximum = GetDamageByRollType(damage, DMG_ROLL_HIGHEST); + simDamage.maximum = ApplyModifiersAfterDmgRoll(simDamage.maximum, &damageCalcData, effectivenessMultiplier, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); } if (GetActiveGimmick(battlerAtk) != GIMMICK_Z_MOVE) From af3984bee467fe7b7669defc10bf35eac4ec2704 Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Mon, 10 Mar 2025 16:01:02 +0000 Subject: [PATCH 038/115] Fixes gimmick icon flying off the screen (#6401) --- src/battle_gimmick.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/battle_gimmick.c b/src/battle_gimmick.c index 728ff361a9..dfbbe0e7dc 100644 --- a/src/battle_gimmick.c +++ b/src/battle_gimmick.c @@ -204,6 +204,7 @@ static void SpriteCb_GimmickTrigger(struct Sprite *sprite) { s32 xSlide, xPriority, xOptimal; s32 yDiff; + s32 xHealthbox = gSprites[gHealthboxSpriteIds[sprite->tBattler]].x; if (IsDoubleBattle()) { @@ -222,25 +223,29 @@ static void SpriteCb_GimmickTrigger(struct Sprite *sprite) if (sprite->tHide) { - if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide) + if (sprite->x < xHealthbox - xSlide) sprite->x++; - if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority) + if (sprite->x >= xHealthbox - xPriority) sprite->oam.priority = 2; else sprite->oam.priority = 1; sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff; sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff; - if (sprite->x == gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide) + if (sprite->x == xHealthbox - xSlide) DestroyGimmickTriggerSprite(); } else { - if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xOptimal) + // Edge case: in doubles, if selecting move and next mon's action too fast, the second battler's gimmick icon uses the x from the first battler's gimmick icon + if (sprite->y != gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff) + sprite->x = xHealthbox - xSlide; + + if (sprite->x > xHealthbox - xOptimal) sprite->x--; - if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority) + if (sprite->x >= xHealthbox - xPriority) sprite->oam.priority = 2; else sprite->oam.priority = 1; From 40dd3a7688dd73a5819c4ff6e67c20e3c53e69ad Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Mon, 10 Mar 2025 17:11:25 +0100 Subject: [PATCH 039/115] Fix compile errors with OW_BATTLE_ONLY_FORMS set to FALSE (#6400) Co-authored-by: Hedara --- .../object_event_pic_tables_followers.h | 196 +++++++++++++----- 1 file changed, 147 insertions(+), 49 deletions(-) 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 d77010c0c0..305fd6b74e 100644 --- a/src/data/object_events/object_event_pic_tables_followers.h +++ b/src/data/object_events/object_event_pic_tables_followers.h @@ -18,11 +18,13 @@ static const struct SpriteFrameImage sPicTable_VenusaurF[] = { overworld_ascending_frames(gObjectEventPic_VenusaurF, 4, 4), }; #endif //P_GENDER_DIFFERENCES +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_VenusaurMega[] = { overworld_ascending_frames(gObjectEventPic_VenusaurMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #if P_GIGANTAMAX_FORMS /*static const struct SpriteFrameImage sPicTable_VenusaurGmax[] = { overworld_ascending_frames(gObjectEventPic_VenusaurGmax, 4, 4), @@ -40,6 +42,7 @@ static const struct SpriteFrameImage sPicTable_Charmeleon[] = { static const struct SpriteFrameImage sPicTable_Charizard[] = { overworld_ascending_frames(gObjectEventPic_Charizard, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_CharizardMegaX[] = { overworld_ascending_frames(gObjectEventPic_CharizardMegaX, 4, 4), @@ -47,7 +50,8 @@ static const struct SpriteFrameImage sPicTable_CharizardMegaX[] = { static const struct SpriteFrameImage sPicTable_CharizardMegaY[] = { overworld_ascending_frames(gObjectEventPic_CharizardMegaY, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #if P_GIGANTAMAX_FORMS /*static const struct SpriteFrameImage sPicTable_CharizardGmax[] = { overworld_ascending_frames(gObjectEventPic_CharizardGmax, 4, 4), @@ -65,11 +69,13 @@ static const struct SpriteFrameImage sPicTable_Wartortle[] = { static const struct SpriteFrameImage sPicTable_Blastoise[] = { overworld_ascending_frames(gObjectEventPic_Blastoise, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_BlastoiseMega[] = { overworld_ascending_frames(gObjectEventPic_BlastoiseMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #if P_GIGANTAMAX_FORMS /*static const struct SpriteFrameImage sPicTable_BlastoiseGmax[] = { overworld_ascending_frames(gObjectEventPic_BlastoiseGmax, 4, 4), @@ -109,11 +115,13 @@ static const struct SpriteFrameImage sPicTable_Kakuna[] = { static const struct SpriteFrameImage sPicTable_Beedrill[] = { overworld_ascending_frames(gObjectEventPic_Beedrill, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_BeedrillMega[] = { overworld_ascending_frames(gObjectEventPic_BeedrillMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_WEEDLE #if P_FAMILY_PIDGEY @@ -126,11 +134,13 @@ static const struct SpriteFrameImage sPicTable_Pidgeotto[] = { static const struct SpriteFrameImage sPicTable_Pidgeot[] = { overworld_ascending_frames(gObjectEventPic_Pidgeot, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_PidgeotMega[] = { overworld_ascending_frames(gObjectEventPic_PidgeotMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_PIDGEY #if P_FAMILY_RATTATA @@ -547,11 +557,13 @@ static const struct SpriteFrameImage sPicTable_AlakazamF[] = { overworld_ascending_frames(gObjectEventPic_AlakazamF, 4, 4), }; #endif //P_GENDER_DIFFERENCES +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_AlakazamMega[] = { overworld_ascending_frames(gObjectEventPic_AlakazamMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_ABRA #if P_FAMILY_MACHOP @@ -645,11 +657,13 @@ static const struct SpriteFrameImage sPicTable_Slowking[] = { }; #endif //P_GEN_2_CROSS_EVOS +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_SlowbroMega[] = { overworld_ascending_frames(gObjectEventPic_SlowbroMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #if P_GALARIAN_FORMS static const struct SpriteFrameImage sPicTable_SlowpokeGalar[] = { @@ -758,11 +772,13 @@ static const struct SpriteFrameImage sPicTable_Haunter[] = { static const struct SpriteFrameImage sPicTable_Gengar[] = { overworld_ascending_frames(gObjectEventPic_Gengar, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_GengarMega[] = { overworld_ascending_frames(gObjectEventPic_GengarMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #if P_GIGANTAMAX_FORMS /*static const struct SpriteFrameImage sPicTable_GengarGmax[] = { overworld_ascending_frames(gObjectEventPic_GengarGmax, 4, 4), @@ -783,11 +799,13 @@ static const struct SpriteFrameImage sPicTable_SteelixF[] = { overworld_ascending_frames(gObjectEventPic_SteelixF, 4, 4), }; #endif //P_GENDER_DIFFERENCES +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_SteelixMega[] = { overworld_ascending_frames(gObjectEventPic_SteelixMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_GEN_2_CROSS_EVOS #endif //P_FAMILY_ONIX @@ -973,11 +991,13 @@ static const struct SpriteFrameImage sPicTable_TangrowthF[] = { static const struct SpriteFrameImage sPicTable_Kangaskhan[] = { overworld_ascending_frames(gObjectEventPic_Kangaskhan, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_KangaskhanMega[] = { overworld_ascending_frames(gObjectEventPic_KangaskhanMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_KANGASKHAN #if P_FAMILY_HORSEA @@ -1059,11 +1079,13 @@ static const struct SpriteFrameImage sPicTable_ScizorF[] = { overworld_ascending_frames(gObjectEventPic_ScizorF, 4, 4), }; #endif //P_GENDER_DIFFERENCES +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_ScizorMega[] = { overworld_ascending_frames(gObjectEventPic_ScizorMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_GEN_2_CROSS_EVOS #if P_GEN_8_CROSS_EVOS @@ -1120,11 +1142,13 @@ static const struct SpriteFrameImage sPicTable_Magmortar[] = { static const struct SpriteFrameImage sPicTable_Pinsir[] = { overworld_ascending_frames(gObjectEventPic_Pinsir, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_PinsirMega[] = { overworld_ascending_frames(gObjectEventPic_PinsirMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_PINSIR #if P_FAMILY_TAUROS @@ -1161,11 +1185,13 @@ static const struct SpriteFrameImage sPicTable_GyaradosF[] = { overworld_ascending_frames(gObjectEventPic_GyaradosF, 4, 4), }; #endif //P_GENDER_DIFFERENCES +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_GyaradosMega[] = { overworld_ascending_frames(gObjectEventPic_GyaradosMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_MAGIKARP #if P_FAMILY_LAPRAS @@ -1272,11 +1298,13 @@ static const struct SpriteFrameImage sPicTable_Kabutops[] = { static const struct SpriteFrameImage sPicTable_Aerodactyl[] = { overworld_ascending_frames(gObjectEventPic_Aerodactyl, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_AerodactylMega[] = { overworld_ascending_frames(gObjectEventPic_AerodactylMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_AERODACTYL #if P_FAMILY_SNORLAX @@ -1344,6 +1372,7 @@ static const struct SpriteFrameImage sPicTable_Dragonite[] = { static const struct SpriteFrameImage sPicTable_Mewtwo[] = { overworld_ascending_frames(gObjectEventPic_Mewtwo, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_MewtwoMegaX[] = { overworld_ascending_frames(gObjectEventPic_MewtwoMegaX, 4, 4), @@ -1351,7 +1380,8 @@ static const struct SpriteFrameImage sPicTable_MewtwoMegaX[] = { static const struct SpriteFrameImage sPicTable_MewtwoMegaY[] = { overworld_ascending_frames(gObjectEventPic_MewtwoMegaY, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_MEWTWO #if P_FAMILY_MEW @@ -1499,11 +1529,13 @@ static const struct SpriteFrameImage sPicTable_Flaaffy[] = { static const struct SpriteFrameImage sPicTable_Ampharos[] = { overworld_ascending_frames(gObjectEventPic_Ampharos, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_AmpharosMega[] = { overworld_ascending_frames(gObjectEventPic_AmpharosMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_MAREEP #if P_FAMILY_MARILL @@ -1841,11 +1873,13 @@ static const struct SpriteFrameImage sPicTable_HeracrossF[] = { overworld_ascending_frames(gObjectEventPic_HeracrossF, 4, 4), }; #endif //P_GENDER_DIFFERENCES +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_HeracrossMega[] = { overworld_ascending_frames(gObjectEventPic_HeracrossMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_HERACROSS #if P_FAMILY_SNEASEL @@ -2001,11 +2035,13 @@ static const struct SpriteFrameImage sPicTable_HoundoomF[] = { overworld_ascending_frames(gObjectEventPic_HoundoomF, 4, 4), }; #endif //P_GENDER_DIFFERENCES +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_HoundoomMega[] = { overworld_ascending_frames(gObjectEventPic_HoundoomMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_HOUNDOUR #if P_FAMILY_PHANPY @@ -2073,11 +2109,13 @@ static const struct SpriteFrameImage sPicTable_Pupitar[] = { static const struct SpriteFrameImage sPicTable_Tyranitar[] = { overworld_ascending_frames(gObjectEventPic_Tyranitar, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_TyranitarMega[] = { overworld_ascending_frames(gObjectEventPic_TyranitarMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_LARVITAR #if P_FAMILY_LUGIA @@ -2108,11 +2146,13 @@ static const struct SpriteFrameImage sPicTable_Grovyle[] = { static const struct SpriteFrameImage sPicTable_Sceptile[] = { overworld_ascending_frames(gObjectEventPic_Sceptile, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_SceptileMega[] = { overworld_ascending_frames(gObjectEventPic_SceptileMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_TREECKO #if P_FAMILY_TORCHIC @@ -2140,11 +2180,13 @@ static const struct SpriteFrameImage sPicTable_BlazikenF[] = { overworld_ascending_frames(gObjectEventPic_BlazikenF, 4, 4), }; #endif //P_GENDER_DIFFERENCES +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_BlazikenMega[] = { overworld_ascending_frames(gObjectEventPic_BlazikenMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_TORCHIC #if P_FAMILY_MUDKIP @@ -2157,11 +2199,13 @@ static const struct SpriteFrameImage sPicTable_Marshtomp[] = { static const struct SpriteFrameImage sPicTable_Swampert[] = { overworld_ascending_frames(gObjectEventPic_Swampert, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_SwampertMega[] = { overworld_ascending_frames(gObjectEventPic_SwampertMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_MUDKIP #if P_FAMILY_POOCHYENA @@ -2288,21 +2332,25 @@ static const struct SpriteFrameImage sPicTable_Kirlia[] = { static const struct SpriteFrameImage sPicTable_Gardevoir[] = { overworld_ascending_frames(gObjectEventPic_Gardevoir, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_GardevoirMega[] = { overworld_ascending_frames(gObjectEventPic_GardevoirMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #if P_GEN_4_CROSS_EVOS static const struct SpriteFrameImage sPicTable_Gallade[] = { overworld_ascending_frames(gObjectEventPic_Gallade, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_GalladeMega[] = { overworld_ascending_frames(gObjectEventPic_GalladeMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_GEN_4_CROSS_EVOS #endif //P_FAMILY_RALTS @@ -2393,22 +2441,26 @@ static const struct SpriteFrameImage sPicTable_Delcatty[] = { static const struct SpriteFrameImage sPicTable_Sableye[] = { overworld_ascending_frames(gObjectEventPic_Sableye, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_SableyeMega[] = { overworld_ascending_frames(gObjectEventPic_SableyeMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_SABLEYE #if P_FAMILY_MAWILE static const struct SpriteFrameImage sPicTable_Mawile[] = { overworld_ascending_frames(gObjectEventPic_Mawile, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_MawileMega[] = { overworld_ascending_frames(gObjectEventPic_MawileMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_MAWILE #if P_FAMILY_ARON @@ -2421,11 +2473,13 @@ static const struct SpriteFrameImage sPicTable_Lairon[] = { static const struct SpriteFrameImage sPicTable_Aggron[] = { overworld_ascending_frames(gObjectEventPic_Aggron, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_AggronMega[] = { overworld_ascending_frames(gObjectEventPic_AggronMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_ARON #if P_FAMILY_MEDITITE @@ -2445,11 +2499,13 @@ static const struct SpriteFrameImage sPicTable_MedichamF[] = { overworld_ascending_frames(gObjectEventPic_MedichamF, 4, 4), }; #endif //P_GENDER_DIFFERENCES +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_MedichamMega[] = { overworld_ascending_frames(gObjectEventPic_MedichamMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_MEDITITE #if P_FAMILY_ELECTRIKE @@ -2459,11 +2515,13 @@ static const struct SpriteFrameImage sPicTable_Electrike[] = { static const struct SpriteFrameImage sPicTable_Manectric[] = { overworld_ascending_frames(gObjectEventPic_Manectric, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_ManectricMega[] = { overworld_ascending_frames(gObjectEventPic_ManectricMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_ELECTRIKE #if P_FAMILY_PLUSLE @@ -2539,11 +2597,13 @@ static const struct SpriteFrameImage sPicTable_Carvanha[] = { static const struct SpriteFrameImage sPicTable_Sharpedo[] = { overworld_ascending_frames(gObjectEventPic_Sharpedo, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_SharpedoMega[] = { overworld_ascending_frames(gObjectEventPic_SharpedoMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_CARVANHA #if P_FAMILY_WAILMER @@ -2572,11 +2632,13 @@ static const struct SpriteFrameImage sPicTable_CameruptF[] = { overworld_ascending_frames(gObjectEventPic_CameruptF, 4, 4), }; #endif //P_GENDER_DIFFERENCES +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_CameruptMega[] = { overworld_ascending_frames(gObjectEventPic_CameruptMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_NUMEL #if P_FAMILY_TORKOAL @@ -2633,11 +2695,13 @@ static const struct SpriteFrameImage sPicTable_Swablu[] = { static const struct SpriteFrameImage sPicTable_Altaria[] = { overworld_ascending_frames(gObjectEventPic_Altaria, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_AltariaMega[] = { overworld_ascending_frames(gObjectEventPic_AltariaMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_SWABLU #if P_FAMILY_ZANGOOSE @@ -2751,11 +2815,13 @@ static const struct SpriteFrameImage sPicTable_Shuppet[] = { static const struct SpriteFrameImage sPicTable_Banette[] = { overworld_ascending_frames(gObjectEventPic_Banette, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_BanetteMega[] = { overworld_ascending_frames(gObjectEventPic_BanetteMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_SHUPPET #if P_FAMILY_DUSKULL @@ -2793,11 +2859,13 @@ static const struct SpriteFrameImage sPicTable_Chimecho[] = { static const struct SpriteFrameImage sPicTable_Absol[] = { overworld_ascending_frames(gObjectEventPic_Absol, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_AbsolMega[] = { overworld_ascending_frames(gObjectEventPic_AbsolMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_ABSOL #if P_FAMILY_SNORUNT @@ -2807,11 +2875,13 @@ static const struct SpriteFrameImage sPicTable_Snorunt[] = { static const struct SpriteFrameImage sPicTable_Glalie[] = { overworld_ascending_frames(gObjectEventPic_Glalie, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_GlalieMega[] = { overworld_ascending_frames(gObjectEventPic_GlalieMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #if P_GEN_4_CROSS_EVOS static const struct SpriteFrameImage sPicTable_Froslass[] = { @@ -2871,11 +2941,13 @@ static const struct SpriteFrameImage sPicTable_Shelgon[] = { static const struct SpriteFrameImage sPicTable_Salamence[] = { overworld_ascending_frames(gObjectEventPic_Salamence, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_SalamenceMega[] = { overworld_ascending_frames(gObjectEventPic_SalamenceMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_BAGON #if P_FAMILY_BELDUM @@ -2888,11 +2960,13 @@ static const struct SpriteFrameImage sPicTable_Metang[] = { static const struct SpriteFrameImage sPicTable_Metagross[] = { overworld_ascending_frames(gObjectEventPic_Metagross, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_MetagrossMega[] = { overworld_ascending_frames(gObjectEventPic_MetagrossMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_BELDUM #if P_FAMILY_REGIROCK @@ -2917,55 +2991,65 @@ static const struct SpriteFrameImage sPicTable_Registeel[] = { static const struct SpriteFrameImage sPicTable_Latias[] = { overworld_ascending_frames(gObjectEventPic_Latias, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_LatiasMega[] = { overworld_ascending_frames(gObjectEventPic_LatiasMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_LATIAS #if P_FAMILY_LATIOS static const struct SpriteFrameImage sPicTable_Latios[] = { overworld_ascending_frames(gObjectEventPic_Latios, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_LatiosMega[] = { overworld_ascending_frames(gObjectEventPic_LatiosMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_LATIOS #if P_FAMILY_KYOGRE static const struct SpriteFrameImage sPicTable_Kyogre[] = { overworld_ascending_frames(gObjectEventPic_Kyogre, 8, 8), }; +#if OW_BATTLE_ONLY_FORMS #if P_PRIMAL_REVERSIONS static const struct SpriteFrameImage sPicTable_KyogrePrimal[] = { overworld_ascending_frames(gObjectEventPic_KyogrePrimal, 4, 4), }; -#endif //P_PRIMAL_REVERSIONS +#endif // P_PRIMAL_REVERSIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_KYOGRE #if P_FAMILY_GROUDON static const struct SpriteFrameImage sPicTable_Groudon[] = { overworld_ascending_frames(gObjectEventPic_Groudon, 8, 8), }; +#if OW_BATTLE_ONLY_FORMS #if P_PRIMAL_REVERSIONS static const struct SpriteFrameImage sPicTable_GroudonPrimal[] = { overworld_ascending_frames(gObjectEventPic_GroudonPrimal, 4, 4), }; -#endif //P_PRIMAL_REVERSIONS +#endif // P_PRIMAL_REVERSIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_GROUDON #if P_FAMILY_RAYQUAZA static const struct SpriteFrameImage sPicTable_Rayquaza[] = { overworld_ascending_frames(gObjectEventPic_Rayquaza, 8, 8), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_RayquazaMega[] = { overworld_ascending_frames(gObjectEventPic_RayquazaMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_RAYQUAZA #if P_FAMILY_JIRACHI @@ -3246,11 +3330,13 @@ static const struct SpriteFrameImage sPicTable_Buneary[] = { static const struct SpriteFrameImage sPicTable_Lopunny[] = { overworld_ascending_frames(gObjectEventPic_Lopunny, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_LopunnyMega[] = { overworld_ascending_frames(gObjectEventPic_LopunnyMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_BUNEARY #if P_FAMILY_GLAMEOW @@ -3317,11 +3403,13 @@ static const struct SpriteFrameImage sPicTable_GarchompF[] = { overworld_ascending_frames(gObjectEventPic_GarchompF, 4, 4), }; #endif //P_GENDER_DIFFERENCES +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_GarchompMega[] = { overworld_ascending_frames(gObjectEventPic_GarchompMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_GIBLE #if P_FAMILY_RIOLU @@ -3331,11 +3419,13 @@ static const struct SpriteFrameImage sPicTable_Riolu[] = { static const struct SpriteFrameImage sPicTable_Lucario[] = { overworld_ascending_frames(gObjectEventPic_Lucario, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_LucarioMega[] = { overworld_ascending_frames(gObjectEventPic_LucarioMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_RIOLU #if P_FAMILY_HIPPOPOTAS @@ -3422,11 +3512,13 @@ static const struct SpriteFrameImage sPicTable_AbomasnowF[] = { overworld_ascending_frames(gObjectEventPic_AbomasnowF, 4, 4), }; #endif //P_GENDER_DIFFERENCES +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_AbomasnowMega[] = { overworld_ascending_frames(gObjectEventPic_AbomasnowMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_SNOVER #if P_FAMILY_ROTOM @@ -3769,11 +3861,13 @@ static const struct SpriteFrameImage sPicTable_Excadrill[] = { static const struct SpriteFrameImage sPicTable_Audino[] = { overworld_ascending_frames(gObjectEventPic_Audino, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_AudinoMega[] = { overworld_ascending_frames(gObjectEventPic_AudinoMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_AUDINO #if P_FAMILY_TIMBURR @@ -4959,11 +5053,13 @@ static const struct SpriteFrameImage sPicTable_ZygardeComplete[] = { static const struct SpriteFrameImage sPicTable_Diancie[] = { overworld_ascending_frames(gObjectEventPic_Diancie, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_MEGA_EVOLUTIONS static const struct SpriteFrameImage sPicTable_DiancieMega[] = { overworld_ascending_frames(gObjectEventPic_DiancieMega, 4, 4), }; -#endif //P_MEGA_EVOLUTIONS +#endif // P_MEGA_EVOLUTIONS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FAMILY_DIANCIE #if P_FAMILY_HOOPA @@ -5417,11 +5513,13 @@ static const struct SpriteFrameImage sPicTable_NecrozmaDuskMane[] = { static const struct SpriteFrameImage sPicTable_NecrozmaDawnWings[] = { overworld_ascending_frames(gObjectEventPic_NecrozmaDawnWings, 4, 4), }; +#if OW_BATTLE_ONLY_FORMS #if P_ULTRA_BURST_FORMS static const struct SpriteFrameImage sPicTable_NecrozmaUltra[] = { overworld_ascending_frames(gObjectEventPic_NecrozmaUltra, 4, 4), }; -#endif //P_ULTRA_BURST_FORMS +#endif // P_ULTRA_BURST_FORMS +#endif // OW_BATTLE_ONLY_FORMS #endif //P_FUSION_FORMS #endif //P_FAMILY_NECROZMA From a26a47cab870ec90319c27c70dd75da30aa836f1 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Tue, 11 Mar 2025 13:58:49 +0100 Subject: [PATCH 040/115] Fixed AI_FLAG_CHECK_VIABILITY changing the toxic counter in some cases (#6402) Co-authored-by: Hedara --- src/battle_ai_util.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index f7b5ab9c64..60b707808f 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -2634,12 +2634,13 @@ static u32 GetPoisonDamage(u32 battlerId) } else if (gBattleMons[battlerId].status1 & STATUS1_TOXIC_POISON) { + u32 status1Temp = gBattleMons[battlerId].status1; damage = gBattleMons[battlerId].maxHP / 16; if (damage == 0) damage = 1; - if ((gBattleMons[battlerId].status1 & STATUS1_TOXIC_COUNTER) != STATUS1_TOXIC_TURN(15)) // not 16 turns - gBattleMons[battlerId].status1 += STATUS1_TOXIC_TURN(1); - damage *= (gBattleMons[battlerId].status1 & STATUS1_TOXIC_COUNTER) >> 8; + if ((status1Temp & STATUS1_TOXIC_COUNTER) != STATUS1_TOXIC_TURN(15)) // not 16 turns + status1Temp += STATUS1_TOXIC_TURN(1); + damage *= (status1Temp & STATUS1_TOXIC_COUNTER) >> 8; } return damage; } From 4e01ce6993767c6cd3ead555cb167daa2321afcf Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Tue, 11 Mar 2025 21:23:02 +0100 Subject: [PATCH 041/115] Moved some AI stuff out of the battlestruct (#6405) Co-authored-by: Hedara --- include/battle.h | 11 ++++++++--- src/battle_ai_main.c | 8 ++++---- src/battle_ai_switch_items.c | 6 +++--- src/battle_ai_util.c | 2 +- src/battle_controller_opponent.c | 4 ++-- src/battle_controller_player.c | 8 ++++---- src/battle_controller_player_partner.c | 4 ++-- src/battle_debug.c | 2 +- src/battle_main.c | 3 ++- src/battle_util2.c | 2 ++ test/test_runner_battle.c | 8 ++++---- 11 files changed, 33 insertions(+), 25 deletions(-) diff --git a/include/battle.h b/include/battle.h index 8342677484..226f9acfef 100644 --- a/include/battle.h +++ b/include/battle.h @@ -765,9 +765,6 @@ struct BattleStruct u16 tracedAbility[MAX_BATTLERS_COUNT]; u16 hpBefore[MAX_BATTLERS_COUNT]; // Hp of battlers before using a move. For Berserk and Anger Shell. struct Illusion illusion[MAX_BATTLERS_COUNT]; - s32 aiFinalScore[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // AI, target, moves to make debugging easier - u8 aiMoveOrAction[MAX_BATTLERS_COUNT]; - u8 aiChosenTarget[MAX_BATTLERS_COUNT]; u8 soulheartBattlerId; u8 friskedBattler; // Frisk needs to identify 2 battlers in double battles. u8 sameMoveTurns[MAX_BATTLERS_COUNT]; // For Metronome, number of times the same moves has been SUCCESFULLY used. @@ -840,6 +837,13 @@ struct BattleStruct u16 savedMove; // backup current move for mid-turn switching, e.g. Red Card }; +struct AiBattleData +{ + s32 finalScore[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // AI, target, moves to make debugging easier + u8 moveOrAction[MAX_BATTLERS_COUNT]; + u8 chosenTarget[MAX_BATTLERS_COUNT]; +}; + // The palaceFlags member of struct BattleStruct contains 1 flag per move to indicate which moves the AI should consider, // and 1 flag per battler to indicate whether the battler is awake and at <= 50% HP (which affects move choice). // The assert below is to ensure palaceFlags is large enough to store these flags without overlap. @@ -1155,6 +1159,7 @@ extern u8 gSentPokesToOpponent[2]; extern struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT]; extern struct BattleScripting gBattleScripting; extern struct BattleStruct *gBattleStruct; +extern struct AiBattleData *gAiBattleData; extern u8 *gLinkBattleSendBuffer; extern u8 *gLinkBattleRecvBuffer; extern struct BattleResources *gBattleResources; diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index b95601f37d..133d62aeb7 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -268,7 +268,7 @@ void BattleAI_SetupAIData(u8 defaultScoreMoves, u32 battler) } gBattlerTarget = SetRandomTarget(battler); - gBattleStruct->aiChosenTarget[battler] = gBattlerTarget; + gAiBattleData->chosenTarget[battler] = gBattlerTarget; } u32 BattleAI_ChooseMoveOrAction(u32 battler) @@ -514,7 +514,7 @@ static u32 ChooseMoveOrAction_Singles(u32 battlerAi) for (i = 0; i < MAX_MON_MOVES; i++) { - gBattleStruct->aiFinalScore[battlerAi][gBattlerTarget][i] = AI_THINKING_STRUCT->score[i]; + gAiBattleData->finalScore[battlerAi][gBattlerTarget][i] = AI_THINKING_STRUCT->score[i]; } // Check special AI actions. @@ -641,7 +641,7 @@ static u32 ChooseMoveOrAction_Doubles(u32 battlerAi) for (j = 0; j < MAX_MON_MOVES; j++) { - gBattleStruct->aiFinalScore[battlerAi][gBattlerTarget][j] = AI_THINKING_STRUCT->score[j]; + gAiBattleData->finalScore[battlerAi][gBattlerTarget][j] = AI_THINKING_STRUCT->score[j]; } } } @@ -666,7 +666,7 @@ static u32 ChooseMoveOrAction_Doubles(u32 battlerAi) } gBattlerTarget = mostViableTargetsArray[Random() % mostViableTargetsNo]; - gBattleStruct->aiChosenTarget[battlerAi] = gBattlerTarget; + gAiBattleData->chosenTarget[battlerAi] = gBattlerTarget; return actionOrMoveIndex[gBattlerTarget]; } diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 466f6c5cdf..23419ab7e0 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -2201,13 +2201,13 @@ u32 GetMostSuitableMonToSwitchInto(u32 battler, enum SwitchType switchType) static bool32 AiExpectsToFaintPlayer(u32 battler) { - u8 target = gBattleStruct->aiChosenTarget[battler]; + u8 target = gAiBattleData->chosenTarget[battler]; - if (gBattleStruct->aiMoveOrAction[battler] > 3) + if (gAiBattleData->moveOrAction[battler] > 3) return FALSE; // AI not planning to use move if (GetBattlerSide(target) != GetBattlerSide(battler) - && CanIndexMoveFaintTarget(battler, target, gBattleStruct->aiMoveOrAction[battler], AI_ATTACKING) + && CanIndexMoveFaintTarget(battler, target, gAiBattleData->moveOrAction[battler], AI_ATTACKING) && AI_IsFaster(battler, target, GetAIChosenMove(battler))) { // We expect to faint the target and move first -> dont use an item diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 952f638d36..24bb482b4a 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -61,7 +61,7 @@ bool32 AI_IsSlower(u32 battlerAi, u32 battlerDef, u32 move) u32 GetAIChosenMove(u32 battlerId) { - return (gBattleMons[battlerId].moves[gBattleStruct->aiMoveOrAction[battlerId]]); + return (gBattleMons[battlerId].moves[gAiBattleData->moveOrAction[battlerId]]); } bool32 AI_RandLessThan(u32 val) diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 38fb304ac1..0a52d88064 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -544,8 +544,8 @@ static void OpponentHandleChooseMove(u32 battler) } else { - chosenMoveId = gBattleStruct->aiMoveOrAction[battler]; - gBattlerTarget = gBattleStruct->aiChosenTarget[battler]; + chosenMoveId = gAiBattleData->moveOrAction[battler]; + gBattlerTarget = gAiBattleData->chosenTarget[battler]; switch (chosenMoveId) { case AI_CHOICE_WATCH: diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index b84b87d0ed..8ee7f036d4 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -2042,13 +2042,13 @@ static void PlayerHandleChooseAction(u32 battler) u32 moveTarget = GetBattlerMoveTargetType(B_POSITION_PLAYER_RIGHT, move); if (moveTarget == MOVE_TARGET_SELECTED) { - if (gBattleStruct->aiChosenTarget[B_POSITION_PLAYER_RIGHT] == B_POSITION_OPPONENT_LEFT) + if (gAiBattleData->chosenTarget[B_POSITION_PLAYER_RIGHT] == B_POSITION_OPPONENT_LEFT) StringAppend(gStringVar1, COMPOUND_STRING(" -{UP_ARROW}")); - else if (gBattleStruct->aiChosenTarget[B_POSITION_PLAYER_RIGHT] == B_POSITION_OPPONENT_RIGHT) + else if (gAiBattleData->chosenTarget[B_POSITION_PLAYER_RIGHT] == B_POSITION_OPPONENT_RIGHT) StringAppend(gStringVar1, COMPOUND_STRING(" {UP_ARROW}-")); - else if (gBattleStruct->aiChosenTarget[B_POSITION_PLAYER_RIGHT] == B_POSITION_PLAYER_LEFT) + else if (gAiBattleData->chosenTarget[B_POSITION_PLAYER_RIGHT] == B_POSITION_PLAYER_LEFT) StringAppend(gStringVar1, COMPOUND_STRING(" {DOWN_ARROW}-")); - else if (gBattleStruct->aiChosenTarget[B_POSITION_PLAYER_RIGHT] == B_POSITION_PLAYER_RIGHT) + else if (gAiBattleData->chosenTarget[B_POSITION_PLAYER_RIGHT] == B_POSITION_PLAYER_RIGHT) StringAppend(gStringVar1, COMPOUND_STRING(" {DOWN_ARROW}-")); } else if (moveTarget == MOVE_TARGET_BOTH) diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index 39c1d25526..93c23629f6 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -349,8 +349,8 @@ static void PlayerPartnerHandleChooseMove(u32 battler) u8 chosenMoveId; struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]); - chosenMoveId = gBattleStruct->aiMoveOrAction[battler]; - gBattlerTarget = gBattleStruct->aiChosenTarget[battler]; + chosenMoveId = gAiBattleData->moveOrAction[battler]; + gBattlerTarget = gAiBattleData->chosenTarget[battler]; u32 moveTarget = GetBattlerMoveTargetType(battler, moveInfo->moves[chosenMoveId]); if (moveTarget & MOVE_TARGET_USER) diff --git a/src/battle_debug.c b/src/battle_debug.c index 61635cc815..f0dd06c53f 100644 --- a/src/battle_debug.c +++ b/src/battle_debug.c @@ -941,7 +941,7 @@ static void PutMovesPointsText(struct BattleDebugMenu *data) continue; battlerDef = gSprites[data->spriteIds.aiIconSpriteIds[j]].data[0]; ConvertIntToDecimalStringN(text, - gBattleStruct->aiFinalScore[data->aiBattlerId][battlerDef][i], + gAiBattleData->finalScore[data->aiBattlerId][battlerDef][i], STR_CONV_MODE_RIGHT_ALIGN, 3); AddTextPrinterParameterized(data->aiMovesWindowId, FONT_NORMAL, text, 83 + count * 54, i * 15, 0, NULL); diff --git a/src/battle_main.c b/src/battle_main.c index d7b90bd76d..88bd8e9c07 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -207,6 +207,7 @@ EWRAM_DATA u8 gSentPokesToOpponent[2] = {0}; EWRAM_DATA struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA struct BattleScripting gBattleScripting = {0}; EWRAM_DATA struct BattleStruct *gBattleStruct = NULL; +EWRAM_DATA struct AiBattleData *gAiBattleData = NULL; EWRAM_DATA u8 *gLinkBattleSendBuffer = NULL; EWRAM_DATA u8 *gLinkBattleRecvBuffer = NULL; EWRAM_DATA struct BattleResources *gBattleResources = NULL; @@ -4200,7 +4201,7 @@ static void HandleTurnActionSelectionState(void) SetupAISwitchingData(battler, switchType); // Do scoring - gBattleStruct->aiMoveOrAction[battler] = BattleAI_ChooseMoveOrAction(battler); + gAiBattleData->moveOrAction[battler] = BattleAI_ChooseMoveOrAction(battler); AI_DATA->aiCalcInProgress = FALSE; } // fallthrough diff --git a/src/battle_util2.c b/src/battle_util2.c index 6d7c82cbe5..3fd6549a19 100644 --- a/src/battle_util2.c +++ b/src/battle_util2.c @@ -18,6 +18,7 @@ void AllocateBattleResources(void) InitTrainerHillBattleStruct(); gBattleStruct = AllocZeroed(sizeof(*gBattleStruct)); + gAiBattleData = AllocZeroed(sizeof(*gAiBattleData)); #if B_FLAG_SKY_BATTLE gBattleStruct->isSkyBattle = FlagGet(B_FLAG_SKY_BATTLE); @@ -55,6 +56,7 @@ void FreeBattleResources(void) if (gBattleResources != NULL) { FREE_AND_SET_NULL(gBattleStruct); + FREE_AND_SET_NULL(gAiBattleData); FREE_AND_SET_NULL(gBattleResources->secretBase); FREE_AND_SET_NULL(gBattleResources->battleScriptsStack); diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 40e8b31f41..41ea06b67d 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -771,7 +771,7 @@ static u32 CountAiExpectMoves(struct ExpectedAIAction *expectedAction, u32 battl if ((1u << i) & expectedAction->moveSlots) { if (printLog) - PrintAiMoveLog(battlerId, i, gBattleMons[battlerId].moves[i], gBattleStruct->aiFinalScore[battlerId][expectedAction->target][i]); + PrintAiMoveLog(battlerId, i, gBattleMons[battlerId].moves[i], gAiBattleData->finalScore[battlerId][expectedAction->target][i]); countExpected++; } } @@ -830,7 +830,7 @@ void TestRunner_Battle_CheckChosenMove(u32 battlerId, u32 moveId, u32 target) if (!expectedAction->notMove && !movePasses) { u32 moveSlot = GetMoveSlot(gBattleMons[battlerId].moves, moveId); - PrintAiMoveLog(battlerId, moveSlot, moveId, gBattleStruct->aiFinalScore[battlerId][expectedAction->target][moveSlot]); + PrintAiMoveLog(battlerId, moveSlot, moveId, gAiBattleData->finalScore[battlerId][expectedAction->target][moveSlot]); if (countExpected > 1) Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: Unmatched EXPECT_MOVES %S, got %S", filename, expectedAction->sourceLine, GetMoveName(expectedMoveId), GetMoveName(moveId)); else @@ -904,7 +904,7 @@ static const char *const sCmpToStringTable[] = static void CheckIfMaxScoreEqualExpectMove(u32 battlerId, s32 target, struct ExpectedAIAction *aiAction, const char *filename) { u32 i; - s32 *scores = gBattleStruct->aiFinalScore[battlerId][target]; + s32 *scores = gAiBattleData->finalScore[battlerId][target]; s32 bestScore = 0, bestScoreId = 0; u16 *moves = gBattleMons[battlerId].moves; for (i = 0; i < MAX_MON_MOVES; i++) @@ -1006,7 +1006,7 @@ void TestRunner_Battle_CheckAiMoveScores(u32 battlerId) { u32 moveId1 = gBattleMons[battlerId].moves[scoreCtx->moveSlot1]; s32 target = scoreCtx->target; - s32 *scores = gBattleStruct->aiFinalScore[battlerId][target]; + s32 *scores = gAiBattleData->finalScore[battlerId][target]; if (scoreCtx->toValue) { From 3ca4ce244462e5bb09b3550afa8f71412ab31c4f Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Wed, 12 Mar 2025 20:54:32 +0100 Subject: [PATCH 042/115] Fixed Parental Bond with two-turn attacks (#6408) Co-authored-by: Hedara --- src/battle_script_commands.c | 2 ++ test/battle/ability/parental_bond.c | 34 +++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 4db25d4743..e0bfa82b31 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -16736,6 +16736,8 @@ bool32 IsMoveAffectedByParentalBond(u32 move, u32 battler) && !IsMoveParentalBondBanned(move) && GetMoveCategory(move) != DAMAGE_CATEGORY_STATUS && GetMoveStrikeCount(move) < 2 + && GetMoveEffect(move) != EFFECT_SEMI_INVULNERABLE + && GetMoveEffect(move) != EFFECT_TWO_TURNS_ATTACK && GetMoveEffect(move) != EFFECT_MULTI_HIT) { if (IsDoubleBattle()) diff --git a/test/battle/ability/parental_bond.c b/test/battle/ability/parental_bond.c index 40f70252f9..9bd6570490 100644 --- a/test/battle/ability/parental_bond.c +++ b/test/battle/ability/parental_bond.c @@ -318,6 +318,40 @@ SINGLE_BATTLE_TEST("Parental Bond only triggers Dragon Tail's target switch out } } +SINGLE_BATTLE_TEST("Parental Bond does not trigger on semi-invulnerable moves") +{ + GIVEN { + ASSUME(GetMoveCategory(MOVE_FLY) != DAMAGE_CATEGORY_STATUS); + ASSUME(GetMoveStrikeCount(MOVE_FLY) < 2); + ASSUME(GetMoveEffect(MOVE_FLY) == EFFECT_SEMI_INVULNERABLE); + PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_FLY, gimmick: GIMMICK_MEGA); MOVE(opponent, MOVE_CELEBRATE); } + TURN { SKIP_TURN(player); } + } SCENE { + HP_BAR(opponent); + NOT HP_BAR(opponent); + } +} + +SINGLE_BATTLE_TEST("Parental Bond does not trigger on two turn attacks") +{ + GIVEN { + ASSUME(GetMoveCategory(MOVE_RAZOR_WIND) != DAMAGE_CATEGORY_STATUS); + ASSUME(GetMoveStrikeCount(MOVE_RAZOR_WIND) < 2); + ASSUME(GetMoveEffect(MOVE_RAZOR_WIND) == EFFECT_TWO_TURNS_ATTACK); + PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_RAZOR_WIND, gimmick: GIMMICK_MEGA); MOVE(opponent, MOVE_CELEBRATE); } + TURN { SKIP_TURN(player); } + } SCENE { + HP_BAR(opponent); + NOT HP_BAR(opponent); + } +} + TO_DO_BATTLE_TEST("Parental Bond tests"); // Temporary TODO: Convert Bulbapedia description into tests. From 7193909fa71f12adcd9a15edbdcd3c7e49baaeb4 Mon Sep 17 00:00:00 2001 From: surskitty Date: Wed, 12 Mar 2025 16:31:45 -0400 Subject: [PATCH 043/115] Configuration to make all Hail moves summon Snow or vis versa, to have only one ice weather (#6149) --- data/battle_scripts_1.s | 4 ++ include/config/battle.h | 19 +++++--- src/battle_script_commands.c | 9 +++- src/data/items.h | 19 ++++++++ src/data/moves_info.h | 50 +++++++++++++++++----- test/battle/move_effect/chilly_reception.c | 19 +++++++- test/battle/weather/hail.c | 8 ++++ 7 files changed, 110 insertions(+), 18 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index aaa03f0ac6..7d94e9727b 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -272,7 +272,11 @@ BattleScript_EffectChillyReception:: jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_RAIN_PRIMAL, BattleScript_EffectChillyReceptionBlockedByPrimalRain jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_EffectChillyReceptionBlockedByStrongWinds call BattleScript_EffectChillyReceptionPlayAnimation + #if B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_HAIL + setfieldweather BATTLE_WEATHER_HAIL + #else setfieldweather BATTLE_WEATHER_SNOW + #endif call BattleScript_MoveWeatherChangeRet goto BattleScript_MoveSwitch BattleScript_EffectChillyReceptionPlayAnimation: diff --git a/include/config/battle.h b/include/config/battle.h index 3fdea02ff4..17c5daac45 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -9,7 +9,6 @@ #define B_MULTI_HIT_CHANCE GEN_LATEST // In Gen5+, multi-hit moves have different %. See SetRandomMultiHitCounter for values. #define B_WHITEOUT_MONEY GEN_LATEST // In Gen4+, the amount of money lost by losing a battle is determined by the amount of badges earned. Previously, it would cut the current money by half. (While this change was also in FRLG, for the sake of simplicity, setting this to GEN_3 will result in RSE behavior.) #define B_LIGHT_BALL_ATTACK_BOOST GEN_LATEST // In Gen4+, Light Ball doubles the power of physical moves in addition to special moves. -#define B_SANDSTORM_SPDEF_BOOST GEN_LATEST // In Gen4+, Sandstorm weather multiplies the Sp. Defense of Rock-type Pokémon by x1.5. // Experience settings #define B_EXP_CATCH GEN_LATEST // In Gen6+, Pokémon get experience from catching. @@ -130,7 +129,6 @@ #define B_PURSUIT_TARGET GEN_LATEST // In Gen4+, Pursuit attacks a switching opponent even if they weren't targeting them. Before Gen4, Pursuit only attacks a switching opponent that it originally targeted. // Ability settings -#define B_ABILITY_WEATHER GEN_LATEST // In Gen6+, ability-induced weather lasts 5 turns. Before, it lasted until the battle ended or until it was changed by a move or a different weather-affecting ability. #define B_GALE_WINGS GEN_LATEST // In Gen7+ requires full HP to trigger. #define B_STANCE_CHANGE_FAIL GEN_LATEST // In Gen7+, Stance Change fails if the Pokémon is unable to use a move because of confusion, paralysis, etc. In Gen6, it doesn't. #define B_SHADOW_TAG_ESCAPE GEN_LATEST // In Gen4+, if both sides have a Pokémon with Shadow Tag, all battlers can escape. Before, neither side could escape this situation. @@ -147,7 +145,6 @@ #define B_REDIRECT_ABILITY_IMMUNITY GEN_LATEST // In Gen5+, Pokémon with Lightning Rod/Storm Drain become immune to Electric/Water-type moves and increase their Sp. Attack by 1 stage on top of the redirecting effect. #define B_REDIRECT_ABILITY_ALLIES GEN_LATEST // In Gen4+, Lightning Rod/Storm Drain redirect ally's moves as well. #define B_LEAF_GUARD_PREVENTS_REST GEN_LATEST // In Gen5+, Leaf Guard prevents the use of Rest in harsh sunlight. -#define B_SNOW_WARNING GEN_LATEST // In Gen9+, Snow Warning will summon snow instead of hail. #define B_TRANSISTOR_BOOST GEN_LATEST // In Gen9+, Transistor will only boost Electric-type moves by 1.3x as opposed to 1.5x. #define B_ILLUMINATE_EFFECT GEN_LATEST // In Gen9+, Illuminate prevents accuracy reductions and ignores the target's evasion. #define B_WEAK_ARMOR_SPEED GEN_LATEST // In Gen7+, Weak Armor raises Speed by 2 stages instead of 1 when hit by a physical move. @@ -221,6 +218,20 @@ // Ingame partner flag #define B_SHOW_PARTNER_TARGET FALSE // Shows the battler partner will target. +// Weather settings +// Search for 'rain', 'sunny day', and 'hail' for move-specific or species-specific weather interactions. + +#define B_ICE_WEATHER_BOTH 0 +#define B_ICE_WEATHER_HAIL 1 +#define B_ICE_WEATHER_SNOW 2 + +#define B_ABILITY_WEATHER GEN_LATEST // In Gen6+, ability-induced weather lasts 5 turns. Before, it lasted until the battle ended or until it was changed by a move or a different weather-affecting ability. +#define B_SANDSTORM_SPDEF_BOOST GEN_LATEST // In Gen4+, Sandstorm weather multiplies the Sp. Defense of Rock-type Pokémon by x1.5. +#define B_OVERWORLD_FOG GEN_LATEST // In Gen8+, overworld Fog summons Misty Terrain in battle. In Gen4 only, overworld Fog summons the unique fog weather condition in battle. +#define B_OVERWORLD_SNOW GEN_LATEST // In Gen9+, overworld Snow will summon snow instead of hail in battle. +#define B_SNOW_WARNING GEN_LATEST // In Gen9+, Snow Warning will summon snow instead of hail. +#define B_PREFERRED_ICE_WEATHER B_ICE_WEATHER_BOTH // Toggles Hail move effects to Snow and vis versa. + // Terrain settings #define B_TERRAIN_BG_CHANGE TRUE // If set to TRUE, terrain moves permanently change the default battle background until the effect fades. #define B_THUNDERSTORM_TERRAIN TRUE // If TRUE, overworld Thunderstorm generates Rain and Electric Terrain as in Gen 8. @@ -268,8 +279,6 @@ #define B_TRAINER_MON_RANDOM_ABILITY FALSE // If this is set to TRUE a random legal ability will be generated for a trainer mon #define B_OBEDIENCE_MECHANICS GEN_LATEST // In PLA+ (here Gen8+), obedience restrictions also apply to non-outsider Pokémon, albeit based on their level met rather than actual level #define B_USE_FROSTBITE FALSE // In PLA, Frostbite replaces Freeze. Enabling this flag does the same here. Moves can still be cherry-picked to either Freeze or Frostbite. Freeze-Dry, Secret Power & Tri Attack depend on this config. -#define B_OVERWORLD_SNOW GEN_LATEST // In Gen9+, overworld Snow will summon snow instead of hail in battle. -#define B_OVERWORLD_FOG GEN_LATEST // In Gen8+, overworld Fog summons Misty Terrain in battle. In Gen4 only, overworld Fog summons the unique fog weather condition in battle. #define B_TOXIC_REVERSAL GEN_LATEST // In Gen5+, bad poison will change to regular poison at the end of battles. #define B_TRY_CATCH_TRAINER_BALL GEN_LATEST // In Gen4+, trying to catch a Trainer's Pokémon does not consume the Poké Ball. #define B_SLEEP_CLAUSE FALSE // Enables Sleep Clause all the time in every case, overriding B_FLAG_SLEEP_CLAUSE. Use that for modularity. diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 6c73329c8a..e67323ffa9 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -4343,8 +4343,13 @@ void SetMoveEffect(bool32 primary, bool32 certain) msg = B_MSG_STARTED_SANDSTORM; break; case MOVE_EFFECT_HAIL: - weather = BATTLE_WEATHER_HAIL; - msg = B_MSG_STARTED_HAIL; + if (B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_SNOW) { + weather = BATTLE_WEATHER_SNOW; + msg = B_MSG_STARTED_SNOW; + } else { + weather = BATTLE_WEATHER_HAIL; + msg = B_MSG_STARTED_HAIL; + } break; } if (TryChangeBattleWeather(gBattlerAttacker, weather, FALSE)) diff --git a/src/data/items.h b/src/data/items.h index 2b560ad9d5..9df4265116 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -8008,10 +8008,22 @@ const struct Item gItemsInfo[] = .name = _("Icy Rock"), .price = (I_PRICE >= GEN_9) ? 8000 : ((I_PRICE >= GEN_7) ? 4000 : 200), .holdEffect = HOLD_EFFECT_ICY_ROCK, + #if B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_HAIL .description = COMPOUND_STRING( "Extends the length\n" "of the move Hail\n" "used by the holder."), + #elif B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_SNOW + .description = COMPOUND_STRING( + "Extends the length\n" + "of Snowscape if\n" + "used by the holder."), + #else + .description = COMPOUND_STRING( + "Extends the length\n" + "of cold weathers\n" + "used by the holder."), + #endif .pocket = POCKET_ITEMS, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, @@ -10502,10 +10514,17 @@ const struct Item gItemsInfo[] = { .name = _("TM07"), .price = 3000, + #if B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_SNOW + .description = COMPOUND_STRING( + "Raises the Defense\n" + "of Ice type {PKMN}\n" + "for 5 turns."), + #else .description = COMPOUND_STRING( "Creates a hailstorm\n" "that damages all\n" "types except Ice."), + #endif .importance = I_REUSABLE_TMS, .pocket = POCKET_TM_HM, .type = ITEM_USE_PARTY_MENU, diff --git a/src/data/moves_info.h b/src/data/moves_info.h index f9897650a5..0a8c157806 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -6757,10 +6757,17 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_HAIL] = { .name = COMPOUND_STRING("Hail"), - .description = COMPOUND_STRING( - "Summons a hailstorm that\n" - "strikes every turn."), - .effect = EFFECT_HAIL, + #if B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_SNOW + .description = COMPOUND_STRING( + "Summons a snowstorm that\n" + "lasts for five turns."), + .effect = EFFECT_SNOWSCAPE, + #else + .description = COMPOUND_STRING( + "Summons a hailstorm that\n" + "strikes every turn."), + .effect = EFFECT_HAIL, + #endif .power = 0, .type = TYPE_ICE, .accuracy = 0, @@ -6775,7 +6782,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_HAIL, .contestComboMoves = {0}, - .battleAnimScript = gBattleAnimMove_Hail, + .battleAnimScript = (B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_SNOW) ? gBattleAnimMove_Snowscape : gBattleAnimMove_Hail, .validApprenticeMove = TRUE, }, @@ -16629,9 +16636,19 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_AURORA_VEIL] = { .name = COMPOUND_STRING("Aurora Veil"), + #if B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_SNOW + .description = COMPOUND_STRING( + "Weakens all attacks, but\n" + "only usable with snow."), + #elif B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_BOTH + .description = COMPOUND_STRING( + "Weakens all attacks if\n" + "used in hail or snow."), + #else .description = COMPOUND_STRING( "Weakens all attacks, but\n" "only usable with hail."), + #endif .effect = EFFECT_AURORA_VEIL, .power = 0, .type = TYPE_ICE, @@ -20130,9 +20147,15 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_CHILLY_RECEPTION] = { .name = COMPOUND_STRING("Chilly Reception"), + #if B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_HAIL + .description = COMPOUND_STRING( + "Bad joke summons hailstorm.\n" + "The user also switches out."), + #else .description = COMPOUND_STRING( "Bad joke summons snowstorm.\n" "The user also switches out."), + #endif .effect = EFFECT_CHILLY_RECEPTION, .power = 0, .type = TYPE_ICE, @@ -20171,10 +20194,17 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_SNOWSCAPE] = { .name = COMPOUND_STRING("Snowscape"), - .description = COMPOUND_STRING( - "Summons a snowstorm that\n" - "lasts for five turns."), - .effect = EFFECT_SNOWSCAPE, + #if B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_HAIL + .description = COMPOUND_STRING( + "Summons a hailstorm that\n" + "strikes every turn."), + .effect = EFFECT_HAIL, + #else + .description = COMPOUND_STRING( + "Summons a snowstorm that\n" + "lasts for five turns."), + .effect = EFFECT_SNOWSCAPE, + #endif .power = 0, .type = TYPE_ICE, .accuracy = 0, @@ -20186,7 +20216,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = gBattleAnimMove_Snowscape, + .battleAnimScript = (B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_HAIL) ? gBattleAnimMove_Hail : gBattleAnimMove_Snowscape, }, [MOVE_POUNCE] = diff --git a/test/battle/move_effect/chilly_reception.c b/test/battle/move_effect/chilly_reception.c index 9b464f0d03..0361f9db4f 100644 --- a/test/battle/move_effect/chilly_reception.c +++ b/test/battle/move_effect/chilly_reception.c @@ -5,8 +5,11 @@ ASSUMPTIONS { ASSUME(GetMoveEffect(MOVE_CHILLY_RECEPTION) == EFFECT_CHILLY_RECEPTION); } - +#if B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_HAIL +SINGLE_BATTLE_TEST("Chilly Reception sets up hail and switches the user out") +#else SINGLE_BATTLE_TEST("Chilly Reception sets up snow and switches the user out") +#endif { GIVEN { PLAYER(SPECIES_SLOWKING_GALAR); @@ -17,13 +20,23 @@ SINGLE_BATTLE_TEST("Chilly Reception sets up snow and switches the user out") } SCENE { MESSAGE("Slowking is preparing to tell a chillingly bad joke!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CHILLY_RECEPTION, player); +#if B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_HAIL + MESSAGE("It started to hail!"); +#else MESSAGE("It started to snow!"); +#endif MESSAGE("Slowking went back to 1!"); SEND_IN_MESSAGE("Slowpoke"); +#if B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_HAIL + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HAIL_CONTINUES); +#else ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SNOW_CONTINUES); +#endif } } + + SINGLE_BATTLE_TEST("Chilly Reception switches the user out, even if the weather does not change") { GIVEN { @@ -83,7 +96,11 @@ SINGLE_BATTLE_TEST("Chilly Reception changes the weather, even if the user canno } SCENE { MESSAGE("Slowking is preparing to tell a chillingly bad joke!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CHILLY_RECEPTION, player); +#if B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_HAIL + MESSAGE("It started to hail!"); +#else MESSAGE("It started to snow!"); +#endif NOT MESSAGE("Slowking went back to 1!"); } } diff --git a/test/battle/weather/hail.c b/test/battle/weather/hail.c index 6c7f7bcdec..e262691279 100644 --- a/test/battle/weather/hail.c +++ b/test/battle/weather/hail.c @@ -2,6 +2,14 @@ #include "test/battle.h" // Please add Hail interactions with move, item and ability effects on their respective files. +ASSUMPTIONS +{ + ASSUME(GetMoveEffect(MOVE_HAIL) == EFFECT_HAIL); + ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_ICE && gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_ICE); + ASSUME(gSpeciesInfo[SPECIES_WYNAUT].types[0] != TYPE_ICE && gSpeciesInfo[SPECIES_WYNAUT].types[1] != TYPE_ICE); + ASSUME(gSpeciesInfo[SPECIES_GLALIE].types[0] == TYPE_ICE || gSpeciesInfo[SPECIES_GLALIE].types[1] == TYPE_ICE); +} + SINGLE_BATTLE_TEST("Hail deals 1/16 damage per turn") { s16 hailDamage; From b08a5fb15a12b4fa58466a50e1da0452d2e7dd36 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Thu, 13 Mar 2025 13:46:48 +0100 Subject: [PATCH 044/115] Tests for checking all move animations (#6297) Co-authored-by: Hedara --- include/config/test.h | 3 + include/global.h | 4 + src/battle_main.c | 4 + src/sprite.c | 7 + test/battle/move_animations/all_anims.c | 914 ++++++++++++++++++++++++ 5 files changed, 932 insertions(+) create mode 100644 test/battle/move_animations/all_anims.c diff --git a/include/config/test.h b/include/config/test.h index a8e2f4ab11..2fec28c951 100644 --- a/include/config/test.h +++ b/include/config/test.h @@ -1137,4 +1137,7 @@ #undef B_FLAG_SLEEP_CLAUSE #define B_FLAG_SLEEP_CLAUSE TESTING_FLAG_SLEEP_CLAUSE +// Move animation testing +#define T_SHOULD_RUN_MOVE_ANIM FALSE // If TRUE, enables the move animation tests, these are very computationally heavy and takes a long time to run. + #endif // GUARD_CONFIG_TEST_H diff --git a/include/global.h b/include/global.h index c033ab9b35..4f1a861460 100644 --- a/include/global.h +++ b/include/global.h @@ -1132,4 +1132,8 @@ struct MapPosition s8 elevation; }; +#if T_SHOULD_RUN_MOVE_ANIM +extern bool32 gLoadFail; +#endif // T_SHOULD_RUN_MOVE_ANIM + #endif // GUARD_GLOBAL_H diff --git a/src/battle_main.c b/src/battle_main.c index 88bd8e9c07..dec919c27a 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -425,6 +425,10 @@ void CB2_InitBattle(void) AllocateMonSpritesGfx(); RecordedBattle_ClearFrontierPassFlag(); +#if T_SHOULD_RUN_MOVE_ANIM + gLoadFail = FALSE; +#endif // T_SHOULD_RUN_MOVE_ANIM + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) diff --git a/src/sprite.c b/src/sprite.c index eb458cb616..81e68f0052 100644 --- a/src/sprite.c +++ b/src/sprite.c @@ -26,6 +26,9 @@ #define SPRITE_TILE_IS_ALLOCATED(n) ((sSpriteTileAllocBitmap[(n) / 8] >> ((n) % 8)) & 1) +#if T_SHOULD_RUN_MOVE_ANIM +EWRAM_DATA bool32 gLoadFail = FALSE; +#endif // T_SHOULD_RUN_MOVE_ANIM struct SpriteCopyRequest { @@ -1449,6 +1452,10 @@ static u16 LoadSpriteSheetWithOffset(const struct SpriteSheet *sheet, u32 offset if (tileStart < 0) { +#if T_SHOULD_RUN_MOVE_ANIM + gLoadFail = TRUE; +#endif // T_SHOULD_RUN_MOVE_ANIM + DebugPrintf("Tile: %u", sheet->tag); return 0; } else diff --git a/test/battle/move_animations/all_anims.c b/test/battle/move_animations/all_anims.c new file mode 100644 index 0000000000..dfba4eb185 --- /dev/null +++ b/test/battle/move_animations/all_anims.c @@ -0,0 +1,914 @@ +#include "global.h" +#include "test/battle.h" + +// These tests are very heavy computationally. Only use them to review animation PRs. + +#if T_SHOULD_RUN_MOVE_ANIM + +static void ParametrizeMovesAndSpecies(u32 j, u32 *pMove, u32 *pSpecies) +{ + if (gMovesInfo[j].effect == EFFECT_DARK_VOID) // User needs to be Darkrai + { + *pMove = j; + *pSpecies = SPECIES_DARKRAI; + } + else if (gMovesInfo[j].effect == EFFECT_HYPERSPACE_FURY) // User needs to be Hoopa Unbound + { + *pMove = j; + *pSpecies = SPECIES_HOOPA_UNBOUND; + } + else if (gMovesInfo[j].effect == EFFECT_AURA_WHEEL) // User needs to be Morpeko + { + *pMove = j; + *pSpecies = SPECIES_MORPEKO_FULL_BELLY; + } + else if (gMovesInfo[j].effect == EFFECT_ROTOTILLER || gMovesInfo[j].effect == EFFECT_FLOWER_SHIELD) // User needs to be Grass-type + { + *pMove = j; + *pSpecies = SPECIES_TANGELA; + } + else if (gMovesInfo[j].effect == EFFECT_FAIL_IF_NOT_ARG_TYPE && gMovesInfo[j].argument.type == TYPE_FIRE) // User needs to be Fire-type + { + *pMove = j; + *pSpecies = SPECIES_FLAREON; + } + else if (gMovesInfo[j].effect == EFFECT_FAIL_IF_NOT_ARG_TYPE && gMovesInfo[j].argument.type == TYPE_ELECTRIC) // User needs to be Electric-type + { + *pMove = j; + *pSpecies = SPECIES_JOLTEON; + } + else if (gMovesInfo[j].effect == EFFECT_MAGNETIC_FLUX || gMovesInfo[j].effect == EFFECT_GEAR_UP) // User needs to have Plus + { + *pMove = j; + *pSpecies = SPECIES_KLINKLANG; + } + else if (gMovesInfo[j].effect == EFFECT_PLACEHOLDER) // Ignore placeholder *pMoves + { + *pMove = MOVE_POUND; + *pSpecies = SPECIES_WOBBUFFET; + } + else // Everything else + { + *pMove = j; + *pSpecies = SPECIES_WOBBUFFET; + } +} + +static bool32 TargetHasToMove(u32 move) // Opponent needs to hit the player first +{ + if (gMovesInfo[move].effect == EFFECT_COUNTER + || gMovesInfo[move].effect == EFFECT_MIRROR_MOVE + || gMovesInfo[move].effect == EFFECT_CONVERSION_2 + || gMovesInfo[move].effect == EFFECT_MIRROR_COAT + || gMovesInfo[move].effect == EFFECT_METAL_BURST + || gMovesInfo[move].effect == EFFECT_COPYCAT + || gMovesInfo[move].effect == EFFECT_SUCKER_PUNCH + || gMovesInfo[move].effect == EFFECT_INSTRUCT) + return TRUE; + return FALSE; +} + +static bool32 AttackerHasToSwitch(u32 move) // User needs to send out a different team member +{ + if (gMovesInfo[move].effect == EFFECT_TELEPORT + || gMovesInfo[move].effect == EFFECT_EXPLOSION + || gMovesInfo[move].effect == EFFECT_BATON_PASS + || gMovesInfo[move].effect == EFFECT_MEMENTO + || gMovesInfo[move].effect == EFFECT_HEALING_WISH + || gMovesInfo[move].effect == EFFECT_HIT_ESCAPE + || gMovesInfo[move].effect == EFFECT_FINAL_GAMBIT + || gMovesInfo[move].effect == EFFECT_PARTING_SHOT + || gMovesInfo[move].effect == EFFECT_SHED_TAIL + || gMovesInfo[move].effect == EFFECT_CHILLY_RECEPTION) + return TRUE; + return FALSE; +} + +static bool32 UserHasToGoFirst(u32 move) // Player needs to go first +{ + if (gMovesInfo[move].effect == EFFECT_PROTECT + || gMovesInfo[move].effect == EFFECT_ENDURE + || gMovesInfo[move].effect == EFFECT_FOLLOW_ME + || gMovesInfo[move].effect == EFFECT_MAGIC_COAT + || gMovesInfo[move].effect == EFFECT_ME_FIRST + || gMovesInfo[move].effect == EFFECT_QUASH + || gMovesInfo[move].effect == EFFECT_MAT_BLOCK + || gMovesInfo[move].effect == EFFECT_ELECTRIFY + || gMovesInfo[move].effect == EFFECT_SHELL_TRAP) + return TRUE; + return FALSE; +} + +static void WhenSingles(u32 move, struct BattlePokemon *attacker, struct BattlePokemon *defender) +{ + // Setup turn + if (gMovesInfo[move].effect == EFFECT_SNORE + || gMovesInfo[move].effect == EFFECT_SLEEP_TALK) + { // attacker needs to be asleep + TURN { MOVE(attacker, MOVE_REST); } + } + else if (gMovesInfo[move].effect == EFFECT_SPIT_UP + || gMovesInfo[move].effect == EFFECT_SWALLOW) + { // attacker needs to have used Stockpile + TURN { MOVE(attacker, MOVE_STOCKPILE); } + } + else if ((gMovesInfo[move].effect == EFFECT_DOUBLE_POWER_ON_ARG_STATUS && gMovesInfo[move].argument.status == STATUS1_PARALYSIS)) + { // defender needs to be paralyzed + TURN { MOVE(attacker, MOVE_THUNDER_WAVE); } + } + else if (gMovesInfo[move].effect == EFFECT_RECYCLE + || gMovesInfo[move].effect == EFFECT_BELCH) + { // attacker needs to have eaten its Berry + TURN { MOVE(attacker, MOVE_STUFF_CHEEKS); } + } + else if (gMovesInfo[move].effect == EFFECT_REFRESH + || gMovesInfo[move].effect == EFFECT_PSYCHO_SHIFT) + { // attacker needs to be paralyzed + TURN { MOVE(defender, MOVE_THUNDER_WAVE); } + } + else if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) + { // attacker needs to have used all other moves + TURN { MOVE(attacker, MOVE_POUND); } + } + else if (gMovesInfo[move].effect == EFFECT_DREAM_EATER + || gMovesInfo[move].effect == EFFECT_NIGHTMARE) + { // defender needs to be asleep + TURN { MOVE(defender, MOVE_REST); } + } + else if (gMovesInfo[move].effect == EFFECT_VENOM_DRENCH + || gMovesInfo[move].effect == EFFECT_PURIFY) + { // defender needs to be poisoned + TURN { MOVE(attacker, MOVE_POISON_POWDER); } + } + else if (gMovesInfo[move].effect == EFFECT_TOPSY_TURVY) + { // defender needs to have its stats buffed + TURN { MOVE(defender, MOVE_SWORDS_DANCE); } + } + else if (gMovesInfo[move].effect == EFFECT_AURORA_VEIL) + { // Has to be hailing + TURN { MOVE(attacker, MOVE_HAIL); } + } + else if (gMovesInfo[move].effect == EFFECT_HIT_SET_REMOVE_TERRAIN && gMovesInfo[move].argument.moveProperty == ARG_TRY_REMOVE_TERRAIN_FAIL) + { // Needs a terrain + TURN { MOVE(attacker, MOVE_ELECTRIC_TERRAIN); } + } + // Effective turn + TURN { + if (TargetHasToMove(move)) + { + MOVE(defender, gMovesInfo[move].effect == EFFECT_MIRROR_COAT ? MOVE_SWIFT : MOVE_POUND); + MOVE(attacker, move); + } + else if (gMovesInfo[move].effect == EFFECT_SNATCH) + { // defender needs to steal the defender's buffing move + MOVE(attacker, move); + MOVE(defender, MOVE_SWORDS_DANCE); + } + else if (gMovesInfo[move].effect == EFFECT_OHKO) + { // defender needs to send out a different team member + MOVE(attacker, move); + SEND_OUT(defender, 1); + } + else if (AttackerHasToSwitch(move)) + { // attacker needs to send out a different team member + MOVE(attacker, move); + SEND_OUT(attacker, 1); + } + else if (UserHasToGoFirst(move)) + { // attacker needs to go first + MOVE(attacker, move); + MOVE(defender, MOVE_POUND); + } + else if (gMovesInfo[move].effect == EFFECT_REVIVAL_BLESSING) + { // attacker selects party member + MOVE(attacker, move, partyIndex: 1); + MOVE(defender, MOVE_HELPING_HAND); + } + else if (gMovesInfo[move].effect == EFFECT_UPPER_HAND) + { // defender needs to choose priority move + MOVE(attacker, move); + MOVE(defender, MOVE_QUICK_ATTACK); + } + else if (gMovesInfo[move].effect == EFFECT_ACUPRESSURE) + { + MOVE(attacker, move, target: attacker); + } + else + { // All other moves + MOVE(defender, MOVE_HELPING_HAND); // Helping Hand, so there's no anim on the defender's side. + MOVE(attacker, move); + } + } +} + +static void SceneSingles(u32 move, struct BattlePokemon *mon) +{ + if (gMovesInfo[move].effect == EFFECT_FOLLOW_ME + || gMovesInfo[move].effect == EFFECT_HELPING_HAND + || gMovesInfo[move].effect == EFFECT_AFTER_YOU + || gMovesInfo[move].effect == EFFECT_ALLY_SWITCH + || gMovesInfo[move].effect == EFFECT_AROMATIC_MIST + || move == MOVE_HOLD_HANDS // Hack here because it shares its effect with Splash and Celebrate + || gMovesInfo[move].effect == EFFECT_COACHING + || gMovesInfo[move].effect == EFFECT_DRAGON_CHEER) + { + // Moves that fail in Single Battles + } + else if (gMovesInfo[move].effect == EFFECT_MIRROR_MOVE) // Copy the opponent's move + { + ANIMATION(ANIM_TYPE_MOVE, MOVE_POUND, mon); + } + else if (gMovesInfo[move].effect == EFFECT_NATURE_POWER) // Recorded battles always use BATTLE_TERRAIN_BUILDING + { + ANIMATION(ANIM_TYPE_MOVE, B_NATURE_POWER_MOVES >= GEN_4 ? MOVE_TRI_ATTACK : MOVE_SWIFT, mon); + } + else // All other moves + { + ANIMATION(ANIM_TYPE_MOVE, move, mon); + } +} + +static void DoublesWhen(u32 move, struct BattlePokemon *attacker, struct BattlePokemon *target, struct BattlePokemon *ignore1, struct BattlePokemon *ignore2) +{ + // Setup turn + if (gMovesInfo[move].effect == EFFECT_SNORE + || gMovesInfo[move].effect == EFFECT_SLEEP_TALK) + { // Player needs to be asleep + TURN { MOVE(attacker, MOVE_REST); } + } + else if (gMovesInfo[move].effect == EFFECT_SPIT_UP + || gMovesInfo[move].effect == EFFECT_SWALLOW) + { // Player needs to have used Stockpile + TURN { MOVE(attacker, MOVE_STOCKPILE); } + } + else if ((gMovesInfo[move].effect == EFFECT_DOUBLE_POWER_ON_ARG_STATUS && gMovesInfo[move].argument.status == STATUS1_PARALYSIS)) + { // Opponent needs to be paralyzed + TURN { MOVE(attacker, MOVE_THUNDER_WAVE, target: target); } + } + else if (gMovesInfo[move].effect == EFFECT_RECYCLE + || gMovesInfo[move].effect == EFFECT_BELCH) + { // Player needs to have eaten its Berry + TURN { MOVE(attacker, MOVE_STUFF_CHEEKS); } + } + else if (gMovesInfo[move].effect == EFFECT_REFRESH + || gMovesInfo[move].effect == EFFECT_PSYCHO_SHIFT) + { // Player needs to be paralyzed + TURN { MOVE(target, MOVE_THUNDER_WAVE, target: attacker); } + } + else if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) + { // Player needs to have used all other moves + TURN { MOVE(attacker, MOVE_POUND, target: target); } + } + else if (gMovesInfo[move].effect == EFFECT_DREAM_EATER + || gMovesInfo[move].effect == EFFECT_NIGHTMARE) + { // Opponent needs to be asleep + TURN { MOVE(target, MOVE_REST); } + } + else if (gMovesInfo[move].effect == EFFECT_VENOM_DRENCH + || gMovesInfo[move].effect == EFFECT_PURIFY) + { // Opponent needs to be poisoned + TURN { MOVE(attacker, MOVE_POISON_POWDER, target: target); } + } + else if (gMovesInfo[move].effect == EFFECT_TOPSY_TURVY) + { // Opponent needs to have its stats buffed + TURN { MOVE(target, MOVE_SWORDS_DANCE); } + } + else if (gMovesInfo[move].effect == EFFECT_AURORA_VEIL) + { // Has to be hailing + TURN { MOVE(attacker, MOVE_HAIL); } + } + else if (gMovesInfo[move].effect == EFFECT_HIT_SET_REMOVE_TERRAIN && gMovesInfo[move].argument.moveProperty == ARG_TRY_REMOVE_TERRAIN_FAIL) + { // Needs a terrain + TURN { MOVE(attacker, MOVE_ELECTRIC_TERRAIN); } + } + // Effective turn + TURN { + if (TargetHasToMove(move)) + { // Opponent needs to hit the player first + MOVE(target, gMovesInfo[move].effect == EFFECT_MIRROR_COAT ? MOVE_SWIFT : MOVE_POUND, target: attacker); + MOVE(attacker, move, target: target); + } + else if (gMovesInfo[move].effect == EFFECT_SNATCH) + { // Opponent needs to steal the opponent's buffing move + MOVE(attacker, move, target: target); + MOVE(target, MOVE_SWORDS_DANCE); + } + else if (gMovesInfo[move].effect == EFFECT_OHKO) + { // Opponent needs to send out a different team member + MOVE(attacker, move, target: target); + SEND_OUT(target, 2); + } + else if (AttackerHasToSwitch(move)) + { // Player needs to send out a different team member + MOVE(attacker, move, target: target); + SEND_OUT(attacker, 2); + } + else if (UserHasToGoFirst(move)) + { // Player needs to go first + MOVE(attacker, move, target: target); + MOVE(target, MOVE_POUND, target: attacker); + } + else if (gMovesInfo[move].effect == EFFECT_AFTER_YOU) + { // Player goes first, opponent third + MOVE(attacker, move, target: target); + MOVE(ignore1, MOVE_CELEBRATE); + MOVE(target, MOVE_POUND, target: attacker); + MOVE(ignore2, MOVE_CELEBRATE); + } + else if (gMovesInfo[move].effect == EFFECT_REVIVAL_BLESSING) + { // Player selects party member + MOVE(attacker, move, partyIndex: 2); + MOVE(target, MOVE_LAST_RESORT, target: attacker); // Last Resort, so there's no anim on the opponent's side. + } + else if (gMovesInfo[move].effect == EFFECT_UPPER_HAND) + { // Opponent needs to choose priority move + MOVE(attacker, move, target: target); + MOVE(target, MOVE_QUICK_ATTACK, target: attacker); + } + else + { // All other moves + MOVE(target, MOVE_LAST_RESORT, target: attacker); // Last Resort, so there's no anim on the opponent's side. + MOVE(attacker, move, target: target); + } + if (gMovesInfo[move].effect != EFFECT_AFTER_YOU) + { + // Actions for the remaining battlers + MOVE(ignore1, MOVE_CELEBRATE); + MOVE(ignore2, MOVE_CELEBRATE); + } + } +} + +static void DoublesScene(u32 move, struct BattlePokemon *attacker) +{ + if (gMovesInfo[move].effect == EFFECT_MAGNETIC_FLUX || gMovesInfo[move].effect == EFFECT_GEAR_UP) // For some reason, Magnetic Flux and Gear Up are failing in Double Battles here + { + // Moves that fail in Double Battles + } + else if (gMovesInfo[move].effect == EFFECT_MIRROR_MOVE) + { // Copy the opponent's move + ANIMATION(ANIM_TYPE_MOVE, MOVE_POUND, attacker); + } + else if (gMovesInfo[move].effect == EFFECT_NATURE_POWER) + { // Recorded battles always use BATTLE_TERRAIN_BUILDING + ANIMATION(ANIM_TYPE_MOVE, B_NATURE_POWER_MOVES >= GEN_4 ? MOVE_TRI_ATTACK : MOVE_SWIFT, attacker); + } + else + { // All other moves + ANIMATION(ANIM_TYPE_MOVE, move, attacker); + } +} + +SINGLE_BATTLE_TEST("Move Animations don't leak when used - Singles (player to opponent)") +{ + u32 j = 1, move = 0, species = 0; + FORCE_MOVE_ANIM(TRUE); + for (; j < MOVES_COUNT; j++) + { + ParametrizeMovesAndSpecies(j, &move, &species); + PARAMETRIZE { move = move; species = species; } + } + GIVEN { + PLAYER(species) { + HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); + if (species == SPECIES_WOBBUFFET) + Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) + Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) + Ability(ABILITY_PLUS); + } + PLAYER(SPECIES_WOBBUFFET) { + Gender(MON_MALE); MaxHP(9999); Moves(MOVE_POUND); + HP(gMovesInfo[move].effect == EFFECT_REVIVAL_BLESSING ? 0 : 9998); + } + OPPONENT(SPECIES_WOBBUFFET) { + Gender(MON_MALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); Ability(ABILITY_TELEPATHY); + if (gMovesInfo[move].effect != EFFECT_BESTOW) + Item(ITEM_ORAN_BERRY); + } + OPPONENT(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); } + } WHEN { + WhenSingles(move, player, opponent); + } SCENE { + SceneSingles(move, player); + } THEN { + FORCE_MOVE_ANIM(FALSE); + if (gLoadFail) + DebugPrintf("Move failed: %S (%u)", gMovesInfo[move].name, move); + EXPECT_EQ(gLoadFail, FALSE); + } +} + +SINGLE_BATTLE_TEST("Move Animations don't leak when used - Singles (opponent to player)") +{ + u32 j = 1, move = 0, species = 0; + FORCE_MOVE_ANIM(TRUE); + for (; j < MOVES_COUNT; j++) + { + ParametrizeMovesAndSpecies(j, &move, &species); + PARAMETRIZE { move = move; species = species; } + } + GIVEN { + OPPONENT(species) { + HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); + if (species == SPECIES_WOBBUFFET) + Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) + Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) + Ability(ABILITY_PLUS); + } + OPPONENT(SPECIES_WOBBUFFET) { + Gender(MON_MALE); MaxHP(9999); Moves(MOVE_POUND); + HP(gMovesInfo[move].effect == EFFECT_REVIVAL_BLESSING ? 0 : 9998); + } + PLAYER(SPECIES_WOBBUFFET) { + Gender(MON_MALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); Ability(ABILITY_TELEPATHY); + if (gMovesInfo[move].effect != EFFECT_BESTOW) + Item(ITEM_ORAN_BERRY); + } + PLAYER(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); } + } WHEN { + WhenSingles(move, opponent, player); + } SCENE { + SceneSingles(move, opponent); + } THEN { + FORCE_MOVE_ANIM(FALSE); + if (gLoadFail) + DebugPrintf("Move failed: %S (%u)", gMovesInfo[move].name, move); + EXPECT_EQ(gLoadFail, FALSE); + } +} + +DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (playerLeft to opponentLeft)") +{ + u32 j = 1, move = 0, species = 0; + FORCE_MOVE_ANIM(TRUE); + struct BattlePokemon *attacker = playerLeft; + struct BattlePokemon *target = opponentLeft; + struct BattlePokemon *ignore1 = playerRight; + struct BattlePokemon *ignore2 = opponentRight; + for (; j < MOVES_COUNT; j++) + { + ParametrizeMovesAndSpecies(j, &move, &species); + PARAMETRIZE { move = move; species = species; } + } + GIVEN { + PLAYER(species) { + HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); + if (attacker == playerLeft) { + if (species == SPECIES_WOBBUFFET) + Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) + Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) + Ability(ABILITY_PLUS); + } + } + PLAYER(species) { + HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); + if (attacker == playerRight) + { + if (species == SPECIES_WOBBUFFET) + Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) + Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) + Ability(ABILITY_PLUS); + } + } + PLAYER(SPECIES_WOBBUFFET) { + Gender(MON_MALE); MaxHP(9999); Moves(MOVE_POUND, MOVE_CELEBRATE); + HP(gMovesInfo[move].effect == EFFECT_REVIVAL_BLESSING ? 0 : 9998); + } + OPPONENT(SPECIES_WOBBUFFET) { + Gender(MON_MALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); Ability(ABILITY_TELEPATHY); + if (gMovesInfo[move].effect != EFFECT_BESTOW) + Item(ITEM_ORAN_BERRY); + } + OPPONENT(SPECIES_WOBBUFFET) { + Gender(MON_MALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); Ability(ABILITY_TELEPATHY); + if (gMovesInfo[move].effect != EFFECT_BESTOW) + Item(ITEM_ORAN_BERRY); + } + OPPONENT(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); } + } WHEN { + DoublesWhen(move, attacker, target, ignore1, ignore2); + } SCENE { + DoublesScene(move, attacker); + } THEN { + FORCE_MOVE_ANIM(FALSE); + if (gLoadFail) + DebugPrintf("Move failed: %S (%u)", gMovesInfo[move].name, move); + EXPECT_EQ(gLoadFail, FALSE); + } +} + +DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (opponentLeft to playerLeft)") +{ + u32 j = 1, move = 0, species = 0; + FORCE_MOVE_ANIM(TRUE); + struct BattlePokemon *attacker = opponentLeft; + struct BattlePokemon *target = playerLeft; + struct BattlePokemon *ignore1 = opponentRight; + struct BattlePokemon *ignore2 = playerRight; + for (; j < MOVES_COUNT; j++) { + ParametrizeMovesAndSpecies(j, &move, &species); + PARAMETRIZE { move = move; species = species; } + } + GIVEN { + OPPONENT(species) { + HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); + if (attacker == opponentLeft) { + if (species == SPECIES_WOBBUFFET) Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) Ability(ABILITY_PLUS); + } + } + OPPONENT(species) { + HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); + if (attacker == opponentRight) { + if (species == SPECIES_WOBBUFFET) Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) Ability(ABILITY_PLUS); + } + } + OPPONENT(SPECIES_WOBBUFFET) { + Gender(MON_MALE); MaxHP(9999); Moves(MOVE_POUND, MOVE_CELEBRATE); + HP(gMovesInfo[move].effect == EFFECT_REVIVAL_BLESSING ? 0 : 9998); + } + PLAYER(SPECIES_WOBBUFFET) { + Gender(MON_MALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); Ability(ABILITY_TELEPATHY); + if (gMovesInfo[move].effect != EFFECT_BESTOW) { + Item(ITEM_ORAN_BERRY); + } + } + PLAYER(SPECIES_WOBBUFFET) { + Gender(MON_MALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); Ability(ABILITY_TELEPATHY); + if (gMovesInfo[move].effect != EFFECT_BESTOW) { + Item(ITEM_ORAN_BERRY); + } + } + PLAYER(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); } + } WHEN { + DoublesWhen(move, attacker, target, ignore1, ignore2); + } SCENE { + DoublesScene(move, attacker); + } THEN { + FORCE_MOVE_ANIM(FALSE); + if (gLoadFail) + DebugPrintf("Move failed: %S (%u)", gMovesInfo[move].name, move); + EXPECT_EQ(gLoadFail, FALSE); + } +} + +DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (playerLeft to opponentRight)") +{ + u32 j = 1, move = 0, species = 0; + FORCE_MOVE_ANIM(TRUE); + struct BattlePokemon *attacker = playerLeft; + struct BattlePokemon *target = opponentRight; + struct BattlePokemon *ignore1 = playerRight; + struct BattlePokemon *ignore2 = opponentLeft; + for (; j < MOVES_COUNT; j++) { + ParametrizeMovesAndSpecies(j, &move, &species); + PARAMETRIZE { move = move; species = species; } + } + GIVEN { + PLAYER(species) { + HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); + if (attacker == playerLeft) { + if (species == SPECIES_WOBBUFFET) Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) Ability(ABILITY_PLUS); + } + } + PLAYER(species) { + HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); + if (attacker == playerRight) { + if (species == SPECIES_WOBBUFFET) Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) Ability(ABILITY_PLUS); + } + } + PLAYER(SPECIES_WOBBUFFET) { + Gender(MON_MALE); MaxHP(9999); Moves(MOVE_POUND, MOVE_CELEBRATE); + HP(gMovesInfo[move].effect == EFFECT_REVIVAL_BLESSING ? 0 : 9998); + } + OPPONENT(SPECIES_WOBBUFFET) { + Gender(MON_MALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); Ability(ABILITY_TELEPATHY); + if (gMovesInfo[move].effect != EFFECT_BESTOW) { + Item(ITEM_ORAN_BERRY); + } + } + OPPONENT(SPECIES_WOBBUFFET) { + Gender(MON_MALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); Ability(ABILITY_TELEPATHY); + if (gMovesInfo[move].effect != EFFECT_BESTOW) { + Item(ITEM_ORAN_BERRY); + } + } + OPPONENT(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); } + } WHEN { + DoublesWhen(move, attacker, target, ignore1, ignore2); + } SCENE { + DoublesScene(move, attacker); + } THEN { + FORCE_MOVE_ANIM(FALSE); + if (gLoadFail) + DebugPrintf("Move failed: %S (%u)", gMovesInfo[move].name, move); + EXPECT_EQ(gLoadFail, FALSE); + } +} + +DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (opponentRight to playerLeft)") +{ + u32 j = 1, move = 0, species = 0; + FORCE_MOVE_ANIM(TRUE); + struct BattlePokemon *attacker = opponentRight; + struct BattlePokemon *target = playerLeft; + struct BattlePokemon *ignore1 = opponentLeft; + struct BattlePokemon *ignore2 = playerRight; + for (; j < MOVES_COUNT; j++) { + ParametrizeMovesAndSpecies(j, &move, &species); + PARAMETRIZE { move = move; species = species; } + } + GIVEN { + OPPONENT(species) { + HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); + if (attacker == opponentLeft) { + if (species == SPECIES_WOBBUFFET) Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) Ability(ABILITY_PLUS); + } + } + OPPONENT(species) { + HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); + if (attacker == opponentRight) { + if (species == SPECIES_WOBBUFFET) Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) Ability(ABILITY_PLUS); + } + } + OPPONENT(SPECIES_WOBBUFFET) { + Gender(MON_MALE); MaxHP(9999); Moves(MOVE_POUND, MOVE_CELEBRATE); + HP(gMovesInfo[move].effect == EFFECT_REVIVAL_BLESSING ? 0 : 9998); + } + PLAYER(SPECIES_WOBBUFFET) { + Gender(MON_MALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); Ability(ABILITY_TELEPATHY); + if (gMovesInfo[move].effect != EFFECT_BESTOW) { + Item(ITEM_ORAN_BERRY); + } + } + PLAYER(SPECIES_WOBBUFFET) { + Gender(MON_MALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); Ability(ABILITY_TELEPATHY); + if (gMovesInfo[move].effect != EFFECT_BESTOW) { + Item(ITEM_ORAN_BERRY); + } + } + PLAYER(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); } + } WHEN { + DoublesWhen(move, attacker, target, ignore1, ignore2); + } SCENE { + DoublesScene(move, attacker); + } THEN { + FORCE_MOVE_ANIM(FALSE); + if (gLoadFail) + DebugPrintf("Move failed: %S (%u)", gMovesInfo[move].name, move); + EXPECT_EQ(gLoadFail, FALSE); + } +} + +DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (playerRight to opponentLeft)") +{ + u32 j = 1, move = 0, species = 0; + FORCE_MOVE_ANIM(TRUE); + struct BattlePokemon *attacker = playerRight; + struct BattlePokemon *target = opponentLeft; + struct BattlePokemon *ignore1 = playerLeft; + struct BattlePokemon *ignore2 = opponentRight; + for (; j < MOVES_COUNT; j++) { + ParametrizeMovesAndSpecies(j, &move, &species); + PARAMETRIZE { move = move; species = species; } + } + GIVEN { + PLAYER(species) { + HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); + if (attacker == playerLeft) { + if (species == SPECIES_WOBBUFFET) Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) Ability(ABILITY_PLUS); + } + } + PLAYER(species) { + HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); + if (attacker == playerRight) { + if (species == SPECIES_WOBBUFFET) Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) Ability(ABILITY_PLUS); + } + } + PLAYER(SPECIES_WOBBUFFET) { + Gender(MON_MALE); MaxHP(9999); Moves(MOVE_POUND, MOVE_CELEBRATE); + HP(gMovesInfo[move].effect == EFFECT_REVIVAL_BLESSING ? 0 : 9998); + } + OPPONENT(SPECIES_WOBBUFFET) { + Gender(MON_MALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); Ability(ABILITY_TELEPATHY); + if (gMovesInfo[move].effect != EFFECT_BESTOW) { + Item(ITEM_ORAN_BERRY); + } + } + OPPONENT(SPECIES_WOBBUFFET) { + Gender(MON_MALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); Ability(ABILITY_TELEPATHY); + if (gMovesInfo[move].effect != EFFECT_BESTOW) { + Item(ITEM_ORAN_BERRY); + } + } + OPPONENT(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); } + } WHEN { + DoublesWhen(move, attacker, target, ignore1, ignore2); + } SCENE { + DoublesScene(move, attacker); + } THEN { + FORCE_MOVE_ANIM(FALSE); + if (gLoadFail) + DebugPrintf("Move failed: %S (%u)", gMovesInfo[move].name, move); + EXPECT_EQ(gLoadFail, FALSE); + } +} + +DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (opponentLeft to playerRight)") +{ + u32 j = 1, move = 0, species = 0; + FORCE_MOVE_ANIM(TRUE); + struct BattlePokemon *attacker = opponentLeft; + struct BattlePokemon *target = playerRight; + struct BattlePokemon *ignore1 = playerLeft; + struct BattlePokemon *ignore2 = opponentRight; + for (; j < MOVES_COUNT; j++) { + ParametrizeMovesAndSpecies(j, &move, &species); + PARAMETRIZE { move = move; species = species; } + } + GIVEN { + OPPONENT(species) { + HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); + if (attacker == opponentLeft) { + if (species == SPECIES_WOBBUFFET) Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) Ability(ABILITY_PLUS); + } + } + OPPONENT(species) { + HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); + if (attacker == opponentRight) { + if (species == SPECIES_WOBBUFFET) Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) Ability(ABILITY_PLUS); + } + } + OPPONENT(SPECIES_WOBBUFFET) { + Gender(MON_MALE); MaxHP(9999); Moves(MOVE_POUND, MOVE_CELEBRATE); + HP(gMovesInfo[move].effect == EFFECT_REVIVAL_BLESSING ? 0 : 9998); + } + PLAYER(SPECIES_WOBBUFFET) { + Gender(MON_MALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); Ability(ABILITY_TELEPATHY); + if (gMovesInfo[move].effect != EFFECT_BESTOW) { + Item(ITEM_ORAN_BERRY); + } + } + PLAYER(SPECIES_WOBBUFFET) { + Gender(MON_MALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); Ability(ABILITY_TELEPATHY); + if (gMovesInfo[move].effect != EFFECT_BESTOW) { + Item(ITEM_ORAN_BERRY); + } + } + PLAYER(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); } + } WHEN { + DoublesWhen(move, attacker, target, ignore1, ignore2); + } SCENE { + DoublesScene(move, attacker); + } THEN { + FORCE_MOVE_ANIM(FALSE); + if (gLoadFail) + DebugPrintf("Move failed: %S (%u)", gMovesInfo[move].name, move); + EXPECT_EQ(gLoadFail, FALSE); + } +} + +DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (playerRight to opponentRight)") +{ + u32 j = 1, move = 0, species = 0; + FORCE_MOVE_ANIM(TRUE); + struct BattlePokemon *attacker = playerRight; + struct BattlePokemon *target = opponentRight; + struct BattlePokemon *ignore1 = playerLeft; + struct BattlePokemon *ignore2 = opponentLeft; + for (; j < MOVES_COUNT; j++) { + ParametrizeMovesAndSpecies(j, &move, &species); + PARAMETRIZE { move = move; species = species; } + } + GIVEN { + PLAYER(species) { + HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); + if (attacker == playerLeft) { + if (species == SPECIES_WOBBUFFET) Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) Ability(ABILITY_PLUS); + } + } + PLAYER(species) { + HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); + if (attacker == playerRight) { + if (species == SPECIES_WOBBUFFET) Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) Ability(ABILITY_PLUS); + } + } + PLAYER(SPECIES_WOBBUFFET) { + Gender(MON_MALE); MaxHP(9999); Moves(MOVE_POUND, MOVE_CELEBRATE); + HP(gMovesInfo[move].effect == EFFECT_REVIVAL_BLESSING ? 0 : 9998); + } + OPPONENT(SPECIES_WOBBUFFET) { + Gender(MON_MALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); Ability(ABILITY_TELEPATHY); + if (gMovesInfo[move].effect != EFFECT_BESTOW) { + Item(ITEM_ORAN_BERRY); + } + } + OPPONENT(SPECIES_WOBBUFFET) { + Gender(MON_MALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); Ability(ABILITY_TELEPATHY); + if (gMovesInfo[move].effect != EFFECT_BESTOW) { + Item(ITEM_ORAN_BERRY); + } + } + OPPONENT(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); } + } WHEN { + DoublesWhen(move, attacker, target, ignore1, ignore2); + } SCENE { + DoublesScene(move, attacker); + } THEN { + FORCE_MOVE_ANIM(FALSE); + if (gLoadFail) + DebugPrintf("Move failed: %S (%u)", gMovesInfo[move].name, move); + EXPECT_EQ(gLoadFail, FALSE); + } +} + +DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (opponentRight to playerRight)") +{ + u32 j = 1, move = 0, species = 0; + FORCE_MOVE_ANIM(TRUE); + struct BattlePokemon *attacker = opponentRight; + struct BattlePokemon *target = playerRight; + struct BattlePokemon *ignore1 = playerLeft; + struct BattlePokemon *ignore2 = opponentLeft; + for (; j < MOVES_COUNT; j++) { + ParametrizeMovesAndSpecies(j, &move, &species); + PARAMETRIZE { move = move; species = species; } + } + GIVEN { + OPPONENT(species) { + HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); + if (attacker == opponentLeft) { + if (species == SPECIES_WOBBUFFET) Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) Ability(ABILITY_PLUS); + } + } + OPPONENT(species) { + HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); + if (attacker == opponentRight) { + if (species == SPECIES_WOBBUFFET) Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) Ability(ABILITY_PLUS); + } + } + OPPONENT(SPECIES_WOBBUFFET) { + Gender(MON_MALE); MaxHP(9999); Moves(MOVE_POUND, MOVE_CELEBRATE); + HP(gMovesInfo[move].effect == EFFECT_REVIVAL_BLESSING ? 0 : 9998); + } + PLAYER(SPECIES_WOBBUFFET) { + Gender(MON_MALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); Ability(ABILITY_TELEPATHY); + if (gMovesInfo[move].effect != EFFECT_BESTOW) { + Item(ITEM_ORAN_BERRY); + } + } + PLAYER(SPECIES_WOBBUFFET) { + Gender(MON_MALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); Ability(ABILITY_TELEPATHY); + if (gMovesInfo[move].effect != EFFECT_BESTOW) { + Item(ITEM_ORAN_BERRY); + } + } + PLAYER(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); } + } WHEN { + DoublesWhen(move, attacker, target, ignore1, ignore2); + } SCENE { + DoublesScene(move, attacker); + } THEN { + FORCE_MOVE_ANIM(FALSE); + if (gLoadFail) + DebugPrintf("Move failed: %S (%u)", gMovesInfo[move].name, move); + EXPECT_EQ(gLoadFail, FALSE); + } +} + +#endif From 7df32985342380ea207a32143c4b3f73e5aef10a Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Fri, 14 Mar 2025 12:43:45 +0100 Subject: [PATCH 045/115] Minor Recoil Effect refactor (#6409) --- include/constants/battle_move_effects.h | 1 + include/move.h | 26 ++++++------- src/battle_ai_util.c | 9 ++--- src/battle_script_commands.c | 2 +- src/data/battle_move_effects.h | 6 +++ src/data/moves_info.h | 50 ++++++++++++------------- test/battle/move_flags/recoil.c | 12 +++--- 7 files changed, 56 insertions(+), 50 deletions(-) diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 6525cf1544..1e0a6f35fe 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -352,6 +352,7 @@ enum { EFFECT_ORDER_UP, EFFECT_RAPID_SPIN, EFFECT_SPECTRAL_THIEF, + EFFECT_RECOIL, NUM_BATTLE_MOVE_EFFECTS, }; diff --git a/include/move.h b/include/move.h index 5537840703..d00751642a 100644 --- a/include/move.h +++ b/include/move.h @@ -56,7 +56,6 @@ struct MoveInfo } zMove; // end of word s32 priority:4; - u32 recoil:7; u32 strikeCount:4; // Max 15 hits. Defaults to 1 if not set. May apply its effect on each hit. u32 criticalHitStage:2; bool32 alwaysCriticalHit:1; @@ -74,7 +73,6 @@ struct MoveInfo bool32 ballisticMove:1; bool32 powderMove:1; bool32 danceMove:1; - // end of word bool32 windMove:1; bool32 slicingMove:1; bool32 healingMove:1; @@ -82,6 +80,7 @@ struct MoveInfo bool32 ignoresTargetAbility:1; bool32 ignoresTargetDefenseEvasionStages:1; bool32 damagesUnderground:1; + // end of word bool32 damagesUnderwater:1; bool32 damagesAirborne:1; bool32 damagesAirborneDoubleDamage:1; @@ -106,7 +105,7 @@ struct MoveInfo bool32 sketchBanned:1; //Other bool32 validApprenticeMove:1; - u32 padding:3; + u32 padding:10; // end of word union { @@ -119,11 +118,12 @@ struct MoveInfo u16 property; // can be used to remove the hardcoded values } protect; u32 status; - u16 moveProperty; - u16 holdEffect; - u16 type; - u16 fixedDamage; - u16 absorbPercentage; + u32 moveProperty; + u32 holdEffect; + u32 type; + u32 fixedDamage; + u32 absorbPercentage; + u32 recoilPercentage; } argument; // primary/secondary effects @@ -212,11 +212,6 @@ static inline s32 GetMovePriority(u32 moveId) return gMovesInfo[SanitizeMoveId(moveId)].priority; } -static inline u32 GetMoveRecoil(u32 moveId) -{ - return gMovesInfo[SanitizeMoveId(moveId)].recoil; -} - static inline u32 GetMoveStrikeCount(u32 moveId) { return gMovesInfo[SanitizeMoveId(moveId)].strikeCount; @@ -490,6 +485,11 @@ static inline u32 GetMoveAbsorbPercentage(u32 moveId) return gMovesInfo[moveId].argument.absorbPercentage; } +static inline u32 GetMoveRecoil(u32 moveId) +{ + return gMovesInfo[SanitizeMoveId(moveId)].argument.recoilPercentage; +} + static inline const struct AdditionalEffect *GetMoveAdditionalEffectById(u32 moveId, u32 effect) { return &gMovesInfo[SanitizeMoveId(moveId)].additionalEffects[effect]; diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 24bb482b4a..8de3f078ca 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -947,10 +947,6 @@ static bool32 AI_IsMoveEffectInMinus(u32 battlerAtk, u32 battlerDef, u32 move, s u32 abilityDef = AI_DATA->abilities[battlerDef]; u8 i; - // recoil - if (GetMoveRecoil(move) > 0 && AI_IsDamagedByRecoil(battlerAtk)) - return TRUE; - switch (GetMoveEffect(move)) { case EFFECT_MAX_HP_50_RECOIL: @@ -961,6 +957,9 @@ static bool32 AI_IsMoveEffectInMinus(u32 battlerAtk, u32 battlerDef, u32 move, s case EFFECT_RECOIL_IF_MISS: if (AI_IsDamagedByRecoil(battlerAtk)) return TRUE; + case EFFECT_RECOIL: + if (AI_IsDamagedByRecoil(battlerAtk)) + return TRUE; break; default: { @@ -3923,7 +3922,7 @@ static u32 IncreaseStatUpScoreInternal(u32 battlerAtk, u32 battlerDef, u32 statI { if (GetMonData(&playerParty[AI_DATA->mostSuitableMonId[battlerDef]], MON_DATA_SPEED, NULL) > gBattleMons[battlerAtk].speed) return NO_INCREASE; - } + } } // Otherwise if predicting switch, stat increases are great momentum tempScore += WEAK_EFFECT; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index e67323ffa9..495efc98a3 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6361,7 +6361,7 @@ static void Cmd_moveend(void) gBattleScripting.moveendState++; break; } - else if (moveRecoil > 0 + else if (moveEffect == EFFECT_RECOIL && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && IsBattlerAlive(gBattlerAttacker) && IsBattlerTurnDamaged(gBattlerTarget) diff --git a/src/data/battle_move_effects.h b/src/data/battle_move_effects.h index e2970afcaf..cf9814ac02 100644 --- a/src/data/battle_move_effects.h +++ b/src/data/battle_move_effects.h @@ -2246,4 +2246,10 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = .battleScript = BattleScript_EffectSpectralThief, .battleTvScore = 0, // TODO: Assign points }, + + [EFFECT_RECOIL] = + { + .battleScript = BattleScript_EffectHit, + .battleTvScore = 0, // TODO: Assign points + }, }; diff --git a/src/data/moves_info.h b/src/data/moves_info.h index 0a8c157806..b34aad70d4 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -1019,15 +1019,15 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .description = COMPOUND_STRING( "A reckless charge attack\n" "that also hurts the user."), - .effect = EFFECT_HIT, + .effect = EFFECT_RECOIL, .power = 90, .type = TYPE_NORMAL, .accuracy = 85, - .recoil = 25, .pp = 20, .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .argument = { .recoilPercentage = 25 }, .makesContact = TRUE, .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_TOUGH, @@ -1071,15 +1071,15 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .description = COMPOUND_STRING( "A life-risking tackle that\n" "also hurts the user."), - .effect = EFFECT_HIT, + .effect = EFFECT_RECOIL, .power = 120, .type = TYPE_NORMAL, .accuracy = 100, - .recoil = 33, .pp = 15, .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .argument = { .recoilPercentage = 33 }, .makesContact = TRUE, .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_TOUGH, @@ -1785,16 +1785,16 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .description = COMPOUND_STRING( "A reckless body slam that\n" "also hurts the user."), - .effect = EFFECT_HIT, + .effect = EFFECT_RECOIL, .power = 80, .type = TYPE_FIGHTING, .accuracy = 80, .pp = B_UPDATED_MOVE_DATA >= GEN_6 ? 20 : 25, - .recoil = 25, .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, + .argument = { .recoilPercentage = 25 }, .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, @@ -4333,9 +4333,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .self = TRUE, }), #else - .effect = EFFECT_HIT, + .effect = EFFECT_RECOIL, .accuracy = 100, - .recoil = 25, + .argument = { .recoilPercentage = 25 }, #endif .power = 50, .type = TYPE_NORMAL, @@ -8989,11 +8989,11 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .power = 120, .type = TYPE_ELECTRIC, .accuracy = 100, - .recoil = 33, .pp = 15, .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .argument = { .recoilPercentage = 33 }, .makesContact = TRUE, #if B_UPDATED_MOVE_DATA >= GEN_4 .additionalEffects = ADDITIONAL_EFFECTS({ @@ -10191,15 +10191,15 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .description = COMPOUND_STRING( "A charge that may burn the\n" "foe. Also hurts the user."), - .effect = EFFECT_HIT, + .effect = EFFECT_RECOIL, .power = 120, .type = TYPE_FIRE, .accuracy = 100, - .recoil = 33, .pp = 15, .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .argument = { .recoilPercentage = 33 }, .makesContact = TRUE, .thawsUser = TRUE, .additionalEffects = ADDITIONAL_EFFECTS({ @@ -10655,15 +10655,15 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .description = COMPOUND_STRING( "A low altitude charge that\n" "also hurts the user."), - .effect = EFFECT_HIT, + .effect = EFFECT_RECOIL, .power = 120, .type = TYPE_FLYING, .accuracy = 100, - .recoil = 33, .pp = 15, .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .argument = { .recoilPercentage = 33 }, .makesContact = TRUE, .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_CUTE, @@ -11632,15 +11632,15 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .description = COMPOUND_STRING( "Slams the body into a foe.\n" "The user gets hurt too."), - .effect = EFFECT_HIT, + .effect = EFFECT_RECOIL, .power = 120, .type = TYPE_GRASS, .accuracy = 100, - .recoil = 33, .pp = 15, .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .argument = { .recoilPercentage = 33 }, .makesContact = TRUE, .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_TOUGH, @@ -11750,15 +11750,15 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .description = COMPOUND_STRING( "A life-risking headbutt that\n" "seriously hurts the user."), - .effect = EFFECT_HIT, + .effect = EFFECT_RECOIL, .power = 150, .type = TYPE_ROCK, .accuracy = 80, - .recoil = 50, .pp = 5, .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .argument = { .recoilPercentage = 50 }, .makesContact = TRUE, .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_TOUGH, @@ -13445,15 +13445,15 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .description = COMPOUND_STRING( "An electrical tackle that\n" "also hurts the user."), - .effect = EFFECT_HIT, + .effect = EFFECT_RECOIL, .power = 90, .type = TYPE_ELECTRIC, .accuracy = 100, - .recoil = 25, .pp = 15, .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .argument = { .recoilPercentage = 25 }, .makesContact = TRUE, .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_COOL, @@ -13802,15 +13802,15 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .description = COMPOUND_STRING( "A charge using guard hair.\n" "It hurts the user a little."), - .effect = EFFECT_HIT, + .effect = EFFECT_RECOIL, .power = 120, .type = TYPE_NORMAL, .accuracy = 100, - .recoil = 25, .pp = 15, .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .argument = { .recoilPercentage = 25 }, .makesContact = TRUE, .contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED, .contestCategory = CONTEST_CATEGORY_TOUGH, @@ -15655,15 +15655,15 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .description = COMPOUND_STRING( "Fires a great beam of light\n" "that also hurts the user."), - .effect = EFFECT_HIT, + .effect = EFFECT_RECOIL, .power = 140, .type = TYPE_FAIRY, .accuracy = 90, - .recoil = 50, .pp = 5, .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, + .argument = { .recoilPercentage = 50 }, .metronomeBanned = TRUE, .battleAnimScript = gBattleAnimMove_LightOfRuin, }, @@ -19202,15 +19202,15 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .description = COMPOUND_STRING( "A slam shrouded in water.\n" "It also hurts the user."), - .effect = EFFECT_HIT, + .effect = EFFECT_RECOIL, .power = B_UPDATED_MOVE_DATA >= GEN_9 ? 120 : 75, .type = TYPE_WATER, .accuracy = 100, - .recoil = 33, .pp = 10, .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, + .argument = { .recoilPercentage = 33 }, .makesContact = TRUE, .skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS, .battleAnimScript = gBattleAnimMove_WaveCrash, diff --git a/test/battle/move_flags/recoil.c b/test/battle/move_flags/recoil.c index 5a8f3be576..b775c175d3 100644 --- a/test/battle/move_flags/recoil.c +++ b/test/battle/move_flags/recoil.c @@ -1,7 +1,7 @@ #include "global.h" #include "test/battle.h" -SINGLE_BATTLE_TEST("Take Down deals 25% of recoil damage to the user") +SINGLE_BATTLE_TEST("Recoil: Take Down deals 25% of recoil damage to the user") { s16 directDamage; s16 recoilDamage; @@ -21,7 +21,7 @@ SINGLE_BATTLE_TEST("Take Down deals 25% of recoil damage to the user") } } -SINGLE_BATTLE_TEST("Double Edge deals 33% of recoil damage to the user") +SINGLE_BATTLE_TEST("Recoil: Double Edge deals 33% of recoil damage to the user") { s16 directDamage; s16 recoilDamage; @@ -41,7 +41,7 @@ SINGLE_BATTLE_TEST("Double Edge deals 33% of recoil damage to the user") } } -SINGLE_BATTLE_TEST("Head Smash deals 50% of recoil damage to the user") +SINGLE_BATTLE_TEST("Recoil: Head Smash deals 50% of recoil damage to the user") { s16 directDamage; s16 recoilDamage; @@ -61,7 +61,7 @@ SINGLE_BATTLE_TEST("Head Smash deals 50% of recoil damage to the user") } } -SINGLE_BATTLE_TEST("Flare Blitz deals 33% of recoil damage to the user and can burn target") +SINGLE_BATTLE_TEST("Recoil: Flare Blitz deals 33% of recoil damage to the user and can burn target") { s16 directDamage; s16 recoilDamage; @@ -84,10 +84,10 @@ SINGLE_BATTLE_TEST("Flare Blitz deals 33% of recoil damage to the user and can b } } -SINGLE_BATTLE_TEST("Flare Blitz is absorbed by Flash Fire and no recoil damage is dealt") +SINGLE_BATTLE_TEST("Recoil: Flare Blitz is absorbed by Flash Fire and no recoil damage is dealt") { GIVEN { - ASSUME(gMovesInfo[MOVE_FLARE_BLITZ].recoil > 0); + ASSUME(GetMoveRecoil(MOVE_FLARE_BLITZ) > 0); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_VULPIX) { Ability(ABILITY_FLASH_FIRE); }; } WHEN { From 7af9984a4d3dd83df6b6cc7115c3cd46cbe2030a Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Fri, 14 Mar 2025 14:03:55 +0100 Subject: [PATCH 046/115] Fixed unfusion of traded materials (#6415) Co-authored-by: Hedara --- src/party_menu.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/party_menu.c b/src/party_menu.c index 5e79d74d45..9a74a466e1 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -6182,6 +6182,27 @@ bool32 TryItemUseFusionChange(u8 taskId, TaskFunc task) } } +static void RestoreFusionMon(struct Pokemon *mon) +{ + s32 i; + + for (i = 0; i < PARTY_SIZE; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL) == SPECIES_NONE) + break; + } + + if (i >= PARTY_SIZE) + { + CopyMonToPC(mon); + } + else + { + CopyMon(&gPlayerParty[i], mon, sizeof(*mon)); + gPlayerPartyCount = i + 1; + } +} + static void Task_TryItemUseFusionChange(u8 taskId) { struct Pokemon *mon = &gPlayerParty[gTasks[taskId].firstFusionSlot]; @@ -6202,7 +6223,7 @@ static void Task_TryItemUseFusionChange(u8 taskId) else { mon2 = &gPokemonStoragePtr->fusions[gTasks[taskId].storageIndex]; - GiveMonToPlayer(mon2); + RestoreFusionMon(mon2); ZeroMonData(&gPokemonStoragePtr->fusions[gTasks[taskId].storageIndex]); } targetSpecies = gTasks[taskId].tTargetSpecies; From 5965c08326c5d92473a5fc576cf7ab993402e0a6 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Fri, 14 Mar 2025 20:11:42 +0100 Subject: [PATCH 047/115] Create move end Sheer Force (#6411) --- include/constants/battle_script_commands.h | 4 ++-- src/battle_script_commands.c | 25 ++++++++++++---------- src/battle_util.c | 1 - 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 2aa5799a9e..782e0546c7 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -273,6 +273,7 @@ enum MoveEndEffects MOVEEND_ITEM_EFFECTS_TARGET, MOVEEND_MOVE_EFFECTS2, MOVEEND_ITEM_EFFECTS_ALL, + MOVEEND_SYMBIOSIS, MOVEEND_HIT_SWITCH_TARGET, MOVEEND_KINGSROCK, // These item effects will occur each strike of a multi-hit move MOVEEND_NUM_HITS, @@ -287,6 +288,7 @@ enum MoveEndEffects MOVEEND_RAPID_SPIN, MOVEEND_ITEM_EFFECTS_ATTACKER, MOVEEND_MAGICIAN, // Occurs after final multi-hit strike, and after other items/abilities would activate + MOVEEND_SHEER_FORCE, // If move is Sheer Force affected, skip until opportunist MOVEEND_RED_CARD, // Red Card triggers before Eject Pack MOVEEND_EJECT_ITEMS, MOVEEND_WHITE_HERB, @@ -294,10 +296,8 @@ enum MoveEndEffects MOVEEND_CHANGED_ITEMS, MOVEEND_PICKPOCKET, MOVEEND_EMERGENCY_EXIT, - MOVEEND_SYMBIOSIS, MOVEEND_OPPORTUNIST, // Occurs after other stat change items/abilities to try and copy the boosts MOVEEND_SAME_MOVE_TURNS, - MOVEEND_SET_EVOLUTION_TRACKER, MOVEEND_CLEAR_BITS, MOVEEND_DANCER, MOVEEND_PURSUIT_NEXT_ACTION, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 495efc98a3..8e71ba08f5 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6951,6 +6951,12 @@ static void Cmd_moveend(void) } gBattleScripting.moveendState++; break; + case MOVEEND_SHEER_FORCE: + if (TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove)) + gBattleScripting.moveendState = MOVEEND_OPPORTUNIST; + else + gBattleScripting.moveendState++; + break; case MOVEEND_EJECT_ITEMS: { // Because sorting the battlers by speed takes lots of cycles, it's better to just check if any of the battlers has the Eject items. @@ -6975,8 +6981,6 @@ static void Cmd_moveend(void) if (battler != gBattlerAttacker && ejectButtonBattlers & (1u << battler)) { - if (TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove)) // Apparently Sheer Force blocks Eject Button, but not Eject Pack - continue; // Since we check if battler was damaged, we don't need to check move result. // In fact, doing so actually prevents multi-target moves from activating eject button properly if (!IsBattlerTurnDamaged(battler)) @@ -7111,7 +7115,6 @@ static void Cmd_moveend(void) if (IsBattlerAlive(gBattlerAttacker) && gBattleMons[gBattlerAttacker].item != ITEM_NONE // Attacker must be holding an item && !(gWishFutureKnock.knockedOffMons[GetBattlerSide(gBattlerAttacker)] & (1u << gBattlerPartyIndexes[gBattlerAttacker])) // But not knocked off - && !(TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove)) // Pickpocket doesn't activate for sheer force && IsMoveMakingContact(gCurrentMove, gBattlerAttacker) // Pickpocket requires contact && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) // Obviously attack needs to have worked { @@ -7196,24 +7199,24 @@ static void Cmd_moveend(void) gBattleScripting.moveendState++; break; case MOVEEND_SAME_MOVE_TURNS: - if (gCurrentMove != gLastResultingMoves[gBattlerAttacker] || gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT || gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) + if (gCurrentMove != gLastResultingMoves[gBattlerAttacker] + || gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT + || gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) gBattleStruct->sameMoveTurns[gBattlerAttacker] = 0; else if (gCurrentMove == gLastResultingMoves[gBattlerAttacker] && gSpecialStatuses[gBattlerAttacker].parentalBondState != PARENTAL_BOND_1ST_HIT) gBattleStruct->sameMoveTurns[gBattlerAttacker]++; gBattleScripting.moveendState++; break; - case MOVEEND_SET_EVOLUTION_TRACKER: - // If the Pokémon needs to keep track of move usage for its evolutions, do it - if (originallyUsedMove != MOVE_NONE) - TryUpdateEvolutionTracker(EVO_USE_MOVE_TWENTY_TIMES, 1, originallyUsedMove); - gBattleScripting.moveendState++; - break; case MOVEEND_CLEAR_BITS: // Clear/Set bits for things like using a move for all targets and all hits. if (gSpecialStatuses[gBattlerAttacker].instructedChosenTarget) gBattleStruct->moveTarget[gBattlerAttacker] = gSpecialStatuses[gBattlerAttacker].instructedChosenTarget & 0x3; if (gSpecialStatuses[gBattlerAttacker].dancerOriginalTarget) gBattleStruct->moveTarget[gBattlerAttacker] = gSpecialStatuses[gBattlerAttacker].dancerOriginalTarget & 0x3; + // If the Pokémon needs to keep track of move usage for its evolutions, do it + if (originallyUsedMove != MOVE_NONE) + TryUpdateEvolutionTracker(EVO_USE_MOVE_TWENTY_TIMES, 1, originallyUsedMove); + if (B_RAMPAGE_CANCELLING >= GEN_5 && MoveHasAdditionalEffectSelf(gCurrentMove, MOVE_EFFECT_THRASH) // If we're rampaging && gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT // And it is unusable @@ -7277,7 +7280,7 @@ static void Cmd_moveend(void) gBattleScripting.moveendState++; break; - case MOVEEND_DANCER: // Special case because it's so annoying + case MOVEEND_DANCER: if (IsDanceMove(gCurrentMove) && !gBattleStruct->snatchedMoveIsUsed) { u32 battler, nextDancer = 0; diff --git a/src/battle_util.c b/src/battle_util.c index 737d894d0c..0d6a2c929e 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8221,7 +8221,6 @@ u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler, bool32 moveTurn) case HOLD_EFFECT_LIFE_ORB: if (IsBattlerAlive(gBattlerAttacker) && (IsBattlerTurnDamaged(gBattlerTarget) || gBattleStruct->moveDamage[gBattlerTarget]) // Needs the second check in case of Substitute - && !(TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove)) && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && !gSpecialStatuses[gBattlerAttacker].preventLifeOrbDamage) From 5aa85e7b8dc72621c539e1ae76d088ab292cd261 Mon Sep 17 00:00:00 2001 From: cawtds <38510667+cawtds@users.noreply.github.com> Date: Sat, 15 Mar 2025 00:20:01 +0100 Subject: [PATCH 048/115] fix search level --- include/dexnav.h | 4 ++-- src/battle_main.c | 7 +++++-- src/dexnav.c | 18 +++++++++--------- src/pokemon.c | 2 +- 4 files changed, 17 insertions(+), 14 deletions(-) diff --git a/include/dexnav.h b/include/dexnav.h index baa8f8c5a7..7720104c54 100644 --- a/include/dexnav.h +++ b/include/dexnav.h @@ -66,12 +66,12 @@ void EndDexNavSearch(u8 taskId); void Task_OpenDexNavFromStartMenu(u8 taskId); bool8 TryStartDexNavSearch(void); -void TryIncrementSpeciesSearchLevel(u16 dexNum); +void TryIncrementSpeciesSearchLevel(void); void ResetDexNavSearch(void); bool8 TryFindHiddenPokemon(void); u32 CalculateDexNavShinyRolls(void); void IncrementDexNavChain(void); -extern bool8 gDexNavBattle; +extern u16 gDexNavSpecies; #endif // GUARD_DEXNAV_H diff --git a/src/battle_main.c b/src/battle_main.c index 3ccbcd6873..94d5cb0c08 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -5629,12 +5629,15 @@ static void FreeResetData_ReturnToOvOrDoEvolutions(void) { gIsFishingEncounter = FALSE; gIsSurfingEncounter = FALSE; - if (gDexNavBattle && (gBattleOutcome == B_OUTCOME_WON || gBattleOutcome == B_OUTCOME_CAUGHT)) + if (gDexNavSpecies && (gBattleOutcome == B_OUTCOME_WON || gBattleOutcome == B_OUTCOME_CAUGHT)) + { IncrementDexNavChain(); + TryIncrementSpeciesSearchLevel(); + } else gSaveBlock3Ptr->dexNavChain = 0; - gDexNavBattle = FALSE; + gDexNavSpecies = SPECIES_NONE; ResetSpriteData(); if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK diff --git a/src/dexnav.c b/src/dexnav.c index 55e328bf83..1e3db82d4b 100644 --- a/src/dexnav.c +++ b/src/dexnav.c @@ -134,7 +134,7 @@ struct DexNavGUI EWRAM_DATA static struct DexNavSearch *sDexNavSearchDataPtr = NULL; EWRAM_DATA static struct DexNavGUI *sDexNavUiDataPtr = NULL; EWRAM_DATA static u8 *sBg1TilemapBuffer = NULL; -EWRAM_DATA bool8 gDexNavBattle = FALSE; +EWRAM_DATA u16 gDexNavSpecies = SPECIES_NONE; //// Function Declarations //GUI @@ -807,11 +807,11 @@ static void LoadSearchIconData(void) LoadCompressedSpriteSheetUsingHeap(&sHiddenMonIconSpriteSheet); } -static u8 GetSearchLevel(u16 dexNum) +static u8 GetSearchLevel(u16 species) { u8 searchLevel; #if USE_DEXNAV_SEARCH_LEVELS == TRUE - searchLevel = gSaveBlock3Ptr->dexNavSearchLevels[dexNum]; + searchLevel = gSaveBlock3Ptr->dexNavSearchLevels[species]; #else searchLevel = 0; #endif @@ -829,7 +829,7 @@ static void Task_SetUpDexNavSearch(u8 taskId) struct Task *task = &gTasks[taskId]; u16 species = sDexNavSearchDataPtr->species; - u8 searchLevel = GetSearchLevel(SpeciesToNationalPokedexNum(species)); + u8 searchLevel = GetSearchLevel(species); // init sprites sDexNavSearchDataPtr->iconSpriteId = MAX_SPRITES; @@ -1110,7 +1110,7 @@ static void Task_DexNavSearch(u8 taskId) if (sDexNavSearchDataPtr->proximity < 1) { - gDexNavBattle = TRUE; + gDexNavSpecies = sDexNavSearchDataPtr->species; CreateDexNavWildMon(sDexNavSearchDataPtr->species, sDexNavSearchDataPtr->potential, sDexNavSearchDataPtr->monLevel, sDexNavSearchDataPtr->abilityNum, sDexNavSearchDataPtr->heldItem, sDexNavSearchDataPtr->moves); @@ -2143,7 +2143,7 @@ static void PrintCurrentSpeciesInfo(void) } else { - ConvertIntToDecimalStringN(gStringVar4, GetSearchLevel(dexNum), 0, 4); + ConvertIntToDecimalStringN(gStringVar4, GetSearchLevel(species), 0, 4); AddTextPrinterParameterized3(WINDOW_INFO, 0, 0, SEARCH_LEVEL_Y, sFontColor_Black, 0, gStringVar4); } @@ -2666,11 +2666,11 @@ u32 CalculateDexNavShinyRolls(void) return chainBonus + rndBonus; } -void TryIncrementSpeciesSearchLevel(u16 dexNum) +void TryIncrementSpeciesSearchLevel() { #if USE_DEXNAV_SEARCH_LEVELS == TRUE - if (gMapHeader.regionMapSectionId != MAPSEC_BATTLE_FRONTIER && gSaveBlock3Ptr->dexNavSearchLevels[dexNum] < 255) - gSaveBlock3Ptr->dexNavSearchLevels[dexNum]++; + if (gMapHeader.regionMapSectionId != MAPSEC_BATTLE_FRONTIER && gSaveBlock3Ptr->dexNavSearchLevels[gDexNavSpecies] < 255) + gSaveBlock3Ptr->dexNavSearchLevels[gDexNavSpecies]++; #endif } diff --git a/src/pokemon.c b/src/pokemon.c index 5340691b46..ef90f10ba3 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1163,7 +1163,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, totalRerolls += 1; if (I_FISHING_CHAIN && gIsFishingEncounter) totalRerolls += CalculateChainFishingShinyRolls(); - if (gDexNavBattle) + if (gDexNavSpecies) totalRerolls += CalculateDexNavShinyRolls(); while (GET_SHINY_VALUE(value, personality) >= SHINY_ODDS && totalRerolls > 0) From 04eb22f4ea9ccf5aa1f37e81b61dee88e3b52f8a Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 15 Mar 2025 17:45:42 -0400 Subject: [PATCH 049/115] Fix offset for towerInterview in BattleFrontier --- include/global.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/global.h b/include/global.h index 11fc53962e..62da1165c7 100644 --- a/include/global.h +++ b/include/global.h @@ -371,7 +371,7 @@ struct BattleFrontier { /*0x64C*/ struct EmeraldBattleTowerRecord towerPlayer; /*0x738*/ struct EmeraldBattleTowerRecord towerRecords[BATTLE_TOWER_RECORD_COUNT]; // From record mixing. - /*0xBEB*/ struct BattleTowerInterview towerInterview; + /*0xBD4*/ struct BattleTowerInterview towerInterview; /*0xBEC*/ struct BattleTowerEReaderTrainer ereaderTrainer; /*0xCA8*/ u8 challengeStatus; /*0xCA9*/ u8 lvlMode:2; From 816ed0d963b757cfa2874f2587d12e006ddab132 Mon Sep 17 00:00:00 2001 From: khbsd Date: Sun, 16 Mar 2025 00:02:48 -0500 Subject: [PATCH 050/115] Low Health Beeps Configuration (#6328) --- audio_rules.mk | 7 ++- include/config/battle.h | 5 ++ tools/mid2agb/Makefile | 5 +- tools/mid2agb/agb.cpp | 111 ++++++++++++++++++++++++++++++++++++++++ tools/mid2agb/agb.h | 1 + tools/mid2agb/midi.cpp | 11 +++- 6 files changed, 136 insertions(+), 4 deletions(-) diff --git a/audio_rules.mk b/audio_rules.mk index 63a2e21add..3fce08ed3a 100644 --- a/audio_rules.mk +++ b/audio_rules.mk @@ -6,12 +6,15 @@ MID_ASM_DIR := $(MID_SUBDIR) CRY_BIN_DIR := $(CRY_SUBDIR) SOUND_BIN_DIR := sound +# Needs to recompile for B_NUM_LOW_HEALTH_BEEPS in battle.h +EXPANSION_BATTLE_CONFIG := include/config/battle.h + SPECIAL_OUTDIRS := $(MID_ASM_DIR) $(CRY_BIN_DIR) SPECIAL_OUTDIRS += $(SOUND_BIN_DIR) $(SOUND_BIN_DIR)/direct_sound_samples/phonemes $(SOUND_BIN_DIR)/direct_sound_samples/cries $(shell mkdir -p $(SPECIAL_OUTDIRS) ) # Assembly song compilation -$(SONG_BUILDDIR)/%.o: $(SONG_SUBDIR)/%.s +$(SONG_BUILDDIR)/%.o: $(SONG_SUBDIR)/%.s $(EXPANSION_BATTLE_CONFIG) $(AS) $(ASFLAGS) -I sound -o $@ $< $(MID_BUILDDIR)/%.o: $(MID_ASM_DIR)/%.s $(AS) $(ASFLAGS) -I sound -o $@ $< @@ -34,7 +37,7 @@ MID_CFG_PATH := $(MID_SUBDIR)/midi.cfg # $1: Source path no extension, $2 Options define MID_RULE -$(MID_ASM_DIR)/$1.s: $(MID_SUBDIR)/$1.mid $(MID_CFG_PATH) +$(MID_ASM_DIR)/$1.s: $(MID_SUBDIR)/$1.mid $(MID_CFG_PATH) $(EXPANSION_BATTLE_CONFIG) $(MID) $$< $$@ $2 endef # source path, remaining text (options) diff --git a/include/config/battle.h b/include/config/battle.h index 17c5daac45..33451ca4db 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -283,6 +283,11 @@ #define B_TRY_CATCH_TRAINER_BALL GEN_LATEST // In Gen4+, trying to catch a Trainer's Pokémon does not consume the Poké Ball. #define B_SLEEP_CLAUSE FALSE // Enables Sleep Clause all the time in every case, overriding B_FLAG_SLEEP_CLAUSE. Use that for modularity. +#define NUM_BEEPS_GEN_LATEST 4 // Loops 4 times +#define NUM_BEEPS_GEN_3 -1 // Loops infinitely +#define NUM_BEEPS_OFF 0 // Doesn't play at all +#define B_NUM_LOW_HEALTH_BEEPS NUM_BEEPS_GEN_LATEST // This controls the number of times the "low health" beep will loop. Setting this value to NUM_BEEPS_OFF will disable the beep, while NUM_BEEPS_GEN_3 will loop infinitely. You can set this to any number you want, the defines listed are just for ease of use. + // Animation Settings #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. diff --git a/tools/mid2agb/Makefile b/tools/mid2agb/Makefile index 553b7859ed..7c1612dbb6 100644 --- a/tools/mid2agb/Makefile +++ b/tools/mid2agb/Makefile @@ -6,6 +6,9 @@ SRCS := agb.cpp error.cpp main.cpp midi.cpp tables.cpp HEADERS := agb.h error.h main.h midi.h tables.h +# Needs to recompile for B_NUM_LOW_HEALTH_BEEPS in battle.h +EXPANSION_BATTLE_CONFIG := ../../include/config/battle.h + ifeq ($(OS),Windows_NT) EXE := .exe else @@ -17,7 +20,7 @@ endif all: mid2agb$(EXE) @: -mid2agb$(EXE): $(SRCS) $(HEADERS) +mid2agb$(EXE): $(SRCS) $(HEADERS) $(EXPANSION_BATTLE_CONFIG) $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: diff --git a/tools/mid2agb/agb.cpp b/tools/mid2agb/agb.cpp index caa6f0ecd9..3bc4f601ac 100644 --- a/tools/mid2agb/agb.cpp +++ b/tools/mid2agb/agb.cpp @@ -525,6 +525,117 @@ void PrintAgbTrack(std::vector& events) PrintByte("FINE"); } +void PrintAgbTrackLoop(std::vector& events, int trackLoops) +{ + std::fprintf(g_outputFile, "\n@**************** Track %u (Midi-Chn.%u) ****************@\n\n", g_agbTrack, g_midiChan + 1); + std::fprintf(g_outputFile, "%s_%u:\n", g_asmLabel.c_str(), g_agbTrack); + int wholeNoteCount = 0; + + ResetTrackVars(); + + bool foundVolBeforeNote = false; + + for (const Event& event : events) + { + if (event.type == EventType::Note) + break; + + if (event.type == EventType::Controller && event.param1 == 0x07) + { + foundVolBeforeNote = true; + break; + } + } + + if (!foundVolBeforeNote) + PrintByte("\tVOL , 127*%s_mvl/mxv", g_asmLabel.c_str()); + + PrintWait(g_initialWait); + if (trackLoops > 0) + PrintByte("KEYSH , %s_key%+d", g_asmLabel.c_str(), 0); + + for (int k = 0; k < trackLoops; k++) + { + for (unsigned i = 0; events[i].type != EventType::EndOfTrack; i++) + { + const Event& event = events[i]; + + if (IsPatternBoundary(event.type)) + { + if (s_inPattern) + PrintByte("PEND"); + s_inPattern = false; + } + + // added `&& (i % 2 == 0)` to cut down on excess comments created in the .s file + if ((event.type == EventType::WholeNoteMark || event.type == EventType::Pattern) && (i % 2 == 0)) + std::fprintf(g_outputFile, "@ %03d ----------------------------------------\n", wholeNoteCount++); + + switch (event.type) + { + case EventType::Note: + PrintNote(event); + break; + case EventType::EndOfTie: + PrintEndOfTieOp(event); + break; + case EventType::Label: + if (k == 0) + PrintSeqLoopLabel(event); + break; + case EventType::LoopEnd: + case EventType::LoopEndBegin: + break; + case EventType::LoopBegin: + if (k == 0) + PrintSeqLoopLabel(event); + break; + case EventType::WholeNoteMark: + if (event.param2 & 0x80000000) + { + std::fprintf(g_outputFile, "%s_%u_%03lu:\n", g_asmLabel.c_str(), g_agbTrack, (unsigned long)(event.param2 & 0x7FFFFFFF)); + ResetTrackVars(); + s_inPattern = true; + } + PrintWait(event.time); + break; + case EventType::Pattern: + PrintByte("PATT"); + PrintWord("%s_%u_%03lu", g_asmLabel.c_str(), g_agbTrack, event.param2); + + while (!IsPatternBoundary(events[i + 1].type)) + i++; + + ResetTrackVars(); + break; + case EventType::Tempo: + if (k == 0) + { + PrintByte("TEMPO , %u*%s_tbs/2", static_cast(round(60000000.0f / static_cast(event.param2))), g_asmLabel.c_str()); + PrintWait(event.time); + } + break; + case EventType::InstrumentChange: + if (k == 0) + PrintOp(event.time, "VOICE ", "%u", event.param1); + break; + case EventType::PitchBend: + PrintOp(event.time, "BEND ", "c_v%+d", event.param2 - 64); + break; + case EventType::Controller: + if (k == 0) + PrintControllerOp(event); + break; + default: + PrintWait(event.time); + break; + } + } + } + + PrintByte("FINE"); +} + void PrintAgbFooter() { int trackCount = g_agbTrack - 1; diff --git a/tools/mid2agb/agb.h b/tools/mid2agb/agb.h index 7eab3c1433..d096b1bc27 100644 --- a/tools/mid2agb/agb.h +++ b/tools/mid2agb/agb.h @@ -26,6 +26,7 @@ void PrintAgbHeader(); void PrintAgbTrack(std::vector& events); +void PrintAgbTrackLoop(std::vector& events, int trackLoops); void PrintAgbFooter(); extern int g_agbTrack; diff --git a/tools/mid2agb/midi.cpp b/tools/mid2agb/midi.cpp index fa7d9ce285..e2e7741cb3 100644 --- a/tools/mid2agb/midi.cpp +++ b/tools/mid2agb/midi.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -30,6 +31,10 @@ #include "agb.h" #include "tables.h" +// expansion headers +#include "../../include/config/battle.h" +#include "../../include/config/general.h" + enum class MidiEventCategory { Control, @@ -916,6 +921,7 @@ void Compress(std::vector& events) void ReadMidiTracks() { long trackHeaderStart = 14; + int trackLoops = B_NUM_LOW_HEALTH_BEEPS; ReadMidiTrackHeader(trackHeaderStart); ReadSeqEvents(); @@ -955,7 +961,10 @@ void ReadMidiTracks() if (g_compressionEnabled) Compress(*events); - PrintAgbTrack(*events); + if ((strcmp(g_asmLabel.c_str(), "se_low_health") == 0) && trackLoops >= 0) + PrintAgbTrackLoop(*events, trackLoops); + else + PrintAgbTrack(*events); g_agbTrack++; } From 079017549d949b7a1532a2750f7c38c227436d8d Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sun, 16 Mar 2025 14:58:46 +0100 Subject: [PATCH 051/115] Wrong argumet usage in `CalcCritChanceStage` (#6429) --- src/battle_script_commands.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index e0bfa82b31..520673805e 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1972,9 +1972,9 @@ static void Cmd_critcalc(void) u32 abilityDef = GetBattlerAbility(battlerDef); if (GetGenConfig(GEN_CONFIG_CRIT_CHANCE) == GEN_1) - gBattleStruct->critChance[battlerDef] = CalcCritChanceStageGen1(gBattlerAttacker, gBattlerTarget, gCurrentMove, TRUE, abilityAtk, abilityDef, holdEffectAtk); + gBattleStruct->critChance[battlerDef] = CalcCritChanceStageGen1(gBattlerAttacker, battlerDef, gCurrentMove, TRUE, abilityAtk, abilityDef, holdEffectAtk); else - gBattleStruct->critChance[battlerDef] = CalcCritChanceStage(gBattlerAttacker, gBattlerTarget, gCurrentMove, TRUE, abilityAtk, abilityDef, holdEffectAtk); + gBattleStruct->critChance[battlerDef] = CalcCritChanceStage(gBattlerAttacker, battlerDef, gCurrentMove, TRUE, abilityAtk, abilityDef, holdEffectAtk); if (gBattleTypeFlags & (BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_FIRST_BATTLE)) gSpecialStatuses[battlerDef].criticalHit = FALSE; From 48d321e80bc0c1ef3d7b9470b516aefa3ef4e518 Mon Sep 17 00:00:00 2001 From: Deokishisu <6993375+Deokishisu@users.noreply.github.com> Date: Sun, 16 Mar 2025 15:06:05 -0400 Subject: [PATCH 052/115] Include Missed `GetInteractedMetatileScript` Entries for Mart & Center Signs (#6269) --- src/field_control_avatar.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index a9be5b55a0..ecf78be0bb 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -497,6 +497,20 @@ static const u8 *GetInteractedMetatileScript(struct MapPosition *position, u8 me return EventScript_Questionnaire; if (MetatileBehavior_IsTrainerHillTimer(metatileBehavior) == TRUE) return EventScript_TrainerHillTimer; + if (MetatileBehavior_IsPokeMartSign(metatileBehavior) == TRUE) + { + if(direction != DIR_NORTH) + return NULL; + SetMsgSignPostAndVarFacing(direction); + return Common_EventScript_ShowPokemartSign; + } + if (MetatileBehavior_IsPokemonCenterSign(metatileBehavior) == TRUE) + { + if(direction != DIR_NORTH) + return NULL; + SetMsgSignPostAndVarFacing(direction); + return Common_EventScript_ShowPokemonCenterSign; + } elevation = position->elevation; if (elevation == MapGridGetElevationAt(position->x, position->y)) From f3b677ee3f9ea46006ac400ccc872d6afa52cd61 Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Sun, 16 Mar 2025 19:09:24 +0000 Subject: [PATCH 053/115] Fixes Known Failing Mold Breaker Sleep Clause test (#6434) --- test/battle/sleep_clause.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/battle/sleep_clause.c b/test/battle/sleep_clause.c index 7537fb437a..bb967020ac 100644 --- a/test/battle/sleep_clause.c +++ b/test/battle/sleep_clause.c @@ -1390,7 +1390,6 @@ SINGLE_BATTLE_TEST("Sleep Clause: Suppressing and then sleeping Vital Spirit / I SINGLE_BATTLE_TEST("Sleep Clause: Mold Breaker Pokémon sleeping Vital Spirit / Insomnia activates sleep clause") { - KNOWN_FAILING; // Interaction between Mold Breaker and Vital Spirit / Insomnia is broken. Issue #5578 https://github.com/rh-hideout/pokeemerald-expansion/issues/5578 u32 ability; PARAMETRIZE { ability = ABILITY_VITAL_SPIRIT; } PARAMETRIZE { ability = ABILITY_INSOMNIA; } @@ -1410,7 +1409,7 @@ SINGLE_BATTLE_TEST("Sleep Clause: Mold Breaker Pokémon sleeping Vital Spirit / ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, opponent); MESSAGE("The opposing Delibird fell asleep!"); STATUS_ICON(opponent, sleep: TRUE); - MESSAGE("Sleep Clause kept the opposing Delibird awake!"); + ABILITY_POPUP(opponent, ability); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPORE, player); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, opponent); MESSAGE("The opposing Zigzagoon fell asleep!"); From eaf754985427048fdf2d17791771c2cd6a64c88b Mon Sep 17 00:00:00 2001 From: Deokishisu <6993375+Deokishisu@users.noreply.github.com> Date: Sun, 16 Mar 2025 17:51:36 -0400 Subject: [PATCH 054/115] Replace Incorrect Slow Stairs Movement with Correct One (#6275) --- asm/macros/movement.inc | 4 + include/constants/event_object_movement.h | 4 + include/event_object_movement.h | 1 + .../movement_action_func_tables.h | 40 ++++++ src/event_object_movement.c | 125 ++++++++++++++++-- src/field_player_avatar.c | 13 +- 6 files changed, 175 insertions(+), 12 deletions(-) diff --git a/asm/macros/movement.inc b/asm/macros/movement.inc index 7fb51ce225..e36f81fa55 100644 --- a/asm/macros/movement.inc +++ b/asm/macros/movement.inc @@ -164,6 +164,10 @@ create_movement_action fly_down, MOVEMENT_ACTION_FLY_DOWN create_movement_action emote_double_exclamation_mark, MOVEMENT_ACTION_EMOTE_DOUBLE_EXCL_MARK create_movement_action emote_x, MOVEMENT_ACTION_EMOTE_X + create_movement_action walk_slow_stairs_down, MOVEMENT_ACTION_WALK_SLOW_STAIRS_DOWN + create_movement_action walk_slow_stairs_up, MOVEMENT_ACTION_WALK_SLOW_STAIRS_UP + create_movement_action walk_slow_stairs_left, MOVEMENT_ACTION_WALK_SLOW_STAIRS_LEFT + create_movement_action walk_slow_stairs_right, MOVEMENT_ACTION_WALK_SLOW_STAIRS_RIGHT create_movement_action exit_pokeball, MOVEMENT_ACTION_EXIT_POKEBALL create_movement_action enter_pokeball, MOVEMENT_ACTION_ENTER_POKEBALL diff --git a/include/constants/event_object_movement.h b/include/constants/event_object_movement.h index 650a6a2357..bc2081a54b 100755 --- a/include/constants/event_object_movement.h +++ b/include/constants/event_object_movement.h @@ -251,6 +251,10 @@ #define MOVEMENT_ACTION_RUN_UP_SLOW 0xA3 #define MOVEMENT_ACTION_RUN_LEFT_SLOW 0xA4 #define MOVEMENT_ACTION_RUN_RIGHT_SLOW 0xA5 +#define MOVEMENT_ACTION_WALK_SLOW_STAIRS_DOWN 0xA6 +#define MOVEMENT_ACTION_WALK_SLOW_STAIRS_UP 0xA7 +#define MOVEMENT_ACTION_WALK_SLOW_STAIRS_LEFT 0xA8 +#define MOVEMENT_ACTION_WALK_SLOW_STAIRS_RIGHT 0xA9 #define MOVEMENT_ACTION_STEP_END 0xFE #define MOVEMENT_ACTION_NONE 0xFF diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 0170baf910..679ad80ea4 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -222,6 +222,7 @@ void ObjectEventMoveDestCoords(struct ObjectEvent *objEvent, u32 direction, s16 u8 AddCameraObject(u8 linkedSpriteId); void UpdateObjectEventsForCameraUpdate(s16 x, s16 y); u8 GetWalkSlowMovementAction(u32); +u8 GetWalkSlowStairsMovementAction(u32); u8 GetJumpMovementAction(u32); u8 ElevationToPriority(u8 elevation); void ObjectEventUpdateElevation(struct ObjectEvent *objEvent, struct Sprite *); diff --git a/src/data/object_events/movement_action_func_tables.h b/src/data/object_events/movement_action_func_tables.h index dda5ff3991..4f5fd57a82 100755 --- a/src/data/object_events/movement_action_func_tables.h +++ b/src/data/object_events/movement_action_func_tables.h @@ -271,6 +271,14 @@ u8 MovementActionFunc_RunSlowUp_Step0(struct ObjectEvent *objectEvent, struct Sp u8 MovementActionFunc_RunSlowLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite); u8 MovementActionFunc_RunSlowRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite); u8 MovementActionFunc_RunSlow_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite); +u8 MovementAction_WalkSlowStairsUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite); +u8 MovementAction_WalkSlowStairsUp_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite); +u8 MovementAction_WalkSlowStairsDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite); +u8 MovementAction_WalkSlowStairsDown_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite); +u8 MovementAction_WalkSlowStairsLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite); +u8 MovementAction_WalkSlowStairsLeft_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite); +u8 MovementAction_WalkSlowStairsRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite); +u8 MovementAction_WalkSlowStairsRight_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite); u8 (*const gMovementActionFuncs_FaceDown[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_FaceUp[])(struct ObjectEvent *, struct Sprite *); @@ -438,6 +446,10 @@ u8 (*const gMovementActionFuncs_RunDownSlow[])(struct ObjectEvent *, struct Spri u8 (*const gMovementActionFuncs_RunUpSlow[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_RunLeftSlow[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_RunRightSlow[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_WalkSlowStairsDown[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_WalkSlowStairsUp[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_WalkSlowStairsLeft[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_WalkSlowStairsRight[])(struct ObjectEvent *, struct Sprite *); u8 (*const *const gMovementActionFuncs[])(struct ObjectEvent *, struct Sprite *) = { [MOVEMENT_ACTION_FACE_DOWN] = gMovementActionFuncs_FaceDown, @@ -606,6 +618,10 @@ u8 (*const *const gMovementActionFuncs[])(struct ObjectEvent *, struct Sprite *) [MOVEMENT_ACTION_RUN_UP_SLOW] = gMovementActionFuncs_RunUpSlow, [MOVEMENT_ACTION_RUN_LEFT_SLOW] = gMovementActionFuncs_RunLeftSlow, [MOVEMENT_ACTION_RUN_RIGHT_SLOW] = gMovementActionFuncs_RunRightSlow, + [MOVEMENT_ACTION_WALK_SLOW_STAIRS_DOWN] = gMovementActionFuncs_WalkSlowStairsDown, + [MOVEMENT_ACTION_WALK_SLOW_STAIRS_UP] = gMovementActionFuncs_WalkSlowStairsUp, + [MOVEMENT_ACTION_WALK_SLOW_STAIRS_LEFT] = gMovementActionFuncs_WalkSlowStairsLeft, + [MOVEMENT_ACTION_WALK_SLOW_STAIRS_RIGHT] = gMovementActionFuncs_WalkSlowStairsRight, }; u8 (*const gMovementActionFuncs_FaceDown[])(struct ObjectEvent *, struct Sprite *) = { @@ -1591,3 +1607,27 @@ u8 (*const gMovementActionFuncs_RunRightSlow[])(struct ObjectEvent *, struct Spr MovementActionFunc_RunSlow_Step1, MovementAction_PauseSpriteAnim, }; + +bool8 (*const gMovementActionFuncs_WalkSlowStairsUp[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_WalkSlowStairsUp_Step0, + MovementAction_WalkSlowStairsUp_Step1, + MovementAction_PauseSpriteAnim, +}; + +bool8 (*const gMovementActionFuncs_WalkSlowStairsDown[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_WalkSlowStairsDown_Step0, + MovementAction_WalkSlowStairsDown_Step1, + MovementAction_PauseSpriteAnim, +}; + +bool8 (*const gMovementActionFuncs_WalkSlowStairsLeft[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_WalkSlowStairsLeft_Step0, + MovementAction_WalkSlowStairsLeft_Step1, + MovementAction_PauseSpriteAnim, +}; + +bool8 (*const gMovementActionFuncs_WalkSlowStairsRight[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_WalkSlowStairsRight_Step0, + MovementAction_WalkSlowStairsRight_Step1, + MovementAction_PauseSpriteAnim, +}; diff --git a/src/event_object_movement.c b/src/event_object_movement.c index bb546e1fa9..65b25c3faa 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -193,6 +193,7 @@ static void DoShadowFieldEffect(struct ObjectEvent *); static void SetJumpSpriteData(struct Sprite *, u8, u8, u8); static void SetWalkSlowSpriteData(struct Sprite *, u8); static bool8 UpdateWalkSlowAnim(struct Sprite *); +static bool8 UpdateWalkSlowStairs(struct ObjectEvent *objectEvent, struct Sprite *sprite); static u8 DoJumpSpriteMovement(struct Sprite *); static u8 DoJumpSpecialSpriteMovement(struct Sprite *); static void CreateLevitateMovementTask(struct ObjectEvent *); @@ -962,6 +963,13 @@ const u8 gFaceDirectionMovementActions[] = { [DIR_NORTHWEST] = MOVEMENT_ACTION_FACE_LEFT, [DIR_NORTHEAST] = MOVEMENT_ACTION_FACE_RIGHT }; +static const u8 gWalkSlowStairsMovementActions[] = { + [DIR_NONE] = MOVEMENT_ACTION_WALK_SLOW_STAIRS_DOWN, + [DIR_SOUTH] = MOVEMENT_ACTION_WALK_SLOW_STAIRS_DOWN, + [DIR_NORTH] = MOVEMENT_ACTION_WALK_SLOW_STAIRS_UP, + [DIR_WEST] = MOVEMENT_ACTION_WALK_SLOW_STAIRS_LEFT, + [DIR_EAST] = MOVEMENT_ACTION_WALK_SLOW_STAIRS_RIGHT, +}; const u8 gWalkSlowMovementActions[] = { [DIR_NONE] = MOVEMENT_ACTION_WALK_SLOW_DOWN, [DIR_SOUTH] = MOVEMENT_ACTION_WALK_SLOW_DOWN, @@ -5528,13 +5536,13 @@ bool8 FollowablePlayerMovement_Step(struct ObjectEvent *objectEvent, struct Spri direction = GetDirectionToFace(x, y, targetX, targetY); // During a script, if player sidesteps or backsteps, // mirror player's direction instead - if (ArePlayerFieldControlsLocked() - && gObjectEvents[gPlayerAvatar.objectEventId].facingDirection != gObjectEvents[gPlayerAvatar.objectEventId].movementDirection) + if (ArePlayerFieldControlsLocked() && + gObjectEvents[gPlayerAvatar.objectEventId].facingDirection != gObjectEvents[gPlayerAvatar.objectEventId].movementDirection) { direction = gObjectEvents[gPlayerAvatar.objectEventId].movementDirection; objectEvent->facingDirectionLocked = TRUE; } - + MoveCoords(direction, &x, &y); GetCollisionAtCoords(objectEvent, x, y, direction); // Sets directionOverwrite for stairs if (GetLedgeJumpDirection(x, y, direction) != DIR_NONE) @@ -5542,12 +5550,12 @@ bool8 FollowablePlayerMovement_Step(struct ObjectEvent *objectEvent, struct Spri // InitJumpRegular will set the proper speed ObjectEventSetSingleMovement(objectEvent, sprite, GetJump2MovementAction(direction)); } - else if (playerAction >= MOVEMENT_ACTION_WALK_SLOW_DOWN && playerAction <= MOVEMENT_ACTION_WALK_SLOW_RIGHT) + else if (playerAction >= MOVEMENT_ACTION_WALK_SLOW_STAIRS_DOWN && playerAction <= MOVEMENT_ACTION_WALK_SLOW_STAIRS_RIGHT) { if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH)) // on sideways stairs objectEvent->movementActionId = GetWalkNormalMovementAction(direction); else - ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkSlowMovementAction(direction)); + ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkSlowStairsMovementAction(direction)); } else if (PlayerGetCopyableMovement() == COPY_MOVE_JUMP2) { @@ -6399,13 +6407,13 @@ static u8 TryUpdateMovementActionOnStairs(struct ObjectEvent *objectEvent, u8 mo switch (movementActionId) { case MOVEMENT_ACTION_WALK_NORMAL_DOWN: - return MOVEMENT_ACTION_WALK_SLOW_DOWN; + return MOVEMENT_ACTION_WALK_SLOW_STAIRS_DOWN; case MOVEMENT_ACTION_WALK_NORMAL_UP: - return MOVEMENT_ACTION_WALK_SLOW_UP; + return MOVEMENT_ACTION_WALK_SLOW_STAIRS_UP; case MOVEMENT_ACTION_WALK_NORMAL_LEFT: - return MOVEMENT_ACTION_WALK_SLOW_LEFT; + return MOVEMENT_ACTION_WALK_SLOW_STAIRS_LEFT; case MOVEMENT_ACTION_WALK_NORMAL_RIGHT: - return MOVEMENT_ACTION_WALK_SLOW_RIGHT; + return MOVEMENT_ACTION_WALK_SLOW_STAIRS_RIGHT; default: return movementActionId; } @@ -6534,6 +6542,7 @@ u8 name(u32 idx)\ } dirn_to_anim(GetFaceDirectionMovementAction, gFaceDirectionMovementActions); +dirn_to_anim(GetWalkSlowStairsMovementAction, gWalkSlowStairsMovementActions); dirn_to_anim(GetWalkSlowMovementAction, gWalkSlowMovementActions); dirn_to_anim(GetPlayerRunSlowMovementAction, gRunSlowMovementActions); dirn_to_anim(GetWalkNormalMovementAction, gWalkNormalMovementActions); @@ -10318,6 +10327,22 @@ static bool8 UpdateWalkSlowAnim(struct Sprite *sprite) return FALSE; } +bool8 UpdateWalkSlowStairsAnim(struct Sprite *sprite) +{ + if (++sprite->sTimer < 3) + { + Step1(sprite, sprite->sDirection); + sprite->sNumSteps++; + } + else + sprite->sTimer = 0; + + if (sprite->sNumSteps > 15) + return TRUE; + else + return FALSE; +} + #undef sTimer #undef sNumSteps @@ -11075,6 +11100,88 @@ bool8 MovementActionFunc_RunSlow_Step1(struct ObjectEvent *objectEvent, struct S return FALSE; } +static bool8 UpdateWalkSlowStairs(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + if (UpdateWalkSlowStairsAnim(sprite)) + { + ShiftStillObjectEventCoords(objectEvent); + objectEvent->triggerGroundEffectsOnStop = TRUE; + sprite->animPaused = TRUE; + return TRUE; + } + return FALSE; +} + +bool8 MovementAction_WalkSlowStairsUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + InitWalkSlow(objectEvent, sprite, DIR_NORTH); + return MovementAction_WalkSlowStairsUp_Step1(objectEvent, sprite); +} + +bool8 MovementAction_WalkSlowStairsUp_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + if (UpdateWalkSlowStairs(objectEvent, sprite)) + { + sprite->data[2] = 2; + return TRUE; + } + return FALSE; +} + +bool8 MovementAction_WalkSlowStairsDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + InitWalkSlow(objectEvent, sprite, DIR_SOUTH); + return MovementAction_WalkSlowStairsDown_Step1(objectEvent, sprite); +} + +bool8 MovementAction_WalkSlowStairsDown_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + if (UpdateWalkSlowStairs(objectEvent, sprite)) + { + sprite->data[2] = 2; + return TRUE; + } + return FALSE; +} + +bool8 MovementAction_WalkSlowStairsLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + if (objectEvent->directionOverwrite) + InitWalkSlow(objectEvent, sprite, objectEvent->directionOverwrite); + else + InitWalkSlow(objectEvent, sprite, DIR_WEST); + return MovementAction_WalkSlowStairsLeft_Step1(objectEvent, sprite); +} + +bool8 MovementAction_WalkSlowStairsLeft_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + if (UpdateWalkSlowStairs(objectEvent, sprite)) + { + sprite->data[2] = 2; + return TRUE; + } + return FALSE; +} + +bool8 MovementAction_WalkSlowStairsRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + if (objectEvent->directionOverwrite) + InitWalkSlow(objectEvent, sprite, objectEvent->directionOverwrite); + else + InitWalkSlow(objectEvent, sprite, DIR_EAST); + return MovementAction_WalkSlowStairsRight_Step1(objectEvent, sprite); +} + +bool8 MovementAction_WalkSlowStairsRight_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + if (UpdateWalkSlowStairs(objectEvent, sprite)) + { + sprite->data[2] = 2; + return TRUE; + } + return FALSE; +} + static u16 GetGraphicsIdForMon(u32 species, bool32 shiny, bool32 female) { u16 graphicsId = species + OBJ_EVENT_MON; diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index e9cd3149f7..674fb7eddb 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -93,7 +93,8 @@ static bool8 PlayerAnimIsMultiFrameStationaryAndStateNotTurning(void); static bool8 PlayerIsAnimActive(void); static bool8 PlayerCheckIfAnimFinishedOrInactive(void); -static void PlayerWalkSlow(u8 direction); +static void PlayerWalkSlowStairs(u8 direction); +static void UNUSED PlayerWalkSlow(u8 direction); static void PlayerRunSlow(u8 direction); static void PlayerRun(u8); static void PlayerNotOnBikeCollide(u8); @@ -701,7 +702,7 @@ static void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys) else { if (ObjectMovingOnRockStairs(&gObjectEvents[gPlayerAvatar.objectEventId], direction)) - PlayerWalkSlow(direction); + PlayerWalkSlowStairs(direction); else PlayerWalkNormal(direction); } @@ -1016,8 +1017,14 @@ void PlayerSetAnimId(u8 movementActionId, u8 copyableMovement) } } +// slow stairs (from FRLG--faster than slow) +static void PlayerWalkSlowStairs(u8 direction) +{ + PlayerSetAnimId(GetWalkSlowStairsMovementAction(direction), 2); +} + // slow -static void PlayerWalkSlow(u8 direction) +static void UNUSED PlayerWalkSlow(u8 direction) { PlayerSetAnimId(GetWalkSlowMovementAction(direction), 2); } From ddab689a0789d6d05407143e80a771404a881377 Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Sun, 16 Mar 2025 22:10:20 +0000 Subject: [PATCH 055/115] Fixes Neutralizing Gas Exits, Weather Abilities and Terrain Effects order (#6435) --- data/battle_scripts_1.s | 31 +-- include/battle_scripts.h | 4 +- src/battle_util.c | 2 +- test/battle/ability/forecast.c | 8 +- test/battle/ability/neutralizing_gas.c | 273 +++++++++++++++++++++++++ test/battle/hold_effect/seeds.c | 58 ++++++ 6 files changed, 356 insertions(+), 20 deletions(-) create mode 100644 test/battle/ability/neutralizing_gas.c diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index f66a698eed..142ea013f4 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -7687,13 +7687,15 @@ BattleScript_ShedSkinActivates:: end3 BattleScript_ActivateWeatherAbilities: + saveattacker savetarget - setbyte gBattlerTarget, 0 + setbyte gBattlerAttacker, 0 BattleScript_ActivateWeatherAbilities_Loop: - copybyte sBATTLER, gBattlerTarget + copyarraywithindex gBattlerTarget, gBattlerByTurnOrder, gBattlerAttacker, 1 activateweatherchangeabilities BS_TARGET - addbyte gBattlerTarget, 1 - jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_ActivateWeatherAbilities_Loop + addbyte gBattlerAttacker, 1 + jumpifbytenotequal gBattlerAttacker, gBattlersCount, BattleScript_ActivateWeatherAbilities_Loop + restoreattacker restoretarget return @@ -7987,7 +7989,7 @@ BattleScript_AttackWeakenedByStrongWinds:: waitmessage B_WAIT_TIME_LONG return -BattleScript_MimicryActivates_End3:: +BattleScript_MimicryActivates:: pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp printstring STRINGID_BATTLERTYPECHANGEDTO @@ -8013,16 +8015,18 @@ BattleScript_SnowWarningActivatesSnow:: end3 BattleScript_ActivateTerrainEffects: + saveattacker savetarget - setbyte gBattlerTarget, 0 + setbyte gBattlerAttacker, 0 BattleScript_ActivateTerrainSeed: - copybyte sBATTLER, gBattlerTarget + copyarraywithindex gBattlerTarget, gBattlerByTurnOrder, gBattlerAttacker, 1 doterrainseed BS_TARGET, BattleScript_ActivateTerrainAbility removeitem BS_TARGET BattleScript_ActivateTerrainAbility: activateterrainchangeabilities BS_TARGET - addbyte gBattlerTarget, 0x1 - jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_ActivateTerrainSeed + addbyte gBattlerAttacker, 1 + jumpifbytenotequal gBattlerAttacker, gBattlersCount, BattleScript_ActivateTerrainSeed + restoreattacker restoretarget return @@ -9622,11 +9626,14 @@ BattleScript_NeutralizingGasExits:: pause B_WAIT_TIME_SHORT printstring STRINGID_NEUTRALIZINGGASOVER waitmessage B_WAIT_TIME_LONG - setbyte gBattlerTarget, 0 + setbyte gBattlerAttacker, 0 BattleScript_NeutralizingGasExitsLoop: + copyarraywithindex gBattlerTarget, gBattlerByTurnOrder, gBattlerAttacker, 1 + saveattacker switchinabilities BS_TARGET - addbyte gBattlerTarget, 1 - jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_NeutralizingGasExitsLoop + restoreattacker + addbyte gBattlerAttacker, 1 + jumpifbytenotequal gBattlerAttacker, gBattlersCount, BattleScript_NeutralizingGasExitsLoop restoreattacker restoretarget return diff --git a/include/battle_scripts.h b/include/battle_scripts.h index f67ab67ec9..a3ff45a19c 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -443,8 +443,6 @@ extern const u8 BattleScript_WanderingSpiritActivates[]; extern const u8 BattleScript_MirrorArmorReflect[]; extern const u8 BattleScript_GooeyActivates[]; extern const u8 BattleScript_PastelVeilActivates[]; -extern const u8 BattleScript_MimicryActivatesEnd3[]; -extern const u8 BattleScript_ApplyMimicry[]; extern const u8 BattleScript_AttackerFormChangeEnd3NoPopup[]; extern const u8 BattleScript_AttackerFormChangeWithStringEnd3NoPopup[]; extern const u8 BattleScript_AttackerFormChangeMoveEffect[]; @@ -480,7 +478,7 @@ extern const u8 BattleScript_CommanderActivates[]; extern const u8 BattleScript_HospitalityActivates[]; extern const u8 BattleScript_ToxicDebrisActivates[]; extern const u8 BattleScript_EarthEaterActivates[]; -extern const u8 BattleScript_MimicryActivates_End3[]; +extern const u8 BattleScript_MimicryActivates[]; extern const u8 BattleScript_IceFaceNullsDamage[]; extern const u8 BattleScript_BattlerFormChangeWithStringEnd3[]; extern const u8 BattleScript_DampPreventsAftermath[]; diff --git a/src/battle_util.c b/src/battle_util.c index 0406bb42e3..5880ec3d5b 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -6603,7 +6603,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 gDisableStructs[battler].terrainAbilityDone = TRUE; ChangeTypeBasedOnTerrain(battler); gBattlerAbility = gBattleScripting.battler = battler; - BattleScriptPushCursorAndCallback(BattleScript_MimicryActivates_End3); + BattleScriptPushCursorAndCallback(BattleScript_MimicryActivates); effect++; } break; diff --git a/test/battle/ability/forecast.c b/test/battle/ability/forecast.c index dae5326fd5..c462a3a634 100644 --- a/test/battle/ability/forecast.c +++ b/test/battle/ability/forecast.c @@ -110,10 +110,10 @@ DOUBLE_BATTLE_TEST("Forecast transforms all Castforms present in weather") PARAMETRIZE { move = MOVE_HAIL; } PARAMETRIZE { move = MOVE_SNOWSCAPE; } GIVEN { - PLAYER(SPECIES_CASTFORM_NORMAL) { Ability(ABILITY_FORECAST); } - PLAYER(SPECIES_CASTFORM_NORMAL) { Ability(ABILITY_FORECAST); } - OPPONENT(SPECIES_CASTFORM_NORMAL) { Ability(ABILITY_FORECAST); } - OPPONENT(SPECIES_CASTFORM_NORMAL) { Ability(ABILITY_FORECAST); } + PLAYER(SPECIES_CASTFORM_NORMAL) { Ability(ABILITY_FORECAST); Speed(10); } + PLAYER(SPECIES_CASTFORM_NORMAL) { Ability(ABILITY_FORECAST); Speed(5); } + OPPONENT(SPECIES_CASTFORM_NORMAL) { Ability(ABILITY_FORECAST); Speed(7); } + OPPONENT(SPECIES_CASTFORM_NORMAL) { Ability(ABILITY_FORECAST); Speed(1); } } WHEN { TURN { MOVE(playerRight, move); } } SCENE { diff --git a/test/battle/ability/neutralizing_gas.c b/test/battle/ability/neutralizing_gas.c new file mode 100644 index 0000000000..ef83483d32 --- /dev/null +++ b/test/battle/ability/neutralizing_gas.c @@ -0,0 +1,273 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Neutralizing Gas activates on switch-in") +{ + GIVEN { + PLAYER(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { } + } SCENE { + ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS); + MESSAGE("Neutralizing gas filled the area!"); + } +} + +SINGLE_BATTLE_TEST("Neutralizing Gas prevents opponent's switch-in ability from activating") +{ + GIVEN { + PLAYER(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); } + OPPONENT(SPECIES_ZEKROM) { Ability(ABILITY_TERAVOLT); } + } WHEN { + TURN { } + } SCENE { + ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS); + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_TERAVOLT); + MESSAGE("The opposing Zekrom is radiating a bursting aura!"); + } + } +} + +DOUBLE_BATTLE_TEST("Neutralizing Gas prevents ally's switch-in ability from activating") +{ + GIVEN { + PLAYER(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); } + PLAYER(SPECIES_ZEKROM) { Ability(ABILITY_TERAVOLT); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { } + } SCENE { + ABILITY_POPUP(playerLeft, ABILITY_NEUTRALIZING_GAS); + NONE_OF { + ABILITY_POPUP(playerRight, ABILITY_TERAVOLT); + MESSAGE("Zekrom is radiating a bursting aura!"); + } + } +} + +DOUBLE_BATTLE_TEST("Neutralizing Gas ignores all battlers' ability effects") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_SURF].target == MOVE_TARGET_FOES_AND_ALLY); + PLAYER(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); } + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); } + OPPONENT(SPECIES_LANTURN) { Ability(ABILITY_WATER_ABSORB); } + OPPONENT(SPECIES_BELLIBOLT) { Ability(ABILITY_ELECTROMORPHOSIS); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_SURF); MOVE(playerRight, MOVE_SURF); } + } SCENE { + ABILITY_POPUP(playerLeft, ABILITY_NEUTRALIZING_GAS); + MESSAGE("Neutralizing gas filled the area!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SURF, playerLeft); + NONE_OF { + ABILITY_POPUP(playerRight, ABILITY_TELEPATHY); + ABILITY_POPUP(opponentLeft, ABILITY_WATER_ABSORB); + ABILITY_POPUP(opponentRight, ABILITY_ELECTROMORPHOSIS); + } + HP_BAR(opponentLeft); + HP_BAR(playerRight); + HP_BAR(opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SURF, playerRight); + NONE_OF { + ABILITY_POPUP(opponentLeft, ABILITY_WATER_ABSORB); + ABILITY_POPUP(opponentRight, ABILITY_ELECTROMORPHOSIS); + } + HP_BAR(playerLeft); + HP_BAR(opponentLeft); + HP_BAR(opponentRight); + } +} + +SINGLE_BATTLE_TEST("Neutralizing Gas ignores multipliers from attacker's ability", s16 damage) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_NEUTRALIZING_GAS; } + PARAMETRIZE { ability = ABILITY_LEVITATE; } + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); + PLAYER(SPECIES_WEEZING) { Ability(ability); } + OPPONENT(SPECIES_AZUMARILL) { Ability(ABILITY_HUGE_POWER); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Neutralizing Gas ignores multipliers from target's ability", s16 damage) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_NEUTRALIZING_GAS; } + PARAMETRIZE { ability = ABILITY_LEVITATE; } + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].makesContact == TRUE); + ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL); + PLAYER(SPECIES_WEEZING) { Ability(ability); } + OPPONENT(SPECIES_BEWEAR) { Ability(ABILITY_FLUFFY); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage); + } +} + +DOUBLE_BATTLE_TEST("Neutralizing Gas ignores multipliers from target's ally's ability", s16 damage) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_NEUTRALIZING_GAS; } + PARAMETRIZE { ability = ABILITY_LEVITATE; } + GIVEN { + PLAYER(SPECIES_WEEZING) { Ability(ability); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); } + OPPONENT(SPECIES_CLEFAIRY) { Ability(ABILITY_FRIEND_GUARD); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerLeft); + HP_BAR(opponentLeft, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.75), results[1].damage); + } +} + +DOUBLE_BATTLE_TEST("Neutralizing Gas ignores multipliers from ally's ability", s16 damage) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_NEUTRALIZING_GAS; } + PARAMETRIZE { ability = ABILITY_LEVITATE; } + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); + PLAYER(SPECIES_WEEZING) { Ability(ability); } + PLAYER(SPECIES_WO_CHIEN) { Ability(ABILITY_TABLETS_OF_RUIN); } + OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_TELEPATHY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerLeft); + HP_BAR(opponentLeft, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.75), results[1].damage); + } +} + +DOUBLE_BATTLE_TEST("Neutralizing Gas leaving the field allows abilities to activate in turn order") +{ + u32 speedPlayerRight, speedOppLeft, speedOppRight; + PARAMETRIZE { speedPlayerRight = 5; speedOppLeft = 3; speedOppRight = 2; } + PARAMETRIZE { speedPlayerRight = 3; speedOppLeft = 5; speedOppRight = 2; } + PARAMETRIZE { speedPlayerRight = 2; speedOppLeft = 3; speedOppRight = 5; } + PARAMETRIZE { speedPlayerRight = 3; speedOppLeft = 2; speedOppRight = 5; } + PARAMETRIZE { speedPlayerRight = 2; speedOppLeft = 5; speedOppRight = 3; } + PARAMETRIZE { speedPlayerRight = 5; speedOppLeft = 2; speedOppRight = 3; } + GIVEN { + PLAYER(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); Speed(4); } + PLAYER(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); Speed(speedPlayerRight); } + PLAYER(SPECIES_WOBBUFFET) { Speed(4); } + OPPONENT(SPECIES_ARBOK) { Ability(ABILITY_INTIMIDATE); Speed(speedOppLeft); } + OPPONENT(SPECIES_ZEKROM) { Ability(ABILITY_TERAVOLT); Speed(speedOppRight); } + } WHEN { + TURN { SWITCH(playerLeft, 2); } + } SCENE { + ABILITY_POPUP(playerLeft, ABILITY_NEUTRALIZING_GAS); + MESSAGE("Neutralizing gas filled the area!"); + SWITCH_OUT_MESSAGE("Weezing"); + MESSAGE("The effects of the neutralizing gas wore off!"); + if (speedPlayerRight > speedOppLeft) + { + if (speedPlayerRight > speedOppRight) { + ABILITY_POPUP(playerRight, ABILITY_INTREPID_SWORD); + if (speedOppRight > speedOppLeft) { + ABILITY_POPUP(opponentRight, ABILITY_TERAVOLT); + ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE); + } else { + ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE); + ABILITY_POPUP(opponentRight, ABILITY_TERAVOLT); + } + } else { + ABILITY_POPUP(opponentRight, ABILITY_TERAVOLT); + ABILITY_POPUP(playerRight, ABILITY_INTREPID_SWORD); + ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE); + } + + } else { + if (speedOppLeft > speedOppRight) { + ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE); + if (speedOppRight > speedPlayerRight) { + ABILITY_POPUP(opponentRight, ABILITY_TERAVOLT); + ABILITY_POPUP(playerRight, ABILITY_INTREPID_SWORD); + } else { + ABILITY_POPUP(playerRight, ABILITY_INTREPID_SWORD); + ABILITY_POPUP(opponentRight, ABILITY_TERAVOLT); + } + } else { + ABILITY_POPUP(opponentRight, ABILITY_TERAVOLT); + ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE); + ABILITY_POPUP(playerRight, ABILITY_INTREPID_SWORD); + } + } + SEND_IN_MESSAGE("Wobbuffet"); + } +} + +SINGLE_BATTLE_TEST("Neutralizing Gas prevents Insomnia from blocking Rest") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_REST) == EFFECT_REST); + PLAYER(SPECIES_DROWZEE) { Ability(ABILITY_INSOMNIA); HP(1); } + OPPONENT(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); } + } WHEN { + TURN { MOVE(player, MOVE_REST); } + } SCENE { + NOT ABILITY_POPUP(player, ABILITY_INSOMNIA); + // ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, player); + // STATUS_ICON(player, sleep: TRUE); + ANIMATION(ANIM_TYPE_MOVE, MOVE_REST, player); + HP_BAR(player); + } +} + +SINGLE_BATTLE_TEST("Neutralizing Gas prevents Trace from copying it") +{ + GIVEN { + PLAYER(SPECIES_RALTS) { Ability(ABILITY_TRACE); } + OPPONENT(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); } + } WHEN { + TURN { } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_NEUTRALIZING_GAS); + NONE_OF { + ABILITY_POPUP(player, ABILITY_TRACE); + ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS); + } + } +} + +SINGLE_BATTLE_TEST("Neutralizing Gas prevents Contrary inverting stat boosts") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_REST) == EFFECT_REST); + PLAYER(SPECIES_INKAY) { Ability(ABILITY_CONTRARY); } + OPPONENT(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); } + } WHEN { + TURN { MOVE(player, MOVE_SWORDS_DANCE); MOVE(opponent, MOVE_LEER); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_LEER, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + } THEN { + EXPECT_GT(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE); + EXPECT_LT(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); + } +} diff --git a/test/battle/hold_effect/seeds.c b/test/battle/hold_effect/seeds.c index 11aa9037db..e70d302f75 100644 --- a/test/battle/hold_effect/seeds.c +++ b/test/battle/hold_effect/seeds.c @@ -137,3 +137,61 @@ SINGLE_BATTLE_TEST("Psychic Seed raises the holder's Sp. Defense on Psychic Terr EXPECT_EQ(player->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE + 1); } } + +SINGLE_BATTLE_TEST("Seeds get consumed in Terrain even if holder is not affected by Terrain") +{ + u32 species, ability, item; + PARAMETRIZE { species = SPECIES_TAPU_KOKO; ability = ABILITY_ELECTRIC_SURGE; item = ITEM_ELECTRIC_SEED; } + PARAMETRIZE { species = SPECIES_TAPU_BULU; ability = ABILITY_GRASSY_SURGE; item = ITEM_GRASSY_SEED; } + PARAMETRIZE { species = SPECIES_TAPU_FINI; ability = ABILITY_MISTY_SURGE; item = ITEM_MISTY_SEED; } + PARAMETRIZE { species = SPECIES_TAPU_LELE; ability = ABILITY_PSYCHIC_SURGE; item = ITEM_PSYCHIC_SEED; } + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_PIDGEY].types[0] == TYPE_FLYING || gSpeciesInfo[SPECIES_PIDGEY].types[1] == TYPE_FLYING); + PLAYER(SPECIES_PIDGEY) { Item(item); } + OPPONENT(species) { Ability(ability); } + } WHEN { + TURN { } + } SCENE { + ABILITY_POPUP(opponent, ability); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + } THEN { + EXPECT_EQ(player->item, ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Electric Seed is consumed on Electric Terrain before other abilities change the terrain") +{ + GIVEN { + PLAYER(SPECIES_TAPU_BULU) { Ability(ABILITY_GRASSY_SURGE); Item(ITEM_ELECTRIC_SEED); Speed(5); } + OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); Item(ITEM_ELECTRIC_SEED); Speed(10); } + } WHEN { + TURN { } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_ELECTRIC_SURGE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Using Electric Seed, the Defense of the opposing Tapu Koko rose!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Using Electric Seed, the Defense of Tapu Bulu rose!"); + ABILITY_POPUP(player, ABILITY_GRASSY_SURGE); + } +} + +SINGLE_BATTLE_TEST("Electric Seed doesn't activate on existing Electric Terrain before user's ability changes the terrain") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_TAPU_BULU) { Ability(ABILITY_GRASSY_SURGE); Item(ITEM_ELECTRIC_SEED); } + OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); } + } WHEN { + TURN { SWITCH(player, 1); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_ELECTRIC_SURGE); + SWITCH_OUT_MESSAGE("Wobbuffet"); + SEND_IN_MESSAGE("Tapu Bulu"); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Using Electric Seed, the Defense of Tapu Bulu rose!"); + } + ABILITY_POPUP(player, ABILITY_GRASSY_SURGE); + } +} From bd2d9f63eadd9a9766158624bffdc6443959cca1 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Mon, 17 Mar 2025 03:05:21 +0100 Subject: [PATCH 056/115] Fixes hazards not respecting tera types (#6431) --- src/battle_util.c | 6 +++--- test/battle/move_effect/stealth_rock.c | 27 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 5880ec3d5b..da7cf6b790 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -10892,11 +10892,11 @@ s32 GetStealthHazardDamageByTypesAndHP(enum TypeSideHazard hazardType, u8 type1, s32 GetStealthHazardDamage(enum TypeSideHazard hazardType, u32 battler) { - u8 type1 = gBattleMons[battler].types[0]; - u8 type2 = gBattleMons[battler].types[1]; + u32 types[3]; + GetBattlerTypes(battler, FALSE, types); u32 maxHp = gBattleMons[battler].maxHP; - return GetStealthHazardDamageByTypesAndHP(hazardType, type1, type2, maxHp); + return GetStealthHazardDamageByTypesAndHP(hazardType, types[0], types[1], maxHp); } bool32 IsPartnerMonFromSameTrainer(u32 battler) diff --git a/test/battle/move_effect/stealth_rock.c b/test/battle/move_effect/stealth_rock.c index d4399a2d0f..67441367a6 100644 --- a/test/battle/move_effect/stealth_rock.c +++ b/test/battle/move_effect/stealth_rock.c @@ -73,3 +73,30 @@ DOUBLE_BATTLE_TEST("Stealth Rock damages the correct pokemon when Eject Button i EXPECT_EQ(opponentLeft->hp, opponentLeft->maxHP); } } + +SINGLE_BATTLE_TEST("Stealth Rock damage terastalized mons with the correct amount of damage", s16 damage) +{ + u32 tera; + + PARAMETRIZE { tera = FALSE; } + PARAMETRIZE { tera = TRUE; } + + GIVEN { + PLAYER(SPECIES_CHARIZARD) { TeraType(TYPE_NORMAL); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (tera == TRUE) + TURN { MOVE(opponent, MOVE_STEALTH_ROCK); MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); } + else + TURN { MOVE(opponent, MOVE_STEALTH_ROCK); MOVE(player, MOVE_CELEBRATE); } + TURN { SWITCH(player, 1); } + TURN { SWITCH(player, 0); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STEALTH_ROCK, opponent); + HP_BAR(player); + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_GT(results[0].damage, results[1].damage); + } +} From 1e2aa18ffe13e655227739dd09f60f668b6b307a Mon Sep 17 00:00:00 2001 From: wiz1989 <80073265+wiz1989@users.noreply.github.com> Date: Mon, 17 Mar 2025 19:16:43 +0100 Subject: [PATCH 057/115] Added Dynamax/Gigantamax battle messages (#6440) Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- asm/macros/battle_script.inc | 6 ++++++ data/battle_scripts_1.s | 17 +++++++++++++++++ include/config/battle.h | 1 + include/constants/battle_string_ids.h | 6 +++++- src/battle_message.c | 4 ++++ src/battle_script_commands.c | 12 ++++++++++++ 6 files changed, 45 insertions(+), 1 deletion(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index e50cbcbe43..3804e64240 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1817,6 +1817,12 @@ .4byte \failInstr .endm + .macro jumpifcangigantamax battler:req, jumpInstr:req + callnative BS_JumpIfCanGigantamax + .byte \battler + .4byte \jumpInstr + .endm + @ various command changed to more readable macros .macro cancelmultiturnmoves battler:req various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 7d94e9727b..aeb3f610d7 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -10006,6 +10006,14 @@ BattleScript_EffectSteelsurge:: BattleScript_DynamaxBegins:: flushtextbox trytrainerslidedynamaxmsg + jumpifcangigantamax BS_ATTACKER, BattleScript_DynamaxBegins_GigantamaxString_01 + printstring STRINGID_TIMETODYNAMAX + waitmessage B_WAIT_TIME_MED + goto BattleScript_DynamaxBegins_SwitchIn +BattleScript_DynamaxBegins_GigantamaxString_01: + printstring STRINGID_TIMETOGIGANTAMAX + waitmessage B_WAIT_TIME_MED +BattleScript_DynamaxBegins_SwitchIn: returnatktoball pause B_WAIT_TIME_SHORT returntoball BS_SCRIPTING, TRUE @@ -10013,6 +10021,15 @@ BattleScript_DynamaxBegins:: updatedynamax playanimation BS_SCRIPTING, B_ANIM_DYNAMAX_GROWTH waitanimation + jumpifbyteequal B_SHOW_DYNAMAX_MESSAGE, FALSE, BattleScript_DynamaxBegins_End3 + jumpifcangigantamax BS_ATTACKER, BattleScript_DynamaxBegins_GigantamaxString_02 + printstring STRINGID_PKMNDYNAMAXED + waitmessage B_WAIT_TIME_LONG + goto BattleScript_DynamaxBegins_End3 +BattleScript_DynamaxBegins_GigantamaxString_02: + printstring STRINGID_PKMNGIGANTAMAXED + waitmessage B_WAIT_TIME_LONG +BattleScript_DynamaxBegins_End3: end3 BattleScript_DynamaxEnds:: diff --git a/include/config/battle.h b/include/config/battle.h index 33451ca4db..cffa3701b3 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -255,6 +255,7 @@ #define B_QUICK_MOVE_CURSOR_TO_RUN FALSE // If set to TRUE, pushing B in the battle options against a wild encounter will move the cursor to the run option #define B_MOVE_DESCRIPTION_BUTTON L_BUTTON // If set to a button other than B_LAST_USED_BALL_BUTTON, pressing this button will open the move description menu #define B_SHOW_USELESS_Z_MOVE_INFO FALSE // If set to TRUE, Z-moves without additional effects like newer gen status moves will say "no additional effect" +#define B_SHOW_DYNAMAX_MESSAGE FALSE // If set to TRUE, an additional battle message is shown after completing Dynamaxing/Gigantamaxing. // Catching settings #define B_SEMI_INVULNERABLE_CATCH GEN_LATEST // In Gen4+, you cannot throw a ball against a Pokemon that is in a semi-invulnerable state (dig/fly/etc) diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 3ba637c690..16d41f3977 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -729,8 +729,12 @@ #define STRINGID_ITDOESNTAFFECTTWOFOES 727 #define STRINGID_SENDCAUGHTMONPARTYORBOX 728 #define STRINGID_PKMNSENTTOPCAFTERCATCH 729 +#define STRINGID_PKMNDYNAMAXED 730 +#define STRINGID_PKMNGIGANTAMAXED 731 +#define STRINGID_TIMETODYNAMAX 732 +#define STRINGID_TIMETOGIGANTAMAX 733 -#define BATTLESTRINGS_COUNT 730 +#define BATTLESTRINGS_COUNT 734 // 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 c463474d40..e91cf957df 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -893,6 +893,10 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_ITDOESNTAFFECTTWOFOES] = COMPOUND_STRING("It doesn't affect {B_DEF_NAME_WITH_PREFIX2} and {B_DEF_PARTNER_NAME}…"), [STRINGID_SENDCAUGHTMONPARTYORBOX] = COMPOUND_STRING("Add {B_DEF_NAME} to your party?"), [STRINGID_PKMNSENTTOPCAFTERCATCH] = gText_PkmnSentToPCAfterCatch, + [STRINGID_PKMNDYNAMAXED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} grew huge\ninto its Dynamax form!"), + [STRINGID_PKMNGIGANTAMAXED] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} grew huge\ninto its Gigantamax form!"), + [STRINGID_TIMETODYNAMAX] = COMPOUND_STRING("Time to Dynamax!"), + [STRINGID_TIMETOGIGANTAMAX] = COMPOUND_STRING("Time to Gigantamax!"), }; const u16 gTrainerUsedItemStringIds[] = diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 8e71ba08f5..455dcff789 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -18659,3 +18659,15 @@ void BS_RestoreSavedMove(void) gBattlescriptCurrInstr = cmd->nextInstr; } + +void BS_JumpIfCanGigantamax(void) +{ + NATIVE_ARGS(u8 battler, const u8 *jumpInstr); + u32 battler = GetBattlerForBattleScript(cmd->battler); + + if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_GIGANTAMAX_FACTOR) + && GetGMaxTargetSpecies(gBattleMons[battler].species) != SPECIES_NONE) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} From 99a3d01877aedb96a25b79dc8707e096872ffa09 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Mon, 17 Mar 2025 19:57:38 +0100 Subject: [PATCH 058/115] Fixes dynamax reversion when ejected out + anim fix (#6416) Co-authored-by: hedara90 <90hedara@gmail.com> --- asm/macros/battle_script.inc | 7 +- data/battle_scripts_1.s | 10 ++- include/battle_scripts.h | 1 + src/battle_dynamax.c | 17 ++++ src/battle_main.c | 3 - src/battle_script_commands.c | 23 +++-- src/battle_util.c | 2 - test/battle/gimmick/dynamax.c | 161 +++++++++++++++++++--------------- 8 files changed, 137 insertions(+), 87 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index e50cbcbe43..8c1c9fc929 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1614,6 +1614,11 @@ .4byte \ptr .endm + .macro undodynamax battler:req + callnative BS_UndoDynamax + .byte \battler + .endm + .macro trytrainerslidezmovemsg callnative BS_TryTrainerSlideZMoveMsg .endm @@ -2376,7 +2381,7 @@ callnative BS_SwapStats .byte \stat .endm - + .macro restoresavedmove callnative BS_RestoreSavedMove .endm diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 142ea013f4..02fcb66f1f 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -5728,7 +5728,7 @@ BattleScript_ActionSwitch:: BattleScript_DoSwitchOut:: switchoutabilities BS_ATTACKER - updatedynamax + undodynamax BS_ATTACKER waitstate returnatktoball waitstate @@ -9527,6 +9527,7 @@ BattleScript_EjectButtonActivates:: printstring STRINGID_EJECTBUTTONACTIVATE waitmessage B_WAIT_TIME_LONG removeitem BS_SCRIPTING + undodynamax BS_SCRIPTING makeinvisible BS_SCRIPTING openpartyscreen BS_SCRIPTING, BattleScript_EjectButtonEnd copybyte sSAVED_BATTLER, sBATTLER @@ -9989,6 +9990,13 @@ BattleScript_DynamaxEnds:: waitanimation end2 +BattleScript_DynamaxEnds_Ret:: + flushtextbox + updatedynamax + playanimation BS_SCRIPTING, B_ANIM_FORM_CHANGE + waitanimation + return + BattleScript_MoveBlockedByDynamax:: accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring diff --git a/include/battle_scripts.h b/include/battle_scripts.h index a3ff45a19c..4343d7eeea 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -558,6 +558,7 @@ extern const u8 BattleScript_RemoveGenericType[]; // dynamax and max raids extern const u8 BattleScript_DynamaxBegins[]; extern const u8 BattleScript_DynamaxEnds[]; +extern const u8 BattleScript_DynamaxEnds_Ret[]; extern const u8 BattleScript_MoveBlockedByDynamax[]; // Battle move scripts diff --git a/src/battle_dynamax.c b/src/battle_dynamax.c index 3e8d0e9db7..fecadd887d 100644 --- a/src/battle_dynamax.c +++ b/src/battle_dynamax.c @@ -491,3 +491,20 @@ void BS_JumpIfDynamaxed(void) else gBattlescriptCurrInstr = cmd->nextInstr; } + +void BS_UndoDynamax(void) +{ + NATIVE_ARGS(u8 battler); + u32 battler = GetBattlerForBattleScript(cmd->battler); + + if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX) + { + BattleScriptPushCursor(); + UndoDynamax(battler); + gBattleScripting.battler = battler; + gBattlescriptCurrInstr = BattleScript_DynamaxEnds_Ret; + return; + } + + gBattlescriptCurrInstr = cmd->nextInstr; +} diff --git a/src/battle_main.c b/src/battle_main.c index 3ccbcd6873..6115020037 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3391,9 +3391,6 @@ const u8* FaintClearSetData(u32 battler) } } - // Clear Dynamax data - UndoDynamax(battler); - return result; } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 520673805e..c22aca8187 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -4784,13 +4784,23 @@ static void Cmd_dofaintanimation(void) { CMD_ARGS(u8 battler); - if (gBattleControllerExecFlags == 0) + if (gBattleControllerExecFlags != 0) + return; + + u32 battler = GetBattlerForBattleScript(cmd->battler); + + if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX) { - u32 battler = GetBattlerForBattleScript(cmd->battler); - BtlController_EmitFaintAnimation(battler, BUFFER_A); - MarkBattlerForControllerExec(battler); - gBattlescriptCurrInstr = cmd->nextInstr; + BattleScriptPushCursor(); + UndoDynamax(battler); + gBattleScripting.battler = battler; + gBattlescriptCurrInstr = BattleScript_DynamaxEnds_Ret; + return; } + + BtlController_EmitFaintAnimation(battler, BUFFER_A); + MarkBattlerForControllerExec(battler); + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_cleareffectsonfaint(void) @@ -6363,7 +6373,7 @@ static void Cmd_moveend(void) break; } else if (gMovesInfo[gCurrentMove].effect == EFFECT_RECOIL_IF_MISS - && (!IsBattlerTurnDamaged(gBattlerTarget) || gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) + && (!IsBattlerTurnDamaged(gBattlerTarget) || gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && !gBattleStruct->noTargetPresent && IsBattlerAlive(gBattlerAttacker)) { @@ -18651,4 +18661,3 @@ void BS_RestoreSavedMove(void) gBattleStruct->savedMove = MOVE_NONE; gBattlescriptCurrInstr = cmd->nextInstr; } - diff --git a/src/battle_util.c b/src/battle_util.c index da7cf6b790..38223e058f 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -494,8 +494,6 @@ void HandleAction_Switch(void) if (gBattleResults.playerSwitchesCounter < 255) gBattleResults.playerSwitchesCounter++; - if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_DYNAMAX) - UndoDynamax(gBattlerAttacker); // this is better performed here instead of SwitchInClearSetData TryBattleFormChange(gBattlerAttacker, FORM_CHANGE_BATTLE_SWITCH); } diff --git a/test/battle/gimmick/dynamax.c b/test/battle/gimmick/dynamax.c index 809e0f65d3..791973f893 100644 --- a/test/battle/gimmick/dynamax.c +++ b/test/battle/gimmick/dynamax.c @@ -2,7 +2,7 @@ #include "test/battle.h" // ============= DYNAMAX AND MAX MOVE INTERACTIONS =================== -SINGLE_BATTLE_TEST("(DYNAMAX) Dynamax increases HP and max HP by 1.5x", u16 hp) +SINGLE_BATTLE_TEST("Dynamax: Dynamax increases HP and max HP by 1.5x", u16 hp) { u32 dynamax; PARAMETRIZE { dynamax = GIMMICK_NONE; } @@ -25,7 +25,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamax increases HP and max HP by 1.5x", u16 hp) } } -SINGLE_BATTLE_TEST("(DYNAMAX) Dynamax Level increases HP and max HP multipliers by 0.05 for each level", u16 hp) +SINGLE_BATTLE_TEST("Dynamax: Dynamax Level increases HP and max HP multipliers by 0.05 for each level", u16 hp) { u32 dynamax, level; PARAMETRIZE { dynamax = GIMMICK_NONE; level = 0; } @@ -68,7 +68,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamax Level increases HP and max HP multipliers } } -SINGLE_BATTLE_TEST("(DYNAMAX) Dynamax expires after three turns", u16 hp) +SINGLE_BATTLE_TEST("Dynamax: Dynamax expires after three turns", u16 hp) { u32 dynamax; PARAMETRIZE { dynamax = GIMMICK_NONE; } @@ -98,7 +98,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamax expires after three turns", u16 hp) } } -SINGLE_BATTLE_TEST("(DYNAMAX) Dynamax expires after three turns and correctly converts HP according to Dynamax Level") +SINGLE_BATTLE_TEST("Dynamax: Dynamax expires after three turns and correctly converts HP according to Dynamax Level") { u32 dynamaxLevel, dynamax; u16 capturedHP, finalHP; @@ -141,7 +141,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamax expires after three turns and correctly co } } -SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot be flinched") +SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon cannot be flinched") { GIVEN { ASSUME(GetMoveEffect(MOVE_FAKE_OUT) == EFFECT_FIRST_TURN_ONLY); @@ -156,7 +156,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot be flinched") } } -SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot be hit by weight-based moves") +SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon cannot be hit by weight-based moves") { GIVEN { ASSUME(GetMoveEffect(MOVE_HEAVY_SLAM) == EFFECT_HEAT_CRASH); @@ -172,7 +172,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot be hit by weight-based mo } } -SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot be hit by OHKO moves") +SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon cannot be hit by OHKO moves") { GIVEN { ASSUME(GetMoveEffect(MOVE_FISSURE) == EFFECT_OHKO); @@ -188,7 +188,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot be hit by OHKO moves") } } -SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are affected by Grudge") +SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon are affected by Grudge") { GIVEN { PLAYER(SPECIES_WOBBUFFET) { Speed(50); }; @@ -203,7 +203,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are affected by Grudge") } } -SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by phazing moves, but still take damage") +SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon are not affected by phazing moves, but still take damage") { GIVEN { ASSUME(GetMoveEffect(MOVE_DRAGON_TAIL) == EFFECT_HIT_SWITCH_TARGET); @@ -225,7 +225,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by phazing move } } -SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by phazing moves but no block message is printed if they faint") +SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon are not affected by phazing moves but no block message is printed if they faint") { GIVEN { ASSUME(GetMoveEffect(MOVE_DRAGON_TAIL) == EFFECT_HIT_SWITCH_TARGET); @@ -243,7 +243,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by phazing move } } -SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by Red Card") +SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon are not affected by Red Card") { GIVEN { ASSUME(gItemsInfo[ITEM_RED_CARD].holdEffect == HOLD_EFFECT_RED_CARD); @@ -262,7 +262,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by Red Card") } } -SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can be switched out by Eject Button") +SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon can be switched out by Eject Button") { GIVEN { ASSUME(gItemsInfo[ITEM_EJECT_BUTTON].holdEffect == HOLD_EFFECT_EJECT_BUTTON); @@ -281,7 +281,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can be switched out by Eject But } } -SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot have their ability swapped to another Pokemon's") +SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon cannot have their ability swapped to another Pokemon's") { GIVEN { PLAYER(SPECIES_MILTANK) { Ability(ABILITY_SCRAPPY); } @@ -297,7 +297,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot have their ability swappe } } -SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can have their ability changed or suppressed") +SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon can have their ability changed or suppressed") { GIVEN { PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_SHADOW_TAG); } @@ -314,7 +314,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can have their ability changed o } // Max Moves don't make contact, so Cursed Body doesn't need to be tested, but it is coded for. -SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon's Max Moves cannot be disabled") +SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon's Max Moves cannot be disabled") { GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -328,7 +328,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon's Max Moves cannot be disabled") } } -SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can have base moves disabled on their first turn") +SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon can have base moves disabled on their first turn") { GIVEN { ASSUME(B_DISABLE_TURNS >= GEN_5); @@ -349,7 +349,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can have base moves disabled on } } -SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are immune to Torment") +SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon are immune to Torment") { GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -364,7 +364,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are immune to Torment") } // This is true for all item-removing moves. -SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not immune to Knock Off") +SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon are not immune to Knock Off") { GIVEN { PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_POTION); } @@ -380,7 +380,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not immune to Knock Off") } } -SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon lose their substitutes") +SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon lose their substitutes") { GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -397,7 +397,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon lose their substitutes") } } -SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon that changes forms does not gain HP") +SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon that changes forms does not gain HP") { u16 capturedHP, finalHP; GIVEN { @@ -418,7 +418,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon that changes forms does not gain } } -SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon that changes forms does not gain HP unless the new form gains Max HP") +SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon that changes forms does not gain HP unless the new form gains Max HP") { u32 hp = 1, maxHP = 200; u32 species; @@ -438,7 +438,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon that changes forms does not gain } } -SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves deal 1/4 damage through protect", s16 damage) +SINGLE_BATTLE_TEST("Dynamax: Max Moves deal 1/4 damage through protect", s16 damage) { bool32 protected; PARAMETRIZE { protected = TRUE; } @@ -458,7 +458,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves deal 1/4 damage through protect", s16 da } } -SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves don't bypass Max Guard") +SINGLE_BATTLE_TEST("Dynamax: Max Moves don't bypass Max Guard") { GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -470,7 +470,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves don't bypass Max Guard") } } -DOUBLE_BATTLE_TEST("(DYNAMAX) Feint bypasses Max Guard but doesn't break it") +DOUBLE_BATTLE_TEST("Dynamax: Feint bypasses Max Guard but doesn't break it") { GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -491,7 +491,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Feint bypasses Max Guard but doesn't break it") } } -DOUBLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are immune to Instruct") +DOUBLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon are immune to Instruct") { GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -509,7 +509,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are immune to Instruct") } } -SINGLE_BATTLE_TEST("(DYNAMAX) Pokemon with Gigantamax forms change upon Dynamaxing") +SINGLE_BATTLE_TEST("Dynamax: Pokemon with Gigantamax forms change upon Dynamaxing") { u32 species; bool32 gigantamaxFactor; @@ -525,7 +525,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Pokemon with Gigantamax forms change upon Dynamaxi } } -SINGLE_BATTLE_TEST("(DYNAMAX) Pokemon with Gigantamax forms revert upon switching") +SINGLE_BATTLE_TEST("Dynamax: Pokemon with Gigantamax forms revert upon switching") { GIVEN { PLAYER(SPECIES_VENUSAUR); @@ -540,7 +540,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Pokemon with Gigantamax forms revert upon switchin } } -SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by Choice items", s16 damage) +SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon are not affected by Choice items", s16 damage) { u16 item; PARAMETRIZE { item = ITEM_CHOICE_BAND; } @@ -561,7 +561,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by Choice items } } -SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot use Max Guard while holding Assault Vest") +SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon cannot use Max Guard while holding Assault Vest") { GIVEN { ASSUME(gItemsInfo[ITEM_ASSAULT_VEST].holdEffect == HOLD_EFFECT_ASSAULT_VEST); @@ -582,7 +582,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot use Max Guard while holdi // Anything that is conditional based off max HP still uses gBattleMons[battler].maxHP. // Below are some tests, but very far from all encompassing: -SINGLE_BATTLE_TEST("(DYNAMAX) Endeavor uses a Pokemon's non-Dynamax HP", s16 damage) +SINGLE_BATTLE_TEST("Dynamax: Endeavor uses a Pokemon's non-Dynamax HP", s16 damage) { u32 dynamax; PARAMETRIZE { dynamax = GIMMICK_NONE; } @@ -601,7 +601,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Endeavor uses a Pokemon's non-Dynamax HP", s16 dam } } -SINGLE_BATTLE_TEST("(DYNAMAX) Super Fang uses a Pokemon's non-Dynamax HP", s16 damage) +SINGLE_BATTLE_TEST("Dynamax: Super Fang uses a Pokemon's non-Dynamax HP", s16 damage) { u32 dynamax; PARAMETRIZE { dynamax = GIMMICK_NONE; } @@ -620,7 +620,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Super Fang uses a Pokemon's non-Dynamax HP", s16 d } } -SINGLE_BATTLE_TEST("(DYNAMAX) Pain Split uses a Pokemon's non-Dynamax HP", s16 damage) +SINGLE_BATTLE_TEST("Dynamax: Pain Split uses a Pokemon's non-Dynamax HP", s16 damage) { u32 dynamax; PARAMETRIZE { dynamax = GIMMICK_NONE; } @@ -639,7 +639,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Pain Split uses a Pokemon's non-Dynamax HP", s16 d } } -SINGLE_BATTLE_TEST("(DYNAMAX) Sitrus Berries heal based on a Pokemon's non-Dynamax HP", s16 damage) +SINGLE_BATTLE_TEST("Dynamax: Sitrus Berries heal based on a Pokemon's non-Dynamax HP", s16 damage) { u32 dynamax; PARAMETRIZE { dynamax = GIMMICK_NONE; } @@ -659,7 +659,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Sitrus Berries heal based on a Pokemon's non-Dynam } } -SINGLE_BATTLE_TEST("(DYNAMAX) Heal Pulse heals based on a Pokemon's non-Dynamax HP", s16 damage) +SINGLE_BATTLE_TEST("Dynamax: Heal Pulse heals based on a Pokemon's non-Dynamax HP", s16 damage) { u32 dynamax; PARAMETRIZE { dynamax = GIMMICK_NONE; } @@ -679,7 +679,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Heal Pulse heals based on a Pokemon's non-Dynamax } // ============= MAX MOVE EFFECTS ========================================== -SINGLE_BATTLE_TEST("(DYNAMAX) Max Strike lowers single opponent's speed") +SINGLE_BATTLE_TEST("Dynamax: Max Strike lowers single opponent's speed") { GIVEN { // Fails?: ASSUME(GetMaxMove(B_POSITION_PLAYER_LEFT, MOVE_TACKLE) == MOVE_MAX_STRIKE); @@ -704,7 +704,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Strike lowers single opponent's speed") } // This test should apply to all stat-lowering Max Moves, including G-Max Foam Burst and G-Max Tartness. -DOUBLE_BATTLE_TEST("(DYNAMAX) Max Strike lowers both opponents' speed") +DOUBLE_BATTLE_TEST("Dynamax: Max Strike lowers both opponents' speed") { GIVEN { ASSUME(MoveHasAdditionalEffect(MOVE_MAX_STRIKE, MOVE_EFFECT_LOWER_SPEED_SIDE)); @@ -740,7 +740,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Max Strike lowers both opponents' speed") } // This test should apply to all stat-boosting Max Moves, too. -DOUBLE_BATTLE_TEST("(DYNAMAX) Max Knuckle raises both allies' attack") +DOUBLE_BATTLE_TEST("Dynamax: Max Knuckle raises both allies' attack") { s16 damage[4]; GIVEN { @@ -783,7 +783,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Max Knuckle raises both allies' attack") } } -SINGLE_BATTLE_TEST("(DYNAMAX) Max Flare sets up sunlight") +SINGLE_BATTLE_TEST("Dynamax: Max Flare sets up sunlight") { GIVEN { ASSUME(MoveHasAdditionalEffect(MOVE_MAX_FLARE, MOVE_EFFECT_SUN)); @@ -799,7 +799,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Flare sets up sunlight") } } -SINGLE_BATTLE_TEST("(DYNAMAX) Max Geyser sets up heavy rain") +SINGLE_BATTLE_TEST("Dynamax: Max Geyser sets up heavy rain") { GIVEN { ASSUME(MoveHasAdditionalEffect(MOVE_MAX_GEYSER, MOVE_EFFECT_RAIN)); @@ -815,7 +815,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Geyser sets up heavy rain") } } -SINGLE_BATTLE_TEST("(DYNAMAX) Max Hailstorm sets up hail") +SINGLE_BATTLE_TEST("Dynamax: Max Hailstorm sets up hail") { GIVEN { ASSUME(MoveHasAdditionalEffect(MOVE_MAX_HAILSTORM, MOVE_EFFECT_HAIL)); @@ -831,7 +831,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Hailstorm sets up hail") } } -SINGLE_BATTLE_TEST("(DYNAMAX) Max Rockfall sets up a sandstorm") +SINGLE_BATTLE_TEST("Dynamax: Max Rockfall sets up a sandstorm") { GIVEN { ASSUME(MoveHasAdditionalEffect(MOVE_MAX_ROCKFALL, MOVE_EFFECT_SANDSTORM)); @@ -847,7 +847,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Rockfall sets up a sandstorm") } } -SINGLE_BATTLE_TEST("(DYNAMAX) Max Overgrowth sets up Grassy Terrain") +SINGLE_BATTLE_TEST("Dynamax: Max Overgrowth sets up Grassy Terrain") { s32 maxHP = 490; // Because of recalculated stats upon Dynamaxing GIVEN { @@ -868,7 +868,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Overgrowth sets up Grassy Terrain") } } -SINGLE_BATTLE_TEST("(DYNAMAX) Max Mindstorm sets up Psychic Terrain") +SINGLE_BATTLE_TEST("Dynamax: Max Mindstorm sets up Psychic Terrain") { GIVEN { ASSUME(MoveHasAdditionalEffect(MOVE_MAX_MINDSTORM, MOVE_EFFECT_PSYCHIC_TERRAIN)); @@ -885,7 +885,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Mindstorm sets up Psychic Terrain") } } -SINGLE_BATTLE_TEST("(DYNAMAX) Max Lightning sets up Electric Terrain") +SINGLE_BATTLE_TEST("Dynamax: Max Lightning sets up Electric Terrain") { GIVEN { ASSUME(MoveHasAdditionalEffect(MOVE_MAX_LIGHTNING, MOVE_EFFECT_ELECTRIC_TERRAIN)); @@ -900,7 +900,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Lightning sets up Electric Terrain") } } -SINGLE_BATTLE_TEST("(DYNAMAX) Max Starfall sets up Misty Terrain") +SINGLE_BATTLE_TEST("Dynamax: Max Starfall sets up Misty Terrain") { GIVEN { ASSUME(MoveHasAdditionalEffect(MOVE_MAX_STARFALL, MOVE_EFFECT_MISTY_TERRAIN)); @@ -915,7 +915,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Starfall sets up Misty Terrain") } } -SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Stonesurge sets up Stealth Rocks") +SINGLE_BATTLE_TEST("Dynamax: G-Max Stonesurge sets up Stealth Rocks") { GIVEN { ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_STONESURGE, MOVE_EFFECT_STEALTH_ROCK)); @@ -935,7 +935,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Stonesurge sets up Stealth Rocks") } // The test below also tests that sharp steel does type-based damage and can be Defogged away. -SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Steelsurge sets up sharp steel") +SINGLE_BATTLE_TEST("Dynamax: G-Max Steelsurge sets up sharp steel") { GIVEN { ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_STEELSURGE, MOVE_EFFECT_STEELSURGE)); @@ -963,7 +963,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Steelsurge sets up sharp steel") } // The test below should apply to G-Max Fireball and G-Max Drum Solo, too. -SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Hydrosnipe has fixed power and ignores abilities", s16 damage) +SINGLE_BATTLE_TEST("Dynamax: G-Max Hydrosnipe has fixed power and ignores abilities", s16 damage) { u16 move; PARAMETRIZE { move = MOVE_WATER_GUN; } @@ -982,7 +982,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Hydrosnipe has fixed power and ignores abili } } -DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Volt Crash paralyzes both opponents") +DOUBLE_BATTLE_TEST("Dynamax: G-Max Volt Crash paralyzes both opponents") { GIVEN { ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_VOLT_CRASH, MOVE_EFFECT_PARALYZE_SIDE)); @@ -1005,7 +1005,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Volt Crash paralyzes both opponents") // G-Max Stun Shock can apply different statuses to each opponent, but this isn't // compatible with the test RNG set-up. -DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Stun Shock paralyzes or poisons both opponents") +DOUBLE_BATTLE_TEST("Dynamax: G-Max Stun Shock paralyzes or poisons both opponents") { u8 statusAnim; u32 rng; @@ -1046,7 +1046,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Stun Shock paralyzes or poisons both opponen } // This test extends to G-Max Befuddle, too. -DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Stun Shock chooses statuses before considering immunities") +DOUBLE_BATTLE_TEST("Dynamax: G-Max Stun Shock chooses statuses before considering immunities") { GIVEN { ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_STUN_SHOCK, MOVE_EFFECT_POISON_PARALYZE_SIDE)); @@ -1074,7 +1074,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Stun Shock chooses statuses before consideri } } -DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Befuddle paralyzes, poisons, or sleeps both opponents") +DOUBLE_BATTLE_TEST("Dynamax: G-Max Befuddle paralyzes, poisons, or sleeps both opponents") { u8 statusAnim; u32 rng; @@ -1123,7 +1123,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Befuddle paralyzes, poisons, or sleeps both } } -DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Gold Rush confuses both opponents and generates money") +DOUBLE_BATTLE_TEST("Dynamax: G-Max Gold Rush confuses both opponents and generates money") { GIVEN { ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_GOLD_RUSH, MOVE_EFFECT_CONFUSE_PAY_DAY_SIDE)); @@ -1143,7 +1143,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Gold Rush confuses both opponents and genera } } -DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Smite confuses both opponents") +DOUBLE_BATTLE_TEST("Dynamax: G-Max Smite confuses both opponents") { GIVEN { ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_SMITE, MOVE_EFFECT_CONFUSE_SIDE)); @@ -1162,7 +1162,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Smite confuses both opponents") } } -DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Cuddle infatuates both opponents, if possible") +DOUBLE_BATTLE_TEST("Dynamax: G-Max Cuddle infatuates both opponents, if possible") { GIVEN { ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_CUDDLE, MOVE_EFFECT_INFATUATE_SIDE)); @@ -1183,7 +1183,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Cuddle infatuates both opponents, if possibl } } -DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Terror traps both opponents") +DOUBLE_BATTLE_TEST("Dynamax: G-Max Terror traps both opponents") { GIVEN { ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_TERROR, MOVE_EFFECT_PREVENT_ESCAPE_SIDE)); @@ -1202,7 +1202,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Terror traps both opponents") } } -SINGLE_BATTLE_TEST("(DYNAMAX) Baton Pass passes G-Max Terror's escape prevention effect") +SINGLE_BATTLE_TEST("Dynamax: Baton Pass passes G-Max Terror's escape prevention effect") { GIVEN { ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_TERROR, MOVE_EFFECT_PREVENT_ESCAPE_SIDE)); @@ -1219,7 +1219,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Baton Pass passes G-Max Terror's escape prevention } } -DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Meltdown torments both opponents for 3 turns") +DOUBLE_BATTLE_TEST("Dynamax: G-Max Meltdown torments both opponents for 3 turns") { GIVEN { ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_MELTDOWN, MOVE_EFFECT_TORMENT_SIDE)); @@ -1255,7 +1255,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Meltdown torments both opponents for 3 turns } // This test applies to G-Max Cannonade, G-Max Vine Lash, and G-Max Volcalith, too. -DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Wildfire sets a field effect that damages non-Fire types") +DOUBLE_BATTLE_TEST("Dynamax: G-Max Wildfire sets a field effect that damages non-Fire types") { s16 damage; GIVEN { @@ -1301,7 +1301,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Wildfire sets a field effect that damages no } } -DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Replenish recycles allies' berries 50\% of the time") +DOUBLE_BATTLE_TEST("Dynamax: G-Max Replenish recycles allies' berries 50\% of the time") { PASSES_RANDOMLY(1, 2, RNG_G_MAX_REPLENISH); GIVEN { @@ -1329,7 +1329,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Replenish recycles allies' berries 50\% of t } } -DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Snooze makes only the target drowsy") +DOUBLE_BATTLE_TEST("Dynamax: G-Max Snooze makes only the target drowsy") { PASSES_RANDOMLY(1, 2, RNG_G_MAX_SNOOZE); GIVEN { @@ -1353,7 +1353,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Snooze makes only the target drowsy") } } -DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Finale heals allies by 1/6 of their health") +DOUBLE_BATTLE_TEST("Dynamax: G-Max Finale heals allies by 1/6 of their health") { s16 damage1, damage2; GIVEN { @@ -1374,7 +1374,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Finale heals allies by 1/6 of their health") } } -DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Sweetness cures allies' status conditions") +DOUBLE_BATTLE_TEST("Dynamax: G-Max Sweetness cures allies' status conditions") { u32 j; GIVEN { @@ -1400,7 +1400,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Sweetness cures allies' status conditions") } // This test applies to G-Max Sandblast, too. -DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Centiferno traps both opponents in Fire Spin") +DOUBLE_BATTLE_TEST("Dynamax: G-Max Centiferno traps both opponents in Fire Spin") { GIVEN { ASSUME(MoveHasAdditionalEffect(MOVE_G_MAX_CENTIFERNO, MOVE_EFFECT_FIRE_SPIN_SIDE)); @@ -1427,7 +1427,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Centiferno traps both opponents in Fire Spin } } -DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Chi Strike boosts allies' crit chance by 1 stage") +DOUBLE_BATTLE_TEST("Dynamax: G-Max Chi Strike boosts allies' crit chance by 1 stage") { u32 j; GIVEN { @@ -1458,9 +1458,9 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Chi Strike boosts allies' crit chance by 1 s } } -TO_DO_BATTLE_TEST("(DYNAMAX) Baton Pass doesn't pass G-Max Chi Strike's effect"); +TO_DO_BATTLE_TEST("Dynamax: Baton Pass doesn't pass G-Max Chi Strike's effect"); -DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Depletion takes away 2 PP from the target's last move") +DOUBLE_BATTLE_TEST("Dynamax: G-Max Depletion takes away 2 PP from the target's last move") { GIVEN { ASSUME(GetMoveCategory(MOVE_DRAGON_CLAW) == DAMAGE_CATEGORY_PHYSICAL); // Otherwise Sableye faints. @@ -1483,7 +1483,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Depletion takes away 2 PP from the target's } // This test applies to G-Max Rapid Flow, too. -DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max One Blow bypasses Max Guard for full damage", s16 damage) +DOUBLE_BATTLE_TEST("Dynamax: G-Max One Blow bypasses Max Guard for full damage", s16 damage) { bool32 protect; PARAMETRIZE { protect = TRUE; } @@ -1513,7 +1513,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max One Blow bypasses Max Guard for full damage" // Bug Testing // This test will fail if it's the first test a thread runs -DOUBLE_BATTLE_TEST("(DYNAMAX) Max Flare doesn't softlock the game when fainting player partner") +DOUBLE_BATTLE_TEST("Dynamax: Max Flare doesn't softlock the game when fainting player partner") { GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -1529,7 +1529,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Max Flare doesn't softlock the game when fainting } } -SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves don't execute effects on fainted battlers") +SINGLE_BATTLE_TEST("Dynamax: Max Moves don't execute effects on fainted battlers") { GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -1544,7 +1544,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves don't execute effects on fainted battler } } -SINGLE_BATTLE_TEST("(DYNAMAX) Moxie clones can be triggered by Max Moves fainting opponents") +SINGLE_BATTLE_TEST("Dynamax: Moxie clones can be triggered by Max Moves fainting opponents") { GIVEN { ASSUME(GetMovePower(MOVE_WATERFALL) > 0); @@ -1560,7 +1560,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Moxie clones can be triggered by Max Moves faintin } } -SINGLE_BATTLE_TEST("(DYNAMAX) Max Attacks prints a message when hitting into Max Guard") +SINGLE_BATTLE_TEST("Dynamax: Max Attacks prints a message when hitting into Max Guard") { GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -1573,7 +1573,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Attacks prints a message when hitting into Max } } -SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves don't bypass absorbing abilities") +SINGLE_BATTLE_TEST("Dynamax: Max Moves don't bypass absorbing abilities") { u32 move, ability, species; PARAMETRIZE { move = MOVE_SPARK; ability = ABILITY_VOLT_ABSORB; species = SPECIES_LANTURN; } @@ -1609,3 +1609,18 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves don't bypass absorbing abilities") ABILITY_POPUP(opponent, ability); } } + +SINGLE_BATTLE_TEST("Dynamax: Dynamax is reverted before switch out") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); } + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_TACKLE); SEND_OUT(player, 1); } + TURN { SWITCH(player, 0); } + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + MESSAGE("Wobbuffet used Tackle!"); + } +} From 3fa57381cd9d3cfb74992fd644120b3355f60654 Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Mon, 17 Mar 2025 16:01:03 -0400 Subject: [PATCH 059/115] Fix Focus Sash being considered in switch AI's hits to KO calcs (#6436) --- src/battle_ai_switch_items.c | 5 +++-- test/battle/ai/ai.c | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index ef8f45fb17..f4b72c65b5 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -255,7 +255,8 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler) } // Check if mon gets one shot - if(maxDamageTaken > gBattleMons[battler].hp) + if(maxDamageTaken > gBattleMons[battler].hp + && !(gItemsInfo[gBattleMons[battler].item].holdEffect == HOLD_EFFECT_FOCUS_SASH || (!IsMoldBreakerTypeAbility(opposingBattler, gBattleMons[opposingBattler].ability) && B_STURDY >= GEN_5 && aiAbility == ABILITY_STURDY))) { getsOneShot = TRUE; } @@ -1687,7 +1688,7 @@ static u32 GetSwitchinHitsToKO(s32 damageTaken, u32 battler) currentHP = currentHP - damageTaken; // One shot prevention effects - if (damageTaken >= maxHP && currentHP == maxHP && (heldItemEffect == HOLD_EFFECT_FOCUS_SASH || (!opponentCanBreakMold && B_STURDY >= GEN_5 && ability == ABILITY_STURDY))) + if (damageTaken >= maxHP && startingHP == maxHP && (heldItemEffect == HOLD_EFFECT_FOCUS_SASH || (!opponentCanBreakMold && B_STURDY >= GEN_5 && ability == ABILITY_STURDY)) && hitsToKO < 1) currentHP = 1; // If mon is still alive, apply weather impact first, as it might KO the mon before it can heal with its item (order is weather -> item -> status) diff --git a/test/battle/ai/ai.c b/test/battle/ai/ai.c index da77f828e4..1c57c88732 100644 --- a/test/battle/ai/ai.c +++ b/test/battle/ai/ai.c @@ -845,3 +845,18 @@ AI_SINGLE_BATTLE_TEST("AI won't use Sucker Punch if it expects a move of the sam TURN { MOVE(player, MOVE_QUICK_ATTACK); EXPECT_MOVE(opponent, MOVE_TACKLE); } } } + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI considers Focus Sash when determining if it should switch out") +{ + GIVEN { + ASSUME(gItemsInfo[ITEM_FOCUS_SASH].holdEffect == HOLD_EFFECT_FOCUS_SASH); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_SMART_SWITCHING | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_BEAUTIFLY) { Speed(10); Moves(MOVE_AIR_SLASH); } + OPPONENT(SPECIES_CACNEA) { Speed(1); Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_COMBUSKEN) { Speed(1); Moves(MOVE_FLAMETHROWER); Item(ITEM_FOCUS_SASH); } + OPPONENT(SPECIES_CROBAT) { Speed(11); Moves(MOVE_SLUDGE); } + } WHEN { + TURN { MOVE(player, MOVE_AIR_SLASH); EXPECT_MOVE(opponent, MOVE_TACKLE); EXPECT_SEND_OUT(opponent, 1); } + TURN { MOVE(player, MOVE_AIR_SLASH); EXPECT_MOVE(opponent, MOVE_FLAMETHROWER); } + } +} From f237b5fa1bd217c3bfc89a00373ac545fe377214 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Mon, 17 Mar 2025 21:48:50 +0100 Subject: [PATCH 060/115] Fixes negative priority being blocked by dazzling abilities (#6433) --- src/battle_util.c | 2 +- test/battle/ability/dazzling.c | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/battle_util.c b/src/battle_util.c index 38223e058f..30479a060e 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4241,7 +4241,7 @@ static void ChooseStatBoostAnimation(u32 battler) bool32 CanAbilityBlockMove(u32 battlerAtk, u32 battlerDef, u32 move, u32 abilityDef, enum AbilityEffectOptions option) { const u8 *battleScriptBlocksMove = NULL; - u32 atkPriority = AI_DATA->aiCalcInProgress ? GetBattleMovePriority(battlerAtk, move) : GetChosenMovePriority(battlerAtk); + s32 atkPriority = AI_DATA->aiCalcInProgress ? GetBattleMovePriority(battlerAtk, move) : GetChosenMovePriority(battlerAtk); u32 moveTarget = GetBattlerMoveTargetType(battlerAtk, move); u32 battlerAbility = battlerDef; diff --git a/test/battle/ability/dazzling.c b/test/battle/ability/dazzling.c index cc77e9a3bd..e248c9ce0b 100644 --- a/test/battle/ability/dazzling.c +++ b/test/battle/ability/dazzling.c @@ -50,3 +50,25 @@ DOUBLE_BATTLE_TEST("Dazzling, Queenly Majesty and Armor Tail protect users partn MESSAGE("Wobbuffet cannot use Quick Attack!"); } } + +DOUBLE_BATTLE_TEST("Dazzling, Queenly Majesty and Armor Tail don't protect the user from negative priority") +{ + u32 species, ability; + + PARAMETRIZE { species = SPECIES_BRUXISH; ability = ABILITY_DAZZLING; } + PARAMETRIZE { species = SPECIES_FARIGIRAF; ability = ABILITY_ARMOR_TAIL; } + PARAMETRIZE { species = SPECIES_TSAREENA; ability = ABILITY_QUEENLY_MAJESTY; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_AVALANCHE, target: opponentLeft); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_AVALANCHE, playerLeft); + NOT ABILITY_POPUP(opponentLeft, ability); + } +} + From 0db9043c52b2da351b9cff8b826989e433eec415 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Mon, 17 Mar 2025 21:51:04 +0100 Subject: [PATCH 061/115] Rename absentBattlerFlags to absent (#6432) --- include/battle.h | 3 +-- src/battle_main.c | 10 +++++----- src/battle_script_commands.c | 4 ++-- src/battle_util.c | 2 +- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/include/battle.h b/include/battle.h index 226f9acfef..0086cff959 100644 --- a/include/battle.h +++ b/include/battle.h @@ -628,7 +628,7 @@ struct BattlerState u8 targetsDone[MAX_BATTLERS_COUNT]; u32 commandingDondozo:1; - u32 absentBattlerFlags:1; + u32 absent:1; u32 focusPunchBattlers:1; u32 multipleSwitchInBattlers:1; u32 alreadyStatusedMoveAttempt:1; // For example when using Thunder Wave on an already paralyzed Pokémon. @@ -691,7 +691,6 @@ struct BattleStruct u8 stateIdAfterSelScript[MAX_BATTLERS_COUNT]; u8 prevSelectedPartySlot; u8 stringMoveType; - u8 absentBattlerFlags; u8 palaceFlags; // First 4 bits are "is <= 50% HP and not asleep" for each battler, last 4 bits are selected moves to pass to AI u8 field_93; // related to choosing pokemon? u8 wallyBattleState; diff --git a/src/battle_main.c b/src/battle_main.c index dec919c27a..d64c11db4b 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3883,7 +3883,7 @@ static void TryDoEventsBeforeFirstTurn(void) gBattleStruct->monToSwitchIntoId[i] = PARTY_SIZE; gChosenActionByBattler[i] = B_ACTION_NONE; gChosenMoveByBattler[i] = MOVE_NONE; - gBattleStruct->battlerState[i].absentBattlerFlags = (gAbsentBattlerFlags & (1u << i) ? TRUE : FALSE); + gBattleStruct->battlerState[i].absent = (gAbsentBattlerFlags & (1u << i) ? TRUE : FALSE); } TurnValuesCleanUp(FALSE); SpecialStatusesClear(); @@ -4001,7 +4001,7 @@ void BattleTurnPassed(void) { gChosenActionByBattler[i] = B_ACTION_NONE; gChosenMoveByBattler[i] = MOVE_NONE; - gBattleStruct->battlerState[i].absentBattlerFlags = (gAbsentBattlerFlags & (1u << i) ? TRUE : FALSE); + gBattleStruct->battlerState[i].absent = (gAbsentBattlerFlags & (1u << i) ? TRUE : FALSE); gBattleStruct->monToSwitchIntoId[i] = PARTY_SIZE; gStatuses4[i] &= ~STATUS4_ELECTRIFIED; } @@ -4213,10 +4213,10 @@ static void HandleTurnActionSelectionState(void) gBattleStruct->monToSwitchIntoId[battler] = PARTY_SIZE; if (gBattleTypeFlags & BATTLE_TYPE_MULTI || (position & BIT_FLANK) == B_FLANK_LEFT - || gBattleStruct->battlerState[GetBattlerAtPosition(BATTLE_PARTNER(position))].absentBattlerFlags + || gBattleStruct->battlerState[GetBattlerAtPosition(BATTLE_PARTNER(position))].absent || gBattleCommunication[GetBattlerAtPosition(BATTLE_PARTNER(position))] == STATE_WAIT_ACTION_CONFIRMED) { - if (gBattleStruct->battlerState[battler].absentBattlerFlags || gBattleStruct->battlerState[battler].commandingDondozo) + if (gBattleStruct->battlerState[battler].absent || gBattleStruct->battlerState[battler].commandingDondozo) { gChosenActionByBattler[battler] = B_ACTION_NOTHING_FAINTED; if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) @@ -4591,7 +4591,7 @@ static void HandleTurnActionSelectionState(void) if (((gBattleTypeFlags & BATTLE_TYPE_MULTI) || !IsDoubleBattle()) || (position & BIT_FLANK) != B_FLANK_LEFT - || gBattleStruct->battlerState[GetBattlerAtPosition(BATTLE_PARTNER(position))].absentBattlerFlags) + || gBattleStruct->battlerState[GetBattlerAtPosition(BATTLE_PARTNER(position))].absent) { BtlController_EmitLinkStandbyMsg(battler, BUFFER_A, LINK_STANDBY_MSG_STOP_BOUNCE, i); } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 455dcff789..ac8b633b84 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6737,7 +6737,7 @@ static void Cmd_moveend(void) } u32 originalEffect = GetMoveEffect(originallyUsedMove); if (!(gAbsentBattlerFlags & (1u << gBattlerAttacker)) - && !gBattleStruct->battlerState[gBattlerAttacker].absentBattlerFlags + && !gBattleStruct->battlerState[gBattlerAttacker].absent && originalEffect != EFFECT_BATON_PASS && originalEffect != EFFECT_HEALING_WISH) { if (gHitMarker & HITMARKER_OBEYS) @@ -6781,7 +6781,7 @@ static void Cmd_moveend(void) break; case MOVEEND_MIRROR_MOVE: // mirror move if (!(gAbsentBattlerFlags & (1u << gBattlerAttacker)) - && !gBattleStruct->battlerState[gBattlerAttacker].absentBattlerFlags + && !gBattleStruct->battlerState[gBattlerAttacker].absent && !IsMoveMirrorMoveBanned(originallyUsedMove) && gHitMarker & HITMARKER_OBEYS && gBattlerAttacker != gBattlerTarget diff --git a/src/battle_util.c b/src/battle_util.c index 0d6a2c929e..423165cdfc 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -312,7 +312,7 @@ void HandleAction_UseMove(void) u32 i; gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - if (gBattleStruct->battlerState[gBattlerAttacker].absentBattlerFlags + if (gBattleStruct->battlerState[gBattlerAttacker].absent || gBattleStruct->battlerState[gBattlerAttacker].commandingDondozo || !IsBattlerAlive(gBattlerAttacker)) { From 29fa2497623ab8e5aa8a0530ec81fdea52a71dc5 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Mon, 17 Mar 2025 22:00:04 +0100 Subject: [PATCH 062/115] Allow the AI to see the second hit of Parental Bond (#6403) --- src/battle_ai_util.c | 47 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 6 deletions(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 8de3f078ca..6d7c36bd39 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -24,6 +24,32 @@ #include "constants/items.h" // Functions +static bool32 AI_IsDoubleSpreadMove(u32 battlerAtk, u32 move) +{ + u32 numOfTargets = 0; + u32 moveTargetType = GetBattlerMoveTargetType(battlerAtk, move); + + if (!IsSpreadMove(moveTargetType)) + return FALSE; + + for (u32 battlerDef = 0; battlerDef < MAX_BATTLERS_COUNT; battlerDef++) + { + if (battlerAtk == battlerDef) + continue; + + if (moveTargetType == MOVE_TARGET_BOTH && battlerAtk == BATTLE_PARTNER(battlerDef)) + continue; + + if (IsBattlerAlive(battlerDef) && !IsSemiInvulnerable(battlerDef, move)) + numOfTargets++; + } + + if (numOfTargets > 1) + return TRUE; + + return FALSE; +} + u32 AI_GetDamage(u32 battlerAtk, u32 battlerDef, u32 moveIndex, enum DamageCalcContext calcContext, struct AiLogicData *aiData) { if (calcContext == AI_ATTACKING && BattlerHasAi(battlerAtk)) @@ -564,13 +590,13 @@ static inline void CalcDynamicMoveDamage(struct DamageCalculationData *damageCal switch (effect) { case EFFECT_LEVEL_DAMAGE: - median = maximum = minimum = gBattleMons[damageCalcData->battlerAtk].level * (abilityAtk == ABILITY_PARENTAL_BOND ? 2 : 1); + median = maximum = minimum = gBattleMons[damageCalcData->battlerAtk].level; break; case EFFECT_PSYWAVE: - median = maximum = minimum = gBattleMons[damageCalcData->battlerAtk].level * (abilityAtk == ABILITY_PARENTAL_BOND ? 2 : 1); + median = maximum = minimum = gBattleMons[damageCalcData->battlerAtk].level; break; case EFFECT_FIXED_DAMAGE_ARG: - median = maximum = minimum = GetMoveFixedDamage(move) * (abilityAtk == ABILITY_PARENTAL_BOND ? 2 : 1); + median = maximum = minimum = GetMoveFixedDamage(move); break; case EFFECT_MULTI_HIT: if (move == MOVE_WATER_SHURIKEN && gBattleMons[damageCalcData->battlerAtk].species == SPECIES_GRENINJA_ASH) @@ -604,9 +630,7 @@ static inline void CalcDynamicMoveDamage(struct DamageCalculationData *damageCal median = maximum = minimum = max(0, gBattleMons[damageCalcData->battlerDef].hp - gBattleMons[damageCalcData->battlerAtk].hp); break; case EFFECT_SUPER_FANG: - median = maximum = minimum = (abilityAtk == ABILITY_PARENTAL_BOND - ? max(2, gBattleMons[damageCalcData->battlerDef].hp * 3 / 4) - : max(1, gBattleMons[damageCalcData->battlerDef].hp / 2)); + median = maximum = minimum = max(1, gBattleMons[damageCalcData->battlerDef].hp / 2); break; case EFFECT_FINAL_GAMBIT: median = maximum = minimum = gBattleMons[damageCalcData->battlerAtk].hp; @@ -635,6 +659,17 @@ static inline void CalcDynamicMoveDamage(struct DamageCalculationData *damageCal minimum *= strikeCount; maximum *= strikeCount; } + + if (abilityAtk == ABILITY_PARENTAL_BOND + && !strikeCount + && effect != EFFECT_TRIPLE_KICK + && effect != EFFECT_MULTI_HIT + && !AI_IsDoubleSpreadMove(damageCalcData->battlerAtk, move)) + { + median += median / (B_PARENTAL_BOND_DMG >= GEN_7 ? 4 : 2); + minimum += minimum / (B_PARENTAL_BOND_DMG >= GEN_7 ? 4 : 2); + maximum += maximum / (B_PARENTAL_BOND_DMG >= GEN_7 ? 4 : 2); + } if (median == 0) median = 1; From 41939630960858bceabe9d794c7c415d1b9e474d Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 18 Mar 2025 15:41:37 +0100 Subject: [PATCH 063/115] Fixes Cotton Spore failing if one of the targets blocks it (#6418) Co-authored-by: Bassoonian Co-authored-by: DizzyEggg --- include/battle_util.h | 2 +- src/battle_script_commands.c | 2 ++ src/battle_util.c | 50 +++++++++++++++------------- test/battle/move_effect/speed_down.c | 31 +++++++++++++++++ 4 files changed, 61 insertions(+), 24 deletions(-) create mode 100644 test/battle/move_effect/speed_down.c diff --git a/include/battle_util.h b/include/battle_util.h index 21760a47a3..6f1223b684 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -129,7 +129,6 @@ enum CANCELLER_STANCE_CHANGE_2, CANCELLER_WEATHER_PRIMAL, CANCELLER_DYNAMAX_BLOCKED, - CANCELLER_POWDER_MOVE, CANCELLER_POWDER_STATUS, CANCELLER_PROTEAN, CANCELLER_PSYCHIC_TERRAIN, @@ -348,5 +347,6 @@ bool32 IsPursuitTargetSet(void); void ClearPursuitValuesIfSet(u32 battler); void ClearPursuitValues(void); bool32 HasWeatherEffect(void); +bool32 IsMovePowderBlocked(u32 battlerAtk, u32 battlerDef, u32 move); #endif // GUARD_BATTLE_UTIL_H diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index c22aca8187..937c007acd 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1199,6 +1199,8 @@ static void Cmd_attackcanceler(void) return; if (gMovesInfo[gCurrentMove].effect == EFFECT_PARALYZE && AbilityBattleEffects(ABILITYEFFECT_ABSORBING, gBattlerTarget, 0, 0, gCurrentMove)) return; + if (IsMovePowderBlocked(gBattlerAttacker, gBattlerTarget, gCurrentMove)) + return; if (!gBattleMons[gBattlerAttacker].pp[gCurrMovePos] && gCurrentMove != MOVE_STRUGGLE && !(gHitMarker & (HITMARKER_ALLOW_NO_PP | HITMARKER_NO_ATTACKSTRING | HITMARKER_NO_PPDEDUCT)) diff --git a/src/battle_util.c b/src/battle_util.c index 30479a060e..9fb321118f 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3588,28 +3588,6 @@ static void CancellerDynamaxBlocked(u32 *effect) } } -static void CancellerPowderMove(u32 *effect) -{ - if (IsPowderMove(gCurrentMove) && (gBattlerAttacker != gBattlerTarget)) - { - if (B_POWDER_GRASS >= GEN_6 - && (IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_GRASS) || GetBattlerAbility(gBattlerTarget) == ABILITY_OVERCOAT)) - { - gBattlerAbility = gBattlerTarget; - *effect = 1; - } - else if (GetBattlerHoldEffect(gBattlerTarget, TRUE) == HOLD_EFFECT_SAFETY_GOGGLES) - { - RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_SAFETY_GOGGLES); - gLastUsedItem = gBattleMons[gBattlerTarget].item; - *effect = 1; - } - - if (*effect != 0) - gBattlescriptCurrInstr = BattleScript_PowderMoveNoEffect; - } -} - static void CancellerPowderStatus(u32 *effect) { if (TryActivatePowderStatus(gCurrentMove)) @@ -3842,7 +3820,6 @@ static const MoveSuccessOrderCancellers sMoveSuccessOrderCancellers[] = [CANCELLER_STANCE_CHANGE_2] = CancellerStanceChangeTwo, [CANCELLER_WEATHER_PRIMAL] = CancellerWeatherPrimal, [CANCELLER_DYNAMAX_BLOCKED] = CancellerDynamaxBlocked, - [CANCELLER_POWDER_MOVE] = CancellerPowderMove, [CANCELLER_POWDER_STATUS] = CancellerPowderStatus, [CANCELLER_PROTEAN] = CancellerProtean, [CANCELLER_PSYCHIC_TERRAIN] = CancellerPsychicTerrain, @@ -12295,3 +12272,30 @@ bool32 HasWeatherEffect(void) return FALSE; return TRUE; } + +bool32 IsMovePowderBlocked(u32 battlerAtk, u32 battlerDef, u32 move) +{ + bool32 effect = FALSE; + + if (IsPowderMove(move) && (battlerAtk != battlerDef)) + { + if (B_POWDER_GRASS >= GEN_6 + && (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) || GetBattlerAbility(battlerDef) == ABILITY_OVERCOAT)) + { + gBattlerAbility = battlerDef; + RecordAbilityBattle(gBattlerTarget, ABILITY_OVERCOAT); + effect = TRUE; + } + else if (GetBattlerHoldEffect(battlerDef, TRUE) == HOLD_EFFECT_SAFETY_GOGGLES) + { + RecordItemEffectBattle(battlerDef, HOLD_EFFECT_SAFETY_GOGGLES); + gLastUsedItem = gBattleMons[battlerDef].item; + effect = TRUE; + } + + if (effect) + gBattlescriptCurrInstr = BattleScript_PowderMoveNoEffect; + } + + return effect; +} diff --git a/test/battle/move_effect/speed_down.c b/test/battle/move_effect/speed_down.c new file mode 100644 index 0000000000..a3b5e26be8 --- /dev/null +++ b/test/battle/move_effect/speed_down.c @@ -0,0 +1,31 @@ +#include "global.h" +#include "test/battle.h" + +DOUBLE_BATTLE_TEST("Speed Down: Cotton Spore does not fail if it is blocked by one target") +{ + u32 abilityOne, abilityTwo; + + PARAMETRIZE { abilityOne = ABILITY_OVERCOAT; abilityTwo = ABILITY_SKILL_LINK; } + PARAMETRIZE { abilityOne = ABILITY_SKILL_LINK; abilityTwo = ABILITY_OVERCOAT; } + + GIVEN { + ASSUME(GetMoveEffect(MOVE_COTTON_SPORE) == EFFECT_SPEED_DOWN_2); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_SHELLDER) { Ability(abilityOne); } + OPPONENT(SPECIES_SHELLDER) { Ability(abilityTwo); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_COTTON_SPORE); } + } SCENE { + if (abilityOne == ABILITY_OVERCOAT) { + ABILITY_POPUP(opponentLeft, ABILITY_OVERCOAT); + ANIMATION(ANIM_TYPE_MOVE, MOVE_COTTON_SPORE, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + } + else if (abilityTwo == ABILITY_OVERCOAT) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_COTTON_SPORE, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + ABILITY_POPUP(opponentRight, ABILITY_OVERCOAT); + } + } +} From 6031bb2a78acf0ef99173fd772bb2d497604ac94 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 18 Mar 2025 17:00:11 +0100 Subject: [PATCH 064/115] Split ai function IsBattlerTrapped (#6438) --- include/battle_ai_util.h | 3 ++- src/battle_ai_main.c | 28 ++++++++++++++++++++-------- src/battle_ai_util.c | 39 ++++++++++++++++++++++++++------------- test/battle/ai/ai.c | 12 ++++++++++++ 4 files changed, 60 insertions(+), 22 deletions(-) diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 6d1f5a9ed4..678688dbc3 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -52,7 +52,8 @@ u32 GetTotalBaseStat(u32 species); bool32 IsTruantMonVulnerable(u32 battlerAI, u32 opposingBattler); bool32 AI_BattlerAtMaxHp(u32 battler); u32 GetHealthPercentage(u32 battler); -bool32 IsBattlerTrapped(u32 battler, bool32 switching); +bool32 AI_CanBattlerEscape(u32 battler); +bool32 IsBattlerTrapped(u32 battlerAtk, u32 battlerDef); s32 AI_WhoStrikesFirst(u32 battlerAI, u32 battler2, u32 moveConsidered); bool32 CanTargetFaintAi(u32 battlerDef, u32 battlerAtk); u32 NoOfHitsForTargetToFaintAI(u32 battlerDef, u32 battlerAtk); diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 133d62aeb7..a764cf14c2 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -1600,7 +1600,9 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); // if mon will wake up, is not asleep, or is not comatose break; case EFFECT_MEAN_LOOK: - if (IsBattlerTrapped(battlerDef, TRUE) || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) + if (AI_CanBattlerEscape(battlerDef) + || IsBattlerTrapped(battlerAtk, battlerDef) + || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; case EFFECT_NIGHTMARE: @@ -2713,7 +2715,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) else if (GetBattleMoveCategory(move) == DAMAGE_CATEGORY_STATUS && (CountUsablePartyMons(battlerAtk) < 1 || AI_DATA->mostSuitableMonId[battlerAtk] == PARTY_SIZE - || IsBattlerTrapped(battlerAtk, TRUE))) + || (!AI_CanBattlerEscape(battlerAtk) && IsBattlerTrapped(battlerDef, battlerAtk)))) ADJUST_SCORE(-30); } @@ -3666,7 +3668,8 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) || aiData->abilities[battlerDef] == ABILITY_MAGIC_GUARD) break; ADJUST_SCORE(GOOD_EFFECT); - if (!HasDamagingMove(battlerDef) || IsBattlerTrapped(battlerDef, FALSE) + if (!HasDamagingMove(battlerDef) + || (!AI_CanBattlerEscape(battlerDef) && IsBattlerTrapped(battlerAtk, battlerDef)) || aiData->holdEffects[battlerAtk] == HOLD_EFFECT_BIG_ROOT) ADJUST_SCORE(DECENT_EFFECT); break; @@ -3761,7 +3764,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case EFFECT_CURSE: if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GHOST)) { - if (IsBattlerTrapped(battlerDef, TRUE)) + if (!AI_CanBattlerEscape(battlerDef) && IsBattlerTrapped(battlerAtk, battlerDef)) ADJUST_SCORE(GOOD_EFFECT); else ADJUST_SCORE(WEAK_EFFECT); @@ -3854,7 +3857,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_PERISH_SONG: - if (IsBattlerTrapped(battlerDef, TRUE)) + if (!AI_CanBattlerEscape(battlerDef) && IsBattlerTrapped(battlerAtk, battlerDef)) ADJUST_SCORE(GOOD_EFFECT); break; case EFFECT_SANDSTORM: @@ -3995,7 +3998,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) break; // Don't use if the attract won't have a change to activate if (gBattleMons[battlerDef].status1 & STATUS1_ANY || (gBattleMons[battlerDef].status2 & STATUS2_CONFUSION) - || IsBattlerTrapped(battlerDef, TRUE)) + || (!AI_CanBattlerEscape(battlerDef) && IsBattlerTrapped(battlerAtk, battlerDef))) ADJUST_SCORE(GOOD_EFFECT); else ADJUST_SCORE(DECENT_EFFECT); @@ -5091,7 +5094,7 @@ static s32 AI_PreferBatonPass(u32 battlerAtk, u32 battlerDef, u32 move, s32 scor || CountUsablePartyMons(battlerAtk) == 0 || !IsBattleMoveStatus(move) || !HasMoveEffect(battlerAtk, EFFECT_BATON_PASS) - || IsBattlerTrapped(battlerAtk, TRUE)) + || (!AI_CanBattlerEscape(battlerAtk) && IsBattlerTrapped(battlerDef, battlerAtk))) return score; u32 effect = GetMoveEffect(move); @@ -5582,7 +5585,16 @@ static void AI_Watch(void) // Roaming pokemon logic static s32 AI_Roaming(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { - if (IsBattlerTrapped(battlerAtk, FALSE)) + bool32 roamerCanFlee = FALSE; + + if (AI_CanBattlerEscape(battlerAtk)) + roamerCanFlee = TRUE; + else if (AI_DATA->abilities[battlerAtk] == ABILITY_RUN_AWAY) + roamerCanFlee = TRUE; + else if (AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_CAN_ALWAYS_RUN) + roamerCanFlee = TRUE; + + if (!roamerCanFlee && IsBattlerTrapped(battlerDef, battlerAtk)) return score; AI_Flee(); diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 6d7c36bd39..1c2d0789cd 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -339,25 +339,35 @@ bool32 AI_BattlerAtMaxHp(u32 battlerId) return FALSE; } -bool32 IsBattlerTrapped(u32 battler, bool32 checkSwitch) + +bool32 AI_CanBattlerEscape(u32 battler) { u32 holdEffect = AI_DATA->holdEffects[battler]; if (B_GHOSTS_ESCAPE >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) - return FALSE; - if (checkSwitch && holdEffect == HOLD_EFFECT_SHED_SHELL) - return FALSE; - else if (!checkSwitch && AI_DATA->abilities[battler] == ABILITY_RUN_AWAY) - return FALSE; - else if (!checkSwitch && holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN) - return FALSE; - else if (gBattleMons[battler].status2 & (STATUS2_ESCAPE_PREVENTION | STATUS2_WRAPPED)) return TRUE; - else if (gStatuses3[battler] & (STATUS3_ROOTED | STATUS3_SKY_DROPPED)) + if (holdEffect == HOLD_EFFECT_SHED_SHELL) return TRUE; - else if (gFieldStatuses & STATUS_FIELD_FAIRY_LOCK) + + return FALSE; +} + +bool32 IsBattlerTrapped(u32 battlerAtk, u32 battlerDef) +{ + if (gBattleMons[battlerDef].status2 & (STATUS2_ESCAPE_PREVENTION | STATUS2_WRAPPED)) return TRUE; - else if (IsAbilityPreventingEscape(battler)) + if (gStatuses3[battlerDef] & (STATUS3_ROOTED | STATUS3_SKY_DROPPED)) + return TRUE; + if (gFieldStatuses & STATUS_FIELD_FAIRY_LOCK) + return TRUE; + if (AI_IsAbilityOnSide(battlerAtk, ABILITY_SHADOW_TAG) + && (B_SHADOW_TAG_ESCAPE >= GEN_4 && AI_DATA->abilities[battlerDef] != ABILITY_SHADOW_TAG)) + return TRUE; + if (AI_IsAbilityOnSide(battlerAtk, ABILITY_ARENA_TRAP) + && IsBattlerGrounded(battlerAtk)) + return TRUE; + if (AI_IsAbilityOnSide(battlerAtk, ABILITY_MAGNET_PULL) + && IS_BATTLER_OF_TYPE(battlerAtk, TYPE_STEEL)) return TRUE; return FALSE; @@ -3256,7 +3266,10 @@ u32 ShouldTryToFlinch(u32 battlerAtk, u32 battlerDef, u32 atkAbility, u32 defAbi bool32 ShouldTrap(u32 battlerAtk, u32 battlerDef, u32 move) { - if (IsBattlerTrapped(battlerDef, TRUE)) + if (AI_CanBattlerEscape(battlerDef)) + return FALSE; + + if (IsBattlerTrapped(battlerAtk, battlerDef)) return FALSE; if (BattlerWillFaintFromSecondaryDamage(battlerDef, AI_DATA->abilities[battlerDef])) diff --git a/test/battle/ai/ai.c b/test/battle/ai/ai.c index da77f828e4..3a72508c17 100644 --- a/test/battle/ai/ai.c +++ b/test/battle/ai/ai.c @@ -845,3 +845,15 @@ AI_SINGLE_BATTLE_TEST("AI won't use Sucker Punch if it expects a move of the sam TURN { MOVE(player, MOVE_QUICK_ATTACK); EXPECT_MOVE(opponent, MOVE_TACKLE); } } } + +AI_SINGLE_BATTLE_TEST("AI score for Mean Look will be decreased if target can escape") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_BULBASAUR) { Item(ITEM_SHED_SHELL); } + OPPONENT(SPECIES_BULBASAUR) { Moves(MOVE_TACKLE, MOVE_MEAN_LOOK); } + } WHEN { + TURN { SCORE_EQ_VAL(opponent, MOVE_MEAN_LOOK, 90); } + } +} + From 7b6b9ab655e1b364adea497f86404f640602c4f1 Mon Sep 17 00:00:00 2001 From: Raymond Dodge Date: Tue, 18 Mar 2025 18:41:51 -0400 Subject: [PATCH 065/115] Remove casts in decoration.c (#2110) --- src/decoration.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/decoration.c b/src/decoration.c index 18d6e2e680..98c6dba176 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -1921,7 +1921,7 @@ static void ClearPlaceDecorationGraphicsDataBuffer(struct PlaceDecorationGraphic static void CopyPalette(u16 *dest, u16 pal) { - CpuFastCopy(&((u16 *)gTilesetPointer_SecretBase->palettes)[pal * 16], dest, sizeof(u16) * 16); + CpuFastCopy(&gTilesetPointer_SecretBase->palettes[pal], dest, PLTT_SIZE_4BPP); } static void CopyTile(u8 *dest, u16 tile) @@ -1934,7 +1934,7 @@ static void CopyTile(u8 *dest, u16 tile) if (tile != 0) tile &= 0x03FF; - CpuFastCopy(&((u8 *)gTilesetPointer_SecretBase->tiles)[tile * TILE_SIZE_4BPP], buffer, TILE_SIZE_4BPP); + CpuFastCopy(&gTilesetPointer_SecretBase->tiles[tile * TILE_SIZE_4BPP / sizeof(u32)], buffer, TILE_SIZE_4BPP); switch (mode) { case 0: @@ -1976,7 +1976,7 @@ static void SetDecorSelectionBoxTiles(struct PlaceDecorationGraphicsDataBuffer * static u16 GetMetatile(u16 tile) { - return ((u16 *)gTilesetPointer_SecretBaseRedCave->metatiles)[tile] & 0xFFF; + return gTilesetPointer_SecretBaseRedCave->metatiles[tile] & 0xFFF; } static void SetDecorSelectionMetatiles(struct PlaceDecorationGraphicsDataBuffer *data) @@ -2047,7 +2047,7 @@ static u8 gpu_pal_decompress_alloc_tag_and_upload(struct PlaceDecorationGraphics SetDecorSelectionMetatiles(data); SetDecorSelectionBoxOamAttributes(data->decoration->shape); SetDecorSelectionBoxTiles(data); - CopyPalette(data->palette, ((u16 *)gTilesetPointer_SecretBaseRedCave->metatiles)[(data->decoration->tiles[0] * NUM_TILES_PER_METATILE) + 7] >> 12); + CopyPalette(data->palette, gTilesetPointer_SecretBaseRedCave->metatiles[(data->decoration->tiles[0] * NUM_TILES_PER_METATILE) + 7] >> 12); LoadSpritePalette(&sSpritePal_PlaceDecoration); return CreateSprite(&sDecorationSelectorSpriteTemplate, 0, 0, 0); } @@ -2103,7 +2103,7 @@ static u8 AddDecorationIconObjectFromObjectEvent(u16 tilesTag, u16 paletteTag, u SetDecorSelectionMetatiles(&sPlaceDecorationGraphicsDataBuffer); SetDecorSelectionBoxOamAttributes(sPlaceDecorationGraphicsDataBuffer.decoration->shape); SetDecorSelectionBoxTiles(&sPlaceDecorationGraphicsDataBuffer); - CopyPalette(sPlaceDecorationGraphicsDataBuffer.palette, ((u16 *)gTilesetPointer_SecretBaseRedCave->metatiles)[(sPlaceDecorationGraphicsDataBuffer.decoration->tiles[0] * NUM_TILES_PER_METATILE) + 7] >> 12); + CopyPalette(sPlaceDecorationGraphicsDataBuffer.palette, gTilesetPointer_SecretBaseRedCave->metatiles[(sPlaceDecorationGraphicsDataBuffer.decoration->tiles[0] * NUM_TILES_PER_METATILE) + 7] >> 12); sheet.data = sPlaceDecorationGraphicsDataBuffer.image; sheet.size = sDecorShapeSizes[sPlaceDecorationGraphicsDataBuffer.decoration->shape] * TILE_SIZE_4BPP; sheet.tag = tilesTag; From 98a5fab89831d1d8314099edb696ef28215c44b6 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Wed, 19 Mar 2025 04:42:07 +0100 Subject: [PATCH 066/115] Optimization / Clean up of AI move usability (#6332) --- include/battle_ai_util.h | 7 +++ src/battle_ai_main.c | 44 ++++++-------- src/battle_ai_util.c | 127 ++++++++++++++++++++------------------- 3 files changed, 90 insertions(+), 88 deletions(-) diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 678688dbc3..2cf314c00d 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -28,6 +28,13 @@ enum AIPivot SHOULD_PIVOT, }; +static inline bool32 IsMoveUnusable(u32 moveIndex, u32 move, u32 moveLimitations) +{ + return move == MOVE_NONE + || move == MOVE_UNAVAILABLE + || moveLimitations & 1u << moveIndex; +} + bool32 AI_IsFaster(u32 battlerAi, u32 battlerDef, u32 move); bool32 AI_IsSlower(u32 battlerAi, u32 battlerDef, u32 move); bool32 AI_RandLessThan(u32 val); diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index a764cf14c2..c7bf1b1bb7 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -238,8 +238,7 @@ void BattleAI_SetupFlags(void) void BattleAI_SetupAIData(u8 defaultScoreMoves, u32 battler) { - s32 i; - u8 moveLimitations; + u32 moveLimitations; u32 flags[MAX_BATTLERS_COUNT]; // Clear AI data but preserve the flags. @@ -247,24 +246,19 @@ void BattleAI_SetupAIData(u8 defaultScoreMoves, u32 battler) memset(AI_THINKING_STRUCT, 0, sizeof(struct AI_ThinkingStruct)); memcpy(&AI_THINKING_STRUCT->aiFlags[0], &flags[0], sizeof(u32) * MAX_BATTLERS_COUNT); - // Conditional score reset, unlike Ruby. - for (i = 0; i < MAX_MON_MOVES; i++) - { - if (defaultScoreMoves & 1) - SET_SCORE(battler, i, AI_SCORE_DEFAULT); - else - SET_SCORE(battler, i, 0); - - defaultScoreMoves >>= 1; - } - moveLimitations = AI_DATA->moveLimitations[battler]; - // Ignore moves that aren't possible to use. - for (i = 0; i < MAX_MON_MOVES; i++) + // Conditional score reset, unlike Ruby. + for (u32 moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) { - if ((1u << i) & moveLimitations) - SET_SCORE(battler, i, 0); + if (moveLimitations & (1u << moveIndex)) + SET_SCORE(battler, moveIndex, 0); + if (defaultScoreMoves & 1) + SET_SCORE(battler, moveIndex, AI_SCORE_DEFAULT); + else + SET_SCORE(battler, moveIndex, 0); + + defaultScoreMoves >>= 1; } gBattlerTarget = SetRandomTarget(battler); @@ -414,6 +408,7 @@ static void CalcBattlerAiMovesData(struct AiLogicData *aiData, u32 battlerAtk, u { u32 moveIndex, move; u16 *moves = GetMovesArray(battlerAtk); + u32 moveLimitations = aiData->moveLimitations[battlerAtk]; for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) { @@ -421,14 +416,13 @@ static void CalcBattlerAiMovesData(struct AiLogicData *aiData, u32 battlerAtk, u uq4_12_t effectiveness = Q_4_12(0.0); move = moves[moveIndex]; - if (move != MOVE_NONE - && move != MOVE_UNAVAILABLE - //&& !IsBattleMoveStatus(move) /* we want to get effectiveness and accuracy of status moves */ - && !(aiData->moveLimitations[battlerAtk] & (1u << moveIndex))) - { - dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, TRUE, weather); - aiData->moveAccuracy[battlerAtk][battlerDef][moveIndex] = Ai_SetMoveAccuracy(aiData, battlerAtk, battlerDef, move); - } + if (IsMoveUnusable(moveIndex, move, moveLimitations)) + continue; + + // Also get effectiveness of status moves + dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, TRUE, weather); + aiData->moveAccuracy[battlerAtk][battlerDef][moveIndex] = Ai_SetMoveAccuracy(aiData, battlerAtk, battlerDef, move); + aiData->simulatedDmg[battlerAtk][battlerDef][moveIndex] = dmg; aiData->effectiveness[battlerAtk][battlerDef][moveIndex] = effectiveness; } diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 1c2d0789cd..22da0d931b 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -415,15 +415,15 @@ bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, u32 category) { s32 i, moveType; u32 usable = 0; - u32 unusable = AI_DATA->moveLimitations[attacker]; u16 *moves = GetMovesArray(attacker); + u32 moveLimitations = AI_DATA->moveLimitations[attacker]; for (i = 0; i < MAX_MON_MOVES; i++) { - if (moves[i] != MOVE_NONE - && moves[i] != MOVE_UNAVAILABLE - && GetBattleMoveCategory(moves[i]) == category - && !(unusable & (1u << i))) + if (IsMoveUnusable(i, moves[i], moveLimitations)) + continue; + + if (GetBattleMoveCategory(moves[i]) == category) { SetTypeBeforeUsingMove(moves[i], attacker); moveType = GetBattleMoveType(moves[i]); @@ -1231,18 +1231,19 @@ static bool32 CanEndureHit(u32 battler, u32 battlerTarget, u32 move) // Check if target has means to faint ai mon. bool32 CanTargetFaintAi(u32 battlerDef, u32 battlerAtk) { + struct AiLogicData *aiData = AI_DATA; s32 moveIndex; - u32 unusable = AI_DATA->moveLimitations[battlerDef]; u16 *moves = GetMovesArray(battlerDef); + u32 moveLimitations = aiData->moveLimitations[battlerDef]; for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) { - if (moves[moveIndex] != MOVE_NONE && moves[moveIndex] != MOVE_UNAVAILABLE && !(unusable & (1u << moveIndex)) - && AI_GetDamage(battlerDef, battlerAtk, moveIndex, AI_DEFENDING, AI_DATA) >= gBattleMons[battlerAtk].hp + if (IsMoveUnusable(moveIndex, moves[moveIndex], moveLimitations)) + continue; + + if (AI_GetDamage(battlerDef, battlerAtk, moveIndex, AI_DEFENDING, aiData) >= gBattleMons[battlerAtk].hp && !CanEndureHit(battlerDef, battlerAtk, moves[moveIndex])) - { return TRUE; - } } return FALSE; @@ -1268,18 +1269,21 @@ u32 NoOfHitsForTargetToFaintAI(u32 battlerDef, u32 battlerAtk) u32 GetBestDmgMoveFromBattler(u32 battlerAtk, u32 battlerDef, enum DamageCalcContext calcContext) { + struct AiLogicData *aiData = AI_DATA; u32 moveIndex; u32 move = 0; u32 bestDmg = 0; - u32 unusable = AI_DATA->moveLimitations[battlerAtk]; u16 *moves = GetMovesArray(battlerAtk); + u32 moveLimitations = aiData->moveLimitations[battlerAtk]; for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) { - if (moves[moveIndex] != MOVE_NONE && moves[moveIndex] != MOVE_UNAVAILABLE && !(unusable & (1u << moveIndex)) - && bestDmg < AI_GetDamage(battlerAtk, battlerDef, moveIndex, calcContext, AI_DATA)) + if (IsMoveUnusable(moveIndex, moves[moveIndex], moveLimitations)) + continue; + + if (bestDmg < AI_GetDamage(battlerAtk, battlerDef, moveIndex, calcContext, aiData)) { - bestDmg = AI_GetDamage(battlerAtk, battlerDef, moveIndex, calcContext, AI_DATA); + bestDmg = AI_GetDamage(battlerAtk, battlerDef, moveIndex, calcContext, aiData); move = moves[moveIndex]; } } @@ -1288,20 +1292,20 @@ u32 GetBestDmgMoveFromBattler(u32 battlerAtk, u32 battlerDef, enum DamageCalcCon u32 GetBestDmgFromBattler(u32 battler, u32 battlerTarget, enum DamageCalcContext calcContext) { + struct AiLogicData *aiData = AI_DATA; u32 moveIndex; u32 bestDmg = 0; - u32 unusable = AI_DATA->moveLimitations[battler]; u16 *moves = GetMovesArray(battler); + u32 moveLimitations = aiData->moveLimitations[battler]; for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) { - if (moves[moveIndex] != MOVE_NONE - && moves[moveIndex] != MOVE_UNAVAILABLE - && !(unusable & (1u << moveIndex)) - && bestDmg < AI_GetDamage(battler, battlerTarget, moveIndex, calcContext, AI_DATA)) - { - bestDmg = AI_GetDamage(battler, battlerTarget, moveIndex, calcContext, AI_DATA); - } + if (IsMoveUnusable(moveIndex, moves[moveIndex], moveLimitations)) + continue; + + u32 damage = AI_GetDamage(battler, battlerTarget, moveIndex, calcContext, aiData); + if (bestDmg < damage) + bestDmg = damage; } return bestDmg; @@ -1311,28 +1315,28 @@ u32 GetBestDmgFromBattler(u32 battler, u32 battlerTarget, enum DamageCalcContext // If numHits > 1, check if the target will be KO'ed by that number of hits (ignoring healing effects) bool32 CanAIFaintTarget(u32 battlerAtk, u32 battlerDef, u32 numHits) { + struct AiLogicData *aiData = AI_DATA; s32 moveIndex, dmg; - u32 moveLimitations = AI_DATA->moveLimitations[battlerAtk]; u16 *moves = gBattleMons[battlerAtk].moves; + u32 moveLimitations = aiData->moveLimitations[battlerAtk]; for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) { - if (moves[moveIndex] != MOVE_NONE && moves[moveIndex] != MOVE_UNAVAILABLE && !(moveLimitations & (1u << moveIndex))) + if (IsMoveUnusable(moveIndex, moves[moveIndex], moveLimitations)) + continue; + + dmg = AI_GetDamage(battlerAtk, battlerDef, moveIndex, AI_ATTACKING, aiData); + + if (numHits) + dmg *= numHits; + + if (gBattleMons[battlerDef].hp <= dmg) { - // Use the pre-calculated value in simulatedDmg instead of re-calculating it - dmg = AI_GetDamage(battlerAtk, battlerDef, moveIndex, AI_ATTACKING, AI_DATA); + if (numHits > 1) + return TRUE; - if (numHits) - dmg *= numHits; - - if (gBattleMons[battlerDef].hp <= dmg) - { - if (numHits > 1) - return TRUE; - - if (!CanEndureHit(battlerAtk, battlerDef, moves[moveIndex])) - return TRUE; - } + if (!CanEndureHit(battlerAtk, battlerDef, moves[moveIndex])) + return TRUE; } } @@ -1353,25 +1357,28 @@ bool32 CanTargetMoveFaintAi(u32 move, u32 battlerDef, u32 battlerAtk, u32 nHits) // Check if target has means to faint ai mon after modding hp/dmg bool32 CanTargetFaintAiWithMod(u32 battlerDef, u32 battlerAtk, s32 hpMod, s32 dmgMod) { + struct AiLogicData *aiData = AI_DATA; u32 moveIndex; - u32 unusable = AI_DATA->moveLimitations[battlerDef]; s32 dmg; - u16 *moves = gBattleResources->battleHistory->usedMoves[battlerDef]; + u16 *moves = GetMovesArray(battlerDef); u32 hpCheck = gBattleMons[battlerAtk].hp + hpMod; + u32 moveLimitations = aiData->moveLimitations[battlerAtk]; if (hpCheck > gBattleMons[battlerAtk].maxHP) hpCheck = gBattleMons[battlerAtk].maxHP; for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) { - dmg = AI_GetDamage(battlerAtk, battlerDef, moveIndex, AI_DEFENDING, AI_DATA); + if (IsMoveUnusable(moveIndex, moves[moveIndex], moveLimitations)) + continue; + + dmg = AI_GetDamage(battlerAtk, battlerDef, moveIndex, AI_DEFENDING, aiData); + if (dmgMod) dmg *= dmgMod; - if (moves[moveIndex] != MOVE_NONE && moves[moveIndex] != MOVE_UNAVAILABLE && !(unusable & (1u << moveIndex)) && dmg >= hpCheck) - { + if (dmg >= hpCheck) return TRUE; - } } return FALSE; @@ -2271,20 +2278,17 @@ bool32 HasMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef, u32 accCheck, bool for (i = 0; i < MAX_MON_MOVES; i++) { - if (moves[i] == MOVE_NONE || moves[i] == MOVE_UNAVAILABLE) + if (IsMoveUnusable(i, moves[i], moveLimitations)) continue; - if (!((1u << i) & moveLimitations)) - { - if (ignoreStatus && IsBattleMoveStatus(moves[i])) - continue; - else if ((!IsBattleMoveStatus(moves[i]) && GetMoveAccuracy(moves[i]) == 0) - || GetBattlerMoveTargetType(battlerAtk, moves[i]) & (MOVE_TARGET_USER | MOVE_TARGET_OPPONENTS_FIELD)) - continue; + if (ignoreStatus && IsBattleMoveStatus(moves[i])) + continue; + else if ((!IsBattleMoveStatus(moves[i]) && GetMoveAccuracy(moves[i]) == 0) + || GetBattlerMoveTargetType(battlerAtk, moves[i]) & (MOVE_TARGET_USER | MOVE_TARGET_OPPONENTS_FIELD)) + continue; - if (AI_DATA->moveAccuracy[battlerAtk][battlerDef][i] <= accCheck) - return TRUE; - } + if (AI_DATA->moveAccuracy[battlerAtk][battlerDef][i] <= accCheck) + return TRUE; } return FALSE; @@ -2292,20 +2296,17 @@ bool32 HasMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef, u32 accCheck, bool bool32 HasSleepMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef) { - u32 moveLimitations = AI_DATA->moveLimitations[battlerAtk]; u32 i; u16 *moves = GetMovesArray(battlerAtk); + u32 moveLimitations = AI_DATA->moveLimitations[battlerAtk]; for (i = 0; i < MAX_MON_MOVES; i++) { - if (moves[i] == MOVE_NONE) - break; - if (!((1u << i) & moveLimitations)) - { - if (GetMoveEffect(moves[i]) == EFFECT_SLEEP - && AI_DATA->moveAccuracy[battlerAtk][battlerDef][i] < 85) - return TRUE; - } + if (IsMoveUnusable(i, moves[i], moveLimitations)) + continue; + + if (GetMoveEffect(moves[i]) == EFFECT_SLEEP && AI_DATA->moveAccuracy[battlerAtk][battlerDef][i] < 85) + return TRUE; } return FALSE; } From 411a236ce767c6c6bfbe3a12c79674426022a364 Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Wed, 19 Mar 2025 04:32:59 -0400 Subject: [PATCH 067/115] Fix AI using Scald / fire moves against frozen / frostbitten targets (#6442) --- include/battle_script_commands.h | 1 + src/battle_ai_main.c | 15 +++++++++++++++ src/battle_script_commands.c | 3 +-- test/battle/ai/ai.c | 31 +++++++++++++++++++++++++++++-- 4 files changed, 46 insertions(+), 4 deletions(-) diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h index 1b72239d00..ead678e993 100644 --- a/include/battle_script_commands.h +++ b/include/battle_script_commands.h @@ -58,6 +58,7 @@ u8 GetFirstFaintedPartyIndex(u8 battlerId); bool32 IsMoveAffectedByParentalBond(u32 move, u32 battler); void SaveBattlerTarget(u32 battler); void SaveBattlerAttacker(u32 battler); +bool32 CanBurnHitThaw(u16 move); extern void (* const gBattleScriptingCommandsTable[])(void); extern const struct StatFractions gAccuracyStageRatios[]; diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index c7bf1b1bb7..1b0fe8b45a 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -854,6 +854,21 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (gBattleStruct->battlerState[battlerDef].commandingDondozo) RETURN_SCORE_MINUS(20); + // Don't use anything but super effective thawing moves if target is frozen if any other attack available + if (((GetMoveType(move) == TYPE_FIRE && GetMovePower(move) != 0) || CanBurnHitThaw(move)) && effectiveness < UQ_4_12(2.0) && (gBattleMons[battlerDef].status1 & (STATUS1_FROSTBITE | STATUS1_FREEZE))) + { + u32 aiMove; + for (i = 0; i < MAX_MON_MOVES; i++) + { + aiMove = gBattleMons[battlerAtk].moves[i]; + if (GetMoveType(aiMove) != TYPE_FIRE && !CanBurnHitThaw(aiMove) && GetMovePower(gBattleMons[battlerAtk].moves[i] != 0)) + { + ADJUST_SCORE(-1); + break; + } + } + } + if (effectiveness == UQ_4_12(0.0)) { RETURN_SCORE_MINUS(20); diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index ac8b633b84..a1623c8b4b 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -340,7 +340,6 @@ void ApplyExperienceMultipliers(s32 *expAmount, u8 expGetterMonId, u8 faintedBat static void RemoveAllWeather(void); static void RemoveAllTerrains(void); static bool8 CanAbilityPreventStatLoss(u16 abilityDef); -static bool8 CanBurnHitThaw(u16 move); static u32 GetNextTarget(u32 moveTarget, bool32 excludeCurrent); static void TryUpdateEvolutionTracker(u32 evolutionMethod, u32 upAmount, u16 usedMove); static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u8 *failInstr, u16 move); @@ -16794,7 +16793,7 @@ static bool8 CanAbilityPreventStatLoss(u16 abilityDef) return FALSE; } -static bool8 CanBurnHitThaw(u16 move) +bool32 CanBurnHitThaw(u16 move) { u8 i; diff --git a/test/battle/ai/ai.c b/test/battle/ai/ai.c index 3a72508c17..cc9582a4bd 100644 --- a/test/battle/ai/ai.c +++ b/test/battle/ai/ai.c @@ -846,6 +846,34 @@ AI_SINGLE_BATTLE_TEST("AI won't use Sucker Punch if it expects a move of the sam } } +AI_SINGLE_BATTLE_TEST("AI won't use thawing moves if target is frozen unless it is super effective or it has no other options") +{ + u32 aiFlags = 0; u32 status = 0; u32 aiMove = 0; + PARAMETRIZE { status = STATUS1_FREEZE; aiMove = MOVE_SCALD; aiFlags = 0; } + PARAMETRIZE { status = STATUS1_FREEZE; aiMove = MOVE_SCALD; aiFlags = AI_FLAG_CHECK_BAD_MOVE; } + PARAMETRIZE { status = STATUS1_FROSTBITE; aiMove = MOVE_SCALD; aiFlags = 0; } + PARAMETRIZE { status = STATUS1_FROSTBITE; aiMove = MOVE_SCALD; aiFlags = AI_FLAG_CHECK_BAD_MOVE; } + PARAMETRIZE { status = STATUS1_FREEZE; aiMove = MOVE_EMBER; aiFlags = 0; } + PARAMETRIZE { status = STATUS1_FREEZE; aiMove = MOVE_EMBER; aiFlags = AI_FLAG_CHECK_BAD_MOVE; } + PARAMETRIZE { status = STATUS1_FROSTBITE; aiMove = MOVE_EMBER; aiFlags = 0; } + PARAMETRIZE { status = STATUS1_FROSTBITE; aiMove = MOVE_EMBER; aiFlags = AI_FLAG_CHECK_BAD_MOVE; } + + GIVEN { + ASSUME(GetMoveType(MOVE_EMBER) == TYPE_FIRE); + ASSUME(GetMoveCategory(MOVE_TACKLE) == DAMAGE_CATEGORY_PHYSICAL); + ASSUME(GetMoveCategory(MOVE_WATER_GUN) == DAMAGE_CATEGORY_SPECIAL); + ASSUME(gMovesInfo[MOVE_SCALD].thawsUser == TRUE); + AI_FLAGS(aiFlags | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE); Status1(status); } + OPPONENT(SPECIES_VULPIX) { Moves(MOVE_TACKLE, aiMove); } + } WHEN { + if (aiFlags == AI_FLAG_CHECK_BAD_MOVE) + TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVE(opponent, MOVE_TACKLE); } + else + TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVE(opponent, aiMove); } + } +} + AI_SINGLE_BATTLE_TEST("AI score for Mean Look will be decreased if target can escape") { GIVEN { @@ -855,5 +883,4 @@ AI_SINGLE_BATTLE_TEST("AI score for Mean Look will be decreased if target can es } WHEN { TURN { SCORE_EQ_VAL(opponent, MOVE_MEAN_LOOK, 90); } } -} - +} \ No newline at end of file From 7663fb88708d9a7a7ccda64094026383cc3912a0 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Wed, 19 Mar 2025 13:44:46 +0100 Subject: [PATCH 068/115] Move category test cleanup (#6447) Co-authored-by: Hedara --- test/battle/move_effect/shell_side_arm.c | 65 ++++++++++-------------- test/battle/move_effect/tera_starstorm.c | 19 ++++--- 2 files changed, 37 insertions(+), 47 deletions(-) diff --git a/test/battle/move_effect/shell_side_arm.c b/test/battle/move_effect/shell_side_arm.c index 13458e39ae..4a6be08f18 100644 --- a/test/battle/move_effect/shell_side_arm.c +++ b/test/battle/move_effect/shell_side_arm.c @@ -1,6 +1,12 @@ #include "global.h" #include "test/battle.h" +ASSUMPTIONS +{ + ASSUME(GetMoveEffect(MOVE_MIRROR_COAT) == EFFECT_MIRROR_COAT); + ASSUME(GetMoveEffect(MOVE_COUNTER) == EFFECT_COUNTER); +} + SINGLE_BATTLE_TEST("Shell Side Arm can be countered if it is physical") { GIVEN { @@ -31,28 +37,30 @@ SINGLE_BATTLE_TEST("Shell Side Arm can be mirror coated if it is special") } } -SINGLE_BATTLE_TEST("Shell Side Arm does not change category mid-turn") +DOUBLE_BATTLE_TEST("Shell Side Arm does not change category mid-turn") { - s16 damage[3]; - GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_SHELL_SIDE_ARM); } - OPPONENT(SPECIES_WOBBUFFET) { Defense(100); SpDefense(120); } + ASSUME(GetMoveEffect(MOVE_SCREECH) == EFFECT_DEFENSE_DOWN_2); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_SHUCKLE) { Ability(ABILITY_CONTRARY); Defense(100); SpDefense(120); } + OPPONENT(SPECIES_WYNAUT); } WHEN { - TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_SHELL_SIDE_ARM); } - TURN { MOVE(opponent, MOVE_LIGHT_SCREEN); MOVE(player, MOVE_SHELL_SIDE_ARM); } - TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_SHELL_SIDE_ARM); } + TURN { MOVE(playerLeft, MOVE_SHELL_SIDE_ARM, target: opponentLeft); MOVE(opponentLeft, MOVE_MIRROR_COAT, target: opponentLeft); } + TURN { MOVE(playerRight, MOVE_SCREECH, target: opponentLeft); MOVE(playerLeft, MOVE_SHELL_SIDE_ARM, target: opponentLeft); MOVE(opponentLeft, MOVE_MIRROR_COAT, target: opponentLeft); } + TURN { MOVE(playerLeft, MOVE_SHELL_SIDE_ARM, target: opponentLeft); MOVE(opponentLeft, MOVE_MIRROR_COAT, target: opponentLeft); } } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_SIDE_ARM, player); - HP_BAR(opponent, captureDamage: &damage[0]); - ANIMATION(ANIM_TYPE_MOVE, MOVE_LIGHT_SCREEN, opponent); - ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_SIDE_ARM, player); - HP_BAR(opponent, captureDamage: &damage[1]); - ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_SIDE_ARM, player); - HP_BAR(opponent, captureDamage: &damage[2]); - } THEN { - EXPECT_EQ(damage[0], damage[1]); - EXPECT_EQ(damage[1], damage[2]); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_SIDE_ARM, playerLeft); + HP_BAR(opponentLeft); + NOT HP_BAR(playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCREECH, playerRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_SIDE_ARM, playerLeft); + HP_BAR(opponentLeft); + NOT HP_BAR(playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_SIDE_ARM, playerLeft); + HP_BAR(opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MIRROR_COAT, opponentLeft); + HP_BAR(playerLeft); } } @@ -77,24 +85,3 @@ DOUBLE_BATTLE_TEST("Shell Side Arm chooses its category for each battler on the HP_BAR(playerLeft); } } - -DOUBLE_BATTLE_TEST("Shell Side Arm does not change category mid-turn") -{ - GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Speed(10); Moves(MOVE_SHELL_SIDE_ARM); } - PLAYER(SPECIES_WOBBUFFET) { Speed(20); } - OPPONENT(SPECIES_WOBBUFFET) { Speed(30); Defense(200); SpDefense(190); } - OPPONENT(SPECIES_WOBBUFFET) { Speed(40); } - } WHEN { - TURN { MOVE(playerLeft, MOVE_SHELL_SIDE_ARM, target: opponentLeft); - MOVE(opponentRight, MOVE_LIGHT_SCREEN); - MOVE(opponentLeft, MOVE_MIRROR_COAT); - } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_LIGHT_SCREEN, opponentRight); - ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_SIDE_ARM, playerLeft); - HP_BAR(opponentLeft); - ANIMATION(ANIM_TYPE_MOVE, MOVE_MIRROR_COAT, opponentLeft); - HP_BAR(playerLeft); - } -} diff --git a/test/battle/move_effect/tera_starstorm.c b/test/battle/move_effect/tera_starstorm.c index 3077b38df9..c1d8794576 100644 --- a/test/battle/move_effect/tera_starstorm.c +++ b/test/battle/move_effect/tera_starstorm.c @@ -40,23 +40,26 @@ DOUBLE_BATTLE_TEST("Tera Starstorm targets both opponents in a double battle if } } -SINGLE_BATTLE_TEST("Tera Starstorm becomes a physical move if the user is Terapagos-Stellar, is Terastallized, and has a higher Attack stat", s16 damage) +SINGLE_BATTLE_TEST("Tera Starstorm becomes a physical move if the user is Terapagos-Stellar, is Terastallized, and has a higher Attack stat") { - bool32 tera; - PARAMETRIZE { tera = GIMMICK_NONE; } - PARAMETRIZE { tera = GIMMICK_TERA; } GIVEN { + ASSUME(GetMoveEffect(MOVE_COUNTER) == EFFECT_COUNTER); + ASSUME(GetMoveEffect(MOVE_MIRROR_COAT) == EFFECT_MIRROR_COAT); ASSUME(GetMoveCategory(MOVE_TERA_STARSTORM) == DAMAGE_CATEGORY_SPECIAL); PLAYER(SPECIES_TERAPAGOS_STELLAR) { Attack(100); SpAttack(50); } OPPONENT(SPECIES_WOBBUFFET) { Defense(200); SpDefense(200); } } WHEN { - TURN { MOVE(player, MOVE_TERA_STARSTORM, gimmick: tera); } + TURN { MOVE(player, MOVE_TERA_STARSTORM); MOVE(opponent, MOVE_MIRROR_COAT); } + TURN { MOVE(player, MOVE_TERA_STARSTORM, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_COUNTER); } } SCENE { MESSAGE("Terapagos used Tera Starstorm!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_STARSTORM, player); - HP_BAR(opponent, captureDamage: &results[i].damage); - } FINALLY { - EXPECT_MUL_EQ(results[0].damage, UQ_4_12(2.5), results[1].damage); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MIRROR_COAT, opponent); + HP_BAR(player); + MESSAGE("Terapagos used Tera Starstorm!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_STARSTORM, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_COUNTER, opponent); + HP_BAR(player); } } From cf9ee2caeec8ca68768920f007efb0abf01e654f Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Wed, 19 Mar 2025 12:46:23 +0000 Subject: [PATCH 069/115] Fixes Toxic Spikes Absorbed message (#6448) --- charmap.txt | 2 + include/battle_message.h | 2 + src/battle_message.c | 14 ++++++- test/battle/move_effect/hit_switch_target.c | 45 +++++++++++++++++++++ test/test_runner_battle.c | 5 +-- 5 files changed, 64 insertions(+), 4 deletions(-) diff --git a/charmap.txt b/charmap.txt index cd0972f84a..a35709d652 100644 --- a/charmap.txt +++ b/charmap.txt @@ -424,6 +424,8 @@ B_TRAINER1_NAME_WITH_CLASS = FD 42 B_TRAINER2_NAME_WITH_CLASS = FD 43 B_PARTNER_NAME_WITH_CLASS = FD 44 B_ATK_TRAINER_NAME_WITH_CLASS = FD 45 +B_SCR_TEAM1 = FD 46 +B_SCR_TEAM2 = FD 47 @ 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 adc399dd3c..18f80bb3fd 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -83,6 +83,8 @@ #define B_TXT_TRAINER2_NAME_WITH_CLASS 0x43 #define B_TXT_PARTNER_NAME_WITH_CLASS 0x44 #define B_TXT_ATK_TRAINER_NAME_WITH_CLASS 0x45 +#define B_TXT_SCR_TEAM1 0x46 +#define B_TXT_SCR_TEAM2 0x47 #define B_BUFF_STRING 0 #define B_BUFF_NUMBER 1 diff --git a/src/battle_message.c b/src/battle_message.c index c463474d40..995f7756c6 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -636,7 +636,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_PROTEANTYPECHANGE] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY} transformed it into the {B_BUFF1} type!"), [STRINGID_SYMBIOSISITEMPASS] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} passed its {B_LAST_ITEM} to {B_EFF_NAME_WITH_PREFIX2} through {B_LAST_ABILITY}!"), [STRINGID_STEALTHROCKDMG] = COMPOUND_STRING("Pointed stones dug into {B_SCR_NAME_WITH_PREFIX2}!"), - [STRINGID_TOXICSPIKESABSORBED] = COMPOUND_STRING("The poison spikes disappeared from the ground around {B_ATK_TEAM2} team!"), + [STRINGID_TOXICSPIKESABSORBED] = COMPOUND_STRING("The poison spikes disappeared from the ground around {B_SCR_TEAM2} team!"), [STRINGID_TOXICSPIKESPOISONED] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} was poisoned!"), [STRINGID_STICKYWEBSWITCHIN] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} was caught in a sticky web!"), [STRINGID_HEALINGWISHCAMETRUE] = COMPOUND_STRING("The healing wish came true for {B_ATK_NAME_WITH_PREFIX2}!"), @@ -3112,6 +3112,18 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize) else toCpy = sText_Opposing2; break; + case B_TXT_SCR_TEAM1: + if (GetBattlerSide(gBattleScripting.battler) == B_SIDE_PLAYER) + toCpy = sText_Your1; + else + toCpy = sText_Opposing1; + break; + case B_TXT_SCR_TEAM2: + if (GetBattlerSide(gBattleScripting.battler) == B_SIDE_PLAYER) + toCpy = sText_Your2; + else + toCpy = sText_Opposing2; + break; case B_TXT_ATK_NAME_WITH_PREFIX2: HANDLE_NICKNAME_STRING_LOWERCASE(gBattlerAttacker) break; diff --git a/test/battle/move_effect/hit_switch_target.c b/test/battle/move_effect/hit_switch_target.c index 61c92d227e..e0d6548ec3 100644 --- a/test/battle/move_effect/hit_switch_target.c +++ b/test/battle/move_effect/hit_switch_target.c @@ -119,3 +119,48 @@ SINGLE_BATTLE_TEST("Dragon Tail effect fails against target with Suction Cups") NOT MESSAGE("The opposing Charmander was dragged out!"); } } + +SINGLE_BATTLE_TEST("Dragon Tail switches target out and incoming mon has Immunity negated by Mold Breaker") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_TOXIC_SPIKES) == EFFECT_TOXIC_SPIKES); + PLAYER(SPECIES_PANCHAM) { Ability(ABILITY_MOLD_BREAKER); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_SNORLAX) { Ability(ABILITY_IMMUNITY); } + } WHEN { + TURN { MOVE(player, MOVE_TOXIC_SPIKES); } + TURN { MOVE(player, MOVE_DRAGON_TAIL); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, player); + HP_BAR(opponent); + MESSAGE("The opposing Snorlax was dragged out!"); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + STATUS_ICON(opponent, poison: TRUE); + } +} + +SINGLE_BATTLE_TEST("Dragon Tail switches target out and incoming mon has Levitate negated by Mold Breaker") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_TOXIC_SPIKES) == EFFECT_TOXIC_SPIKES); + ASSUME(GetMoveEffect(MOVE_SPIKES) == EFFECT_SPIKES); + ASSUME(gSpeciesInfo[SPECIES_WEEZING].types[0] == TYPE_POISON || gSpeciesInfo[SPECIES_WEEZING].types[1] == TYPE_POISON); + PLAYER(SPECIES_PANCHAM) { Ability(ABILITY_MOLD_BREAKER); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WEEZING) { Ability(ABILITY_LEVITATE); } + } WHEN { + TURN { MOVE(player, MOVE_TOXIC_SPIKES); } + TURN { MOVE(player, MOVE_SPIKES); } + TURN { MOVE(player, MOVE_DRAGON_TAIL); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, player); + HP_BAR(opponent); + MESSAGE("The opposing Weezing was dragged out!"); + HP_BAR(opponent); + NOT STATUS_ICON(opponent, poison: TRUE); + MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); + } +} diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 40e8b31f41..1c137558a4 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -2038,8 +2038,7 @@ s32 MoveGetTarget(s32 battlerId, u32 moveId, struct MoveContext *ctx, u32 source || move->target == MOVE_TARGET_BOTH || move->target == MOVE_TARGET_DEPENDS || move->target == MOVE_TARGET_FOES_AND_ALLY - || move->target == MOVE_TARGET_OPPONENTS_FIELD - || move->target == MOVE_TARGET_ALL_BATTLERS) + || move->target == MOVE_TARGET_OPPONENTS_FIELD) { target = BATTLE_OPPOSITE(battlerId); } @@ -2053,7 +2052,7 @@ s32 MoveGetTarget(s32 battlerId, u32 moveId, struct MoveContext *ctx, u32 source target = BATTLE_OPPOSITE(battlerId); } - else if (move->target == MOVE_TARGET_USER) + else if (move->target == MOVE_TARGET_USER || move->target == MOVE_TARGET_ALL_BATTLERS) { target = battlerId; } From 21f1b3bf9d7665d5c05fab560e8517c47b55bd3d Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Wed, 19 Mar 2025 13:56:58 +0100 Subject: [PATCH 070/115] Refactor HasWeatherEffect and IsUnnerveAbilityOnOpposingSide (#6441) --- src/battle_util.c | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 423165cdfc..c2d5f61563 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -11420,10 +11420,24 @@ static bool32 TryRemoveScreens(u32 battler) static bool32 IsUnnerveAbilityOnOpposingSide(u32 battler) { - if (IsAbilityOnOpposingSide(battler, ABILITY_UNNERVE) - || IsAbilityOnOpposingSide(battler, ABILITY_AS_ONE_ICE_RIDER) - || IsAbilityOnOpposingSide(battler, ABILITY_AS_ONE_SHADOW_RIDER)) - return TRUE; + for (u32 battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) + { + if (battler == battlerDef || IsBattlerAlly(battler, battlerDef)) + continue; + + if (!IsBattlerAlive(battlerDef)) + continue; + + u32 ability = GetBattlerAbility(battlerDef); + switch (ability) + { + case ABILITY_UNNERVE: + case ABILITY_AS_ONE_ICE_RIDER: + case ABILITY_AS_ONE_SHADOW_RIDER: + return TRUE; + } + } + return FALSE; } @@ -12304,7 +12318,19 @@ void ClearPursuitValuesIfSet(u32 battler) bool32 HasWeatherEffect(void) { - if (IsAbilityOnField(ABILITY_CLOUD_NINE) || IsAbilityOnField(ABILITY_AIR_LOCK)) - return FALSE; + for (u32 battler = 0; battler < gBattlersCount; battler++) + { + if (!IsBattlerAlive(battler)) + continue; + + u32 ability = GetBattlerAbility(battler); + switch (ability) + { + case ABILITY_CLOUD_NINE: + case ABILITY_AIR_LOCK: + return FALSE; + } + } + return TRUE; } From 8dfd3bd27883d1cc643890bab684ecc48e05c86b Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Wed, 19 Mar 2025 13:57:48 +0100 Subject: [PATCH 071/115] Fixes Magic Coat message when move is bounced back (#6419) Co-authored-by: Bassoonian --- src/battle_script_commands.c | 1 + test/battle/move_effect/magic_coat.c | 16 +++++++++++++--- test/battle/sleep_clause.c | 2 +- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 937c007acd..7c6b95352d 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1240,6 +1240,7 @@ static void Cmd_attackcanceler(void) ClearDamageCalcResults(); SetAtkCancellerForCalledMove(); + gEffectBattler = gBattlerTarget; if (BlocksPrankster(gCurrentMove, gBattlerTarget, gBattlerAttacker, TRUE)) { // Opponent used a prankster'd magic coat -> reflected status move should fail against a dark-type attacker diff --git a/test/battle/move_effect/magic_coat.c b/test/battle/move_effect/magic_coat.c index 561d15a532..343322408d 100644 --- a/test/battle/move_effect/magic_coat.c +++ b/test/battle/move_effect/magic_coat.c @@ -11,13 +11,23 @@ SINGLE_BATTLE_TEST("Magic Coat prints the correct message when bouncing back a m GIVEN { ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_SLEEP); PLAYER(SPECIES_ZIGZAGOON); - OPPONENT(SPECIES_WYNAUT); + PLAYER(SPECIES_ZIGZAGOON); + OPPONENT(SPECIES_ZIGZAGOON); + OPPONENT(SPECIES_ZIGZAGOON); } WHEN { TURN { MOVE(player, MOVE_MAGIC_COAT); MOVE(opponent, MOVE_SPORE); } + TURN { SWITCH(opponent, 1); } + TURN { MOVE(player, MOVE_MAGIC_COAT); MOVE(opponent, MOVE_SPORE); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_MAGIC_COAT, player); - MESSAGE("Zigzagoon bounced the Spore back!");; - MESSAGE("The opposing Wynaut fell asleep!"); + MESSAGE("Zigzagoon bounced the Spore back!"); + MESSAGE("The opposing Zigzagoon fell asleep!"); + STATUS_ICON(opponent, sleep: TRUE); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MAGIC_COAT, player); + MESSAGE("Zigzagoon bounced the Spore back!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPORE, player); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, opponent); + MESSAGE("The opposing Zigzagoon fell asleep!"); STATUS_ICON(opponent, sleep: TRUE); } } diff --git a/test/battle/sleep_clause.c b/test/battle/sleep_clause.c index bb967020ac..678accb585 100644 --- a/test/battle/sleep_clause.c +++ b/test/battle/sleep_clause.c @@ -1517,7 +1517,7 @@ SINGLE_BATTLE_TEST("Sleep Clause: Reflection moves (ie. Magic Coat) fail if slee MESSAGE("The opposing Zigzagoon fell asleep!"); STATUS_ICON(opponent, sleep: TRUE); ANIMATION(ANIM_TYPE_MOVE, MOVE_MAGIC_COAT, player); - MESSAGE("The opposing Zigzagoon bounced the Spore back!"); // Should be MESSAGE("Zigzagoon bounced the Spore back!"); Issue #5579 https://github.com/rh-hideout/pokeemerald-expansion/issues/5579 + MESSAGE("Zigzagoon bounced the Spore back!"); MESSAGE("Sleep Clause kept the opposing Zigzagoon awake!"); } } From 4c4d043c134491f8a9031233ee816e1d1c30123e Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Wed, 19 Mar 2025 16:09:36 +0100 Subject: [PATCH 072/115] Refactor the function IsAbilityPreventingEscape (#6439) Co-authored-by: Bassoonian --- include/config/battle.h | 2 +- src/battle_util.c | 25 +++++++++++++++++-------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/include/config/battle.h b/include/config/battle.h index cffa3701b3..6a410f6ee0 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -230,7 +230,7 @@ #define B_OVERWORLD_FOG GEN_LATEST // In Gen8+, overworld Fog summons Misty Terrain in battle. In Gen4 only, overworld Fog summons the unique fog weather condition in battle. #define B_OVERWORLD_SNOW GEN_LATEST // In Gen9+, overworld Snow will summon snow instead of hail in battle. #define B_SNOW_WARNING GEN_LATEST // In Gen9+, Snow Warning will summon snow instead of hail. -#define B_PREFERRED_ICE_WEATHER B_ICE_WEATHER_BOTH // Toggles Hail move effects to Snow and vis versa. +#define B_PREFERRED_ICE_WEATHER B_ICE_WEATHER_BOTH // Toggles Hail move effects to Snow and vice versa. // Terrain settings #define B_TERRAIN_BG_CHANGE TRUE // If set to TRUE, terrain moves permanently change the default battle background until the effect fades. diff --git a/src/battle_util.c b/src/battle_util.c index c2d5f61563..c1a7d99d66 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -6755,16 +6755,25 @@ u32 IsAbilityOnFieldExcept(u32 battler, u32 ability) u32 IsAbilityPreventingEscape(u32 battler) { - u32 id; if (B_GHOSTS_ESCAPE >= GEN_6 && IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) return 0; - if ((id = IsAbilityOnOpposingSide(battler, ABILITY_SHADOW_TAG)) - && (B_SHADOW_TAG_ESCAPE >= GEN_4 && GetBattlerAbility(battler) != ABILITY_SHADOW_TAG)) - return id; - if ((id = IsAbilityOnOpposingSide(battler, ABILITY_ARENA_TRAP)) && IsBattlerGrounded(battler)) - return id; - if ((id = IsAbilityOnOpposingSide(battler, ABILITY_MAGNET_PULL)) && IS_BATTLER_OF_TYPE(battler, TYPE_STEEL)) - return id; + + for (u32 battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) + { + if (battler == battlerDef || IsBattlerAlly(battler, battlerDef)) + continue; + + u32 ability = GetBattlerAbility(battlerDef); + + if (ability == ABILITY_SHADOW_TAG && (B_SHADOW_TAG_ESCAPE <= GEN_3 || GetBattlerAbility(battler) != ABILITY_SHADOW_TAG)) + return battlerDef + 1; + + if (ability == ABILITY_ARENA_TRAP && IsBattlerGrounded(battler)) + return battlerDef + 1; + + if (ability == ABILITY_MAGNET_PULL && IS_BATTLER_OF_TYPE(battler, TYPE_STEEL)) + return battlerDef + 1; + } return 0; } From adc2c61fe8427dfc206eab5bbbe17f96d484fd0a Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Wed, 19 Mar 2025 23:06:08 +0100 Subject: [PATCH 073/115] Unifies dynamic move category checks (#6443) --- asm/macros/battle_script.inc | 6 +--- data/battle_scripts_1.s | 4 --- include/battle_scripts.h | 1 - include/battle_util.h | 3 +- src/battle_ai_util.c | 36 +++++------------------ src/battle_script_commands.c | 26 +--------------- src/battle_util.c | 54 +++++++++++++++++++++++++++------- src/data/battle_move_effects.h | 6 ++-- src/move_relearner.c | 2 +- src/pokedex_plus_hgss.c | 4 +-- src/pokemon_summary_screen.c | 22 +++++++------- 11 files changed, 72 insertions(+), 92 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 3804e64240..fb513b7d0a 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1641,10 +1641,6 @@ callnative BS_TryTriggerStatusForm .endm - .macro setdynamicmovecategory - callnative BS_SetDynamicMoveCategory - .endm - .macro tryupperhand failInstr:req callnative BS_TryUpperHand .4byte \failInstr @@ -2382,7 +2378,7 @@ callnative BS_SwapStats .byte \stat .endm - + .macro restoresavedmove callnative BS_RestoreSavedMove .endm diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index aeb3f610d7..5a421fa5fc 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -840,10 +840,6 @@ BattleScript_FlingMissed: ppreduce goto BattleScript_MoveMissedPause -BattleScript_EffectDynamicCategory:: - setdynamicmovecategory - goto BattleScript_EffectHit - BattleScript_EffectAuraWheel:: @ Aura Wheel can only be used by Morpeko jumpifspecies BS_ATTACKER, SPECIES_MORPEKO_FULL_BELLY, BattleScript_EffectHit jumpifspecies BS_ATTACKER, SPECIES_MORPEKO_HANGRY, BattleScript_EffectHit diff --git a/include/battle_scripts.h b/include/battle_scripts.h index ffa18d0343..d1d2ea5df0 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -825,7 +825,6 @@ extern const u8 BattleScript_MoveEffectHaze[]; extern const u8 BattleScript_MoveEffectIonDeluge[]; extern const u8 BattleScript_EffectHyperspaceFury[]; extern const u8 BattleScript_EffectAuraWheel[]; -extern const u8 BattleScript_EffectDynamicCategory[]; extern const u8 BattleScript_EffectNoRetreat[]; extern const u8 BattleScript_EffectTarShot[]; extern const u8 BattleScript_EffectPoltergeist[]; diff --git a/include/battle_util.h b/include/battle_util.h index 37588d246d..cdbca9d299 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -277,7 +277,8 @@ struct Pokemon *GetIllusionMonPtr(u32 battler); void ClearIllusionMon(u32 battler); bool32 SetIllusionMon(struct Pokemon *mon, u32 battler); bool32 ShouldGetStatBadgeBoost(u16 flagId, u32 battler); -u8 GetBattleMoveCategory(u32 moveId); +u32 GetBattleMoveCategory(u32 move); +void SetDynamicMoveCategory(u32 battlerAtk, u32 battlerDef, u32 move); bool32 CanFling(u32 battler); bool32 IsTelekinesisBannedSpecies(u16 species); bool32 IsHealBlockPreventingMove(u32 battler, u32 move); diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 22da0d931b..fb0a68c04b 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -40,8 +40,8 @@ static bool32 AI_IsDoubleSpreadMove(u32 battlerAtk, u32 move) if (moveTargetType == MOVE_TARGET_BOTH && battlerAtk == BATTLE_PARTNER(battlerDef)) continue; - if (IsBattlerAlive(battlerDef) && !IsSemiInvulnerable(battlerDef, move)) - numOfTargets++; + if (IsBattlerAlive(battlerDef) && !IsSemiInvulnerable(battlerDef, move)) + numOfTargets++; } if (numOfTargets > 1) @@ -534,28 +534,6 @@ static inline s32 GetDamageByRollType(s32 dmg, enum DamageRollType rollType) return DmgRoll(dmg); } -static inline void SetMoveDamageCategory(u32 battlerAtk, u32 battlerDef, u32 move) -{ - switch (GetMoveEffect(move)) - { - case EFFECT_PHOTON_GEYSER: - gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(battlerAtk) == DAMAGE_CATEGORY_PHYSICAL); - break; - case EFFECT_SHELL_SIDE_ARM: - if (gBattleStruct->shellSideArmCategory[battlerAtk][battlerDef] == DAMAGE_CATEGORY_PHYSICAL) - gBattleStruct->swapDamageCategory = TRUE; - break; - case EFFECT_TERA_BLAST: - if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA) - gBattleStruct->swapDamageCategory = GetCategoryBasedOnStats(battlerAtk) == DAMAGE_CATEGORY_PHYSICAL; - break; - case EFFECT_TERA_STARSTORM: - if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA && GET_BASE_SPECIES_ID(GetMonData(GetPartyBattlerData(battlerAtk), MON_DATA_SPECIES)) == SPECIES_TERAPAGOS) - gBattleStruct->swapDamageCategory = GetCategoryBasedOnStats(battlerAtk) == DAMAGE_CATEGORY_PHYSICAL; - break; - } -} - static inline s32 SetFixedMoveBasePower(u32 battlerAtk, u32 move) { s32 fixedBasePower = 0, n = 0; @@ -669,17 +647,17 @@ static inline void CalcDynamicMoveDamage(struct DamageCalculationData *damageCal minimum *= strikeCount; maximum *= strikeCount; } - - if (abilityAtk == ABILITY_PARENTAL_BOND + + if (abilityAtk == ABILITY_PARENTAL_BOND && !strikeCount - && effect != EFFECT_TRIPLE_KICK + && effect != EFFECT_TRIPLE_KICK && effect != EFFECT_MULTI_HIT && !AI_IsDoubleSpreadMove(damageCalcData->battlerAtk, move)) { median += median / (B_PARENTAL_BOND_DMG >= GEN_7 ? 4 : 2); minimum += minimum / (B_PARENTAL_BOND_DMG >= GEN_7 ? 4 : 2); maximum += maximum / (B_PARENTAL_BOND_DMG >= GEN_7 ? 4 : 2); - } + } if (median == 0) median = 1; @@ -742,7 +720,7 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u SetActiveGimmick(battlerAtk, gBattleStruct->gimmick.usableGimmick[battlerAtk]); } - SetMoveDamageCategory(battlerAtk, battlerDef, move); + SetDynamicMoveCategory(battlerAtk, battlerDef, move); SetTypeBeforeUsingMove(move, battlerAtk); moveType = GetBattleMoveType(move); effectivenessMultiplier = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, aiData->abilities[battlerDef], FALSE); diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index a1623c8b4b..656965a532 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1996,9 +1996,7 @@ static void Cmd_critcalc(void) static inline void CalculateAndSetMoveDamage(struct DamageCalculationData *damageCalcData, u32 battlerDef) { - if (GetMoveEffect(gCurrentMove) == EFFECT_SHELL_SIDE_ARM) - gBattleStruct->swapDamageCategory = (gBattleStruct->shellSideArmCategory[gBattlerAttacker][battlerDef] != GetMoveCategory(gCurrentMove)); - + SetDynamicMoveCategory(gBattlerAttacker, battlerDef, gCurrentMove); damageCalcData->battlerDef = battlerDef; damageCalcData->isCrit = gSpecialStatuses[battlerDef].criticalHit; gBattleStruct->moveDamage[battlerDef] = CalculateMoveDamage(damageCalcData, 0); @@ -17712,28 +17710,6 @@ void BS_AllySwitchFailChance(void) gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_SetDynamicMoveCategory(void) -{ - NATIVE_ARGS(); - - switch (GetMoveEffect(gCurrentMove)) - { - case EFFECT_TERA_BLAST: - if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA) - gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(gBattlerAttacker) != GetMoveCategory(gCurrentMove)); - break; - case EFFECT_TERA_STARSTORM: - if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA && gBattleMons[gBattlerAttacker].species == SPECIES_TERAPAGOS_STELLAR) - gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(gBattlerAttacker) != GetMoveCategory(gCurrentMove)); - break; - default: - gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(gBattlerAttacker) != GetMoveCategory(gCurrentMove)); - break; - } - - gBattlescriptCurrInstr = cmd->nextInstr; -} - void BS_RunStatChangeItems(void) { NATIVE_ARGS(u8 battler); diff --git a/src/battle_util.c b/src/battle_util.c index c1a7d99d66..e88e476937 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -11390,18 +11390,52 @@ static u32 SwapMoveDamageCategory(u32 move) return DAMAGE_CATEGORY_PHYSICAL; } -u8 GetBattleMoveCategory(u32 moveId) +/* + The Global States gBattleStruct->categoryOverride and gBattleStruct->swapDamageCategory + can be removed but a lot of function arguments (battlerAtk and battlerDef) have to be added for this, about 50+. + This is potentially a good change because it is less likely to cause bugs in the future. +*/ +u32 GetBattleMoveCategory(u32 move) { - 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. - return gBattleStruct->categoryOverride; - if (B_PHYSICAL_SPECIAL_SPLIT >= GEN_4) - return GetMoveCategory(moveId); + if (gMain.inBattle) + { + if (gBattleStruct->swapDamageCategory) // Photon Geyser, Shell Side Arm, Light That Burns the Sky, Tera Blast + return SwapMoveDamageCategory(move); + if (IsZMove(move) || IsMaxMove(move)) // TODO: Might be buggy depending on when this is called. + return gBattleStruct->categoryOverride; + if (IsBattleMoveStatus(move)) + return DAMAGE_CATEGORY_STATUS; + } - if (IsBattleMoveStatus(moveId)) - return DAMAGE_CATEGORY_STATUS; - return gTypesInfo[GetBattleMoveType(moveId)].damageCategory; + if (B_PHYSICAL_SPECIAL_SPLIT <= GEN_4) + return gTypesInfo[GetBattleMoveType(move)].damageCategory; + + return GetMoveCategory(move); +} + +void SetDynamicMoveCategory(u32 battlerAtk, u32 battlerDef, u32 move) +{ + switch (GetMoveEffect(move)) + { + case EFFECT_PHOTON_GEYSER: + gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(battlerAtk) == DAMAGE_CATEGORY_PHYSICAL); + break; + case EFFECT_SHELL_SIDE_ARM: + if (gBattleStruct->shellSideArmCategory[battlerAtk][battlerDef] == DAMAGE_CATEGORY_PHYSICAL) + gBattleStruct->swapDamageCategory = TRUE; + break; + case EFFECT_TERA_BLAST: + if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA) + gBattleStruct->swapDamageCategory = GetCategoryBasedOnStats(battlerAtk) == DAMAGE_CATEGORY_PHYSICAL; + break; + case EFFECT_TERA_STARSTORM: + if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA && GET_BASE_SPECIES_ID(GetMonData(GetPartyBattlerData(battlerAtk), MON_DATA_SPECIES)) == SPECIES_TERAPAGOS) + gBattleStruct->swapDamageCategory = GetCategoryBasedOnStats(battlerAtk) == DAMAGE_CATEGORY_PHYSICAL; + break; + default: + gBattleStruct->swapDamageCategory = FALSE; + break; + } } static bool32 TryRemoveScreens(u32 battler) diff --git a/src/data/battle_move_effects.h b/src/data/battle_move_effects.h index cf9814ac02..993580b101 100644 --- a/src/data/battle_move_effects.h +++ b/src/data/battle_move_effects.h @@ -1909,7 +1909,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_PHOTON_GEYSER] = { - .battleScript = BattleScript_EffectDynamicCategory, + .battleScript = BattleScript_EffectHit, .battleTvScore = 0, // TODO: Assign points }, @@ -2201,13 +2201,13 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_TERA_BLAST] = { - .battleScript = BattleScript_EffectDynamicCategory, + .battleScript = BattleScript_EffectHit, .battleTvScore = 0, // TODO: Assign points }, [EFFECT_TERA_STARSTORM] = { - .battleScript = BattleScript_EffectDynamicCategory, + .battleScript = BattleScript_EffectHit, .battleTvScore = 0, // TODO: Assign points }, diff --git a/src/move_relearner.c b/src/move_relearner.c index 7d3b61213c..8ed5e24375 100644 --- a/src/move_relearner.c +++ b/src/move_relearner.c @@ -735,7 +735,7 @@ static void DoMoveRelearnerMain(void) { u16 moveId = GetMonData(&gPlayerParty[sMoveRelearnerStruct->partyMon], MON_DATA_MOVE1 + sMoveRelearnerStruct->moveSlot); u8 originalPP = GetMonData(&gPlayerParty[sMoveRelearnerStruct->partyMon], MON_DATA_PP1 + sMoveRelearnerStruct->moveSlot); - + StringCopy(gStringVar3, GetMoveName(moveId)); RemoveMonPPBonus(&gPlayerParty[sMoveRelearnerStruct->partyMon], sMoveRelearnerStruct->moveSlot); SetMonMoveSlot(&gPlayerParty[sMoveRelearnerStruct->partyMon], GetCurrentSelectedMove(), sMoveRelearnerStruct->moveSlot); diff --git a/src/pokedex_plus_hgss.c b/src/pokedex_plus_hgss.c index 3c14080614..0a1c162ab1 100644 --- a/src/pokedex_plus_hgss.c +++ b/src/pokedex_plus_hgss.c @@ -5295,7 +5295,7 @@ static void PrintStatsScreen_Moves_Bottom(u8 taskId) PrintStatsScreenTextSmall(WIN_STATS_MOVES_BOTTOM, gStringVar1, moves_x + 45, moves_y); //Physical/Special/Status Category DestroyCategoryIcon(); - ShowCategoryIcon(GetBattleMoveCategory(move)); + ShowCategoryIcon(GetMoveCategory(move)); //Accuracy u32 accuracy = GetMoveAccuracy(move); if (accuracy == 0) @@ -6158,7 +6158,7 @@ static void Task_HandleEvolutionScreenInput(u8 taskId) u16 dexNum = SpeciesToNationalPokedexNum(targetSpecies); if (sPokedexView->isSearchResults && sPokedexView->originalSearchSelectionNum == 0) sPokedexView->originalSearchSelectionNum = sPokedexListItem->dexNum; - + sPokedexListItem->dexNum = dexNum; sPokedexListItem->seen = GetSetPokedexFlag(dexNum, FLAG_GET_SEEN); sPokedexListItem->owned = GetSetPokedexFlag(dexNum, FLAG_GET_CAUGHT); diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 3636d2f0ae..2e0e015a2a 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -1720,7 +1720,7 @@ static void Task_HandleInput(u8 taskId) PlaySE(SE_SELECT); BeginCloseSummaryScreen(taskId); } - else if (sMonSummaryScreen->currPageIndex == PSS_PAGE_BATTLE_MOVES + else if (sMonSummaryScreen->currPageIndex == PSS_PAGE_BATTLE_MOVES || sMonSummaryScreen->currPageIndex == PSS_PAGE_CONTEST_MOVES) { PlaySE(SE_SELECT); @@ -1773,7 +1773,7 @@ static u8 IncrementSkillsStatsMode(u8 mode) sMonSummaryScreen->skillsPageMode = SUMMARY_SKILLS_MODE_EVS; return SUMMARY_SKILLS_MODE_EVS; } - else + else { sMonSummaryScreen->skillsPageMode = SUMMARY_SKILLS_MODE_IVS; return SUMMARY_SKILLS_MODE_IVS; @@ -1956,7 +1956,7 @@ static void Task_ChangeSummaryMon(u8 taskId) if (P_SUMMARY_SCREEN_RENAME && sMonSummaryScreen->currPageIndex == PSS_PAGE_INFO) ShowUtilityPrompt(SUMMARY_MODE_NORMAL); if (ShouldShowIvEvPrompt() && sMonSummaryScreen->currPageIndex == PSS_PAGE_SKILLS) - { + { sMonSummaryScreen->skillsPageMode = SUMMARY_SKILLS_MODE_STATS; ChangeStatLabel(SUMMARY_SKILLS_MODE_STATS); } @@ -2108,7 +2108,7 @@ static void ChangePage(u8 taskId, s8 delta) CreateTextPrinterTask(sMonSummaryScreen->currPageIndex); HidePageSpecificSprites(); - if (sMonSummaryScreen->currPageIndex == PSS_PAGE_SKILLS + if (sMonSummaryScreen->currPageIndex == PSS_PAGE_SKILLS || (sMonSummaryScreen->currPageIndex + delta) == PSS_PAGE_SKILLS) { struct Pokemon *mon = &sMonSummaryScreen->currentMon; @@ -2244,7 +2244,7 @@ static void SwitchToMoveSelection(u8 taskId) { if (ShouldShowMoveRelearner()) ClearWindowTilemap(PSS_LABEL_WINDOW_PROMPT_RELEARN); - + ShowUtilityPrompt(SUMMARY_MODE_SELECT_MOVE); } else @@ -3774,10 +3774,10 @@ static void BufferStat(u8 *dst, u8 statIndex, u32 stat, u32 strId, u32 n) else txtPtr = StringCopy(dst, sTextNatureNeutral); - if (!P_SUMMARY_SCREEN_IV_EV_VALUES + if (!P_SUMMARY_SCREEN_IV_EV_VALUES && sMonSummaryScreen->skillsPageMode == SUMMARY_SKILLS_MODE_IVS) StringAppend(dst, GetLetterGrade(stat)); - else + else ConvertIntToDecimalStringN(txtPtr, stat, STR_CONV_MODE_RIGHT_ALIGN, n); DynamicPlaceholderTextUtil_SetPlaceholderPtr(strId, dst); @@ -3791,7 +3791,7 @@ static const u8 *GetLetterGrade(u32 stat) static const u8 gText_GradeB[] = _("B"); static const u8 gText_GradeA[] = _("A"); static const u8 gText_GradeS[] = _("S"); - + if (stat > 0 && stat <= 15) return gText_GradeD; else if (stat > 15 && stat <= 25) @@ -3833,7 +3833,7 @@ static void BufferLeftColumnIvEvStats(void) u8 *hpIvEvString = Alloc(20); u8 *attackIvEvString = Alloc(20); u8 *defenseIvEvString = Alloc(20); - + DynamicPlaceholderTextUtil_Reset(); BufferStat(hpIvEvString, STAT_HP, sMonSummaryScreen->summary.currentHP, 0, 7); @@ -3850,7 +3850,7 @@ static void BufferLeftColumnIvEvStats(void) static void PrintLeftColumnStats(void) { int x; - + if (sMonSummaryScreen->skillsPageMode == SUMMARY_SKILLS_MODE_IVS && !P_SUMMARY_SCREEN_IV_EV_VALUES) x = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 46); else @@ -3873,7 +3873,7 @@ static void BufferRightColumnStats(void) static void PrintRightColumnStats(void) { int x; - + if (sMonSummaryScreen->skillsPageMode == SUMMARY_SKILLS_MODE_IVS && !P_SUMMARY_SCREEN_IV_EV_VALUES) x = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 20); else From 5c05715585347f77d1b86366bf1de93ddd5e06f8 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Thu, 20 Mar 2025 10:12:37 +0100 Subject: [PATCH 074/115] Adds move description battle config (#6364) --- include/config/battle.h | 3 +++ src/battle_controller_player.c | 24 +++++++++++++++--------- src/battle_interface.c | 5 ++++- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/include/config/battle.h b/include/config/battle.h index bacdc770d9..8ef347cdcd 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -221,6 +221,9 @@ // Ingame partner flag #define B_SHOW_PARTNER_TARGET FALSE // Shows the battler partner will target. +// Move description menu +#define B_SHOW_MOVE_DESCRIPTION TRUE // Shows move information in battler + // Terrain settings #define B_TERRAIN_BG_CHANGE TRUE // If set to TRUE, terrain moves permanently change the default battle background until the effect fades. #define B_THUNDERSTORM_TERRAIN TRUE // If TRUE, overworld Thunderstorm generates Rain and Electric Terrain as in Gen 8. diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index b84b87d0ed..96404e031e 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -86,6 +86,7 @@ static void MoveSelectionDisplayPpNumber(u32 battler); static void MoveSelectionDisplayPpString(u32 battler); static void MoveSelectionDisplayMoveType(u32 battler); static void MoveSelectionDisplayMoveNames(u32 battler); +static void TryMoveSelectionDisplayMoveDescription(u32 battler); static void MoveSelectionDisplayMoveDescription(u32 battler); static void SwitchIn_HandleSoundAndEnd(u32 battler); static void WaitForMonSelection(u32 battler); @@ -786,8 +787,7 @@ void HandleInputChooseMove(u32 battler) MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); MoveSelectionDisplayPpNumber(battler); MoveSelectionDisplayMoveType(battler); - if (gBattleStruct->descriptionSubmenu) - MoveSelectionDisplayMoveDescription(battler); + TryMoveSelectionDisplayMoveDescription(battler); TryChangeZTrigger(battler, gMoveSelectionCursor[battler]); } } @@ -802,8 +802,7 @@ void HandleInputChooseMove(u32 battler) MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); MoveSelectionDisplayPpNumber(battler); MoveSelectionDisplayMoveType(battler); - if (gBattleStruct->descriptionSubmenu) - MoveSelectionDisplayMoveDescription(battler); + TryMoveSelectionDisplayMoveDescription(battler); TryChangeZTrigger(battler, gMoveSelectionCursor[battler]); } } @@ -817,8 +816,7 @@ void HandleInputChooseMove(u32 battler) MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); MoveSelectionDisplayPpNumber(battler); MoveSelectionDisplayMoveType(battler); - if (gBattleStruct->descriptionSubmenu) - MoveSelectionDisplayMoveDescription(battler); + TryMoveSelectionDisplayMoveDescription(battler); TryChangeZTrigger(battler, gMoveSelectionCursor[battler]); } } @@ -833,8 +831,7 @@ void HandleInputChooseMove(u32 battler) MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); MoveSelectionDisplayPpNumber(battler); MoveSelectionDisplayMoveType(battler); - if (gBattleStruct->descriptionSubmenu) - MoveSelectionDisplayMoveDescription(battler); + TryMoveSelectionDisplayMoveDescription(battler); TryChangeZTrigger(battler, gMoveSelectionCursor[battler]); } } @@ -876,7 +873,7 @@ void HandleInputChooseMove(u32 battler) else if (JOY_NEW(B_MOVE_DESCRIPTION_BUTTON)) { gBattleStruct->descriptionSubmenu = TRUE; - MoveSelectionDisplayMoveDescription(battler); + TryMoveSelectionDisplayMoveDescription(battler); } else if (JOY_NEW(START_BUTTON)) { @@ -1745,6 +1742,15 @@ static void MoveSelectionDisplayMoveType(u32 battler) BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_TYPE); } +static void TryMoveSelectionDisplayMoveDescription(u32 battler) +{ + if (!B_SHOW_MOVE_DESCRIPTION) + return; + + if (gBattleStruct->descriptionSubmenu) + MoveSelectionDisplayMoveDescription(battler); +} + static void MoveSelectionDisplayMoveDescription(u32 battler) { struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleResources->bufferA[battler][4]); diff --git a/src/battle_interface.c b/src/battle_interface.c index a0075e8bac..d20848f321 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -3042,6 +3042,9 @@ static void DestroyLastUsedBallGfx(struct Sprite *sprite) void TryToAddMoveInfoWindow(void) { + if (!B_SHOW_MOVE_DESCRIPTION) + return; + LoadSpritePalette(&sSpritePalette_AbilityPopUp); if (GetSpriteTileStartByTag(MOVE_INFO_WINDOW_TAG) == 0xFFFF) LoadSpriteSheet(&sSpriteSheet_MoveInfoWindow); @@ -3104,7 +3107,7 @@ static void SpriteCB_LastUsedBall(struct Sprite *sprite) } static void SpriteCB_MoveInfoWin(struct Sprite *sprite) -{ +{ if (sprite->sHide) { if (sprite->x != LAST_BALL_WIN_X_0) From 4c18e882824c9fcb8069d92221a20b87e965a23e Mon Sep 17 00:00:00 2001 From: Pawkkie <61265402+Pawkkie@users.noreply.github.com> Date: Thu, 20 Mar 2025 11:43:56 -0400 Subject: [PATCH 075/115] Improve "all moves bad" switching (#6453) --- include/config/ai.h | 3 ++ src/battle_ai_switch_items.c | 78 ++++++++++++++++++++--------------- test/battle/ai/ai_switching.c | 16 +++++++ 3 files changed, 64 insertions(+), 33 deletions(-) diff --git a/include/config/ai.h b/include/config/ai.h index b44fc46ba9..b94b04b665 100644 --- a/include/config/ai.h +++ b/include/config/ai.h @@ -44,6 +44,9 @@ #define SHOULD_SWITCH_REGENERATOR_PERCENTAGE 50 #define SHOULD_SWITCH_REGENERATOR_STATS_RAISED_PERCENTAGE 20 +// AI switchin considerations +#define ALL_MOVES_BAD_STATUS_MOVES_BAD FALSE // If the AI has no moves that affect the target, ShouldSwitchIfAllMovesBad can prompt a switch. Enabling this config will ignore status moves that can affect the target when making this decision. + // AI held item-based move scoring #define LOW_ACCURACY_THRESHOLD 75 // Moves with accuracy equal OR below this value are considered low accuracy diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 4be8605412..bd4dd88fd3 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -331,6 +331,38 @@ static bool32 ShouldSwitchIfTruant(u32 battler) return FALSE; } +static u32 FindMonWithMoveOfEffectiveness(u32 battler, u32 opposingBattler, uq4_12_t effectiveness) +{ + u32 move, i, j; + s32 firstId; + s32 lastId; // + 1 + struct Pokemon *party = NULL; + + // Get party information. + GetAIPartyIndexes(battler, &firstId, &lastId); + party = GetBattlerParty(battler); + + // Find a Pokémon in the party that has a super effective move. + for (i = firstId; i < lastId; i++) + { + if (!IsValidForBattle(&party[i])) + continue; + if (i == gBattlerPartyIndexes[battler]) + continue; + if (IsAceMon(battler, i)) + continue; + + for (j = 0; j < MAX_MON_MOVES; j++) + { + move = GetMonData(&party[i], MON_DATA_MOVE1 + j); + if (move != MOVE_NONE && AI_GetMoveEffectiveness(move, battler, opposingBattler) >= effectiveness && gMovesInfo[move].power != 0) + return SetSwitchinAndSwitch(battler, i); + } + } + + return FALSE; // There is not a single Pokémon in the party that has a move with this effectiveness threshold +} + static bool32 ShouldSwitchIfAllMovesBad(u32 battler) { u32 moveIndex; @@ -355,24 +387,27 @@ static bool32 ShouldSwitchIfAllMovesBad(u32 battler) for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) { aiMove = gBattleMons[battler].moves[moveIndex]; - if (AI_GetMoveEffectiveness(aiMove, battler, opposingBattler) > UQ_4_12(0.0) && aiMove != MOVE_NONE) + if (AI_GetMoveEffectiveness(aiMove, battler, opposingBattler) > UQ_4_12(0.0) && aiMove != MOVE_NONE + && (!ALL_MOVES_BAD_STATUS_MOVES_BAD || gMovesInfo[aiMove].power != 0)) // If using ALL_MOVES_BAD_STATUS_MOVES_BAD, then need power to be non-zero return FALSE; } } if (RandomPercentage(RNG_AI_SWITCH_ALL_MOVES_BAD, GetSwitchChance(SHOULD_SWITCH_ALL_MOVES_BAD))) - return SetSwitchinAndSwitch(battler, PARTY_SIZE); + { + if (AI_DATA->mostSuitableMonId[battler] == PARTY_SIZE) // No good candidate mons, find any one that can deal damage + return FindMonWithMoveOfEffectiveness(battler, opposingBattler, UQ_4_12(1.0)); + else // Good candidate mon, send that in + return SetSwitchinAndSwitch(battler, PARTY_SIZE); + } + return FALSE; } static bool32 FindMonThatHitsWonderGuard(u32 battler) { u32 opposingBattler = GetOppositeBattler(battler); - s32 i, j; - s32 firstId; - s32 lastId; // + 1 - struct Pokemon *party = NULL; - u16 move; + u32 i, move; if (IsDoubleBattle()) return FALSE; @@ -391,33 +426,10 @@ static bool32 FindMonThatHitsWonderGuard(u32 battler) } } - // Get party information. - GetAIPartyIndexes(battler, &firstId, &lastId); - party = GetBattlerParty(battler); + if (RandomPercentage(RNG_AI_SWITCH_WONDER_GUARD, GetSwitchChance(SHOULD_SWITCH_WONDER_GUARD))) + return FindMonWithMoveOfEffectiveness(battler, opposingBattler, UQ_4_12(2.0)); - // Find a Pokémon in the party that has a super effective move. - for (i = firstId; i < lastId; i++) - { - if (!IsValidForBattle(&party[i])) - continue; - if (i == gBattlerPartyIndexes[battler]) - continue; - if (IsAceMon(battler, i)) - continue; - - for (j = 0; j < MAX_MON_MOVES; j++) - { - move = GetMonData(&party[i], MON_DATA_MOVE1 + j); - if (move != MOVE_NONE) - { - // Found a mon - if (AI_GetMoveEffectiveness(move, battler, opposingBattler) >= UQ_4_12(2.0) && RandomPercentage(RNG_AI_SWITCH_WONDER_GUARD, GetSwitchChance(SHOULD_SWITCH_WONDER_GUARD))) - return SetSwitchinAndSwitch(battler, i); - } - } - } - - return FALSE; // There is not a single Pokémon in the party that has a super effective move against a mon with Wonder Guard. + return FALSE; } static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler) diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index d2ab5f0b7a..0c6201b475 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -82,6 +82,22 @@ AI_SINGLE_BATTLE_TEST("AI will switch out if it has no move that affects the pla } } +AI_SINGLE_BATTLE_TEST("When AI switches out due to having no move that affects the player, AI will send in a mon that can hit the player, even if not ideal") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES); + PLAYER(SPECIES_GENGAR) { Moves(MOVE_SHADOW_BALL, MOVE_CELEBRATE); } + OPPONENT(SPECIES_ABRA) { Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_ABRA) { Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_ABRA) { Level(5); Moves(MOVE_CONFUSION); } + OPPONENT(SPECIES_ABRA) { Moves(MOVE_TACKLE); } + OPPONENT(SPECIES_ABRA) { Moves(MOVE_TACKLE); } + } WHEN { + TURN { MOVE(player, MOVE_SHADOW_BALL); EXPECT_SWITCH(opponent, 2); EXPECT_SEND_OUT(opponent, 4); } + TURN { MOVE(player, MOVE_SHADOW_BALL); EXPECT_MOVE(opponent, MOVE_TACKLE); } + } +} + AI_DOUBLE_BATTLE_TEST("AI will not try to switch for the same pokemon for 2 spots in a double battle (Wonder Guard)") { PASSES_RANDOMLY(SHOULD_SWITCH_WONDER_GUARD_PERCENTAGE, 100, RNG_AI_SWITCH_WONDER_GUARD); From c707df358ef3033bedc51c7cb006ce7bf1ac9dc8 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Thu, 20 Mar 2025 22:50:01 +0100 Subject: [PATCH 076/115] Clean up AI code duplication and unify checks (#6348) --- include/battle_ai_util.h | 2 +- src/battle_ai_main.c | 260 ++++++++++++++------------------ src/battle_ai_util.c | 67 +++++--- test/battle/ability/minds_eye.c | 33 ++-- test/battle/ai/check_bad_move.c | 48 ++++++ 5 files changed, 220 insertions(+), 190 deletions(-) create mode 100644 test/battle/ai/check_bad_move.c diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 2cf314c00d..6715cee619 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -99,7 +99,7 @@ u32 AI_GetBattlerAbility(u32 battler); // stat stage checks bool32 AnyStatIsRaised(u32 battlerId); -bool32 ShouldLowerStat(u32 battlerAtk, u32 battlerDef, u32 battlerAbility, u32 stat); +bool32 ShouldLowerStat(u32 battlerAtk, u32 battlerDef, u32 abilityDef, u32 stat); bool32 BattlerStatCanRise(u32 battler, u32 battlerAbility, u32 stat); bool32 AreBattlersStatsMaxed(u32 battler); u32 CountPositiveStatStages(u32 battlerId); diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 1b0fe8b45a..089dd76ec5 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -835,6 +835,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) u32 i; u32 weather; u32 predictedMove = aiData->lastUsedMove[battlerDef]; + u32 abilityDef = aiData->abilities[battlerDef]; if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) return score; @@ -895,145 +896,115 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } } + if (DoesBattlerIgnoreAbilityChecks(battlerAtk, aiData->abilities[battlerAtk], move)) + abilityDef = ABILITY_NONE; + // check non-user target if (!(moveTarget & MOVE_TARGET_USER)) { - // target ability checks - if (!DoesBattlerIgnoreAbilityChecks(battlerAtk, aiData->abilities[battlerAtk], move)) + if (CanAbilityBlockMove(battlerAtk, battlerDef, move, abilityDef, ABILITY_CHECK_TRIGGER)) + RETURN_SCORE_MINUS(20); + + if (CanAbilityAbsorbMove(battlerAtk, battlerDef, abilityDef, move, moveType, ABILITY_CHECK_TRIGGER)) + RETURN_SCORE_MINUS(20); + + switch (abilityDef) { - if (CanAbilityBlockMove(battlerAtk, battlerDef, move, aiData->abilities[battlerDef], ABILITY_CHECK_TRIGGER)) - RETURN_SCORE_MINUS(20); - - if (CanAbilityAbsorbMove(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, moveType, ABILITY_CHECK_TRIGGER)) - RETURN_SCORE_MINUS(20); - - switch (aiData->abilities[battlerDef]) + case ABILITY_MAGIC_GUARD: + switch (moveEffect) { - case ABILITY_MAGIC_GUARD: - switch (moveEffect) - { - case EFFECT_POISON: - case EFFECT_WILL_O_WISP: - case EFFECT_TOXIC: - case EFFECT_LEECH_SEED: - ADJUST_SCORE(-5); - break; - case EFFECT_CURSE: - if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GHOST)) // Don't use Curse if you're a ghost type vs a Magic Guard user, they'll take no damage. - ADJUST_SCORE(-5); - break; - } + case EFFECT_POISON: + case EFFECT_WILL_O_WISP: + case EFFECT_TOXIC: + case EFFECT_LEECH_SEED: + ADJUST_SCORE(-5); break; - case ABILITY_WONDER_GUARD: - if (effectiveness < UQ_4_12(2.0)) + case EFFECT_CURSE: + if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GHOST)) // Don't use Curse if you're a ghost type vs a Magic Guard user, they'll take no damage. + ADJUST_SCORE(-5); + break; + } + break; + case ABILITY_WONDER_GUARD: + if (effectiveness < UQ_4_12(2.0)) + RETURN_SCORE_MINUS(20); + break; + case ABILITY_JUSTIFIED: + if (moveType == TYPE_DARK && !IsBattleMoveStatus(move)) + RETURN_SCORE_MINUS(10); + break; + case ABILITY_RATTLED: + if (!IsBattleMoveStatus(move) + && (moveType == TYPE_DARK || moveType == TYPE_GHOST || moveType == TYPE_BUG)) + RETURN_SCORE_MINUS(10); + break; + case ABILITY_AROMA_VEIL: + if (IsAromaVeilProtectedEffect(moveEffect)) + RETURN_SCORE_MINUS(10); + break; + case ABILITY_SWEET_VEIL: + if (moveEffect == EFFECT_SLEEP || moveEffect == EFFECT_YAWN) + RETURN_SCORE_MINUS(10); + break; + case ABILITY_FLOWER_VEIL: + if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) && (IsNonVolatileStatusMoveEffect(moveEffect))) + RETURN_SCORE_MINUS(10); + break; + case ABILITY_MAGIC_BOUNCE: + if (MoveCanBeBouncedBack(move)) + RETURN_SCORE_MINUS(20); + break; + case ABILITY_CONTRARY: + if (IsStatLoweringEffect(moveEffect)) + RETURN_SCORE_MINUS(20); + break; + case ABILITY_COMATOSE: + if (IsNonVolatileStatusMoveEffect(moveEffect)) + RETURN_SCORE_MINUS(10); + break; + case ABILITY_SHIELDS_DOWN: + if (IsShieldsDownProtected(battlerAtk, aiData->abilities[battlerAtk]) && IsNonVolatileStatusMoveEffect(moveEffect)) + RETURN_SCORE_MINUS(10); + break; + case ABILITY_LEAF_GUARD: + if ((AI_GetWeather() & B_WEATHER_SUN) + && aiData->holdEffects[battlerDef] != HOLD_EFFECT_UTILITY_UMBRELLA + && IsNonVolatileStatusMoveEffect(moveEffect)) + RETURN_SCORE_MINUS(10); + break; + } // def ability checks + + // target partner ability checks & not attacking partner + if (isDoubleBattle) + { + switch (aiData->abilities[BATTLE_PARTNER(battlerDef)]) + { + case ABILITY_LIGHTNING_ROD: + if (moveType == TYPE_ELECTRIC && !IsMoveRedirectionPrevented(battlerAtk, move, aiData->abilities[battlerAtk])) RETURN_SCORE_MINUS(20); break; - case ABILITY_JUSTIFIED: - if (moveType == TYPE_DARK && !IsBattleMoveStatus(move)) - RETURN_SCORE_MINUS(10); + case ABILITY_STORM_DRAIN: + if (moveType == TYPE_WATER && !IsMoveRedirectionPrevented(battlerAtk, move, aiData->abilities[battlerAtk])) + RETURN_SCORE_MINUS(20); break; - case ABILITY_RATTLED: - if (!IsBattleMoveStatus(move) - && (moveType == TYPE_DARK || moveType == TYPE_GHOST || moveType == TYPE_BUG)) + case ABILITY_MAGIC_BOUNCE: + if (MoveCanBeBouncedBack(move) && moveTarget & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_OPPONENTS_FIELD)) + RETURN_SCORE_MINUS(20); + break; + case ABILITY_SWEET_VEIL: + if (moveEffect == EFFECT_SLEEP || moveEffect == EFFECT_YAWN) + RETURN_SCORE_MINUS(20); + break; + case ABILITY_FLOWER_VEIL: + if ((IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS)) && (IsNonVolatileStatusMoveEffect(moveEffect) || IsStatLoweringEffect(moveEffect))) RETURN_SCORE_MINUS(10); break; case ABILITY_AROMA_VEIL: if (IsAromaVeilProtectedEffect(moveEffect)) RETURN_SCORE_MINUS(10); break; - case ABILITY_SWEET_VEIL: - if (moveEffect == EFFECT_SLEEP || moveEffect == EFFECT_YAWN) - RETURN_SCORE_MINUS(10); - break; - case ABILITY_FLOWER_VEIL: - if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) && (IsNonVolatileStatusMoveEffect(moveEffect) || IsStatLoweringEffect(moveEffect))) - RETURN_SCORE_MINUS(10); - break; - case ABILITY_MAGIC_BOUNCE: - if (MoveCanBeBouncedBack(move)) - RETURN_SCORE_MINUS(20); - break; - case ABILITY_CONTRARY: - if (IsStatLoweringEffect(moveEffect)) - RETURN_SCORE_MINUS(20); - break; - case ABILITY_CLEAR_BODY: - case ABILITY_FULL_METAL_BODY: - case ABILITY_WHITE_SMOKE: - if (IsStatLoweringEffect(moveEffect)) - RETURN_SCORE_MINUS(10); - break; - case ABILITY_HYPER_CUTTER: - if ((moveEffect == EFFECT_ATTACK_DOWN || moveEffect == EFFECT_ATTACK_DOWN_2) - && move != MOVE_PLAY_NICE && move != MOVE_NOBLE_ROAR && move != MOVE_TEARFUL_LOOK && move != MOVE_VENOM_DRENCH) - RETURN_SCORE_MINUS(10); - break; - case ABILITY_ILLUMINATE: - if (B_ILLUMINATE_EFFECT < GEN_9) - break; - // fallthrough - case ABILITY_KEEN_EYE: - case ABILITY_MINDS_EYE: - if (moveEffect == EFFECT_ACCURACY_DOWN || moveEffect == EFFECT_ACCURACY_DOWN_2) - RETURN_SCORE_MINUS(10); - break; - case ABILITY_BIG_PECKS: - if (moveEffect == EFFECT_DEFENSE_DOWN || moveEffect == EFFECT_DEFENSE_DOWN_2) - RETURN_SCORE_MINUS(10); - break; - case ABILITY_DEFIANT: - case ABILITY_COMPETITIVE: - if (IsStatLoweringEffect(moveEffect) && !IS_TARGETING_PARTNER(battlerAtk, battlerDef)) - RETURN_SCORE_MINUS(8); - break; - case ABILITY_COMATOSE: - if (IsNonVolatileStatusMoveEffect(moveEffect)) - RETURN_SCORE_MINUS(10); - break; - case ABILITY_SHIELDS_DOWN: - if (IsShieldsDownProtected(battlerAtk, aiData->abilities[battlerAtk]) && IsNonVolatileStatusMoveEffect(moveEffect)) - RETURN_SCORE_MINUS(10); - break; - case ABILITY_LEAF_GUARD: - if ((AI_GetWeather() & B_WEATHER_SUN) - && aiData->holdEffects[battlerDef] != HOLD_EFFECT_UTILITY_UMBRELLA - && IsNonVolatileStatusMoveEffect(moveEffect)) - RETURN_SCORE_MINUS(10); - break; - } // def ability checks - - // target partner ability checks & not attacking partner - if (isDoubleBattle) - { - switch (aiData->abilities[BATTLE_PARTNER(battlerDef)]) - { - case ABILITY_LIGHTNING_ROD: - if (moveType == TYPE_ELECTRIC && !IsMoveRedirectionPrevented(battlerAtk, move, aiData->abilities[battlerAtk])) - RETURN_SCORE_MINUS(20); - break; - case ABILITY_STORM_DRAIN: - if (moveType == TYPE_WATER && !IsMoveRedirectionPrevented(battlerAtk, move, aiData->abilities[battlerAtk])) - RETURN_SCORE_MINUS(20); - break; - case ABILITY_MAGIC_BOUNCE: - if (MoveCanBeBouncedBack(move) && moveTarget & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_OPPONENTS_FIELD)) - RETURN_SCORE_MINUS(20); - break; - case ABILITY_SWEET_VEIL: - if (moveEffect == EFFECT_SLEEP || moveEffect == EFFECT_YAWN) - RETURN_SCORE_MINUS(20); - break; - case ABILITY_FLOWER_VEIL: - if ((IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS)) && (IsNonVolatileStatusMoveEffect(moveEffect) || IsStatLoweringEffect(moveEffect))) - RETURN_SCORE_MINUS(10); - break; - case ABILITY_AROMA_VEIL: - if (IsAromaVeilProtectedEffect(moveEffect)) - RETURN_SCORE_MINUS(10); - break; - } - } // def partner ability checks - } // ignore def ability check + } + } // def partner ability checks // gen7+ dark type mons immune to priority->elevated moves from prankster if (B_PRANKSTER_DARK_TYPES >= GEN_7 && IS_BATTLER_OF_TYPE(battlerDef, TYPE_DARK) @@ -1108,7 +1079,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) default: break; // check move damage case EFFECT_SLEEP: - if (!AI_CanPutToSleep(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, aiData->partnerMove)) + if (!AI_CanPutToSleep(battlerAtk, battlerDef, abilityDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); if (PartnerMoveActivatesSleepClause(aiData->partnerMove)) ADJUST_SCORE(-20); @@ -1360,47 +1331,40 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) // stat lowering effects case EFFECT_ATTACK_DOWN: case EFFECT_ATTACK_DOWN_2: - if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_ATK)) //|| !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL)) - ADJUST_SCORE(-10); - else if (aiData->abilities[battlerDef] == ABILITY_HYPER_CUTTER) + if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_ATK)) //|| !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL)) ADJUST_SCORE(-10); break; case EFFECT_DEFENSE_DOWN: case EFFECT_DEFENSE_DOWN_2: - if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_DEF)) + if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_DEF)) ADJUST_SCORE(-10); break; case EFFECT_SPEED_DOWN: case EFFECT_SPEED_DOWN_2: - if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_SPEED)) - ADJUST_SCORE(-10); - else if (aiData->abilities[battlerDef] == ABILITY_SPEED_BOOST) + if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_SPEED)) ADJUST_SCORE(-10); break; case EFFECT_SPECIAL_ATTACK_DOWN: case EFFECT_SPECIAL_ATTACK_DOWN_2: - if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_SPATK)) //|| !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL)) + if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_SPATK)) //|| !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL)) ADJUST_SCORE(-10); break; case EFFECT_SPECIAL_DEFENSE_DOWN: case EFFECT_SPECIAL_DEFENSE_DOWN_2: - if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_SPDEF)) + if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_SPDEF)) ADJUST_SCORE(-10); break; case EFFECT_ACCURACY_DOWN: case EFFECT_ACCURACY_DOWN_2: - if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_ACC)) + if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_ACC)) ADJUST_SCORE(-10); - else if (aiData->abilities[battlerDef] == ABILITY_KEEN_EYE || aiData->abilities[battlerDef] == ABILITY_MINDS_EYE - || (B_ILLUMINATE_EFFECT >= GEN_9 && aiData->abilities[battlerDef] == ABILITY_ILLUMINATE)) - ADJUST_SCORE(-8); break; case EFFECT_EVASION_DOWN: case EFFECT_EVASION_DOWN_2: case EFFECT_TICKLE: - if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_ATK)) + if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_ATK)) ADJUST_SCORE(-10); - else if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_DEF)) + else if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_DEF)) ADJUST_SCORE(-8); break; case EFFECT_VENOM_DRENCH: @@ -1410,18 +1374,18 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } else { - if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_SPEED)) + if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_SPEED)) ADJUST_SCORE(-10); - else if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_SPATK)) + else if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_SPATK)) ADJUST_SCORE(-8); - else if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_ATK)) + else if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_ATK)) ADJUST_SCORE(-6); } break; case EFFECT_NOBLE_ROAR: - if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_SPATK)) + if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_SPATK)) ADJUST_SCORE(-10); - else if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_ATK)) + else if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_ATK)) ADJUST_SCORE(-8); break; case EFFECT_CAPTIVATE: @@ -1455,7 +1419,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (aiData->abilities[battlerDef] == ABILITY_WONDER_GUARD && effectiveness < UQ_4_12(2.0)) ADJUST_SCORE(-10); if (HasDamagingMove(battlerDef) && !((gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE) - || IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef]) + || IsBattlerIncapacitated(battlerDef, abilityDef) || gBattleMons[battlerDef].status2 & (STATUS2_INFATUATION | STATUS2_CONFUSION))) ADJUST_SCORE(-10); if (HasMoveEffect(battlerAtk, EFFECT_SUBSTITUTE) && !(gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE)) @@ -1482,12 +1446,12 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); break; case EFFECT_TOXIC_THREAD: - if (!ShouldLowerStat(battlerAtk, battlerDef, aiData->abilities[battlerDef], STAT_SPEED)) + if (!ShouldLowerStat(battlerAtk, battlerDef, abilityDef, STAT_SPEED)) ADJUST_SCORE(-1); // may still want to just poison //fallthrough case EFFECT_POISON: case EFFECT_TOXIC: - if (!AI_CanPoison(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, aiData->partnerMove)) + if (!AI_CanPoison(battlerAtk, battlerDef, abilityDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; case EFFECT_LIGHT_SCREEN: diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index c03ada6d79..1278e873b8 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -1836,34 +1836,53 @@ void ProtectChecks(u32 battlerAtk, u32 battlerDef, u32 move, u32 predictedMove, } // stat stages -bool32 ShouldLowerStat(u32 battlerAtk, u32 battlerDef, u32 battlerAbility, u32 stat) +bool32 ShouldLowerStat(u32 battlerAtk, u32 battlerDef, u32 abilityDef, u32 stat) { - if (gBattleMons[battlerDef].statStages[stat] > MIN_STAT_STAGE && battlerAbility != ABILITY_CONTRARY) - { - if (AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_CLEAR_AMULET - || battlerAbility == ABILITY_CLEAR_BODY - || battlerAbility == ABILITY_WHITE_SMOKE - || battlerAbility == ABILITY_FULL_METAL_BODY) - return FALSE; + if (gBattleMons[battlerDef].statStages[stat] == MIN_STAT_STAGE) + return FALSE; - switch (stat) - { - case STAT_ATK: - return !(battlerAbility == ABILITY_HYPER_CUTTER); - case STAT_DEF: - return !(battlerAbility == ABILITY_BIG_PECKS); - case STAT_SPEED: - // If AI is faster and doesn't have any mons left, lowering speed doesn't give any - return !(AI_IsFaster(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) - && CountUsablePartyMons(battlerAtk) == 0 - && !HasMoveEffect(battlerAtk, EFFECT_ELECTRO_BALL)); - case STAT_ACC: - return !(battlerAbility == ABILITY_KEEN_EYE || (B_ILLUMINATE_EFFECT >= GEN_9 && battlerAbility == ABILITY_ILLUMINATE)); - } - return TRUE; + if (AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_CLEAR_AMULET) + return FALSE; + + switch (abilityDef) + { + case ABILITY_SPEED_BOOST: + if (stat == STAT_SPEED) + return FALSE; + case ABILITY_HYPER_CUTTER: + if (stat == STAT_ATK) + return FALSE; + case ABILITY_BIG_PECKS: + if (stat == STAT_DEF) + return FALSE; + case ABILITY_ILLUMINATE: + if (B_ILLUMINATE_EFFECT < GEN_9) + break; + case ABILITY_KEEN_EYE: + case ABILITY_MINDS_EYE: + if (stat == STAT_ACC) + return FALSE; + case ABILITY_FLOWER_VEIL: + if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS)) + return FALSE; + break; + case ABILITY_CONTRARY: + case ABILITY_CLEAR_BODY: + case ABILITY_WHITE_SMOKE: + case ABILITY_FULL_METAL_BODY: + return FALSE; } - return FALSE; + // This should be a viability check + if (stat == STAT_SPEED) + { + // If AI is faster and doesn't have any mons left, lowering speed doesn't give any + return !(AI_IsFaster(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered) + && CountUsablePartyMons(battlerAtk) == 0 + && !HasMoveEffect(battlerAtk, EFFECT_ELECTRO_BALL)); + } + + return TRUE; } bool32 BattlerStatCanRise(u32 battler, u32 battlerAbility, u32 stat) diff --git a/test/battle/ability/minds_eye.c b/test/battle/ability/minds_eye.c index 59c81746c7..73100cb20e 100644 --- a/test/battle/ability/minds_eye.c +++ b/test/battle/ability/minds_eye.c @@ -44,28 +44,27 @@ SINGLE_BATTLE_TEST("Mind's Eye doesn't bypass a Ghost-type's Wonder Guard") AI_SINGLE_BATTLE_TEST("AI doesn't use accuracy-lowering moves if it knows that the foe has Mind's Eye") { - u32 abilityAI = ABILITY_NONE, moveAI = MOVE_NONE, j = 0; + u32 abilityAI = ABILITY_NONE; - for (j = MOVE_NONE + 1; j < MOVES_COUNT; j++) - { - if (GetMoveEffect(j) == EFFECT_ACCURACY_DOWN || GetMoveEffect(j) == EFFECT_ACCURACY_DOWN_2) { - PARAMETRIZE { moveAI = j; abilityAI = ABILITY_SWIFT_SWIM; } - PARAMETRIZE { moveAI = j; abilityAI = ABILITY_MOLD_BREAKER; } - } - } + PARAMETRIZE { abilityAI = ABILITY_SWIFT_SWIM; } + PARAMETRIZE { abilityAI = ABILITY_MOLD_BREAKER; } GIVEN { + ASSUME(GetMoveEffect(MOVE_SAND_ATTACK) == EFFECT_ACCURACY_DOWN); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); - PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_MINDS_EYE); } - OPPONENT(SPECIES_BASCULEGION) { Moves(MOVE_CELEBRATE, moveAI); Ability(abilityAI); } + PLAYER(SPECIES_URSALUNA_BLOODMOON) { Ability(ABILITY_MINDS_EYE); } + OPPONENT(SPECIES_BASCULEGION) { Moves(MOVE_CELEBRATE, MOVE_SAND_ATTACK); Ability(abilityAI); } } WHEN { - TURN { MOVE(player, MOVE_TACKLE); } - TURN { MOVE(player, MOVE_TACKLE); - if (abilityAI == ABILITY_MOLD_BREAKER) { SCORE_GT(opponent, moveAI, MOVE_CELEBRATE); } - else { SCORE_EQ(opponent, moveAI, MOVE_CELEBRATE); } - } + TURN { + if (abilityAI == ABILITY_MOLD_BREAKER) { + SCORE_GT(opponent, MOVE_SAND_ATTACK, MOVE_CELEBRATE); + } else { + SCORE_EQ(opponent, MOVE_SAND_ATTACK, MOVE_CELEBRATE); + } + } } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); - if (abilityAI == ABILITY_MOLD_BREAKER) { ANIMATION(ANIM_TYPE_MOVE, moveAI, opponent); } + if (abilityAI == ABILITY_MOLD_BREAKER) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SAND_ATTACK, opponent); + } } } diff --git a/test/battle/ai/check_bad_move.c b/test/battle/ai/check_bad_move.c new file mode 100644 index 0000000000..79b960ec60 --- /dev/null +++ b/test/battle/ai/check_bad_move.c @@ -0,0 +1,48 @@ +#include "global.h" +#include "test/battle.h" +#include "battle_ai_util.h" + +AI_SINGLE_BATTLE_TEST("AI will not try to lower opposing stats if target is protected by it's ability") +{ + u16 ability, species, move; + + PARAMETRIZE { ability = ABILITY_SPEED_BOOST; species = SPECIES_TORCHIC; move = MOVE_SCARY_FACE; } + PARAMETRIZE { ability = ABILITY_HYPER_CUTTER; species = SPECIES_KRABBY; move = MOVE_GROWL; } + PARAMETRIZE { ability = ABILITY_BIG_PECKS; species = SPECIES_PIDGEY; move = MOVE_SCREECH; } + PARAMETRIZE { ability = ABILITY_ILLUMINATE; species = SPECIES_STARYU; move = MOVE_SAND_ATTACK; } + PARAMETRIZE { ability = ABILITY_KEEN_EYE; species = SPECIES_PIDGEY; move = MOVE_SAND_ATTACK; } + PARAMETRIZE { ability = ABILITY_CONTRARY; species = SPECIES_SNIVY; move = MOVE_NOBLE_ROAR; } + PARAMETRIZE { ability = ABILITY_CLEAR_BODY; species = SPECIES_BELDUM; move = MOVE_NOBLE_ROAR; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_OMNISCIENT); + PLAYER(species) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE, move); } + } WHEN { + TURN { SCORE_LT_VAL(opponent, move, AI_SCORE_DEFAULT); } + } +} + + +AI_DOUBLE_BATTLE_TEST("AI will not try to lower opposing stats if target is protected by Flower Veil") +{ + u16 move; + + PARAMETRIZE { move = MOVE_SCARY_FACE; } + PARAMETRIZE { move = MOVE_GROWL; } + PARAMETRIZE { move = MOVE_SCREECH; } + PARAMETRIZE { move = MOVE_SAND_ATTACK; } + PARAMETRIZE { move = MOVE_SAND_ATTACK; } + PARAMETRIZE { move = MOVE_NOBLE_ROAR; } + PARAMETRIZE { move = MOVE_NOBLE_ROAR; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_COMFEY) { Ability(ABILITY_FLOWER_VEIL); } + PLAYER(SPECIES_BULBASAUR); + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE, move); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { SCORE_LT_VAL(opponentLeft, move, AI_SCORE_DEFAULT, target: playerRight); } + } +} From bb73fb1971da5cd60361148c56a6bbadc2fe4878 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Fri, 21 Mar 2025 21:46:03 +0100 Subject: [PATCH 077/115] Fix Jet Punch in isolated tests (#6461) Co-authored-by: Hedara --- data/battle_anim_scripts.s | 1 + 1 file changed, 1 insertion(+) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 35c43a793a..ffc9a930e0 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -16762,6 +16762,7 @@ gBattleAnimMove_JetPunch:: createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 9, RGB_BLUE delay 8 createvisualtask AnimTask_ExtremeSpeedMonReappear, 2 + setarg 0x7, 0x1000 createsprite gSmallBubblePairSpriteTemplate, ANIM_TARGET, 2, 0x14, 0xffec, 0x14, ANIM_TARGET createsprite gSmallBubblePairSpriteTemplate, ANIM_TARGET, 2, 0xa, 0xa, 0x14, ANIM_TARGET createsprite gFistFootSpriteTemplate, ANIM_TARGET, 3, 0, 0, 8, 1, 0 From 08f11ca5c14d04ee2767ba383cdad010c3950a64 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Fri, 21 Mar 2025 22:33:03 +0100 Subject: [PATCH 078/115] Update the All Move Animations test (#6460) Co-authored-by: Hedara --- include/config/test.h | 4 + test/battle/move_animations/all_anims.c | 372 +++++++++++++++++++----- 2 files changed, 309 insertions(+), 67 deletions(-) diff --git a/include/config/test.h b/include/config/test.h index 2fec28c951..b74399ebe8 100644 --- a/include/config/test.h +++ b/include/config/test.h @@ -1140,4 +1140,8 @@ // Move animation testing #define T_SHOULD_RUN_MOVE_ANIM FALSE // If TRUE, enables the move animation tests, these are very computationally heavy and takes a long time to run. +#define ANIM_TEST_START_MOVE 1 // First move to test +#define ANIM_TEST_END_MOVE MOVES_COUNT-1 // Last move to test + + #endif // GUARD_CONFIG_TEST_H diff --git a/test/battle/move_animations/all_anims.c b/test/battle/move_animations/all_anims.c index dfba4eb185..553bd1ab8e 100644 --- a/test/battle/move_animations/all_anims.c +++ b/test/battle/move_animations/all_anims.c @@ -359,24 +359,26 @@ static void DoublesScene(u32 move, struct BattlePokemon *attacker) } } +static void SameSideTargeting(u32 move, struct BattlePokemon *attacker) +{ + // Don't know how to make sure this is correct, some moves don't display +} + SINGLE_BATTLE_TEST("Move Animations don't leak when used - Singles (player to opponent)") { - u32 j = 1, move = 0, species = 0; + u32 j = ANIM_TEST_START_MOVE, move = 0, species = 0; + u32 tempMove, tempSpecies; FORCE_MOVE_ANIM(TRUE); - for (; j < MOVES_COUNT; j++) - { - ParametrizeMovesAndSpecies(j, &move, &species); - PARAMETRIZE { move = move; species = species; } + for (; j <= ANIM_TEST_END_MOVE; j++) { + ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies); + PARAMETRIZE { move = tempMove; species = tempSpecies; } } GIVEN { PLAYER(species) { HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); - if (species == SPECIES_WOBBUFFET) - Gender(MON_FEMALE); - if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) - Moves(move, MOVE_POUND); - if (species == SPECIES_KLINKLANG) - Ability(ABILITY_PLUS); + if (species == SPECIES_WOBBUFFET) Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) Ability(ABILITY_PLUS); } PLAYER(SPECIES_WOBBUFFET) { Gender(MON_MALE); MaxHP(9999); Moves(MOVE_POUND); @@ -402,22 +404,19 @@ SINGLE_BATTLE_TEST("Move Animations don't leak when used - Singles (player to op SINGLE_BATTLE_TEST("Move Animations don't leak when used - Singles (opponent to player)") { - u32 j = 1, move = 0, species = 0; + u32 j = ANIM_TEST_START_MOVE, move = 0, species = 0; + u32 tempMove, tempSpecies; FORCE_MOVE_ANIM(TRUE); - for (; j < MOVES_COUNT; j++) - { - ParametrizeMovesAndSpecies(j, &move, &species); - PARAMETRIZE { move = move; species = species; } + for (; j <= ANIM_TEST_END_MOVE; j++) { + ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies); + PARAMETRIZE { move = tempMove; species = tempSpecies; } } GIVEN { OPPONENT(species) { HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); - if (species == SPECIES_WOBBUFFET) - Gender(MON_FEMALE); - if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) - Moves(move, MOVE_POUND); - if (species == SPECIES_KLINKLANG) - Ability(ABILITY_PLUS); + if (species == SPECIES_WOBBUFFET) Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) Ability(ABILITY_PLUS); } OPPONENT(SPECIES_WOBBUFFET) { Gender(MON_MALE); MaxHP(9999); Moves(MOVE_POUND); @@ -443,39 +442,33 @@ SINGLE_BATTLE_TEST("Move Animations don't leak when used - Singles (opponent to DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (playerLeft to opponentLeft)") { - u32 j = 1, move = 0, species = 0; + u32 j = ANIM_TEST_START_MOVE, move = 0, species = 0; + u32 tempMove, tempSpecies; FORCE_MOVE_ANIM(TRUE); struct BattlePokemon *attacker = playerLeft; struct BattlePokemon *target = opponentLeft; struct BattlePokemon *ignore1 = playerRight; struct BattlePokemon *ignore2 = opponentRight; - for (; j < MOVES_COUNT; j++) - { - ParametrizeMovesAndSpecies(j, &move, &species); - PARAMETRIZE { move = move; species = species; } + for (; j <= ANIM_TEST_END_MOVE; j++) { + ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies); + PARAMETRIZE { move = tempMove; species = tempSpecies; } } GIVEN { PLAYER(species) { HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); if (attacker == playerLeft) { - if (species == SPECIES_WOBBUFFET) - Gender(MON_FEMALE); - if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) - Moves(move, MOVE_POUND); - if (species == SPECIES_KLINKLANG) - Ability(ABILITY_PLUS); + if (species == SPECIES_WOBBUFFET) Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) Ability(ABILITY_PLUS); } } PLAYER(species) { HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); if (attacker == playerRight) { - if (species == SPECIES_WOBBUFFET) - Gender(MON_FEMALE); - if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) - Moves(move, MOVE_POUND); - if (species == SPECIES_KLINKLANG) - Ability(ABILITY_PLUS); + if (species == SPECIES_WOBBUFFET) Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) Ability(ABILITY_PLUS); } } PLAYER(SPECIES_WOBBUFFET) { @@ -507,15 +500,16 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (playerLeft t DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (opponentLeft to playerLeft)") { - u32 j = 1, move = 0, species = 0; + u32 j = ANIM_TEST_START_MOVE, move = 0, species = 0; + u32 tempMove, tempSpecies; FORCE_MOVE_ANIM(TRUE); struct BattlePokemon *attacker = opponentLeft; struct BattlePokemon *target = playerLeft; struct BattlePokemon *ignore1 = opponentRight; struct BattlePokemon *ignore2 = playerRight; - for (; j < MOVES_COUNT; j++) { - ParametrizeMovesAndSpecies(j, &move, &species); - PARAMETRIZE { move = move; species = species; } + for (; j <= ANIM_TEST_END_MOVE; j++) { + ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies); + PARAMETRIZE { move = tempMove; species = tempSpecies; } } GIVEN { OPPONENT(species) { @@ -565,15 +559,16 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (opponentLeft DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (playerLeft to opponentRight)") { - u32 j = 1, move = 0, species = 0; + u32 j = ANIM_TEST_START_MOVE, move = 0, species = 0; + u32 tempMove, tempSpecies; FORCE_MOVE_ANIM(TRUE); struct BattlePokemon *attacker = playerLeft; struct BattlePokemon *target = opponentRight; struct BattlePokemon *ignore1 = playerRight; struct BattlePokemon *ignore2 = opponentLeft; - for (; j < MOVES_COUNT; j++) { - ParametrizeMovesAndSpecies(j, &move, &species); - PARAMETRIZE { move = move; species = species; } + for (; j <= ANIM_TEST_END_MOVE; j++) { + ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies); + PARAMETRIZE { move = tempMove; species = tempSpecies; } } GIVEN { PLAYER(species) { @@ -623,15 +618,16 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (playerLeft t DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (opponentRight to playerLeft)") { - u32 j = 1, move = 0, species = 0; + u32 j = ANIM_TEST_START_MOVE, move = 0, species = 0; + u32 tempMove, tempSpecies; FORCE_MOVE_ANIM(TRUE); struct BattlePokemon *attacker = opponentRight; struct BattlePokemon *target = playerLeft; struct BattlePokemon *ignore1 = opponentLeft; struct BattlePokemon *ignore2 = playerRight; - for (; j < MOVES_COUNT; j++) { - ParametrizeMovesAndSpecies(j, &move, &species); - PARAMETRIZE { move = move; species = species; } + for (; j <= ANIM_TEST_END_MOVE; j++) { + ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies); + PARAMETRIZE { move = tempMove; species = tempSpecies; } } GIVEN { OPPONENT(species) { @@ -681,15 +677,16 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (opponentRigh DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (playerRight to opponentLeft)") { - u32 j = 1, move = 0, species = 0; + u32 j = ANIM_TEST_START_MOVE, move = 0, species = 0; + u32 tempMove, tempSpecies; FORCE_MOVE_ANIM(TRUE); struct BattlePokemon *attacker = playerRight; struct BattlePokemon *target = opponentLeft; struct BattlePokemon *ignore1 = playerLeft; struct BattlePokemon *ignore2 = opponentRight; - for (; j < MOVES_COUNT; j++) { - ParametrizeMovesAndSpecies(j, &move, &species); - PARAMETRIZE { move = move; species = species; } + for (; j <= ANIM_TEST_END_MOVE; j++) { + ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies); + PARAMETRIZE { move = tempMove; species = tempSpecies; } } GIVEN { PLAYER(species) { @@ -739,15 +736,16 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (playerRight DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (opponentLeft to playerRight)") { - u32 j = 1, move = 0, species = 0; + u32 j = ANIM_TEST_START_MOVE, move = 0, species = 0; + u32 tempMove, tempSpecies; FORCE_MOVE_ANIM(TRUE); struct BattlePokemon *attacker = opponentLeft; struct BattlePokemon *target = playerRight; struct BattlePokemon *ignore1 = playerLeft; struct BattlePokemon *ignore2 = opponentRight; - for (; j < MOVES_COUNT; j++) { - ParametrizeMovesAndSpecies(j, &move, &species); - PARAMETRIZE { move = move; species = species; } + for (; j <= ANIM_TEST_END_MOVE; j++) { + ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies); + PARAMETRIZE { move = tempMove; species = tempSpecies; } } GIVEN { OPPONENT(species) { @@ -797,15 +795,16 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (opponentLeft DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (playerRight to opponentRight)") { - u32 j = 1, move = 0, species = 0; + u32 j = ANIM_TEST_START_MOVE, move = 0, species = 0; + u32 tempMove, tempSpecies; FORCE_MOVE_ANIM(TRUE); struct BattlePokemon *attacker = playerRight; struct BattlePokemon *target = opponentRight; struct BattlePokemon *ignore1 = playerLeft; struct BattlePokemon *ignore2 = opponentLeft; - for (; j < MOVES_COUNT; j++) { - ParametrizeMovesAndSpecies(j, &move, &species); - PARAMETRIZE { move = move; species = species; } + for (; j <= ANIM_TEST_END_MOVE; j++) { + ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies); + PARAMETRIZE { move = tempMove; species = tempSpecies; } } GIVEN { PLAYER(species) { @@ -855,15 +854,16 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (playerRight DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (opponentRight to playerRight)") { - u32 j = 1, move = 0, species = 0; + u32 j = ANIM_TEST_START_MOVE, move = 0, species = 0; + u32 tempMove, tempSpecies; FORCE_MOVE_ANIM(TRUE); struct BattlePokemon *attacker = opponentRight; struct BattlePokemon *target = playerRight; struct BattlePokemon *ignore1 = playerLeft; struct BattlePokemon *ignore2 = opponentLeft; - for (; j < MOVES_COUNT; j++) { - ParametrizeMovesAndSpecies(j, &move, &species); - PARAMETRIZE { move = move; species = species; } + for (; j <= ANIM_TEST_END_MOVE; j++) { + ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies); + PARAMETRIZE { move = tempMove; species = tempSpecies; } } GIVEN { OPPONENT(species) { @@ -911,4 +911,242 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (opponentRigh } } +/* +DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (playerLeft to playerRight)") +{ + u32 j = ANIM_TEST_START_MOVE, move = 0, species = 0; + u32 tempMove, tempSpecies; + FORCE_MOVE_ANIM(TRUE); + struct BattlePokemon *attacker = playerLeft; + struct BattlePokemon *target = playerRight; + struct BattlePokemon *ignore1 = opponentRight; + struct BattlePokemon *ignore2 = opponentLeft; + for (; j <= ANIM_TEST_END_MOVE; j++) { + ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies); + PARAMETRIZE { move = tempMove; species = tempSpecies; } + } + GIVEN { + OPPONENT(species) { + HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); + if (attacker == opponentLeft) { + if (species == SPECIES_WOBBUFFET) Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) Ability(ABILITY_PLUS); + } + } + OPPONENT(species) { + HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); + if (attacker == opponentRight) { + if (species == SPECIES_WOBBUFFET) Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) Ability(ABILITY_PLUS); + } + } + OPPONENT(SPECIES_WOBBUFFET) { + Gender(MON_MALE); MaxHP(9999); Moves(MOVE_POUND, MOVE_CELEBRATE); + HP(gMovesInfo[move].effect == EFFECT_REVIVAL_BLESSING ? 0 : 9998); + } + PLAYER(SPECIES_WOBBUFFET) { + Gender(MON_MALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); Ability(ABILITY_TELEPATHY); + if (gMovesInfo[move].effect != EFFECT_BESTOW) { + Item(ITEM_ORAN_BERRY); + } + } + PLAYER(SPECIES_WOBBUFFET) { + Gender(MON_MALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); Ability(ABILITY_TELEPATHY); + if (gMovesInfo[move].effect != EFFECT_BESTOW) { + Item(ITEM_ORAN_BERRY); + } + } + PLAYER(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); } + } WHEN { + DoublesWhen(move, attacker, target, ignore1, ignore2); + } SCENE { + SameSideTargeting(move, attacker); + } THEN { + FORCE_MOVE_ANIM(FALSE); + if (gLoadFail) + DebugPrintf("Move failed: %S (%u)", gMovesInfo[move].name, move); + EXPECT_EQ(gLoadFail, FALSE); + } +} + +DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (playerRight to playerLeft)") +{ + u32 j = ANIM_TEST_START_MOVE, move = 0, species = 0; + u32 tempMove, tempSpecies; + FORCE_MOVE_ANIM(TRUE); + struct BattlePokemon *attacker = playerRight; + struct BattlePokemon *target = playerLeft; + struct BattlePokemon *ignore1 = opponentRight; + struct BattlePokemon *ignore2 = opponentLeft; + for (; j <= ANIM_TEST_END_MOVE; j++) { + ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies); + PARAMETRIZE { move = tempMove; species = tempSpecies; } + } + GIVEN { + OPPONENT(species) { + HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); + if (attacker == opponentLeft) { + if (species == SPECIES_WOBBUFFET) Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) Ability(ABILITY_PLUS); + } + } + OPPONENT(species) { + HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); + if (attacker == opponentRight) { + if (species == SPECIES_WOBBUFFET) Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) Ability(ABILITY_PLUS); + } + } + OPPONENT(SPECIES_WOBBUFFET) { + Gender(MON_MALE); MaxHP(9999); Moves(MOVE_POUND, MOVE_CELEBRATE); + HP(gMovesInfo[move].effect == EFFECT_REVIVAL_BLESSING ? 0 : 9998); + } + PLAYER(SPECIES_WOBBUFFET) { + Gender(MON_MALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); Ability(ABILITY_TELEPATHY); + if (gMovesInfo[move].effect != EFFECT_BESTOW) { + Item(ITEM_ORAN_BERRY); + } + } + PLAYER(SPECIES_WOBBUFFET) { + Gender(MON_MALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); Ability(ABILITY_TELEPATHY); + if (gMovesInfo[move].effect != EFFECT_BESTOW) { + Item(ITEM_ORAN_BERRY); + } + } + PLAYER(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); } + } WHEN { + DoublesWhen(move, attacker, target, ignore1, ignore2); + } SCENE { + SameSideTargeting(move, attacker); + } THEN { + FORCE_MOVE_ANIM(FALSE); + if (gLoadFail) + DebugPrintf("Move failed: %S (%u)", gMovesInfo[move].name, move); + EXPECT_EQ(gLoadFail, FALSE); + } +} + +DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (opponentleft to opponentRight)") +{ + u32 j = ANIM_TEST_START_MOVE, move = 0, species = 0; + u32 tempMove, tempSpecies; + FORCE_MOVE_ANIM(TRUE); + struct BattlePokemon *attacker = opponentLeft; + struct BattlePokemon *target = opponentRight; + struct BattlePokemon *ignore1 = playerLeft; + struct BattlePokemon *ignore2 = playerRight; + for (; j <= ANIM_TEST_END_MOVE; j++) { + ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies); + PARAMETRIZE { move = tempMove; species = tempSpecies; } + } + GIVEN { + OPPONENT(species) { + HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); + if (attacker == opponentLeft) { + if (species == SPECIES_WOBBUFFET) Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) Ability(ABILITY_PLUS); + } + } + OPPONENT(species) { + HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); + if (attacker == opponentRight) { + if (species == SPECIES_WOBBUFFET) Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) Ability(ABILITY_PLUS); + } + } + OPPONENT(SPECIES_WOBBUFFET) { + Gender(MON_MALE); MaxHP(9999); Moves(MOVE_POUND, MOVE_CELEBRATE); + HP(gMovesInfo[move].effect == EFFECT_REVIVAL_BLESSING ? 0 : 9998); + } + PLAYER(SPECIES_WOBBUFFET) { + Gender(MON_MALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); Ability(ABILITY_TELEPATHY); + if (gMovesInfo[move].effect != EFFECT_BESTOW) { + Item(ITEM_ORAN_BERRY); + } + } + PLAYER(SPECIES_WOBBUFFET) { + Gender(MON_MALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); Ability(ABILITY_TELEPATHY); + if (gMovesInfo[move].effect != EFFECT_BESTOW) { + Item(ITEM_ORAN_BERRY); + } + } + PLAYER(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); } + } WHEN { + DoublesWhen(move, attacker, target, ignore1, ignore2); + } SCENE { + SameSideTargeting(move, attacker); + } THEN { + FORCE_MOVE_ANIM(FALSE); + if (gLoadFail) + DebugPrintf("Move failed: %S (%u)", gMovesInfo[move].name, move); + EXPECT_EQ(gLoadFail, FALSE); + } +} + +DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (opponentRight to opponentLeft)") +{ + u32 j = ANIM_TEST_START_MOVE, move = 0, species = 0; + u32 tempMove, tempSpecies; + FORCE_MOVE_ANIM(TRUE); + struct BattlePokemon *attacker = opponentRight; + struct BattlePokemon *target = opponentLeft; + struct BattlePokemon *ignore1 = playerLeft; + struct BattlePokemon *ignore2 = playerRight; + for (; j <= ANIM_TEST_END_MOVE; j++) { + ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies); + PARAMETRIZE { move = tempMove; species = tempSpecies; } + } + GIVEN { + OPPONENT(species) { + HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); + if (attacker == opponentLeft) { + if (species == SPECIES_WOBBUFFET) Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) Ability(ABILITY_PLUS); + } + } + OPPONENT(species) { + HP(9997); MaxHP(9999); Item(ITEM_ORAN_BERRY); + if (attacker == opponentRight) { + if (species == SPECIES_WOBBUFFET) Gender(MON_FEMALE); + if (gMovesInfo[move].effect == EFFECT_LAST_RESORT) Moves(move, MOVE_POUND); + if (species == SPECIES_KLINKLANG) Ability(ABILITY_PLUS); + } + } + OPPONENT(SPECIES_WOBBUFFET) { + Gender(MON_MALE); MaxHP(9999); Moves(MOVE_POUND, MOVE_CELEBRATE); + HP(gMovesInfo[move].effect == EFFECT_REVIVAL_BLESSING ? 0 : 9998); + } + PLAYER(SPECIES_WOBBUFFET) { + Gender(MON_MALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); Ability(ABILITY_TELEPATHY); + if (gMovesInfo[move].effect != EFFECT_BESTOW) { + Item(ITEM_ORAN_BERRY); + } + } + PLAYER(SPECIES_WOBBUFFET) { + Gender(MON_MALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); Ability(ABILITY_TELEPATHY); + if (gMovesInfo[move].effect != EFFECT_BESTOW) { + Item(ITEM_ORAN_BERRY); + } + } + PLAYER(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); HP(9998); MaxHP(9999); SpDefense(9999); Defense(9999); } + } WHEN { + DoublesWhen(move, attacker, target, ignore1, ignore2); + } SCENE { + SameSideTargeting(move, attacker); + } THEN { + FORCE_MOVE_ANIM(FALSE); + if (gLoadFail) + DebugPrintf("Move failed: %S (%u)", gMovesInfo[move].name, move); + EXPECT_EQ(gLoadFail, FALSE); + } +} +*/ + #endif From 76bb903d0620eb32d36534cae816febce288ea9f Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Sat, 22 Mar 2025 02:54:52 -0500 Subject: [PATCH 079/115] Update Battle Debug menu with new AI flags (#6444) --- src/battle_debug.c | 63 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 44 insertions(+), 19 deletions(-) diff --git a/src/battle_debug.c b/src/battle_debug.c index 44a92b5f93..e82f7a90df 100644 --- a/src/battle_debug.c +++ b/src/battle_debug.c @@ -218,7 +218,7 @@ enum LIST_AI_CHECK_BAD_MOVE, LIST_AI_TRY_TO_FAINT, LIST_AI_CHECK_VIABILITY, - LIST_AI_SETUP_FIRST_TURN, + LIST_AI_FORCE_SETUP_FIRST_TURN, LIST_AI_RISKY, LIST_AI_TRY_TO_2HKO, LIST_AI_PREFER_BATON_PASS, @@ -227,13 +227,20 @@ enum LIST_AI_POWERFUL_STATUS, LIST_AI_NEGATE_UNAWARE, LIST_AI_WILL_SUICIDE, - LIST_AI_HELP_PARTNER, LIST_AI_PREFER_STATUS_MOVES, LIST_AI_STALL, LIST_AI_SMART_SWITCHING, LIST_AI_ACE_POKEMON, LIST_AI_OMNISCIENT, LIST_AI_SMART_MON_CHOICES, + LIST_AI_CONSERVATIVE, + LIST_AI_SEQUENCE_SWITCHING, + LIST_AI_DOUBLE_ACE_POKEMON, + LIST_AI_WEIGH_ABILITY_PREDICTION, + LIST_AI_PREFER_HIGHEST_DAMAGE_MOVE, + LIST_AI_PREDICT_SWITCH, + LIST_AI_PREDICT_INCOMING_MON, + LIST_AI_DYNAMIC_FUNC, LIST_AI_ROAMING, LIST_AI_SAFARI, LIST_AI_FIRST_BATTLE, @@ -383,7 +390,7 @@ static const u8 sText_Swamp[] = _("Swamp"); static const u8 sText_CheckBadMove[] = _("Check Bad Move"); static const u8 sText_TryToFaint[] = _("Try to Faint"); static const u8 sText_CheckViability[] = _("Check Viability"); -static const u8 sText_SetUpFirstTurn[] = _("Setup First Turn"); +static const u8 sText_ForceSetupFirstTurn[] = _("Force Setup First Turn"); static const u8 sText_Risky[] = _("Risky"); static const u8 sText_TryTo2HKO[] = _("Try to 2HKO"); static const u8 sText_PreferBatonPass[] = _("Prefer Baton Pass"); @@ -392,13 +399,20 @@ static const u8 sText_HpAware[] = _("HP Aware"); static const u8 sText_PowerfulStatus[] = _("Powerful Status"); static const u8 sText_NegateUnaware[] = _("Negate Unaware"); static const u8 sText_WillSuicide[] = _("Will Suicide"); -static const u8 sText_HelpPartner[] = _("Help Partner"); static const u8 sText_PreferStatusMoves[] = _("Prefer Status Moves"); static const u8 sText_Stall[] = _("Stall"); static const u8 sText_SmartSwitching[] = _("Smart Switching"); -static const u8 sText_AcePokemon[] = _("Ace Pokemon"); +static const u8 sText_AcePokemon[] = _("Ace Pokémon"); static const u8 sText_Omniscient[] = _("Omniscient"); static const u8 sText_SmartMonChoices[] = _("Smart Mon Choices"); +static const u8 sText_Conservative[] = _("Conservative"); +static const u8 sText_SequenceSwitching[] = _("Sequence Switching"); +static const u8 sText_DoubleAcePokemon[] = _("Double Ace Pokémon"); +static const u8 sText_WeighAbilityPrediction[] = _("Weigh Ability Prediction"); +static const u8 sText_PreferHighestDamageMove[] = _("Prefer Highest Damage Move"); +static const u8 sText_PredictSwitch[] = _("Predict Switch"); +static const u8 sText_PredictIncomingMon[] = _("Predict Incoming Mon"); +static const u8 sText_DynamicFunc[] = _("Dynamic Func"); static const u8 sText_Roaming[] = _("Roaming"); static const u8 sText_Safari[] = _("Safari"); static const u8 sText_FirstBattle[] = _("First Battle"); @@ -479,7 +493,7 @@ static const struct BitfieldInfo sAIBitfield[] = {/*Check Bad Move*/ 1, 0}, {/*Try to Faint*/ 1, 1}, {/*Check Viability*/ 1, 2}, - {/*Setup First Turn*/ 1, 3}, + {/*Force Setup First Turn*/ 1, 3}, {/*Risky*/ 1, 4}, {/*Prefer Strongest Move*/ 1, 5}, {/*Prefer Baton Pass*/ 1, 6}, @@ -488,16 +502,20 @@ static const struct BitfieldInfo sAIBitfield[] = {/*Powerful Status*/ 1, 9}, {/*Negate Unaware*/ 1, 10}, {/*Will Suicide*/ 1, 11}, - {/*Help Partner*/ 1, 12}, - {/*Prefer Status Moves*/ 1, 13}, - {/*Stall*/ 1, 14}, - {/*Smart Switching*/ 1, 15}, - {/*Ace Pokemon*/ 1, 16}, - {/*Omniscient*/ 1, 17}, - {/*Smart Mon Choices*/ 1, 18}, - {/*Ace Pokemon*/ 1, 16}, - {/*Omniscient*/ 1, 17}, - {/*Smart Mon Choices*/ 1, 18}, + {/*Prefer Status Moves*/ 1, 12}, + {/*Stall*/ 1, 13}, + {/*Smart Switching*/ 1, 14}, + {/*Ace Pokemon*/ 1, 15}, + {/*Omniscient*/ 1, 16}, + {/*Smart Mon Choices*/ 1, 17}, + {/*Conservative*/ 1, 18}, + {/*Sequence Switching*/ 1, 19}, + {/*Double Ace Pokemon*/ 1, 20}, + {/*Weigh Ability Prediction*/ 1, 21}, + {/*Prefer Highest Damage Move*/ 1, 22}, + {/*Predict Switch*/ 1, 23}, + {/*Predict Incoming Mon*/ 1, 24}, + {/*Dynamic Func*/ 1, 28}, {/*Roaming*/ 1, 29}, {/*Safari*/ 1, 30}, {/*First Battle*/ 1, 31}, @@ -626,7 +644,7 @@ static const struct ListMenuItem sAIListItems[] = {sText_CheckBadMove, LIST_AI_CHECK_BAD_MOVE}, {sText_TryToFaint, LIST_AI_TRY_TO_FAINT}, {sText_CheckViability, LIST_AI_CHECK_VIABILITY}, - {sText_SetUpFirstTurn, LIST_AI_SETUP_FIRST_TURN}, + {sText_ForceSetupFirstTurn, LIST_AI_FORCE_SETUP_FIRST_TURN}, {sText_Risky, LIST_AI_RISKY}, {sText_TryTo2HKO, LIST_AI_TRY_TO_2HKO}, {sText_PreferBatonPass, LIST_AI_PREFER_BATON_PASS}, @@ -635,13 +653,20 @@ static const struct ListMenuItem sAIListItems[] = {sText_PowerfulStatus, LIST_AI_POWERFUL_STATUS}, {sText_NegateUnaware, LIST_AI_NEGATE_UNAWARE}, {sText_WillSuicide, LIST_AI_WILL_SUICIDE}, - {sText_HelpPartner, LIST_AI_HELP_PARTNER}, {sText_PreferStatusMoves, LIST_AI_PREFER_STATUS_MOVES}, {sText_Stall, LIST_AI_STALL}, {sText_SmartSwitching, LIST_AI_SMART_SWITCHING}, {sText_AcePokemon, LIST_AI_ACE_POKEMON}, {sText_Omniscient, LIST_AI_OMNISCIENT}, {sText_SmartMonChoices, LIST_AI_SMART_MON_CHOICES}, + {sText_Conservative, LIST_AI_CONSERVATIVE}, + {sText_SequenceSwitching, LIST_AI_SEQUENCE_SWITCHING}, + {sText_DoubleAcePokemon, LIST_AI_DOUBLE_ACE_POKEMON}, + {sText_WeighAbilityPrediction, LIST_AI_WEIGH_ABILITY_PREDICTION}, + {sText_PreferHighestDamageMove, LIST_AI_PREFER_HIGHEST_DAMAGE_MOVE}, + {sText_PredictSwitch, LIST_AI_PREDICT_SWITCH}, + {sText_PredictIncomingMon, LIST_AI_PREDICT_INCOMING_MON}, + {sText_DynamicFunc, LIST_AI_DYNAMIC_FUNC}, {sText_Roaming, LIST_AI_ROAMING}, {sText_Safari, LIST_AI_SAFARI}, {sText_FirstBattle, LIST_AI_FIRST_BATTLE}, @@ -2580,8 +2605,8 @@ static const u8 *const sHoldEffectNames[] = [HOLD_EFFECT_COVERT_CLOAK] = sText_HoldEffectCovertCloak, [HOLD_EFFECT_LOADED_DICE] = sText_HoldEffectLoadedDice, [HOLD_EFFECT_BOOSTER_ENERGY] = sText_HoldEffectBoosterEnergy, - [HOLD_EFFECT_BERSERK_GENE] = sText_HoldEffectBerserkGene, [HOLD_EFFECT_OGERPON_MASK] = sText_HoldEffectOgerponMask, + [HOLD_EFFECT_BERSERK_GENE] = sText_HoldEffectBerserkGene, }; static const u8 *GetHoldEffectName(u16 holdEffect) { From 11a7ea99f187d3df889b7d5db27f89e142a75712 Mon Sep 17 00:00:00 2001 From: Pawkkie Date: Sat, 22 Mar 2025 17:23:13 -0400 Subject: [PATCH 080/115] fix choice switches --- src/battle_ai_switch_items.c | 3 ++- test/battle/ai/ai_choice.c | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index bd4dd88fd3..c7696a38cf 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -987,10 +987,11 @@ static bool32 ShouldSwitchIfEncored(u32 battler) static bool32 ShouldSwitchIfBadChoiceLock(u32 battler) { u32 holdEffect = GetBattlerHoldEffect(battler, FALSE); + u32 lastUsedMove = AI_DATA->lastUsedMove[battler]; if (HOLD_EFFECT_CHOICE(holdEffect) && IsBattlerItemEnabled(battler)) { - if (GetMoveCategory(AI_DATA->lastUsedMove[battler]) == DAMAGE_CATEGORY_STATUS && RandomPercentage(RNG_AI_SWITCH_CHOICE_LOCKED, GetSwitchChance(SHOULD_SWITCH_CHOICE_LOCKED))) + if ((GetMoveCategory(lastUsedMove) == DAMAGE_CATEGORY_STATUS || AI_GetMoveEffectiveness(lastUsedMove, battler, GetOppositeBattler(battler)) > UQ_4_12(0.0)) && RandomPercentage(RNG_AI_SWITCH_CHOICE_LOCKED, GetSwitchChance(SHOULD_SWITCH_CHOICE_LOCKED))) return SetSwitchinAndSwitch(battler, PARTY_SIZE); } diff --git a/test/battle/ai/ai_choice.c b/test/battle/ai/ai_choice.c index b19af6a073..842ed2de86 100644 --- a/test/battle/ai/ai_choice.c +++ b/test/battle/ai/ai_choice.c @@ -195,3 +195,19 @@ AI_SINGLE_BATTLE_TEST("Choiced Pokémon won't use status move if they are trappe } } } + +AI_SINGLE_BATTLE_TEST("Choiced Pokémon will switch if locked into a move the player is immune to") +{ + GIVEN { + ASSUME(GetMoveType(MOVE_SURF) == TYPE_WATER); + ASSUME(GetMoveType(MOVE_BODY_SLAM) == TYPE_NORMAL); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_GASTLY) { Level(1); Moves(MOVE_CELEBRATE); } + PLAYER(SPECIES_VAPOREON) { Ability(ABILITY_WATER_ABSORB); Moves(MOVE_SURF); } + OPPONENT(SPECIES_ZIGZAGOON) { Item(ITEM_CHOICE_BAND); Moves(MOVE_SURF, MOVE_BODY_SLAM); } + OPPONENT(SPECIES_ZIGZAGOON) { Item(ITEM_CHOICE_BAND); Moves(MOVE_SURF, MOVE_BODY_SLAM); } + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); EXPECT_MOVE(opponent, MOVE_SURF); SEND_OUT(player, 1); } + TURN { MOVE(player, MOVE_SURF); EXPECT_SWITCH(opponent, 1); } + } +} From 6a08b8fdec5351506ba0e87989ac2207209fe175 Mon Sep 17 00:00:00 2001 From: Pawkkie Date: Sat, 22 Mar 2025 17:33:43 -0400 Subject: [PATCH 081/115] add gastly type assumption --- test/battle/ai/ai_choice.c | 1 + 1 file changed, 1 insertion(+) diff --git a/test/battle/ai/ai_choice.c b/test/battle/ai/ai_choice.c index 842ed2de86..590ad2c27f 100644 --- a/test/battle/ai/ai_choice.c +++ b/test/battle/ai/ai_choice.c @@ -199,6 +199,7 @@ AI_SINGLE_BATTLE_TEST("Choiced Pokémon won't use status move if they are trappe AI_SINGLE_BATTLE_TEST("Choiced Pokémon will switch if locked into a move the player is immune to") { GIVEN { + ASSUME(gSpeciesInfo[SPECIES_GASTLY].types[0] == TYPE_GHOST); ASSUME(GetMoveType(MOVE_SURF) == TYPE_WATER); ASSUME(GetMoveType(MOVE_BODY_SLAM) == TYPE_NORMAL); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); From 50b0c5a2e32cb428ed8fa31f8234c07f369c2278 Mon Sep 17 00:00:00 2001 From: Pawkkie Date: Sat, 22 Mar 2025 20:29:03 -0400 Subject: [PATCH 082/115] WHOOPS --- src/battle_ai_switch_items.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index c7696a38cf..9a7c2b9328 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -991,7 +991,7 @@ static bool32 ShouldSwitchIfBadChoiceLock(u32 battler) if (HOLD_EFFECT_CHOICE(holdEffect) && IsBattlerItemEnabled(battler)) { - if ((GetMoveCategory(lastUsedMove) == DAMAGE_CATEGORY_STATUS || AI_GetMoveEffectiveness(lastUsedMove, battler, GetOppositeBattler(battler)) > UQ_4_12(0.0)) && RandomPercentage(RNG_AI_SWITCH_CHOICE_LOCKED, GetSwitchChance(SHOULD_SWITCH_CHOICE_LOCKED))) + if ((GetMoveCategory(lastUsedMove) == DAMAGE_CATEGORY_STATUS || (AI_GetMoveEffectiveness(lastUsedMove, battler, GetOppositeBattler(battler)) == UQ_4_12(0.0))) && RandomPercentage(RNG_AI_SWITCH_CHOICE_LOCKED, GetSwitchChance(SHOULD_SWITCH_CHOICE_LOCKED))) return SetSwitchinAndSwitch(battler, PARTY_SIZE); } From b93976c980bcf833b26fb953f3611ce2465a9aec Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sun, 23 Mar 2025 23:34:24 +0100 Subject: [PATCH 083/115] Fixes Cheek Pouch mutating damage (#6466) --- include/battle.h | 3 ++- src/battle_script_commands.c | 14 ++++++++++++++ test/battle/ability/cheeck_pouch.c | 21 +++++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 test/battle/ability/cheeck_pouch.c diff --git a/include/battle.h b/include/battle.h index a6ba6d92e5..267abdc7f2 100644 --- a/include/battle.h +++ b/include/battle.h @@ -815,7 +815,8 @@ struct BattleStruct u8 monCausingSleepClause[NUM_BATTLE_SIDES]; // Stores which pokemon on a given side is causing Sleep Clause to be active as the mon's index in the party u8 additionalEffectsCounter:4; // A counter for the additionalEffects applied by the current move in Cmd_setadditionaleffects u8 redCardActivates:1; - u8 padding2:2; // padding in the middle so pursuit fields are together + u8 cheekPouchActivated:1; + u8 padding2:1; // padding in the middle so pursuit fields are together u8 pursuitStoredSwitch; // Stored id for the Pursuit target's switch s32 battlerExpReward; u16 prevTurnSpecies[MAX_BATTLERS_COUNT]; // Stores species the AI has in play at start of turn diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 7c6b95352d..62ae2184ee 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -345,6 +345,7 @@ static u32 GetNextTarget(u32 moveTarget, bool32 excludeCurrent); static void TryUpdateEvolutionTracker(u32 evolutionMethod, u32 upAmount, u16 usedMove); static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u8 *failInstr, u16 move); static void ResetValuesForCalledMove(void); +static void TryRestoreDamageAfterCheeckPouch(u32 battler); static void Cmd_attackcanceler(void); static void Cmd_accuracycheck(void); @@ -2669,6 +2670,7 @@ static void Cmd_datahpupdate(void) } } + TryRestoreDamageAfterCheeckPouch(battler); gBattlescriptCurrInstr = cmd->nextInstr; } @@ -8929,6 +8931,8 @@ static bool32 TryCheekPouch(u32 battler, u32 itemId) && gBattleStruct->ateBerry[GetBattlerSide(battler)] & (1u << gBattlerPartyIndexes[battler]) && !IsBattlerAtMaxHp(battler)) { + gBattleStruct->cheekPouchActivated = TRUE; + gBattleScripting.savedDmg = gBattleStruct->moveDamage[battler]; gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 3; if (gBattleStruct->moveDamage[battler] == 0) gBattleStruct->moveDamage[battler] = 1; @@ -8941,6 +8945,16 @@ static bool32 TryCheekPouch(u32 battler, u32 itemId) return FALSE; } +// When Cheek Pouch activates mid-battle it overwrites the current damage, so restore it +static void TryRestoreDamageAfterCheeckPouch(u32 battler) +{ + if (gBattleStruct->cheekPouchActivated) + { + gBattleStruct->moveDamage[battler] = gBattleScripting.savedDmg; + gBattleStruct->cheekPouchActivated = FALSE; + } +} + // Used by Bestow and Symbiosis to take an item from one battler and give to another. static void BestowItem(u32 battlerAtk, u32 battlerDef) { diff --git a/test/battle/ability/cheeck_pouch.c b/test/battle/ability/cheeck_pouch.c new file mode 100644 index 0000000000..3c932c4aa1 --- /dev/null +++ b/test/battle/ability/cheeck_pouch.c @@ -0,0 +1,21 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Cheek Pouch activation doesn't mutate damage when restoring HP mid battle") +{ + s16 damage; + s16 healing; + + GIVEN { + PLAYER(SPECIES_GREEDENT) { Ability(ABILITY_CHEEK_POUCH); Item(ITEM_CHOPLE_BERRY); HP(100); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_KARATE_CHOP); } + ABILITY_POPUP(player, ABILITY_CHEEK_POUCH); + HP_BAR(player, captureDamage: &healing); + HP_BAR(player, captureDamage: &damage); + } THEN { + EXPECT_LT(healing, 0); + EXPECT_GT(damage, 0); + } +} From 4a1d273b08c0e9bff74b70a102064de0fed59a25 Mon Sep 17 00:00:00 2001 From: Hedara Date: Mon, 24 Mar 2025 11:41:49 +0100 Subject: [PATCH 084/115] Changed unused compressed pal include from u16 to u32 --- src/graphics.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/graphics.c b/src/graphics.c index 2612022695..568571b323 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -257,7 +257,7 @@ const u16 gBattleAnimUnused_Unknown2[] = INCBIN_U16("graphics/battle_anims/unuse const u16 gBattleAnimUnused_Unknown3[] = INCBIN_U16("graphics/battle_anims/unused/unknown_3.bin"); const u32 gBattleAnimUnusedGfx_LineSketch2[] = INCBIN_U32("graphics/battle_anims/unused/line_sketch_2.8bpp.lz"); -const u16 gBattleAnimUnusedPal_LineSketch2[] = INCBIN_U16("graphics/battle_anims/unused/line_sketch_2.gbapal.lz"); +const u32 gBattleAnimUnusedPal_LineSketch2[] = INCBIN_U32("graphics/battle_anims/unused/line_sketch_2.gbapal.lz"); const u32 gBattleAnimUnusedTilemap_LineSketch2[] = INCBIN_U32("graphics/battle_anims/unused/line_sketch_2.bin.lz"); const u32 gBattleAnimSpriteGfx_BlueLines[] = INCBIN_U32("graphics/battle_anims/sprites/blue_lines.4bpp.lz"); From 521432b2694373949dbaf1ef265ccea14f67bb3e Mon Sep 17 00:00:00 2001 From: Hedara Date: Mon, 24 Mar 2025 13:25:59 +0100 Subject: [PATCH 085/115] Renamed a berry tag variable --- include/graphics.h | 2 +- src/berry_tag_screen.c | 2 +- src/data/graphics/berries.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/graphics.h b/include/graphics.h index 9e2fb79539..3c9b67addb 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -3307,7 +3307,7 @@ extern const u16 gPokedexSearchMenu_Pal[]; extern const u32 gBerryCheck_Gfx[]; extern const u32 gBerryCheck_Pal[]; extern const u32 gBerryTag_Gfx[]; -extern const u32 gBerryTag_Pal[]; +extern const u32 gBerryTag_Tilemap[]; // rayquaza scene gfx extern const u32 gRaySceneDuoFight_Groudon_Gfx[]; diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index 415f22e59e..4c6058ec3d 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -331,7 +331,7 @@ static bool8 LoadBerryTagGfx(void) } break; case 2: - LZDecompressWram(gBerryTag_Pal, sBerryTag->tilemapBuffers[2]); + LZDecompressWram(gBerryTag_Tilemap, sBerryTag->tilemapBuffers[2]); sBerryTag->gfxState++; break; case 3: diff --git a/src/data/graphics/berries.h b/src/data/graphics/berries.h index e33384a846..0809537597 100644 --- a/src/data/graphics/berries.h +++ b/src/data/graphics/berries.h @@ -2,7 +2,7 @@ const u32 gBerryCheck_Gfx[] = INCBIN_U32("graphics/bag/check_berry.4bpp.lz"); const u32 gBerryCheck_Pal[] = INCBIN_U32("graphics/bag/check_berry.gbapal.lz"); const u32 gBerryTag_Gfx[] = INCBIN_U32("graphics/bag/berry_tag.bin.lz"); -const u32 gBerryTag_Pal[] = INCBIN_U32("graphics/bag/berry_tag_title.bin.lz"); +const u32 gBerryTag_Tilemap[] = INCBIN_U32("graphics/bag/berry_tag_title.bin.lz"); const u32 gBerryCheckCircle_Gfx[] = INCBIN_U32("graphics/bag/check_berry_circle.4bpp.lz"); From c82959dbe61a898136c345bee6fc8568e08281f7 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Mon, 24 Mar 2025 14:58:57 +0100 Subject: [PATCH 086/115] Removed unused debug EWRAM variables (#6468) Co-authored-by: Hedara --- src/berry_blender.c | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/berry_blender.c b/src/berry_blender.c index 0a6eaaa2bf..5833f74793 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -237,9 +237,6 @@ static void PrintMadePokeblockString(struct Pokeblock *, u8 *); static bool32 TryAddContestLinkTvShow(struct Pokeblock *, struct TvBlenderStruct *); EWRAM_DATA static struct BerryBlender *sBerryBlender = NULL; -EWRAM_DATA static s32 sDebug_PokeblockFactorFlavors[FLAVOR_COUNT] = {0}; -EWRAM_DATA static s32 sDebug_PokeblockFactorFlavorsAfterRPM[FLAVOR_COUNT] = {0}; -EWRAM_DATA static u32 sDebug_PokeblockFactorRPM = 0; static s16 sPokeblockFlavors[FLAVOR_COUNT + 1]; // + 1 for feel static s16 sPokeblockPresentFlavors[FLAVOR_COUNT + 1]; @@ -2434,11 +2431,7 @@ static void CalculatePokeblock(struct BlenderBerry *berries, struct Pokeblock *p } } - for (i = 0; i < FLAVOR_COUNT; i++) - sDebug_PokeblockFactorFlavors[i] = sPokeblockFlavors[i]; - // Factor in max RPM and round - sDebug_PokeblockFactorRPM = multiuseVar = maxRPM / 333 + 100; for (i = 0; i < FLAVOR_COUNT; i++) { s32 remainder; @@ -2451,9 +2444,6 @@ static void CalculatePokeblock(struct BlenderBerry *berries, struct Pokeblock *p sPokeblockFlavors[i] = flavor; } - for (i = 0; i < FLAVOR_COUNT; i++) - sDebug_PokeblockFactorFlavorsAfterRPM[i] = sPokeblockFlavors[i]; - // Calculate color and feel of pokeblock pokeblock->color = CalculatePokeblockColor(berries, &sPokeblockFlavors[0], numPlayers, numNegatives); sPokeblockFlavors[FLAVOR_COUNT] = (sPokeblockFlavors[FLAVOR_COUNT] / numPlayers) - numPlayers; From 1d6d6a2bdf673c04a87307273d1cd3840485963f Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Mon, 24 Mar 2025 14:59:36 +0100 Subject: [PATCH 087/115] Fixes choice move locking at the wrong time (#6467) --- src/battle_script_commands.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 62ae2184ee..eb817f9dfe 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6479,9 +6479,10 @@ static void Cmd_moveend(void) { u16 *choicedMoveAtk = &gBattleStruct->choicedMove[gBattlerAttacker]; if (gHitMarker & HITMARKER_OBEYS - && (HOLD_EFFECT_CHOICE(holdEffectAtk) || GetBattlerAbility(gBattlerAttacker) == ABILITY_GORILLA_TACTICS) + && !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) && gChosenMove != MOVE_STRUGGLE - && (*choicedMoveAtk == MOVE_NONE || *choicedMoveAtk == MOVE_UNAVAILABLE)) + && (*choicedMoveAtk == MOVE_NONE || *choicedMoveAtk == MOVE_UNAVAILABLE) + && (HOLD_EFFECT_CHOICE(holdEffectAtk) || GetBattlerAbility(gBattlerAttacker) == ABILITY_GORILLA_TACTICS)) { if ((moveEffect == EFFECT_BATON_PASS || moveEffect == EFFECT_HEALING_WISH) && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_FAILED)) From ecab04d881a03a84a64a9a99f31daea06beb2e9b Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Tue, 25 Mar 2025 13:22:41 +0100 Subject: [PATCH 088/115] Sucker punch vs struggle (#6475) Co-authored-by: Hedara --- src/battle_script_commands.c | 2 +- test/battle/move_effect/sucker_punch.c | 53 ++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 test/battle/move_effect/sucker_punch.c diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index eb817f9dfe..af17d3f250 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -10628,7 +10628,7 @@ static void Cmd_various(void) gBattlescriptCurrInstr = cmd->failInstr; else if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget)) gBattlescriptCurrInstr = cmd->failInstr; - else if (IsBattleMoveStatus(gBattleMons[gBattlerTarget].moves[gBattleStruct->chosenMovePositions[gBattlerTarget]])) + else if (IsBattleMoveStatus(gBattleMons[gBattlerTarget].moves[gBattleStruct->chosenMovePositions[gBattlerTarget]]) && !gProtectStructs[gBattlerTarget].noValidMoves) gBattlescriptCurrInstr = cmd->failInstr; else gBattlescriptCurrInstr = cmd->nextInstr; diff --git a/test/battle/move_effect/sucker_punch.c b/test/battle/move_effect/sucker_punch.c new file mode 100644 index 0000000000..8076725467 --- /dev/null +++ b/test/battle/move_effect/sucker_punch.c @@ -0,0 +1,53 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Sucker Punch hits targets that are about to attack") +{ + GIVEN { + ASSUME(GetMoveCategory(MOVE_TACKLE) != DAMAGE_CATEGORY_STATUS); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SUCKER_PUNCH); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUCKER_PUNCH, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player); + } +} + +SINGLE_BATTLE_TEST("Sucker Punch doesn't hit targets using status moves") +{ + GIVEN { + ASSUME(GetMoveCategory(MOVE_GROWL) == DAMAGE_CATEGORY_STATUS); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SUCKER_PUNCH); MOVE(opponent, MOVE_GROWL); } + } SCENE { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUCKER_PUNCH, player); + HP_BAR(opponent); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_GROWL, opponent); + } +} + +SINGLE_BATTLE_TEST("Sucker Punch doesn't hit targets that has already moved") +{ + GIVEN { + ASSUME(GetMovePriority(MOVE_QUICK_ATTACK) == GetMovePriority(MOVE_SUCKER_PUNCH)); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_QUICK_ATTACK); MOVE(player, MOVE_SUCKER_PUNCH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, opponent); + HP_BAR(player); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUCKER_PUNCH, player); + HP_BAR(opponent); + } + } +} From 10412e1a472fbedb3c46f257527e539416b0f5b2 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 25 Mar 2025 16:30:15 +0100 Subject: [PATCH 089/115] Fixes protective pads against Protects secondary effects (#6474) --- src/battle_script_commands.c | 31 ++++++++++++++++--- test/battle/hold_effect/protective_pads.c | 37 +++++++++++++++++++++++ 2 files changed, 63 insertions(+), 5 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index af17d3f250..d5439d97a6 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6169,6 +6169,20 @@ static u32 GetNextTarget(u32 moveTarget, bool32 excludeCurrent) return battler; } +static inline bool32 IsProtectivePadsProtected(u32 battler, u32 move) +{ + if (!IsMoveMakingContact(move, battler)) + return FALSE; + + if (GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_PROTECTIVE_PADS) + { + RecordItemEffectBattle(battler, HOLD_EFFECT_PROTECTIVE_PADS); + return TRUE; + } + + return FALSE; +} + static void Cmd_moveend(void) { CMD_ARGS(u8 endMode, u8 endState); @@ -6206,6 +6220,7 @@ static void Cmd_moveend(void) { if (gProtectStructs[gBattlerTarget].spikyShielded && moveEffect != EFFECT_COUNTER + && !IsProtectivePadsProtected(gBattlerAttacker, gCurrentMove) && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) { gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; @@ -6217,7 +6232,8 @@ static void Cmd_moveend(void) gBattlescriptCurrInstr = BattleScript_SpikyShieldEffect; effect = 1; } - else if (gProtectStructs[gBattlerTarget].kingsShielded) + else if (gProtectStructs[gBattlerTarget].kingsShielded + && !IsProtectivePadsProtected(gBattlerAttacker, gCurrentMove)) { gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; i = gBattlerAttacker; @@ -6231,7 +6247,8 @@ static void Cmd_moveend(void) gBattlescriptCurrInstr = BattleScript_KingsShieldEffect; effect = 1; } - else if (gProtectStructs[gBattlerTarget].banefulBunkered) + else if (gProtectStructs[gBattlerTarget].banefulBunkered + && !IsProtectivePadsProtected(gBattlerAttacker, gCurrentMove)) { gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; gBattleScripting.moveEffect = MOVE_EFFECT_POISON | MOVE_EFFECT_AFFECTS_USER; @@ -6241,7 +6258,9 @@ static void Cmd_moveend(void) effect = 1; } else if (gProtectStructs[gBattlerTarget].obstructed - && moveEffect != EFFECT_SUCKER_PUNCH && moveEffect != EFFECT_UPPER_HAND) + && moveEffect != EFFECT_SUCKER_PUNCH + && moveEffect != EFFECT_UPPER_HAND + && !IsProtectivePadsProtected(gBattlerAttacker, gCurrentMove)) { gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; i = gBattlerAttacker; @@ -6252,7 +6271,8 @@ static void Cmd_moveend(void) gBattlescriptCurrInstr = BattleScript_KingsShieldEffect; effect = 1; } - else if (gProtectStructs[gBattlerTarget].silkTrapped) + else if (gProtectStructs[gBattlerTarget].silkTrapped + && !IsProtectivePadsProtected(gBattlerAttacker, gCurrentMove)) { gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; i = gBattlerAttacker; @@ -6263,7 +6283,8 @@ static void Cmd_moveend(void) gBattlescriptCurrInstr = BattleScript_KingsShieldEffect; effect = 1; } - else if (gProtectStructs[gBattlerTarget].burningBulwarked) + else if (gProtectStructs[gBattlerTarget].burningBulwarked + && !IsProtectivePadsProtected(gBattlerAttacker, gCurrentMove)) { gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; gBattleScripting.moveEffect = MOVE_EFFECT_BURN | MOVE_EFFECT_AFFECTS_USER; diff --git a/test/battle/hold_effect/protective_pads.c b/test/battle/hold_effect/protective_pads.c index 843d2fa003..41ffc83d4b 100644 --- a/test/battle/hold_effect/protective_pads.c +++ b/test/battle/hold_effect/protective_pads.c @@ -73,3 +73,40 @@ SINGLE_BATTLE_TEST("Protective Pads protects from Rocly Helmet Damage") } } } + +SINGLE_BATTLE_TEST("Protective Pads protects from Protect's secondary effects") +{ + u32 move; + + PARAMETRIZE { move = MOVE_SPIKY_SHIELD; } + PARAMETRIZE { move = MOVE_BANEFUL_BUNKER; } + PARAMETRIZE { move = MOVE_BURNING_BULWARK; } + PARAMETRIZE { move = MOVE_KINGS_SHIELD; } + PARAMETRIZE { move = MOVE_SILK_TRAP; } + PARAMETRIZE { move = MOVE_OBSTRUCT; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_PROTECTIVE_PADS); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + if (move == MOVE_SPIKY_SHIELD) { + HP_BAR(player); + } else if (move == MOVE_BANEFUL_BUNKER) { + STATUS_ICON(player, STATUS1_BURN); + } else if (move == MOVE_BURNING_BULWARK) { + STATUS_ICON(player, STATUS1_POISON); + } else if (move == MOVE_KINGS_SHIELD) { + MESSAGE("Wobbuffet's Attack fell!"); + } else if (move == MOVE_SILK_TRAP) { + MESSAGE("Wobbuffet's Speed fell!"); + } else if (move == MOVE_OBSTRUCT) { + MESSAGE("Wobbuffet's Defense harshly fell!"); + } + } + } +} From a36f838d768f07372c0f2023ac4703f3bd52dcbe Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Tue, 25 Mar 2025 20:01:34 +0100 Subject: [PATCH 090/115] AI gimmick check changed from checking trainer data to a BattleStruct field (#6478) Co-authored-by: Hedara --- include/battle.h | 3 +++ src/battle_gimmick.c | 8 ++------ src/battle_main.c | 3 +++ 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/include/battle.h b/include/battle.h index 267abdc7f2..f6b8dbf35a 100644 --- a/include/battle.h +++ b/include/battle.h @@ -838,6 +838,9 @@ struct BattleStruct u8 trainerSlideSpriteIds[MAX_BATTLERS_COUNT]; u8 embodyAspectBoost[NUM_BATTLE_SIDES]; u16 savedMove; // backup current move for mid-turn switching, e.g. Red Card + u16 opponentMonCanTera:6; + u16 opponentMonCanDynamax:6; + u16 padding:4; }; // The palaceFlags member of struct BattleStruct contains 1 flag per move to indicate which moves the AI should consider, diff --git a/src/battle_gimmick.c b/src/battle_gimmick.c index dfbbe0e7dc..0b725811ee 100644 --- a/src/battle_gimmick.c +++ b/src/battle_gimmick.c @@ -79,13 +79,9 @@ bool32 ShouldTrainerBattlerUseGimmick(u32 battler, enum Gimmick gimmick) // Check the trainer party data to see if a gimmick is intended. else { - bool32 isSecondTrainer = (GetBattlerPosition(battler) == B_POSITION_OPPONENT_RIGHT) && (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) && !BATTLE_TWO_VS_ONE_OPPONENT; - u16 trainerId = isSecondTrainer ? TRAINER_BATTLE_PARAM.opponentB : TRAINER_BATTLE_PARAM.opponentA; - const struct TrainerMon *mon = &GetTrainerPartyFromId(trainerId)[isSecondTrainer ? gBattlerPartyIndexes[battler] - MULTI_PARTY_SIZE : gBattlerPartyIndexes[battler]]; - - if (gimmick == GIMMICK_TERA && mon->teraType != TYPE_NONE) + if (gimmick == GIMMICK_TERA && gBattleStruct->opponentMonCanTera & 1 << gBattlerPartyIndexes[battler]) return TRUE; - if (gimmick == GIMMICK_DYNAMAX && mon->shouldUseDynamax) + if (gimmick == GIMMICK_DYNAMAX && gBattleStruct->opponentMonCanDynamax & 1 << gBattlerPartyIndexes[battler]) return TRUE; } diff --git a/src/battle_main.c b/src/battle_main.c index b04160c1ea..4834e26796 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -1964,6 +1964,8 @@ u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer if (partyData[monIndex].dynamaxLevel > 0) { u32 data = partyData[monIndex].dynamaxLevel; + if (partyData[monIndex].shouldUseDynamax) + gBattleStruct->opponentMonCanDynamax |= 1 << i; SetMonData(&party[i], MON_DATA_DYNAMAX_LEVEL, &data); } if (partyData[monIndex].gigantamaxFactor) @@ -1973,6 +1975,7 @@ u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer } if (partyData[monIndex].teraType > 0) { + gBattleStruct->opponentMonCanTera |= 1 << i; u32 data = partyData[monIndex].teraType; SetMonData(&party[i], MON_DATA_TERA_TYPE, &data); } From 5ec301f04ab1a9964996e759a88e2d6ba98479a0 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 25 Mar 2025 21:15:25 +0100 Subject: [PATCH 091/115] Removes unused Special Status members (#6479) --- include/battle.h | 2 -- src/battle_script_commands.c | 12 ------------ 2 files changed, 14 deletions(-) diff --git a/include/battle.h b/include/battle.h index 13acd4b009..6930834a9c 100644 --- a/include/battle.h +++ b/include/battle.h @@ -197,8 +197,6 @@ struct SpecialStatus { s32 physicalDmg; s32 specialDmg; - u8 physicalBattlerId; - u8 specialBattlerId; u8 changedStatsBattlerId; // Battler that was responsible for the latest stat change. Can be self. u8 statLowered:1; u8 lightningRodRedirected:1; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index af6ab2cd1f..9a709e6a1e 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2628,15 +2628,9 @@ static void Cmd_datahpupdate(void) gProtectStructs[battler].physicalDmg = gBattleStruct->moveDamage[battler]; gSpecialStatuses[battler].physicalDmg = gBattleStruct->moveDamage[battler]; if (cmd->battler == BS_TARGET) - { gProtectStructs[battler].physicalBattlerId = gBattlerAttacker; - gSpecialStatuses[battler].physicalBattlerId = gBattlerAttacker; - } else - { gProtectStructs[battler].physicalBattlerId = gBattlerTarget; - gSpecialStatuses[battler].physicalBattlerId = gBattlerTarget; - } } else if (!IsBattleMovePhysical(gCurrentMove) && !(gHitMarker & HITMARKER_PASSIVE_DAMAGE) && effect != EFFECT_PAIN_SPLIT) { @@ -2644,15 +2638,9 @@ static void Cmd_datahpupdate(void) gProtectStructs[battler].specialDmg = gBattleStruct->moveDamage[battler]; gSpecialStatuses[battler].specialDmg = gBattleStruct->moveDamage[battler]; if (cmd->battler == BS_TARGET) - { gProtectStructs[battler].specialBattlerId = gBattlerAttacker; - gSpecialStatuses[battler].specialBattlerId = gBattlerAttacker; - } else - { gProtectStructs[battler].specialBattlerId = gBattlerTarget; - gSpecialStatuses[battler].specialBattlerId = gBattlerTarget; - } } } gHitMarker &= ~HITMARKER_PASSIVE_DAMAGE; From b60fcc9a7273dce9489d91c40f35d974539b733f Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Wed, 26 Mar 2025 03:39:25 -0700 Subject: [PATCH 092/115] Add B_ANIMATE_MON_AFTER_KO - mons animate after scoring a KO (#6451) --- include/config/battle.h | 1 + src/battle_controllers.c | 51 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/include/config/battle.h b/include/config/battle.h index a9504672dd..c142fcabe8 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -257,6 +257,7 @@ #define B_QUICK_MOVE_CURSOR_TO_RUN FALSE // If set to TRUE, pushing B in the battle options against a wild encounter will move the cursor to the run option #define B_MOVE_DESCRIPTION_BUTTON L_BUTTON // If set to a button other than B_LAST_USED_BALL_BUTTON, pressing this button will open the move description menu #define B_SHOW_USELESS_Z_MOVE_INFO FALSE // If set to TRUE, Z-moves without additional effects like newer gen status moves will say "no additional effect" +#define B_ANIMATE_MON_AFTER_KO TRUE // If set to TRUE, if a Pokémon on the opposite site faints, the non-fainted Pokemon will display a victory animation. #define B_SHOW_DYNAMAX_MESSAGE FALSE // If set to TRUE, an additional battle message is shown after completing Dynamaxing/Gigantamaxing. // Catching settings diff --git a/src/battle_controllers.c b/src/battle_controllers.c index 952bdfe345..0382285fd9 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -25,6 +25,7 @@ #include "text.h" #include "constants/abilities.h" #include "constants/songs.h" +#include "pokemon_animation.h" static EWRAM_DATA u8 sLinkSendTaskId = 0; static EWRAM_DATA u8 sLinkReceiveTaskId = 0; @@ -42,6 +43,9 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId); static void Task_StartSendOutAnim(u8 taskId); static void SpriteCB_FreePlayerSpriteLoadMonSprite(struct Sprite *sprite); static void SpriteCB_FreeOpponentSprite(struct Sprite *sprite); +static u32 ReturnAnimIdForBattler(bool32 isPlayerSide, u32 specificBattler); +static void LaunchKOAnimation(u32 battlerId, u16 animId, bool32 isFront); +static void AnimateMonAfterKnockout(u32 battler); void HandleLinkBattleSetup(void) { @@ -2571,6 +2575,7 @@ void BtlController_HandleTrainerSlideBack(u32 battler, s16 data0, bool32 startAn void BtlController_HandleFaintAnimation(u32 battler) { + SetHealthboxSpriteInvisible(gHealthboxSpriteIds[battler]); if (gBattleSpritesDataPtr->healthBoxesData[battler].animationState == 0) { if (gBattleSpritesDataPtr->battlerData[battler].behindSubstitute) @@ -2601,6 +2606,7 @@ void BtlController_HandleFaintAnimation(u32 battler) // The player's sprite is removed in Controller_FaintPlayerMon. Controller_FaintOpponentMon only removes the healthbox once the sprite is removed by SpriteCB_FaintOpponentMon. } } + AnimateMonAfterKnockout(battler); } #undef sSpeedX @@ -3015,3 +3021,48 @@ void BtlController_HandleBattleAnimation(u32 battler, bool32 ignoreSE, bool32 up BattleTv_SetDataBasedOnAnimation(animationId); } } + +static void AnimateMonAfterKnockout(u32 battler) +{ + if (B_ANIMATE_MON_AFTER_KO == FALSE) + return; + + u32 oppositeBattler = BATTLE_OPPOSITE(battler); + u32 partnerBattler = BATTLE_PARTNER(oppositeBattler); + bool32 wasPlayerSideKnockedOut = (GetBattlerSide(battler) == B_SIDE_PLAYER); + + if (IsBattlerAlive(oppositeBattler)) + LaunchKOAnimation(oppositeBattler, ReturnAnimIdForBattler(wasPlayerSideKnockedOut, oppositeBattler), wasPlayerSideKnockedOut); + + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsBattlerAlive(partnerBattler)) + LaunchKOAnimation(partnerBattler, ReturnAnimIdForBattler(wasPlayerSideKnockedOut, partnerBattler), wasPlayerSideKnockedOut); +} + +static void LaunchKOAnimation(u32 battlerId, u16 animId, bool32 isFront) +{ + u32 species = gBattleMons[battlerId].species; + u32 spriteId = gBattlerSpriteIds[battlerId]; + + if (isFront) + { + LaunchAnimationTaskForFrontSprite(&gSprites[spriteId], animId); + + if (HasTwoFramesAnimation(species)) + StartSpriteAnim(&gSprites[spriteId], 1); + } + else + { + LaunchAnimationTaskForBackSprite(&gSprites[spriteId], animId); + } + + PlayCry_Normal(species, CRY_PRIORITY_NORMAL); +} + +static u32 ReturnAnimIdForBattler(bool32 wasPlayerSideKnockedOut, u32 specificBattler) +{ + if (wasPlayerSideKnockedOut) + return gSpeciesInfo[gBattleMons[specificBattler].species].frontAnimId; + else + return GetSpeciesBackAnimSet(gBattleMons[specificBattler].species); +} + From 92cb9ab642dbc2bb3d02ab0c3b0a9e33e1f92c0b Mon Sep 17 00:00:00 2001 From: PCG <75729017+PCG06@users.noreply.github.com> Date: Fri, 28 Mar 2025 01:46:19 +0530 Subject: [PATCH 093/115] Increase dex no digits from 3 to 4 (#6484) --- src/pokedex_plus_hgss.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pokedex_plus_hgss.c b/src/pokedex_plus_hgss.c index 3c14080614..844aec9587 100644 --- a/src/pokedex_plus_hgss.c +++ b/src/pokedex_plus_hgss.c @@ -5344,7 +5344,7 @@ static void PrintStatsScreen_NameGender(u8 taskId, u32 num, u32 value) value = NationalToHoennOrder(num); else value = num; - ConvertIntToDecimalStringN(StringCopy(str, gText_NumberClear01), value, STR_CONV_MODE_LEADING_ZEROS, 3); + ConvertIntToDecimalStringN(StringCopy(str, gText_NumberClear01), value, STR_CONV_MODE_LEADING_ZEROS, 4); PrintStatsScreenTextSmall(WIN_STATS_NAME_GENDER, str, base_x, base_y + 10); //Gender ratio //MON_GENDERLESS == 0xFF From ce3d6a924ade0a6477b928de3e2a356665581e55 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Fri, 28 Mar 2025 11:35:06 +0100 Subject: [PATCH 094/115] Fixes clear body type effect and clear amulet against protect effects (#6482) --- include/battle_util.h | 1 + src/battle_script_commands.c | 47 +++++++++++++++-------- src/battle_util.c | 21 +++++----- test/battle/ability/clear_body.c | 40 +++++++++++++++++++ test/battle/hold_effect/clear_amulet.c | 31 +++++++++++++++ test/battle/hold_effect/protective_pads.c | 4 +- test/battle/move_effect/counter.c | 37 ++++++++++++++++++ test/battle/move_effect/protect.c | 20 ---------- 8 files changed, 154 insertions(+), 47 deletions(-) diff --git a/include/battle_util.h b/include/battle_util.h index 6f1223b684..eef6a009e0 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -205,6 +205,7 @@ bool32 AreAllMovesUnusable(u32 battler); u8 GetImprisonedMovesCount(u32 battler, u16 move); u8 DoFieldEndTurnEffects(void); s32 GetDrainedBigRootHp(u32 battler, s32 hp); +bool32 IsMagicGuardProtected(u32 battler, u32 ability); u8 DoBattlerEndTurnEffects(void); bool32 HandleWishPerishSongOnTurnEnd(void); bool32 HandleFaintedMonActions(void); diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index d5439d97a6..8885c84a66 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -339,7 +339,7 @@ static bool32 SetTargetToNextPursuiter(u32 battlerDef); void ApplyExperienceMultipliers(s32 *expAmount, u8 expGetterMonId, u8 faintedBattler); static void RemoveAllWeather(void); static void RemoveAllTerrains(void); -static bool8 CanAbilityPreventStatLoss(u16 abilityDef); +static bool32 CanAbilityPreventStatLoss(u32 abilityDef); static bool8 CanBurnHitThaw(u16 move); static u32 GetNextTarget(u32 moveTarget, bool32 excludeCurrent); static void TryUpdateEvolutionTracker(u32 evolutionMethod, u32 upAmount, u16 usedMove); @@ -1321,9 +1321,10 @@ static void Cmd_attackcanceler(void) RecordAbilityBattle(gBattlerTarget, gLastUsedAbility); } else if (IsBattlerProtected(gBattlerAttacker, gBattlerTarget, gCurrentMove) - && (gCurrentMove != MOVE_CURSE || IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST)) + && (effect != EFFECT_CURSE || IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST)) && (!gBattleMoveEffects[effect].twoTurnEffect || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)) && effect != EFFECT_SUCKER_PUNCH + && effect != EFFECT_COUNTER && effect != EFFECT_UPPER_HAND) { if (IsMoveMakingContact(gCurrentMove, gBattlerAttacker)) @@ -6169,14 +6170,31 @@ static u32 GetNextTarget(u32 moveTarget, bool32 excludeCurrent) return battler; } -static inline bool32 IsProtectivePadsProtected(u32 battler, u32 move) +static inline bool32 IsProtectivePadsProtected(u32 battler, u32 move, u32 holdEffect) { - if (!IsMoveMakingContact(move, battler)) + if (holdEffect != HOLD_EFFECT_PROTECTIVE_PADS) return FALSE; - if (GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_PROTECTIVE_PADS) + RecordItemEffectBattle(battler, holdEffect); + return TRUE; +} + +static inline bool32 IsProtectEffectAffected(u32 battler, u32 move) +{ + u32 holdEffect = GetBattlerHoldEffect(gBattlerAttacker, TRUE); + if (IsProtectivePadsProtected(battler, move, holdEffect)) + return TRUE; + + if (holdEffect == HOLD_EFFECT_CLEAR_AMULET) { - RecordItemEffectBattle(battler, HOLD_EFFECT_PROTECTIVE_PADS); + RecordItemEffectBattle(battler, holdEffect); + return TRUE; + } + + u32 ability = GetBattlerAbility(gBattlerAttacker); + if (CanAbilityPreventStatLoss(ability)) + { + RecordAbilityBattle(battler, ability); return TRUE; } @@ -6219,9 +6237,8 @@ static void Cmd_moveend(void) if (gProtectStructs[gBattlerAttacker].touchedProtectLike) { if (gProtectStructs[gBattlerTarget].spikyShielded - && moveEffect != EFFECT_COUNTER - && !IsProtectivePadsProtected(gBattlerAttacker, gCurrentMove) - && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD) + && !IsProtectivePadsProtected(gBattlerAttacker, gCurrentMove, GetBattlerHoldEffect(gBattlerAttacker, TRUE)) + && !IsMagicGuardProtected(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker))) { gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerAttacker) / 8; @@ -6233,7 +6250,7 @@ static void Cmd_moveend(void) effect = 1; } else if (gProtectStructs[gBattlerTarget].kingsShielded - && !IsProtectivePadsProtected(gBattlerAttacker, gCurrentMove)) + && !IsProtectEffectAffected(gBattlerAttacker, gCurrentMove)) { gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; i = gBattlerAttacker; @@ -6248,7 +6265,7 @@ static void Cmd_moveend(void) effect = 1; } else if (gProtectStructs[gBattlerTarget].banefulBunkered - && !IsProtectivePadsProtected(gBattlerAttacker, gCurrentMove)) + && !IsProtectivePadsProtected(gBattlerAttacker, gCurrentMove, GetBattlerHoldEffect(gBattlerAttacker, TRUE))) { gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; gBattleScripting.moveEffect = MOVE_EFFECT_POISON | MOVE_EFFECT_AFFECTS_USER; @@ -6260,7 +6277,7 @@ static void Cmd_moveend(void) else if (gProtectStructs[gBattlerTarget].obstructed && moveEffect != EFFECT_SUCKER_PUNCH && moveEffect != EFFECT_UPPER_HAND - && !IsProtectivePadsProtected(gBattlerAttacker, gCurrentMove)) + && !IsProtectEffectAffected(gBattlerAttacker, gCurrentMove)) { gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; i = gBattlerAttacker; @@ -6272,7 +6289,7 @@ static void Cmd_moveend(void) effect = 1; } else if (gProtectStructs[gBattlerTarget].silkTrapped - && !IsProtectivePadsProtected(gBattlerAttacker, gCurrentMove)) + && !IsProtectEffectAffected(gBattlerAttacker, gCurrentMove)) { gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; i = gBattlerAttacker; @@ -6284,7 +6301,7 @@ static void Cmd_moveend(void) effect = 1; } else if (gProtectStructs[gBattlerTarget].burningBulwarked - && !IsProtectivePadsProtected(gBattlerAttacker, gCurrentMove)) + && !IsProtectivePadsProtected(gBattlerAttacker, gCurrentMove, GetBattlerHoldEffect(gBattlerAttacker, TRUE))) { gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; gBattleScripting.moveEffect = MOVE_EFFECT_BURN | MOVE_EFFECT_AFFECTS_USER; @@ -16824,7 +16841,7 @@ static bool8 IsFinalStrikeEffect(u32 moveEffect) return FALSE; } -static bool8 CanAbilityPreventStatLoss(u16 abilityDef) +static bool32 CanAbilityPreventStatLoss(u32 abilityDef) { switch (abilityDef) { diff --git a/src/battle_util.c b/src/battle_util.c index 9fb321118f..863bbcb8c7 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2207,7 +2207,8 @@ s32 GetDrainedBigRootHp(u32 battler, s32 hp) return hp * -1; } -static inline bool32 IsBattlerProtectedByMagicGuard(u32 battler, u32 ability) +// This should always be the last check. Otherwise the ability might be recorded when it is not supposed to be +bool32 IsMagicGuardProtected(u32 battler, u32 ability) { if (ability != ABILITY_MAGIC_GUARD) return FALSE; @@ -2343,7 +2344,7 @@ u8 DoBattlerEndTurnEffects(void) if ((gStatuses3[battler] & STATUS3_LEECHSEED) && IsBattlerAlive(gStatuses3[battler] & STATUS3_LEECHSEED_BATTLER) && IsBattlerAlive(battler) - && !IsBattlerProtectedByMagicGuard(battler, ability)) + && !IsMagicGuardProtected(battler, ability)) { gBattlerTarget = gStatuses3[battler] & STATUS3_LEECHSEED_BATTLER; // Notice gBattlerTarget is actually the HP receiver. gBattlerAttacker = battler; @@ -2374,7 +2375,7 @@ u8 DoBattlerEndTurnEffects(void) case ENDTURN_POISON: // poison if ((gBattleMons[battler].status1 & STATUS1_POISON) && IsBattlerAlive(battler) - && !IsBattlerProtectedByMagicGuard(battler, ability)) + && !IsMagicGuardProtected(battler, ability)) { if (ability == ABILITY_POISON_HEAL) { @@ -2402,7 +2403,7 @@ u8 DoBattlerEndTurnEffects(void) case ENDTURN_BAD_POISON: // toxic poison if ((gBattleMons[battler].status1 & STATUS1_TOXIC_POISON) && IsBattlerAlive(battler) - && !IsBattlerProtectedByMagicGuard(battler, ability)) + && !IsMagicGuardProtected(battler, ability)) { if (ability == ABILITY_POISON_HEAL) { @@ -2433,7 +2434,7 @@ u8 DoBattlerEndTurnEffects(void) case ENDTURN_BURN: // burn if ((gBattleMons[battler].status1 & STATUS1_BURN) && IsBattlerAlive(battler) - && !IsBattlerProtectedByMagicGuard(battler, ability)) + && !IsMagicGuardProtected(battler, ability)) { gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / (B_BURN_DAMAGE >= GEN_7 ? 16 : 8); if (ability == ABILITY_HEATPROOF) @@ -2452,7 +2453,7 @@ u8 DoBattlerEndTurnEffects(void) case ENDTURN_FROSTBITE: // burn if ((gBattleMons[battler].status1 & STATUS1_FROSTBITE) && IsBattlerAlive(battler) - && !IsBattlerProtectedByMagicGuard(battler, ability)) + && !IsMagicGuardProtected(battler, ability)) { gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / (B_BURN_DAMAGE >= GEN_7 ? 16 : 8); if (gBattleStruct->moveDamage[battler] == 0) @@ -2465,7 +2466,7 @@ u8 DoBattlerEndTurnEffects(void) case ENDTURN_NIGHTMARES: // spooky nightmares if ((gBattleMons[battler].status2 & STATUS2_NIGHTMARE) && IsBattlerAlive(battler) - && !IsBattlerProtectedByMagicGuard(battler, ability)) + && !IsMagicGuardProtected(battler, ability)) { // R/S does not perform this sleep check, which causes the nightmare effect to // persist even after the affected Pokémon has been awakened by Shed Skin. @@ -2487,7 +2488,7 @@ u8 DoBattlerEndTurnEffects(void) case ENDTURN_CURSE: // curse if ((gBattleMons[battler].status2 & STATUS2_CURSED) && IsBattlerAlive(battler) - && !IsBattlerProtectedByMagicGuard(battler, ability)) + && !IsMagicGuardProtected(battler, ability)) { gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 4; if (gBattleStruct->moveDamage[battler] == 0) @@ -2502,7 +2503,7 @@ u8 DoBattlerEndTurnEffects(void) { if (--gDisableStructs[battler].wrapTurns != 0) // damaged by wrap { - if (IsBattlerProtectedByMagicGuard(battler, ability)) + if (IsMagicGuardProtected(battler, ability)) { gBattleStruct->turnEffectsTracker++; break; @@ -2812,7 +2813,7 @@ u8 DoBattlerEndTurnEffects(void) case ENDTURN_SALT_CURE: if (gStatuses4[battler] & STATUS4_SALT_CURE && IsBattlerAlive(battler) - && !IsBattlerProtectedByMagicGuard(battler, ability)) + && !IsMagicGuardProtected(battler, ability)) { gBattlerTarget = battler; if (IS_BATTLER_ANY_TYPE(battler, TYPE_STEEL, TYPE_WATER)) diff --git a/test/battle/ability/clear_body.c b/test/battle/ability/clear_body.c index fd2317a545..4b9273edc1 100644 --- a/test/battle/ability/clear_body.c +++ b/test/battle/ability/clear_body.c @@ -412,3 +412,43 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent S MESSAGE("The opposing Metang used Celebrate!"); } } + +SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke protect from Protect's secondary effects") +{ + u32 move = MOVE_NONE; + u32 species = SPECIES_NONE; + u32 ability = ABILITY_NONE; + + static const u32 moves[] = { + MOVE_SPIKY_SHIELD, + MOVE_KINGS_SHIELD, + MOVE_SILK_TRAP, + MOVE_OBSTRUCT, + }; + + for (u32 j = 0; j < ARRAY_COUNT(moves); j++) + { + PARAMETRIZE{ move = moves[j]; species = SPECIES_METANG; ability = ABILITY_CLEAR_BODY; } + PARAMETRIZE{ move = moves[j]; species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; } + PARAMETRIZE{ move = moves[j]; species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; } + } + + GIVEN { + PLAYER(species) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + if (move == MOVE_KINGS_SHIELD) { + MESSAGE("Wobbuffet's Attack fell!"); + } else if (move == MOVE_SILK_TRAP) { + MESSAGE("Wobbuffet's Speed fell!"); + } else if (move == MOVE_OBSTRUCT) { + MESSAGE("Wobbuffet's Defense harshly fell!"); + } + } + } +} diff --git a/test/battle/hold_effect/clear_amulet.c b/test/battle/hold_effect/clear_amulet.c index cc143c51e1..bbe58f164b 100644 --- a/test/battle/hold_effect/clear_amulet.c +++ b/test/battle/hold_effect/clear_amulet.c @@ -88,3 +88,34 @@ SINGLE_BATTLE_TEST("Clear Amulet prevents secondary effects that reduce stats") } } } + +SINGLE_BATTLE_TEST("Clear Amulet protects from Protect's secondary effects") +{ + u32 move; + + PARAMETRIZE { move = MOVE_SPIKY_SHIELD; } + PARAMETRIZE { move = MOVE_BANEFUL_BUNKER; } + PARAMETRIZE { move = MOVE_BURNING_BULWARK; } + PARAMETRIZE { move = MOVE_KINGS_SHIELD; } + PARAMETRIZE { move = MOVE_SILK_TRAP; } + PARAMETRIZE { move = MOVE_OBSTRUCT; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_CLEAR_AMULET); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + if (move == MOVE_KINGS_SHIELD) { + MESSAGE("Wobbuffet's Attack fell!"); + } else if (move == MOVE_SILK_TRAP) { + MESSAGE("Wobbuffet's Speed fell!"); + } else if (move == MOVE_OBSTRUCT) { + MESSAGE("Wobbuffet's Defense harshly fell!"); + } + } + } +} diff --git a/test/battle/hold_effect/protective_pads.c b/test/battle/hold_effect/protective_pads.c index 41ffc83d4b..8bd206c6a3 100644 --- a/test/battle/hold_effect/protective_pads.c +++ b/test/battle/hold_effect/protective_pads.c @@ -97,9 +97,9 @@ SINGLE_BATTLE_TEST("Protective Pads protects from Protect's secondary effects") if (move == MOVE_SPIKY_SHIELD) { HP_BAR(player); } else if (move == MOVE_BANEFUL_BUNKER) { - STATUS_ICON(player, STATUS1_BURN); - } else if (move == MOVE_BURNING_BULWARK) { STATUS_ICON(player, STATUS1_POISON); + } else if (move == MOVE_BURNING_BULWARK) { + STATUS_ICON(player, STATUS1_BURN); } else if (move == MOVE_KINGS_SHIELD) { MESSAGE("Wobbuffet's Attack fell!"); } else if (move == MOVE_SILK_TRAP) { diff --git a/test/battle/move_effect/counter.c b/test/battle/move_effect/counter.c index f4d3a78114..d45e75b478 100644 --- a/test/battle/move_effect/counter.c +++ b/test/battle/move_effect/counter.c @@ -1,6 +1,43 @@ #include "global.h" #include "test/battle.h" +SINGLE_BATTLE_TEST("Counter is not affected by Protect effects") +{ + u32 move; + + PARAMETRIZE { move = MOVE_SPIKY_SHIELD; } + PARAMETRIZE { move = MOVE_BANEFUL_BUNKER; } + PARAMETRIZE { move = MOVE_BURNING_BULWARK; } + PARAMETRIZE { move = MOVE_KINGS_SHIELD; } + PARAMETRIZE { move = MOVE_SILK_TRAP; } + PARAMETRIZE { move = MOVE_OBSTRUCT; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); MOVE(player, MOVE_COUNTER); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_COUNTER, player); + if (move == MOVE_SPIKY_SHIELD) { + HP_BAR(player); + } else if (move == MOVE_BANEFUL_BUNKER) { + STATUS_ICON(player, STATUS1_POISON); + } else if (move == MOVE_BURNING_BULWARK) { + STATUS_ICON(player, STATUS1_BURN); + } else if (move == MOVE_KINGS_SHIELD) { + MESSAGE("Wobbuffet's Attack fell!"); + } else if (move == MOVE_SILK_TRAP) { + MESSAGE("Wobbuffet's Speed fell!"); + } else if (move == MOVE_OBSTRUCT) { + MESSAGE("Wobbuffet's Defense harshly fell!"); + } + } + } +} + 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 diff --git a/test/battle/move_effect/protect.c b/test/battle/move_effect/protect.c index 84862bbcd4..82a29ef81b 100644 --- a/test/battle/move_effect/protect.c +++ b/test/battle/move_effect/protect.c @@ -563,23 +563,3 @@ DOUBLE_BATTLE_TEST("Crafty Shield does not protect against moves that target all MESSAGE("The opposing Sunflora's Defense rose!"); } } - -SINGLE_BATTLE_TEST("Spiky Shield does not damage users on Counter or Mirror Coat") -{ - u32 move; - PARAMETRIZE { move = MOVE_MIRROR_COAT; } - PARAMETRIZE { move = MOVE_COUNTER; } - GIVEN { - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_SPIKY_SHIELD); MOVE(opponent, move); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKY_SHIELD, player); - NONE_OF { - ANIMATION(ANIM_TYPE_MOVE, move, opponent); - HP_BAR(opponent); - } - } -} - From 06c4a37b1f6baf640b9887852b16c68ba3718672 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Fri, 28 Mar 2025 15:52:50 +0100 Subject: [PATCH 095/115] Remove potential pitfall with saved damage for recoil moves (#6485) --- src/battle_script_commands.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index e7ed8aea98..a885191853 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6406,10 +6406,9 @@ static void Cmd_moveend(void) else if (moveEffect == EFFECT_RECOIL && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && IsBattlerAlive(gBattlerAttacker) - && IsBattlerTurnDamaged(gBattlerTarget) - && gBattleScripting.savedDmg != 0) // Some checks may be redundant alongside this one + && IsBattlerTurnDamaged(gBattlerTarget)) { - gBattleStruct->moveDamage[gBattlerAttacker] = max(1, gBattleScripting.savedDmg * max(1, moveRecoil) / 100); + gBattleStruct->moveDamage[gBattlerAttacker] = max(1, gBattleStruct->moveDamage[gBattlerTarget] * max(1, moveRecoil) / 100); BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_MoveEffectRecoil; effect = TRUE; From 56947be5d67bc3cac222497f57ba60bbc816d01a Mon Sep 17 00:00:00 2001 From: Isaac Aronson Date: Fri, 28 Mar 2025 10:26:01 -0500 Subject: [PATCH 096/115] Fix union room typo --- src/data/union_room.h | 2 +- src/union_room.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/union_room.h b/src/data/union_room.h index c4bd984736..8f17bb81db 100644 --- a/src/data/union_room.h +++ b/src/data/union_room.h @@ -451,7 +451,7 @@ ALIGNED(4) static const u8 sText_NobodyHasRegistered[] = _("Nobody has registere ALIGNED(4) static const u8 sText_ChooseRequestedMonType[] = _("Please choose the type of POKéMON\nthat you would like in the trade.\n"); ALIGNED(4) static const u8 sText_WhichMonWillYouOffer[] = _("Which of your party POKéMON will\nyou offer in trade?\p"); ALIGNED(4) static const u8 sText_RegistrationCanceled[] = _("Registration has been canceled.\p"); -ALIGNED(4) static const u8 sText_RegistraionCompleted[] = _("Registration has been completed.\p"); +ALIGNED(4) static const u8 sText_RegistrationCompleted[] = _("Registration has been completed.\p"); ALIGNED(4) static const u8 sText_TradeCanceled[] = _("The trade has been canceled.\p"); ALIGNED(4) static const u8 sText_CancelRegistrationOfMon[] = _("Cancel the registration of your\nLv. {STR_VAR_2} {STR_VAR_1}?"); ALIGNED(4) static const u8 sText_CancelRegistrationOfEgg[] = _("Cancel the registration of your\nEGG?"); diff --git a/src/union_room.c b/src/union_room.c index 1b29863183..36bc5ee4c6 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -3125,7 +3125,7 @@ static void Task_RunUnionRoom(u8 taskId) break; case UR_STATE_REGISTER_COMPLETE: SetTradeBoardRegisteredMonInfo(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel); - ScheduleFieldMessageAndExit(sText_RegistraionCompleted); + ScheduleFieldMessageAndExit(sText_RegistrationCompleted); break; case UR_STATE_CANCEL_REGISTRATION_PROMPT: switch (UnionRoomHandleYesNo(&uroom->textState, FALSE)) From 8b3428923c887a7e7b64f4997673623f087c4112 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Fri, 28 Mar 2025 21:20:50 +0100 Subject: [PATCH 097/115] Changed KNOWN_FAILING test (#6492) Co-authored-by: Hedara --- test/battle/move_effect/toxic_spikes.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/test/battle/move_effect/toxic_spikes.c b/test/battle/move_effect/toxic_spikes.c index 70053b4a44..641fc0520c 100644 --- a/test/battle/move_effect/toxic_spikes.c +++ b/test/battle/move_effect/toxic_spikes.c @@ -186,13 +186,9 @@ SINGLE_BATTLE_TEST("Toxic Spikes are removed by grounded Poison-type Pokémon on } } -// This would test for what I believe to be a bug in the mainline games. -// A Pokémon that gets passed magnet rise should still remove the Toxic -// Spikes even though it is airborne. -// The test currently fails, because we don't incorporate this bug. -SINGLE_BATTLE_TEST("Toxic Spikes are removed by Poison-type Pokémon affected by Magnet Rise on switch in") +// Tested in Gen 7 on cartridge +SINGLE_BATTLE_TEST("Toxic Spikes are not removed by Poison-type Pokémon affected by Magnet Rise on switch in") { - KNOWN_FAILING; GIVEN { ASSUME(gSpeciesInfo[SPECIES_EKANS].types[0] == TYPE_POISON); PLAYER(SPECIES_WOBBUFFET); @@ -203,9 +199,8 @@ SINGLE_BATTLE_TEST("Toxic Spikes are removed by Poison-type Pokémon affected by TURN { MOVE(player, MOVE_TOXIC_SPIKES); MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(opponent, 1); } TURN { SWITCH(opponent, 0); } } SCENE { - NOT STATUS_ICON(opponent, poison: TRUE); - MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); - NOT STATUS_ICON(opponent, poison: TRUE); + NOT MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); + STATUS_ICON(opponent, poison: TRUE); } } From 8d94edaaa06383a1b2ac8f71c8463889bcd15f0c Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Fri, 28 Mar 2025 21:21:17 +0100 Subject: [PATCH 098/115] Added workflow for labels check (#6488) Co-authored-by: Hedara --- .github/workflows/labels.yml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 .github/workflows/labels.yml diff --git a/.github/workflows/labels.yml b/.github/workflows/labels.yml new file mode 100644 index 0000000000..a9198fbff3 --- /dev/null +++ b/.github/workflows/labels.yml @@ -0,0 +1,27 @@ +name: Labels + +on: + pull_request: + types: [opened, labeled, unlabeled] + +jobs: + label: + runs-on: ubuntu-latest + steps: + - name: check labels + uses: mheap/github-action-required-labels@v5 + with: + mode: minimum + count: 1 + labels: | + General + category: ability + category: battle-ai + category: battle-mechanic + category: battle-tests + category: items + category: move animation + category: move effect + category: overworld + category: pokemon + category: sprite-issue From 71a5542168ca4d675ccf92288db5741201330d5e Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Fri, 28 Mar 2025 20:21:58 +0000 Subject: [PATCH 099/115] metaprogram.h without global.h (#6469) --- include/metaprogram.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/metaprogram.h b/include/metaprogram.h index 67736cfbc0..be62b2f9e5 100644 --- a/include/metaprogram.h +++ b/include/metaprogram.h @@ -4,11 +4,11 @@ /* Check if VA_OPT_ is supported by the compiler. GCC's version should be at least 9.5*/ #define PP_THIRD_ARG(a,b,c,...) c -#define VA_OPT_SUPPORTED_I(...) PP_THIRD_ARG(__VA_OPT__(,),TRUE,FALSE,) +#define VA_OPT_SUPPORTED_I(...) PP_THIRD_ARG(__VA_OPT__(,),1,0,) #define VA_OPT_SUPPORTED VA_OPT_SUPPORTED_I(?) #if !VA_OPT_SUPPORTED -#error ERROR: VA_OPT__ is not supported. Please update your gcc compiler to version 10 or higher +#error ERROR: __VA_OPT__ is not supported. Please update your arm-none-eabi-gcc compiler to version 10 or higher #endif // VA_OPT_SUPPORTED /* Calls m0/m1/.../m8 depending on how many arguments are passed. */ From b0c7d1a8eea22273156c5781b3ba8bdd76563d34 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Fri, 28 Mar 2025 21:43:04 +0100 Subject: [PATCH 100/115] Made memory integrity checks run betweeen PARAMETRIZE runs (#6462) Co-authored-by: Hedara --- include/test_runner.h | 1 + test/test_runner.c | 96 +++++++++++++++++++------------- test/test_runner_battle.c | 1 + tools/mgba-rom-test-hydra/main.c | 2 + 4 files changed, 61 insertions(+), 39 deletions(-) diff --git a/include/test_runner.h b/include/test_runner.h index f61f26b66e..9e0d96ff5b 100644 --- a/include/test_runner.h +++ b/include/test_runner.h @@ -20,6 +20,7 @@ void TestRunner_Battle_CheckAiMoveScores(u32 battlerId); void TestRunner_Battle_AISetScore(const char *file, u32 line, u32 battlerId, u32 moveIndex, s32 score); void TestRunner_Battle_AIAdjustScore(const char *file, u32 line, u32 battlerId, u32 moveIndex, s32 score); void TestRunner_Battle_InvalidNoHPMon(u32 battlerId, u32 partyIndex); +void TestRunner_CheckMemory(void); void TestRunner_Battle_CheckBattleRecordActionType(u32 battlerId, u32 recordIndex, u32 actionType); diff --git a/test/test_runner.c b/test/test_runner.c index 7a81d1dc9f..f279835c4b 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -104,6 +104,62 @@ static u32 AssignCostToRunner(void) return minCostProcess; } +void TestRunner_CheckMemory(void) +{ + if (gTestRunnerState.result == TEST_RESULT_PASS + && !gTestRunnerState.expectLeaks) + { + int i; + const struct MemBlock *head = HeapHead(); + const struct MemBlock *block = head; + do + { + if (block->magic != MALLOC_SYSTEM_ID + || !(EWRAM_START <= (uintptr_t)block->next && (uintptr_t)block->next < EWRAM_END) + || (block->next <= block && block->next != head)) + { + Test_MgbaPrintf("gHeap corrupted block at %p", block); + gTestRunnerState.result = TEST_RESULT_ERROR; + break; + } + + if (block->allocated) + { + const char *location = MemBlockLocation(block); + if (location) + { + const char *cmpString = "src/generational_changes.c"; + for (u32 charIndex = 0; charIndex < 26; charIndex++) + { + if (cmpString[charIndex] != location[charIndex]) + { + Test_MgbaPrintf("%s: %d bytes not freed", location, block->size); + gTestRunnerState.result = TEST_RESULT_FAIL; + break; + } + } + } + else + { + Test_MgbaPrintf(": %d bytes not freed", block->size); + gTestRunnerState.result = TEST_RESULT_FAIL; + } + } + block = block->next; + } + while (block != head); + + for (i = 0; i < NUM_TASKS; i++) + { + if (gTasks[i].isActive) + { + Test_MgbaPrintf(":L%s:%d - %p: task not freed", gTestRunnerState.test->filename, SourceLine(0), gTasks[i].func); + gTestRunnerState.result = TEST_RESULT_FAIL; + } + } + } +} + void CB2_TestRunner(void) { top: @@ -242,45 +298,7 @@ top: gTestRunnerState.tearDown = FALSE; } - if (gTestRunnerState.result == TEST_RESULT_PASS - && !gTestRunnerState.expectLeaks) - { - int i; - const struct MemBlock *head = HeapHead(); - const struct MemBlock *block = head; - do - { - if (block->magic != MALLOC_SYSTEM_ID - || !(EWRAM_START <= (uintptr_t)block->next && (uintptr_t)block->next < EWRAM_END) - || (block->next <= block && block->next != head)) - { - Test_MgbaPrintf("gHeap corrupted block at %p", block); - gTestRunnerState.result = TEST_RESULT_ERROR; - break; - } - - if (block->allocated) - { - const char *location = MemBlockLocation(block); - if (location) - Test_MgbaPrintf("%s: %d bytes not freed", location, block->size); - else - Test_MgbaPrintf(": %d bytes not freed", block->size); - gTestRunnerState.result = TEST_RESULT_FAIL; - } - block = block->next; - } - while (block != head); - - for (i = 0; i < NUM_TASKS; i++) - { - if (gTasks[i].isActive) - { - Test_MgbaPrintf(":L%s:%d - %p: task not freed", gTestRunnerState.test->filename, SourceLine(0), gTasks[i].func); - gTestRunnerState.result = TEST_RESULT_FAIL; - } - } - } + TestRunner_CheckMemory(); if (gTestRunnerState.test->runner == &gAssumptionsRunner) { diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 1c137558a4..399cb8a852 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -1347,6 +1347,7 @@ static void TearDownBattle(void) static void CB2_BattleTest_NextParameter(void) { + TestRunner_CheckMemory(); if (++STATE->runParameter >= STATE->parameters) { SetMainCallback2(CB2_TestRunner); diff --git a/tools/mgba-rom-test-hydra/main.c b/tools/mgba-rom-test-hydra/main.c index 55ba664e75..8eb66debcb 100644 --- a/tools/mgba-rom-test-hydra/main.c +++ b/tools/mgba-rom-test-hydra/main.c @@ -111,6 +111,8 @@ static const struct Symbol *lookup_address(uint32_t address) // available by default. void *memmem(const void *haystack, size_t haystacklen, const void *needle, size_t needlelen) { + if (haystacklen < needlelen) + return NULL; const char *haystack_ = haystack; const char *needle_ = needle; for (size_t i = 0; i < haystacklen - needlelen; i++) From 7ead90aeffad06bdd4c4e75acdbb4d8add82e24a Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sat, 29 Mar 2025 09:45:59 +0100 Subject: [PATCH 101/115] Fixs Aftermath ability popup message (#6491) --- data/battle_scripts_1.s | 2 +- src/battle_util.c | 2 ++ test/battle/ability/aftermath.c | 28 ++++++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 02fcb66f1f..626964d3ab 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -7075,7 +7075,7 @@ BattleScript_AnticipationActivates:: BattleScript_AftermathDmg:: pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpScripting jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_AftermathDmgRet orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_ATTACKER diff --git a/src/battle_util.c b/src/battle_util.c index 863bbcb8c7..982aa926b6 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -5867,6 +5867,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } else { + gBattleScripting.battler = gBattlerTarget; gBattleStruct->moveDamage[gBattlerAttacker] = GetNonDynamaxMaxHP(gBattlerAttacker) / 4; if (gBattleStruct->moveDamage[gBattlerAttacker] == 0) gBattleStruct->moveDamage[gBattlerAttacker] = 1; @@ -5889,6 +5890,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; } + gBattleScripting.battler = gBattlerTarget; gBattleStruct->moveDamage[gBattlerAttacker] = gBattleStruct->moveDamage[gBattlerTarget]; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_AftermathDmg; diff --git a/test/battle/ability/aftermath.c b/test/battle/ability/aftermath.c index 119c3bbec4..10405edad6 100644 --- a/test/battle/ability/aftermath.c +++ b/test/battle/ability/aftermath.c @@ -20,3 +20,31 @@ SINGLE_BATTLE_TEST("Aftermath damages the attacker by 1/4th of its max HP if fai EXPECT_EQ(aftermathDamage, opponent->maxHP / 4); } } + +SINGLE_BATTLE_TEST("Aftermath ability pop-up will be displayed correctly: player point of view") +{ + GIVEN { + PLAYER(SPECIES_SHROOMISH) { Ability(ABILITY_POISON_HEAL); }; + OPPONENT(SPECIES_VOLTORB) { HP(1); Ability(ABILITY_AFTERMATH); }; + } WHEN { + TURN {MOVE(player, MOVE_HEADBUTT);} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HEADBUTT, player); + MESSAGE("The opposing Voltorb fainted!"); + ABILITY_POPUP(opponent, ABILITY_AFTERMATH); + } +} + +SINGLE_BATTLE_TEST("Aftermath ability pop-up will be displayed correctly: opponent point of view") +{ + GIVEN { + PLAYER(SPECIES_VOLTORB) { HP(1); Ability(ABILITY_AFTERMATH); }; + OPPONENT(SPECIES_SHROOMISH) { Ability(ABILITY_POISON_HEAL); }; + } WHEN { + TURN {MOVE(opponent, MOVE_HEADBUTT);} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HEADBUTT, opponent); + MESSAGE("Voltorb fainted!"); + ABILITY_POPUP(player, ABILITY_AFTERMATH); + } +} From 79a2ec1ce2f7a665519e3fa9e320a99f8c7935a0 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sat, 29 Mar 2025 14:04:01 +0100 Subject: [PATCH 102/115] Fixes Emergency Exit and Eject Pack (#6459) --- data/battle_scripts_1.s | 32 +-- include/battle.h | 6 +- include/battle_scripts.h | 2 - include/battle_util.h | 2 + include/constants/battle_script_commands.h | 12 +- src/battle_script_commands.c | 290 +++++++++++++-------- src/battle_util.c | 42 ++- test/battle/ability/emergency_exit.c | 19 ++ test/battle/hold_effect/eject_pack.c | 23 ++ test/battle/spread_moves.c | 7 +- 10 files changed, 270 insertions(+), 165 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 626964d3ab..bc2b37466a 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -7557,35 +7557,37 @@ BattleScript_MoodyEnd: end3 BattleScript_EmergencyExit:: + .if B_ABILITY_POP_UP == TRUE pause 5 - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpScripting pause B_WAIT_TIME_LONG -BattleScript_EmergencyExitNoPopUp:: - playanimation BS_TARGET, B_ANIM_SLIDE_OFFSCREEN + .endif + playanimation BS_SCRIPTING, B_ANIM_SLIDE_OFFSCREEN waitanimation - openpartyscreen BS_TARGET, BattleScript_EmergencyExitRet - switchoutabilities BS_TARGET + openpartyscreen BS_SCRIPTING, BattleScript_EmergencyExitRet + switchoutabilities BS_SCRIPTING waitstate - switchhandleorder BS_TARGET, 2 + switchhandleorder BS_SCRIPTING, 2 returntoball BS_TARGET, FALSE - getswitchedmondata BS_TARGET - switchindataupdate BS_TARGET - hpthresholds BS_TARGET + getswitchedmondata BS_SCRIPTING + switchindataupdate BS_SCRIPTING + hpthresholds BS_SCRIPTING printstring STRINGID_SWITCHINMON - switchinanim BS_TARGET, FALSE, TRUE + switchinanim BS_SCRIPTING, FALSE, TRUE waitstate - switchineffects BS_TARGET + switchineffects BS_SCRIPTING BattleScript_EmergencyExitRet: return BattleScript_EmergencyExitWild:: + .if B_ABILITY_POP_UP == TRUE pause 5 - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpScripting pause B_WAIT_TIME_LONG -BattleScript_EmergencyExitWildNoPopUp:: - playanimation BS_TARGET, B_ANIM_SLIDE_OFFSCREEN + .endif + playanimation BS_SCRIPTING, B_ANIM_SLIDE_OFFSCREEN waitanimation - setoutcomeonteleport BS_TARGET + setoutcomeonteleport BS_SCRIPTING finishaction return diff --git a/include/battle.h b/include/battle.h index f6b8dbf35a..6f77ea88cf 100644 --- a/include/battle.h +++ b/include/battle.h @@ -130,10 +130,9 @@ struct DisableStruct u8 boosterEnergyActivates:1; u8 roostActive:1; u8 unburdenActive:1; - u8 startEmergencyExit:1; u8 neutralizingGas:1; u8 iceFaceActivationPrevention:1; // fixes hit escape move edge case - u8 padding:2; + u8 padding:3; }; // Fully Cleared each turn after end turn effects are done. A few things are cleared before end turn effects @@ -814,9 +813,8 @@ struct BattleStruct u32 stellarBoostFlags[NUM_BATTLE_SIDES]; // stored as a bitfield of flags for all types for each side u8 monCausingSleepClause[NUM_BATTLE_SIDES]; // Stores which pokemon on a given side is causing Sleep Clause to be active as the mon's index in the party u8 additionalEffectsCounter:4; // A counter for the additionalEffects applied by the current move in Cmd_setadditionaleffects - u8 redCardActivates:1; u8 cheekPouchActivated:1; - u8 padding2:1; // padding in the middle so pursuit fields are together + u8 padding2:3; u8 pursuitStoredSwitch; // Stored id for the Pursuit target's switch s32 battlerExpReward; u16 prevTurnSpecies[MAX_BATTLERS_COUNT]; // Stores species the AI has in play at start of turn diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 4343d7eeea..d11d2b814e 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -384,9 +384,7 @@ extern const u8 BattleScript_FriskMsg[]; extern const u8 BattleScript_FriskMsgWithPopup[]; extern const u8 BattleScript_MoodyActivates[]; extern const u8 BattleScript_EmergencyExit[]; -extern const u8 BattleScript_EmergencyExitNoPopUp[]; extern const u8 BattleScript_EmergencyExitWild[]; -extern const u8 BattleScript_EmergencyExitWildNoPopUp[]; extern const u8 BattleScript_CheekPouchActivates[]; extern const u8 BattleScript_TotemVar[]; extern const u8 BattleScript_TotemFlaredToLife[]; diff --git a/include/battle_util.h b/include/battle_util.h index eef6a009e0..5fef1b4f60 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -349,5 +349,7 @@ void ClearPursuitValuesIfSet(u32 battler); void ClearPursuitValues(void); bool32 HasWeatherEffect(void); bool32 IsMovePowderBlocked(u32 battlerAtk, u32 battlerDef, u32 move); +bool32 EmergencyExitCanBeTriggered(u32 battler); +u32 RestoreWhiteHerbStats(u32 battler); #endif // GUARD_BATTLE_UTIL_H diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 1b302a4347..e2588e46ab 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -271,6 +271,7 @@ enum MoveEndEffects MOVEEND_ITEM_EFFECTS_TARGET, MOVEEND_MOVE_EFFECTS2, MOVEEND_ITEM_EFFECTS_ALL, + MOVEEND_SYMBIOSIS, MOVEEND_HIT_SWITCH_TARGET, MOVEEND_KINGSROCK, // These item effects will occur each strike of a multi-hit move MOVEEND_NUM_HITS, @@ -285,15 +286,16 @@ enum MoveEndEffects MOVEEND_RAPID_SPIN, MOVEEND_ITEM_EFFECTS_ATTACKER, MOVEEND_MAGICIAN, // Occurs after final multi-hit strike, and after other items/abilities would activate + MOVEEND_SHEER_FORCE, // If move is Sheer Force affected, skip until Eject Pack MOVEEND_RED_CARD, // Red Card triggers before Eject Pack - MOVEEND_EJECT_ITEMS, - MOVEEND_WHITE_HERB, + MOVEEND_EJECT_BUTTON, MOVEEND_LIFEORB_SHELLBELL, // Includes shell bell, throat spray, etc - MOVEEND_CHANGED_ITEMS, - MOVEEND_PICKPOCKET, MOVEEND_EMERGENCY_EXIT, - MOVEEND_SYMBIOSIS, + MOVEEND_EJECT_PACK, MOVEEND_OPPORTUNIST, // Occurs after other stat change items/abilities to try and copy the boosts + MOVEEND_PICKPOCKET, + MOVEEND_WHITE_HERB, + MOVEEND_CHANGED_ITEMS, MOVEEND_SAME_MOVE_TURNS, MOVEEND_SET_EVOLUTION_TRACKER, MOVEEND_CLEAR_BITS, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 8885c84a66..b333d9abb0 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6170,7 +6170,7 @@ static u32 GetNextTarget(u32 moveTarget, bool32 excludeCurrent) return battler; } -static inline bool32 IsProtectivePadsProtected(u32 battler, u32 move, u32 holdEffect) +static inline bool32 IsProtectivePadsProtected(u32 battler, u32 holdEffect) { if (holdEffect != HOLD_EFFECT_PROTECTIVE_PADS) return FALSE; @@ -6182,7 +6182,7 @@ static inline bool32 IsProtectivePadsProtected(u32 battler, u32 move, u32 holdEf static inline bool32 IsProtectEffectAffected(u32 battler, u32 move) { u32 holdEffect = GetBattlerHoldEffect(gBattlerAttacker, TRUE); - if (IsProtectivePadsProtected(battler, move, holdEffect)) + if (IsProtectivePadsProtected(battler, holdEffect)) return TRUE; if (holdEffect == HOLD_EFFECT_CLEAR_AMULET) @@ -6201,6 +6201,33 @@ static inline bool32 IsProtectEffectAffected(u32 battler, u32 move) return FALSE; } +static inline bool32 CanEjectButtonTrigger(u32 battlerAtk, u32 battlerDef, u32 moveEffect) +{ + if (GetBattlerHoldEffect(battlerDef, TRUE) == HOLD_EFFECT_EJECT_BUTTON + && battlerAtk != battlerDef + && IsBattlerTurnDamaged(battlerDef) + && IsBattlerAlive(battlerDef) + && CountUsablePartyMons(battlerDef) > 0 + && !(moveEffect == EFFECT_HIT_SWITCH_TARGET && CanBattlerSwitch(battlerAtk))) + return TRUE; + + return FALSE; +} + +static inline bool32 CanEjectPackTrigger(u32 battlerAtk, u32 battlerDef, u32 moveEffect) +{ + if (gProtectStructs[battlerDef].statFell + && GetBattlerHoldEffect(battlerDef, TRUE) == HOLD_EFFECT_EJECT_PACK + && IsBattlerAlive(battlerDef) + && CountUsablePartyMons(battlerDef) > 0 + && !gProtectStructs[battlerDef].disableEjectPack + && !(moveEffect == EFFECT_HIT_SWITCH_TARGET && CanBattlerSwitch(battlerAtk)) + && !(moveEffect == EFFECT_PARTING_SHOT && CanBattlerSwitch(battlerAtk))) + return TRUE; + + return FALSE; +} + static void Cmd_moveend(void) { CMD_ARGS(u8 endMode, u8 endState); @@ -6237,7 +6264,7 @@ static void Cmd_moveend(void) if (gProtectStructs[gBattlerAttacker].touchedProtectLike) { if (gProtectStructs[gBattlerTarget].spikyShielded - && !IsProtectivePadsProtected(gBattlerAttacker, gCurrentMove, GetBattlerHoldEffect(gBattlerAttacker, TRUE)) + && !IsProtectivePadsProtected(gBattlerAttacker, GetBattlerHoldEffect(gBattlerAttacker, TRUE)) && !IsMagicGuardProtected(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker))) { gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; @@ -6265,7 +6292,7 @@ static void Cmd_moveend(void) effect = 1; } else if (gProtectStructs[gBattlerTarget].banefulBunkered - && !IsProtectivePadsProtected(gBattlerAttacker, gCurrentMove, GetBattlerHoldEffect(gBattlerAttacker, TRUE))) + && !IsProtectivePadsProtected(gBattlerAttacker, GetBattlerHoldEffect(gBattlerAttacker, TRUE))) { gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; gBattleScripting.moveEffect = MOVE_EFFECT_POISON | MOVE_EFFECT_AFFECTS_USER; @@ -6301,7 +6328,7 @@ static void Cmd_moveend(void) effect = 1; } else if (gProtectStructs[gBattlerTarget].burningBulwarked - && !IsProtectivePadsProtected(gBattlerAttacker, gCurrentMove, GetBattlerHoldEffect(gBattlerAttacker, TRUE))) + && !IsProtectivePadsProtected(gBattlerAttacker, GetBattlerHoldEffect(gBattlerAttacker, TRUE))) { gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE; gBattleScripting.moveEffect = MOVE_EFFECT_BURN | MOVE_EFFECT_AFFECTS_USER; @@ -6994,13 +7021,6 @@ static void Cmd_moveend(void) gBattleScripting.moveendState++; break; } - // The order of abilities/items activating after moves hitting multiple targets is - // 1. Magician - // 2. The fastest mon gets switched out using Eject Button / Eject Pack - // 3. White Herb activates - // 4. Red Card activates - // 5. Life Orb / Shell Bell - // 6. Pickpocket case MOVEEND_MAGICIAN: if (GetBattlerAbility(gBattlerAttacker) == ABILITY_MAGICIAN && gCurrentMove != MOVE_FLING && gCurrentMove != MOVE_NATURAL_GIFT @@ -7012,7 +7032,6 @@ static void Cmd_moveend(void) && !gSpecialStatuses[gBattlerAttacker].gemBoost // In base game, gems are consumed after magician would activate. && !(gWishFutureKnock.knockedOffMons[GetBattlerSide(gBattlerTarget)] & (1u << gBattlerPartyIndexes[gBattlerTarget])) && !DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove) - && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) && (GetBattlerAbility(gBattlerTarget) != ABILITY_STICKY_HOLD || !IsBattlerAlive(gBattlerTarget))) { StealTargetItem(gBattlerAttacker, gBattlerTarget); @@ -7025,92 +7044,121 @@ static void Cmd_moveend(void) } gBattleScripting.moveendState++; break; - case MOVEEND_EJECT_ITEMS: + case MOVEEND_SHEER_FORCE: + if (TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove)) + gBattleScripting.moveendState = MOVEEND_EJECT_PACK; + else + gBattleScripting.moveendState++; + break; + case MOVEEND_EJECT_BUTTON: { // Because sorting the battlers by speed takes lots of cycles, it's better to just check if any of the battlers has the Eject items. - u32 ejectPackBattlers = 0, ejectButtonBattlers = 0, i; + u32 numEjectButtonBattlers = 0; + u32 ejectButtonBattlers = 0; + for (i = 0; i < gBattlersCount; i++) { - u32 holdEffect; - holdEffect = GetBattlerHoldEffect(i, TRUE); - if (holdEffect == HOLD_EFFECT_EJECT_BUTTON) + if (CanEjectButtonTrigger(gBattlerAttacker, i, moveEffect)) + { ejectButtonBattlers |= 1u << i; - else if (holdEffect == HOLD_EFFECT_EJECT_PACK) - ejectPackBattlers |= 1u << i; + numEjectButtonBattlers++; + } } - if (ejectButtonBattlers || ejectPackBattlers) + + if (numEjectButtonBattlers == 0) { - u8 battlers[4] = {0, 1, 2, 3}; + gBattleScripting.moveendState++; + break; + } + + u8 battlers[4] = {0, 1, 2, 3}; + if (numEjectButtonBattlers > 1) SortBattlersBySpeed(battlers, FALSE); - for (i = 0; i < gBattlersCount; i++) + for (i = 0; i < gBattlersCount; i++) + { + u32 battler = battlers[i]; + + if (!(ejectButtonBattlers & 1u << battler)) + continue; + + gBattleScripting.battler = battler; + gLastUsedItem = gBattleMons[battler].item; + if (moveEffect == EFFECT_HIT_ESCAPE) + gBattlescriptCurrInstr = BattleScript_MoveEnd; // Prevent user switch-in selection + + effect = TRUE; + gBattleScripting.moveendState = MOVEEND_OPPORTUNIST; + gBattleStruct->battlerState[battler].usedEjectItem = TRUE; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_EjectButtonActivates; + AI_DATA->ejectButtonSwitch = TRUE; + break; // Only the fastest Eject Button activates + } + } + if (!effect) + gBattleScripting.moveendState++; + break; + case MOVEEND_EJECT_PACK: + { + // Because sorting the battlers by speed takes lots of cycles, it's better to just check if any of the battlers has the Eject items. + u32 ejectPackBattlers = 0; + u32 numEjectPackBattlers = 0; + + for (i = 0; i < gBattlersCount; i++) + { + if (CanEjectPackTrigger(gBattlerAttacker, i, moveEffect)) { - u32 battler = battlers[i]; - - if (battler != gBattlerAttacker && ejectButtonBattlers & (1u << battler)) - { - if (TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove)) // Apparently Sheer Force blocks Eject Button, but not Eject Pack - continue; - // Since we check if battler was damaged, we don't need to check move result. - // In fact, doing so actually prevents multi-target moves from activating eject button properly - if (!IsBattlerTurnDamaged(battler)) - continue; - } - else if (ejectPackBattlers & (1u << battler)) - { - if (!gProtectStructs[battler].statFell || gProtectStructs[battler].disableEjectPack) - continue; - } - else - { - continue; - } - - if (IsBattlerAlive(battler) - && CountUsablePartyMons(battler) > 0 // Has mon to switch into - // Does not activate if attacker used Parting Shot and can switch out - && !(moveEffect == EFFECT_HIT_SWITCH_TARGET && CanBattlerSwitch(gBattlerAttacker)) - ) - { - gBattleScripting.battler = battler; - gLastUsedItem = gBattleMons[battler].item; - if (moveEffect == EFFECT_HIT_ESCAPE) - gBattlescriptCurrInstr = BattleScript_MoveEnd; // Prevent user switch-in selection - if (ejectButtonBattlers & (1u << battler)) - { - effect = TRUE; - gBattleStruct->battlerState[battler].usedEjectItem = TRUE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_EjectButtonActivates; - AI_DATA->ejectButtonSwitch = TRUE; - } - else // Eject Pack - { - if (!gDisableStructs[gBattlerTarget].startEmergencyExit - && !(GetMoveEffect(gCurrentMove) == EFFECT_PARTING_SHOT && CanBattlerSwitch(gBattlerAttacker))) - { - effect = TRUE; - gBattleStruct->battlerState[battler].usedEjectItem = TRUE; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_EjectPackActivates; - AI_DATA->ejectPackSwitch = TRUE; - gSpecialStatuses[gBattlerAttacker].preventLifeOrbDamage = TRUE; - } - gProtectStructs[battler].statFell = FALSE; - } - break; // Only the fastest Eject item activates - } + ejectPackBattlers |= 1u << i; + numEjectPackBattlers++; } } + + if (numEjectPackBattlers == 0) + { + gBattleScripting.moveendState++; + break; + } + + u8 battlers[4] = {0, 1, 2, 3}; + if (numEjectPackBattlers > 1) + SortBattlersBySpeed(battlers, FALSE); + + for (i = 0; i < gBattlersCount; i++) + { + u32 battler = battlers[i]; + + if (!(ejectPackBattlers & 1u << battler)) + continue; + + gBattleScripting.battler = battler; + gLastUsedItem = gBattleMons[battler].item; + + if (moveEffect == EFFECT_HIT_ESCAPE) + gBattlescriptCurrInstr = BattleScript_MoveEnd; // Prevent user switch-in selection + + effect = TRUE; + gBattleStruct->battlerState[battler].usedEjectItem = TRUE; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_EjectPackActivates; + AI_DATA->ejectPackSwitch = TRUE; + gProtectStructs[battler].statFell = FALSE; + break; // Only the fastest Eject item activates + } } gBattleScripting.moveendState++; break; case MOVEEND_WHITE_HERB: for (i = 0; i < gBattlersCount; i++) { - if (IsBattlerAlive(i) - && ItemBattleEffects(ITEMEFFECT_STATS_CHANGED, i, FALSE)) + if (!IsBattlerAlive(i)) + continue; + + if (GetBattlerHoldEffect(i, TRUE) == HOLD_EFFECT_RESTORE_STATS + && RestoreWhiteHerbStats(i)) { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_WhiteHerbRet; effect = TRUE; break; } @@ -7130,8 +7178,7 @@ static void Cmd_moveend(void) } if (redCardBattlers && (moveEffect != EFFECT_HIT_SWITCH_TARGET || gBattleStruct->hitSwitchTargetFailed) - && IsBattlerAlive(gBattlerAttacker) - && !TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove)) + && IsBattlerAlive(gBattlerAttacker)) { // Since we check if battler was damaged, we don't need to check move result. // In fact, doing so actually prevents multi-target moves from activating red card properly @@ -7148,33 +7195,29 @@ static void Cmd_moveend(void) && IsBattlerTurnDamaged(battler) && CanBattlerSwitch(gBattlerAttacker)) { + effect = TRUE; + gBattleScripting.moveendState = MOVEEND_OPPORTUNIST; gLastUsedItem = gBattleMons[battler].item; SaveBattlerTarget(battler); // save battler with red card SaveBattlerAttacker(gBattlerAttacker); gBattleStruct->savedMove = gCurrentMove; gBattleScripting.battler = battler; gEffectBattler = gBattlerAttacker; - gBattleStruct->redCardActivates = TRUE; if (moveEffect == EFFECT_HIT_ESCAPE) gBattlescriptCurrInstr = BattleScript_MoveEnd; // Prevent user switch-in selection BattleScriptPushCursor(); if (gBattleStruct->commanderActive[gBattlerAttacker] != SPECIES_NONE || GetBattlerAbility(gBattlerAttacker) == ABILITY_GUARD_DOG) - { gBattlescriptCurrInstr = BattleScript_RedCardActivationNoSwitch; - } else - { gBattlescriptCurrInstr = BattleScript_RedCardActivates; - gSpecialStatuses[gBattlerAttacker].preventLifeOrbDamage = TRUE; - } - effect = TRUE; break; // Only fastest red card activates } } } } - gBattleScripting.moveendState++; + if (!effect) + gBattleScripting.moveendState++; break; case MOVEEND_LIFEORB_SHELLBELL: if (ItemBattleEffects(ITEMEFFECT_LIFEORB_SHELLBELL, 0, FALSE)) @@ -7219,37 +7262,57 @@ static void Cmd_moveend(void) gBattleScripting.moveendState++; break; case MOVEEND_EMERGENCY_EXIT: // Special case, because moves hitting multiple opponents stop after switching out - for (i = 0; i < gBattlersCount; i++) { - if (gBattleStruct->redCardActivates) + // Because sorting the battlers by speed takes lots of cycles, + // we check if EE can be activated and cound how many. + u32 numEmergencyExitBattlers = 0; + u32 emergencyExitBattlers = 0; + + for (i = 0; i < gBattlersCount; i++) { - gDisableStructs[i].startEmergencyExit = FALSE; - continue; + if (EmergencyExitCanBeTriggered(i)) + { + emergencyExitBattlers |= 1u << i; + numEmergencyExitBattlers++; + } } - if (gDisableStructs[i].startEmergencyExit) + + if (numEmergencyExitBattlers == 0) { - gDisableStructs[i].startEmergencyExit = FALSE; - gSpecialStatuses[i].emergencyExited = TRUE; - gBattlerTarget = gBattlerAbility = i; + gBattleScripting.moveendState++; + break; + } + + u8 battlers[4] = {0, 1, 2, 3}; + if (numEmergencyExitBattlers > 1) + SortBattlersBySpeed(battlers, FALSE); + + for (i = 0; i < gBattlersCount; i++) + { + u32 battler = battlers[i]; + + if (!(emergencyExitBattlers & 1u << battler)) + continue; + + if (moveEffect == EFFECT_HIT_ESCAPE) + gBattlescriptCurrInstr = BattleScript_MoveEnd; // Prevent user switch-in selection + + effect = TRUE; + gBattleScripting.moveendState = MOVEEND_OPPORTUNIST; + gSpecialStatuses[battler].emergencyExited = TRUE; + gBattleScripting.battler = battler; BattleScriptPushCursor(); - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER || GetBattlerSide(i) == B_SIDE_PLAYER) - { - if (B_ABILITY_POP_UP == TRUE) - gBattlescriptCurrInstr = BattleScript_EmergencyExit; - else - gBattlescriptCurrInstr = BattleScript_EmergencyExitNoPopUp; - } + + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER || GetBattlerSide(battler) == B_SIDE_PLAYER) + gBattlescriptCurrInstr = BattleScript_EmergencyExit; else - { - if (B_ABILITY_POP_UP == TRUE) - gBattlescriptCurrInstr = BattleScript_EmergencyExitWild; - else - gBattlescriptCurrInstr = BattleScript_EmergencyExitWildNoPopUp; - } - return; + gBattlescriptCurrInstr = BattleScript_EmergencyExitWild; + + break; // Only the fastest Emergency Exit / Wimp Out activates } } - gBattleScripting.moveendState++; + if (!effect) + gBattleScripting.moveendState++; break; case MOVEEND_SYMBIOSIS: for (i = 0; i < gBattlersCount; i++) @@ -7326,7 +7389,6 @@ static void Cmd_moveend(void) gBattleStruct->additionalEffectsCounter = 0; gBattleStruct->poisonPuppeteerConfusion = FALSE; gBattleStruct->fickleBeamBoosted = FALSE; - gBattleStruct->redCardActivates = FALSE; gBattleStruct->battlerState[gBattlerAttacker].usedMicleBerry = FALSE; gBattleStruct->noTargetPresent = FALSE; if (gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) diff --git a/src/battle_util.c b/src/battle_util.c index 982aa926b6..4404e14922 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -5683,25 +5683,6 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 effect++; } break; - case ABILITY_EMERGENCY_EXIT: - case ABILITY_WIMP_OUT: - if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) - && IsBattlerTurnDamaged(gBattlerTarget) - && IsBattlerAlive(battler) - // Had more than half of hp before, now has less - && HadMoreThanHalfHpNowDoesnt(battler) - && (gMultiHitCounter == 0 || gMultiHitCounter == 1) - && !(TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove)) - && (CanBattlerSwitch(battler) || !(gBattleTypeFlags & BATTLE_TYPE_TRAINER)) - && !(gBattleTypeFlags & BATTLE_TYPE_ARENA) - && CountUsablePartyMons(battler) > 0 - // Not currently held by Sky Drop - && !(gStatuses3[battler] & STATUS3_SKY_DROPPED)) - { - gDisableStructs[battler].startEmergencyExit = TRUE; - effect++; - } - break; case ABILITY_WEAK_ARMOR: if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) && IsBattlerTurnDamaged(gBattlerTarget) @@ -7228,8 +7209,6 @@ static u32 ItemHealHp(u32 battler, u32 itemId, enum ItemCaseId caseID, bool32 pe BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_ItemHealHP_RemoveItemRet; } - if (gDisableStructs[battler].startEmergencyExit && GetNonDynamaxHP(battler) >= GetNonDynamaxMaxHP(battler) / 2) - gDisableStructs[battler].startEmergencyExit = FALSE; return ITEM_HP_CHANGE; } @@ -7350,7 +7329,7 @@ static inline u32 TryBoosterEnergy(u32 battler, enum ItemCaseId caseID) return ITEM_NO_EFFECT; } -static u32 RestoreWhiteHerbStats(u32 battler) +u32 RestoreWhiteHerbStats(u32 battler) { u32 i, effect = 0; @@ -12302,3 +12281,22 @@ bool32 IsMovePowderBlocked(u32 battlerAtk, u32 battlerDef, u32 move) return effect; } + +bool32 EmergencyExitCanBeTriggered(u32 battler) +{ + u32 ability = GetBattlerAbility(battler); + + if (ability != ABILITY_EMERGENCY_EXIT && ability != ABILITY_WIMP_OUT) + return FALSE; + + if (IsBattlerTurnDamaged(battler) + && IsBattlerAlive(battler) + && HadMoreThanHalfHpNowDoesnt(battler) + && (CanBattlerSwitch(battler) || !(gBattleTypeFlags & BATTLE_TYPE_TRAINER)) + && !(gBattleTypeFlags & BATTLE_TYPE_ARENA) + && CountUsablePartyMons(battler) > 0 + && !(gStatuses3[battler] & STATUS3_SKY_DROPPED)) + return TRUE; + + return FALSE; +} diff --git a/test/battle/ability/emergency_exit.c b/test/battle/ability/emergency_exit.c index 68724450e1..0dbecb95e0 100644 --- a/test/battle/ability/emergency_exit.c +++ b/test/battle/ability/emergency_exit.c @@ -47,3 +47,22 @@ SINGLE_BATTLE_TEST("Emergency Exit switches out when going below 50% max-HP but ABILITY_POPUP(opponent, ABILITY_EMERGENCY_EXIT); } } + +DOUBLE_BATTLE_TEST("Only the fastest Wimp Out (Emergency Exit) user switches out") +{ + GIVEN { + PLAYER(SPECIES_ZAPDOS) { Speed(10); } + PLAYER(SPECIES_WOBBUFFET) { Speed(10); } + OPPONENT(SPECIES_WIMPOD) { Speed(1); Ability(ABILITY_WIMP_OUT); Item(ITEM_FOCUS_SASH); }; + OPPONENT(SPECIES_WIMPOD) { Speed(2); Ability(ABILITY_WIMP_OUT); Item(ITEM_FOCUS_SASH); }; + OPPONENT(SPECIES_WOBBUFFET) { Speed(10); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(10); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_HYPER_VOICE); SEND_OUT(opponentRight, 2); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPER_VOICE, playerLeft); + HP_BAR(opponentLeft); + HP_BAR(opponentRight); + ABILITY_POPUP(opponentRight, ABILITY_WIMP_OUT); + } +} diff --git a/test/battle/hold_effect/eject_pack.c b/test/battle/hold_effect/eject_pack.c index 3d674fe9e8..da053ec5e6 100644 --- a/test/battle/hold_effect/eject_pack.c +++ b/test/battle/hold_effect/eject_pack.c @@ -137,3 +137,26 @@ DOUBLE_BATTLE_TEST("Eject Pack will not trigger if the conditions are not met") } } + +SINGLE_BATTLE_TEST("Eject Pack will miss timing to switch out user if Eject Button was activated on target") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(10); Item(ITEM_EJECT_PACK); } + PLAYER(SPECIES_WYNAUT) { Speed(10); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(5); Item(ITEM_EJECT_BUTTON); } + OPPONENT(SPECIES_WYNAUT) { Speed(10); } + } WHEN { + TURN { MOVE(player, MOVE_OVERHEAT); SEND_OUT(opponent, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_OVERHEAT, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet is switched out with the Eject Pack!"); + } + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + } THEN { + EXPECT(player->species == SPECIES_WOBBUFFET); + EXPECT(opponent->species == SPECIES_WYNAUT); + } +} diff --git a/test/battle/spread_moves.c b/test/battle/spread_moves.c index 2791ca0ea5..f617bd69c1 100644 --- a/test/battle/spread_moves.c +++ b/test/battle/spread_moves.c @@ -16,15 +16,16 @@ DOUBLE_BATTLE_TEST("Spread Moves: Ability and Item effects activate correctly af MOVE(opponentRight, MOVE_HEAT_WAVE); MOVE(playerLeft, MOVE_HYPER_VOICE); SEND_OUT(opponentRight, 3); - SEND_OUT(opponentLeft, 2); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPER_VOICE, playerLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentRight); MESSAGE("The opposing Wobbuffet is switched out with the Eject Button!"); MESSAGE("2 sent out Pikachu!"); - ABILITY_POPUP(opponentLeft, ABILITY_EMERGENCY_EXIT); - MESSAGE("2 sent out Wynaut!"); + NONE_OF { + ABILITY_POPUP(opponentLeft, ABILITY_EMERGENCY_EXIT); + MESSAGE("2 sent out Wynaut!"); + } } } From c1364e14d492cfaa01ee305dc897e35604189cb0 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sat, 29 Mar 2025 17:07:56 +0100 Subject: [PATCH 103/115] Fixes Hospitality not being blocked by Heal Block (#6494) --- src/battle_util.c | 1 + test/battle/ability/hospitality.c | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/battle_util.c b/src/battle_util.c index 4404e14922..21957ecbd6 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -5282,6 +5282,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (!gSpecialStatuses[battler].switchInAbilityDone && IsDoubleBattle() + && !(gStatuses3[partner] & STATUS3_HEAL_BLOCK) && gBattleMons[partner].hp < gBattleMons[partner].maxHP && IsBattlerAlive(partner)) { diff --git a/test/battle/ability/hospitality.c b/test/battle/ability/hospitality.c index c772d6e776..2c89c3eb97 100644 --- a/test/battle/ability/hospitality.c +++ b/test/battle/ability/hospitality.c @@ -89,3 +89,25 @@ DOUBLE_BATTLE_TEST("Hospitality does not trigger if there is no ally on the fiel NOT ABILITY_POPUP(playerLeft, ABILITY_HOSPITALITY); } } + +DOUBLE_BATTLE_TEST("Hospitality is blocked by Heal Block") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_HEAL_BLOCK) == EFFECT_HEAL_BLOCK); + PLAYER(SPECIES_WOBBUFFET) + PLAYER(SPECIES_WOBBUFFET) { HP(75); MaxHP(100); } + PLAYER(SPECIES_POLTCHAGEIST) { Ability(ABILITY_HOSPITALITY); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_HEAL_BLOCK, target: playerRight); } + TURN { SWITCH(playerLeft, 2); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HEAL_BLOCK, opponentLeft); + NONE_OF { + ABILITY_POPUP(playerLeft, ABILITY_HOSPITALITY); + MESSAGE("Wobbuffet drank down all the matcha that Poltchageist made!"); + HP_BAR(playerRight, damage: -25); + } + } +} From ddbdc1f716f11a6b7865bed2980f3ff9825aadde Mon Sep 17 00:00:00 2001 From: Pawkkie Date: Sat, 29 Mar 2025 13:54:44 -0400 Subject: [PATCH 104/115] Fixes across the board --- src/battle_ai_switch_items.c | 23 ++++++++++++++++++----- test/battle/ai/ai_choice.c | 20 +++++++++++++++++++- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 9a7c2b9328..e6e808d035 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -164,6 +164,14 @@ static inline bool32 SetSwitchinAndSwitch(u32 battler, u32 switchinId) return TRUE; } +static bool32 AI_DoesChoiceItemBlockMove(u32 battler, u32 move) +{ + // Choice locked into something else + if (AI_DATA->lastUsedMove[battler] != MOVE_NONE && AI_DATA->lastUsedMove[battler] != move && HOLD_EFFECT_CHOICE(GetBattlerHoldEffect(battler, FALSE)) && IsBattlerItemEnabled(battler)) + return TRUE; + return FALSE; +} + // Note that as many return statements as possible are INTENTIONALLY put after all of the loops; // the function can take a max of about 0.06s to run, and this prevents the player from identifying // whether the mon will switch or not by seeing how long the delay is before they select a move @@ -194,7 +202,6 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler) defType1 = gBattleMons[battler].types[0]; defType2 = gBattleMons[battler].types[1]; - // Check AI moves for damage dealt for (i = 0; i < MAX_MON_MOVES; i++) { aiMove = gBattleMons[battler].moves[i]; @@ -216,17 +223,16 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler) if (!IsBattleMoveStatus(aiMove)) { // Check if mon has a super effective move - if (AI_GetMoveEffectiveness(aiMove, battler, opposingBattler) >= UQ_4_12(2.0)) + if (AI_GetMoveEffectiveness(aiMove, battler, opposingBattler) >= UQ_4_12(2.0) && !AI_DoesChoiceItemBlockMove(battler, aiMove)) hasSuperEffectiveMove = TRUE; // Get maximum damage mon can deal damageDealt = AI_GetDamage(battler, opposingBattler, i, AI_ATTACKING, AI_DATA); - if(damageDealt > maxDamageDealt) + if(damageDealt > maxDamageDealt && !AI_DoesChoiceItemBlockMove(battler, aiMove)) { maxDamageDealt = damageDealt; aiBestMove = aiMove; } - } } } @@ -988,10 +994,17 @@ static bool32 ShouldSwitchIfBadChoiceLock(u32 battler) { u32 holdEffect = GetBattlerHoldEffect(battler, FALSE); u32 lastUsedMove = AI_DATA->lastUsedMove[battler]; + u32 opposingBattler = GetOppositeBattler(battler); + bool32 moveAffectsTarget = TRUE; + + if (lastUsedMove != MOVE_NONE && (AI_GetMoveEffectiveness(lastUsedMove, battler, opposingBattler) == UQ_4_12(0.0) + || CanAbilityAbsorbMove(battler, opposingBattler, AI_DATA->abilities[opposingBattler], lastUsedMove, GetMoveType(lastUsedMove), ABILITY_CHECK_TRIGGER) + || CanAbilityBlockMove(battler, opposingBattler, lastUsedMove, AI_DATA->abilities[opposingBattler], ABILITY_CHECK_TRIGGER))) + moveAffectsTarget = FALSE; if (HOLD_EFFECT_CHOICE(holdEffect) && IsBattlerItemEnabled(battler)) { - if ((GetMoveCategory(lastUsedMove) == DAMAGE_CATEGORY_STATUS || (AI_GetMoveEffectiveness(lastUsedMove, battler, GetOppositeBattler(battler)) == UQ_4_12(0.0))) && RandomPercentage(RNG_AI_SWITCH_CHOICE_LOCKED, GetSwitchChance(SHOULD_SWITCH_CHOICE_LOCKED))) + if ((GetMoveCategory(lastUsedMove) == DAMAGE_CATEGORY_STATUS || !moveAffectsTarget) && RandomPercentage(RNG_AI_SWITCH_CHOICE_LOCKED, GetSwitchChance(SHOULD_SWITCH_CHOICE_LOCKED))) return SetSwitchinAndSwitch(battler, PARTY_SIZE); } diff --git a/test/battle/ai/ai_choice.c b/test/battle/ai/ai_choice.c index 590ad2c27f..6143d962ff 100644 --- a/test/battle/ai/ai_choice.c +++ b/test/battle/ai/ai_choice.c @@ -202,7 +202,7 @@ AI_SINGLE_BATTLE_TEST("Choiced Pokémon will switch if locked into a move the pl ASSUME(gSpeciesInfo[SPECIES_GASTLY].types[0] == TYPE_GHOST); ASSUME(GetMoveType(MOVE_SURF) == TYPE_WATER); ASSUME(GetMoveType(MOVE_BODY_SLAM) == TYPE_NORMAL); - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT); PLAYER(SPECIES_GASTLY) { Level(1); Moves(MOVE_CELEBRATE); } PLAYER(SPECIES_VAPOREON) { Ability(ABILITY_WATER_ABSORB); Moves(MOVE_SURF); } OPPONENT(SPECIES_ZIGZAGOON) { Item(ITEM_CHOICE_BAND); Moves(MOVE_SURF, MOVE_BODY_SLAM); } @@ -212,3 +212,21 @@ AI_SINGLE_BATTLE_TEST("Choiced Pokémon will switch if locked into a move the pl TURN { MOVE(player, MOVE_SURF); EXPECT_SWITCH(opponent, 1); } } } + +AI_SINGLE_BATTLE_TEST("Choiced Pokémon will only see choiced moves when considering switching with ShouldSwitchIfHasBadOdds") +{ + PASSES_RANDOMLY(SHOULD_SWITCH_HASBADODDS_PERCENTAGE, 100, RNG_AI_SWITCH_HASBADODDS); + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_GASTLY].types[0] == TYPE_GHOST); + ASSUME(GetMoveType(MOVE_SURF) == TYPE_WATER); + ASSUME(GetMoveType(MOVE_BODY_SLAM) == TYPE_NORMAL); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES); + PLAYER(SPECIES_GASTLY) { Level(1); Moves(MOVE_CELEBRATE); } + PLAYER(SPECIES_ZIGZAGOON) { Item(ITEM_CHOICE_BAND); Moves(MOVE_CLOSE_COMBAT); } + OPPONENT(SPECIES_ZIGZAGOON) { Item(ITEM_CHOICE_BAND); Moves(MOVE_SURF, MOVE_CLOSE_COMBAT); } + OPPONENT(SPECIES_BRONZONG) { Moves(MOVE_CLOSE_COMBAT); } + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); EXPECT_MOVE(opponent, MOVE_SURF); SEND_OUT(player, 1); } + TURN { MOVE(player, MOVE_CLOSE_COMBAT); EXPECT_SWITCH(opponent, 1); } + } +} From 1c0e5bb0e1db867e2618c948d2b9ef44a49ca52e Mon Sep 17 00:00:00 2001 From: Pawkkie Date: Sat, 29 Mar 2025 14:18:20 -0400 Subject: [PATCH 105/115] fix hit escape switching --- include/constants/generational_changes.h | 1 + include/generational_changes.h | 1 + src/battle_ai_switch_items.c | 6 +++--- src/battle_ai_util.c | 3 +++ test/battle/ai/ai_switching.c | 20 +++++++++++++++++--- 5 files changed, 25 insertions(+), 6 deletions(-) diff --git a/include/constants/generational_changes.h b/include/constants/generational_changes.h index f80db1c1a7..e9653d26d5 100644 --- a/include/constants/generational_changes.h +++ b/include/constants/generational_changes.h @@ -11,6 +11,7 @@ enum GenConfigTag GEN_CONFIG_MULTI_HIT_CHANCE, GEN_CONFIG_GALE_WINGS, GEN_CONFIG_HEAL_BELL_SOUNDPROOF, + GEN_CONFIG_TELEPORT_BEHAVIOR, GEN_CONFIG_COUNT }; diff --git a/include/generational_changes.h b/include/generational_changes.h index 540b51e20b..1aad93f915 100644 --- a/include/generational_changes.h +++ b/include/generational_changes.h @@ -14,6 +14,7 @@ static const u8 sGenerationalChanges[GEN_CONFIG_COUNT] = [GEN_CONFIG_MULTI_HIT_CHANCE] = B_MULTI_HIT_CHANCE, [GEN_CONFIG_GALE_WINGS] = B_GALE_WINGS, [GEN_CONFIG_HEAL_BELL_SOUNDPROOF] = B_HEAL_BELL_SOUNDPROOF, + [GEN_CONFIG_TELEPORT_BEHAVIOR] = B_TELEPORT_BEHAVIOR, }; #if TESTING diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index f4b72c65b5..73a9b4505c 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -1852,7 +1852,7 @@ static inline bool32 IsFreeSwitch(enum SwitchType switchType, u32 battlerSwitchi // Switch out effects if (!IsDoubleBattle()) // Not handling doubles' additional complexity { - if (IsSwitchOutEffect(GetMoveEffect(gLastUsedMove)) && movedSecond) + if (IsSwitchOutEffect(GetMoveEffect(gCurrentMove)) && movedSecond) return TRUE; if (AI_DATA->ejectButtonSwitch) return TRUE; @@ -2066,7 +2066,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, } // If ace mon is the last available Pokemon and U-Turn/Volt Switch or Eject Pack/Button was used - switch to the mon. if (aceMonId != PARTY_SIZE && CountUsablePartyMons(battler) <= aceMonCount - && (IsSwitchOutEffect(GetMoveEffect(gLastUsedMove)) || AI_DATA->ejectButtonSwitch || AI_DATA->ejectPackSwitch)) + && (IsSwitchOutEffect(GetMoveEffect(gCurrentMove)) || AI_DATA->ejectButtonSwitch || AI_DATA->ejectPackSwitch)) return aceMonId; return PARTY_SIZE; @@ -2183,7 +2183,7 @@ u32 GetMostSuitableMonToSwitchInto(u32 battler, enum SwitchType switchType) // If ace mon is the last available Pokemon and U-Turn/Volt Switch or Eject Pack/Button was used - switch to the mon. if (aceMonId != PARTY_SIZE && CountUsablePartyMons(battler) <= aceMonCount - && (IsSwitchOutEffect(GetMoveEffect(gLastUsedMove)) || AI_DATA->ejectButtonSwitch || AI_DATA->ejectPackSwitch)) + && (IsSwitchOutEffect(GetMoveEffect(gCurrentMove)) || AI_DATA->ejectButtonSwitch || AI_DATA->ejectPackSwitch)) return aceMonId; return PARTY_SIZE; diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 60b707808f..ca94655476 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -2407,6 +2407,9 @@ bool32 IsSwitchOutEffect(u32 effect) // Switch out effects like U-Turn, Volt Switch, etc. switch (effect) { + case EFFECT_TELEPORT: + if (B_TELEPORT_BEHAVIOR >= GEN_8) + return TRUE; case EFFECT_HIT_ESCAPE: case EFFECT_PARTING_SHOT: case EFFECT_BATON_PASS: diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index 367afbc0f1..5d7a61473a 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -106,16 +106,30 @@ AI_DOUBLE_BATTLE_TEST("AI will not try to switch for the same pokemon for 2 spot } } -AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: U-Turn will send out Ace Mon if it's the only one remaining") +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Switch effect moves will send out Ace Mon if it's the only one remaining") { + u32 aiMove = 0; + // Moves testing all effects in IsSwitchOutEffect + PARAMETRIZE { aiMove = MOVE_U_TURN; } + PARAMETRIZE { aiMove = MOVE_TELEPORT; } + PARAMETRIZE { aiMove = MOVE_PARTING_SHOT; } + PARAMETRIZE { aiMove = MOVE_BATON_PASS; } + PARAMETRIZE { aiMove = MOVE_CHILLY_RECEPTION; } + PARAMETRIZE { aiMove = MOVE_SHED_TAIL; } GIVEN { ASSUME(GetMoveEffect(MOVE_U_TURN) == EFFECT_HIT_ESCAPE); + ASSUME(GetMoveEffect(MOVE_TELEPORT) == EFFECT_TELEPORT); + ASSUME(GetMoveEffect(MOVE_PARTING_SHOT) == EFFECT_PARTING_SHOT); + ASSUME(GetMoveEffect(MOVE_BATON_PASS) == EFFECT_BATON_PASS); + ASSUME(GetMoveEffect(MOVE_CHILLY_RECEPTION) == EFFECT_CHILLY_RECEPTION); + ASSUME(GetMoveEffect(MOVE_SHED_TAIL) == EFFECT_SHED_TAIL); + WITH_CONFIG(GEN_CONFIG_TELEPORT_BEHAVIOR, GEN_8); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_ACE_POKEMON); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_U_TURN); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(aiMove); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { EXPECT_MOVE(opponent, MOVE_U_TURN); EXPECT_SEND_OUT(opponent, 1); } + TURN { EXPECT_MOVE(opponent, aiMove); EXPECT_SEND_OUT(opponent, 1); } } } From adf4928fe09510a87e838ca0f8fd027373c7c2ec Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sat, 29 Mar 2025 19:33:50 +0100 Subject: [PATCH 106/115] Fixes timesGotHit not increasing on forced switch out (#6493) --- include/constants/battle_script_commands.h | 1 - src/battle_script_commands.c | 17 ++++---- test/battle/move_effect/rage_fist.c | 46 ++++++++++++++++++++++ 3 files changed, 53 insertions(+), 11 deletions(-) diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index e2588e46ab..d8e13baae1 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -274,7 +274,6 @@ enum MoveEndEffects MOVEEND_SYMBIOSIS, MOVEEND_HIT_SWITCH_TARGET, MOVEEND_KINGSROCK, // These item effects will occur each strike of a multi-hit move - MOVEEND_NUM_HITS, MOVEEND_SUBSTITUTE, MOVEEND_SKY_DROP_CONFUSE, MOVEEND_UPDATE_LAST_MOVES, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index b333d9abb0..1c0e470cde 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2108,6 +2108,7 @@ static void Cmd_adjustdamage(void) gSpecialStatuses[battlerDef].enduredDamage = TRUE; continue; } + if (GetBattlerAbility(battlerDef) == ABILITY_ICE_FACE && IsBattleMovePhysical(gCurrentMove) && gBattleMons[battlerDef].species == SPECIES_EISCUE) { // Damage deals typeless 0 HP. @@ -2118,6 +2119,7 @@ static void Cmd_adjustdamage(void) // Form change will be done after attack animation in Cmd_resultmessage. continue; } + if (gBattleMons[gBattlerTarget].hp > gBattleStruct->moveDamage[battlerDef]) continue; @@ -2669,6 +2671,11 @@ static void Cmd_datahpupdate(void) BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_HP_BATTLE, 0, sizeof(gBattleMons[battler].hp), &gBattleMons[battler].hp); MarkBattlerForControllerExec(battler); } + + if (gBattlerAttacker != gBattlerTarget + && GetMoveCategory(gCurrentMove) != DAMAGE_CATEGORY_STATUS + && IsBattlerTurnDamaged(gBattlerTarget)) + gBattleStruct->timesGotHit[GetBattlerSide(gBattlerTarget)][gBattlerPartyIndexes[gBattlerTarget]]++; } TryRestoreDamageAfterCheeckPouch(battler); @@ -6749,16 +6756,6 @@ static void Cmd_moveend(void) } gBattleScripting.moveendState++; break; - case MOVEEND_NUM_HITS: - if (gBattlerAttacker != gBattlerTarget - && GetMoveCategory(gCurrentMove) != DAMAGE_CATEGORY_STATUS - && !(gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT) - && IsBattlerTurnDamaged(gBattlerTarget)) - { - gBattleStruct->timesGotHit[GetBattlerSide(gBattlerTarget)][gBattlerPartyIndexes[gBattlerTarget]]++; - } - gBattleScripting.moveendState++; - break; case MOVEEND_SUBSTITUTE: // update substitute for (i = 0; i < gBattlersCount; i++) { diff --git a/test/battle/move_effect/rage_fist.c b/test/battle/move_effect/rage_fist.c index 7a87f3e34d..eb00a3c1b7 100644 --- a/test/battle/move_effect/rage_fist.c +++ b/test/battle/move_effect/rage_fist.c @@ -296,3 +296,49 @@ SINGLE_BATTLE_TEST("Rage Fist number of hits is copied by Transform") EXPECT_MUL_EQ(timesGotHit[0], Q_4_12(2.0), timesGotHit[1]); } } + +SINGLE_BATTLE_TEST("Rage Fist base power is increased by 50 if user was hit and forces out") +{ + s16 timesGotHit[2]; + + GIVEN { + PLAYER(SPECIES_REGIROCK); + OPPONENT(SPECIES_REGIROCK); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, MOVE_RAGE_FIST); MOVE(player, MOVE_DRAGON_TAIL); } + TURN { MOVE(player, MOVE_CELEBRATE); SWITCH(opponent, 0); } + TURN { MOVE(opponent, MOVE_RAGE_FIST); MOVE(player, MOVE_CELEBRATE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGE_FIST, opponent); + HP_BAR(player, captureDamage: ×GotHit[0]); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGE_FIST, opponent); + HP_BAR(player, captureDamage: ×GotHit[1]); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + } THEN { + EXPECT_MUL_EQ(timesGotHit[0], Q_4_12(2.0), timesGotHit[1]); + } +} + +SINGLE_BATTLE_TEST("Rage Fist doesn't get increased power if Substitute is hit") +{ + s16 timesGotHit[2]; + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_RAGE_FIST); MOVE(player, MOVE_CELEBRATE); } + TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_TACKLE); } + TURN { MOVE(opponent, MOVE_RAGE_FIST); MOVE(player, MOVE_CELEBRATE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGE_FIST, opponent); + HP_BAR(player, captureDamage: ×GotHit[0]); + ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGE_FIST, opponent); + HP_BAR(player, captureDamage: ×GotHit[1]); + } THEN { + EXPECT_EQ(timesGotHit[0], timesGotHit[1]); + } +} From 388389714b7809a49385b46e4a3c6b417a306738 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sun, 30 Mar 2025 10:52:24 +0200 Subject: [PATCH 107/115] Rename removelishtscreenreflect to removescreens (#6495) --- asm/macros/battle_script.inc | 2 +- data/battle_scripts_1.s | 2 +- src/battle_script_commands.c | 7 +++---- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 8c1c9fc929..f3d8f5000f 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1269,7 +1269,7 @@ .byte 0xed .endm - .macro removelightscreenreflect + .macro removescreens .byte 0xee .endm diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index bc2b37466a..93873871f9 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -5072,7 +5072,7 @@ BattleScript_EffectBrickBreak:: attackstring ppreduce typecalc - removelightscreenreflect + removescreens critcalc damagecalc adjustdamage diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 1c0e470cde..da25d9672f 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -585,7 +585,7 @@ static void Cmd_tryrecycleitem(void); static void Cmd_settypetoterrain(void); static void Cmd_pursuitdoubles(void); static void Cmd_snatchsetbattlers(void); -static void Cmd_removelightscreenreflect(void); +static void Cmd_removescreens(void); static void Cmd_handleballthrow(void); static void Cmd_givecaughtmon(void); static void Cmd_trysetcaughtmondexflags(void); @@ -844,7 +844,7 @@ void (* const gBattleScriptingCommandsTable[])(void) = Cmd_settypetoterrain, //0xEB Cmd_pursuitdoubles, //0xEC Cmd_snatchsetbattlers, //0xED - Cmd_removelightscreenreflect, //0xEE + Cmd_removescreens, //0xEE Cmd_handleballthrow, //0xEF Cmd_givecaughtmon, //0xF0 Cmd_trysetcaughtmondexflags, //0xF1 @@ -15782,8 +15782,7 @@ static void Cmd_snatchsetbattlers(void) gBattlescriptCurrInstr = cmd->nextInstr; } -// Brick Break -static void Cmd_removelightscreenreflect(void) +static void Cmd_removescreens(void) { CMD_ARGS(); From 68a869da9974a0cd869b6339607ea5394fa5abc7 Mon Sep 17 00:00:00 2001 From: aronson Date: Sun, 30 Mar 2025 03:57:58 -0500 Subject: [PATCH 108/115] Hide in-battle types from Union Room trade request (#6489) --- src/data/union_room.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/data/union_room.h b/src/data/union_room.h index f39ab83de0..42c02c5a58 100644 --- a/src/data/union_room.h +++ b/src/data/union_room.h @@ -867,7 +867,8 @@ static const struct WindowTemplate sWindowTemplate_TradingBoardRequestType = { .baseBlock = 0x0001 }; -static const struct ListMenuItem sTradingBoardTypes[NUMBER_OF_MON_TYPES] = { +// Subtract two from the total type count to handle in-battle types not for display +static const struct ListMenuItem sTradingBoardTypes[NUMBER_OF_MON_TYPES - 2] = { { gTypesInfo[TYPE_NORMAL].name, TYPE_NORMAL }, { gTypesInfo[TYPE_FIRE].name, TYPE_FIRE }, { gTypesInfo[TYPE_WATER].name, TYPE_WATER }, From 093e2655158dc41d0c853e5fa4efc53b35be7aa9 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sun, 30 Mar 2025 14:18:21 +0200 Subject: [PATCH 109/115] Fixes Destiny Bond against Dynamax no failing (#6501) --- src/battle_script_commands.c | 21 ++++++++++++++++++++- test/battle/gimmick/dynamax.c | 12 ++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index da25d9672f..34e78a3890 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -13864,10 +13864,29 @@ static void Cmd_trychoosesleeptalkmove(void) } } +static inline bool32 IsDanamaxMonPresent(void) +{ + for (u32 battler = 0; battler < gBattlersCount; battler++) + { + if (battler == gBattlerAttacker) + continue; + + if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX) + return TRUE; + } + + return FALSE; +} + static void Cmd_trysetdestinybond(void) { CMD_ARGS(const u8 *failInstr); - if (DoesDestinyBondFail(gBattlerAttacker)) + + if (IsDanamaxMonPresent()) + { + gBattlescriptCurrInstr = BattleScript_MoveBlockedByDynamax; + } + else if (DoesDestinyBondFail(gBattlerAttacker)) { gBattlescriptCurrInstr = cmd->failInstr; } diff --git a/test/battle/gimmick/dynamax.c b/test/battle/gimmick/dynamax.c index 791973f893..ea8957e474 100644 --- a/test/battle/gimmick/dynamax.c +++ b/test/battle/gimmick/dynamax.c @@ -1624,3 +1624,15 @@ SINGLE_BATTLE_TEST("Dynamax: Dynamax is reverted before switch out") MESSAGE("Wobbuffet used Tackle!"); } } + +SINGLE_BATTLE_TEST("Dynamax: Destiny Bond if a dynamaxed battler is present on field") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_DESTINY_BOND); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); } + } SCENE { + MESSAGE("The move was blocked by the power of Dynamax!"); + } +} From e350bea1686e7a370649020baa4a7fe7353e7192 Mon Sep 17 00:00:00 2001 From: Hedara Date: Sun, 30 Mar 2025 14:55:51 +0200 Subject: [PATCH 110/115] Expansion 1.11.1 Release --- .../ISSUE_TEMPLATE/01_battle_engine_bugs.yaml | 3 +- .../ISSUE_TEMPLATE/02_battle_ai_issues.yaml | 3 +- .github/ISSUE_TEMPLATE/04_other_errors.yaml | 3 +- README.md | 4 +- docs/SUMMARY.md | 1 + docs/changelogs/1.11.x/1.11.1.md | 115 ++++++++++++++++++ include/constants/expansion.h | 4 +- 7 files changed, 126 insertions(+), 7 deletions(-) create mode 100644 docs/changelogs/1.11.x/1.11.1.md diff --git a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml index a294b007b7..7d3ad81846 100644 --- a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml +++ b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml @@ -23,9 +23,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.11.0 (Latest release) + - 1.11.1 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.11.0 - 1.10.3 - 1.10.2 - 1.10.1 diff --git a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml index 59d0fb53f1..1fe3387f6b 100644 --- a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml +++ b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml @@ -23,9 +23,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.11.0 (Latest release) + - 1.11.1 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.11.0 - 1.10.3 - 1.10.2 - 1.10.1 diff --git a/.github/ISSUE_TEMPLATE/04_other_errors.yaml b/.github/ISSUE_TEMPLATE/04_other_errors.yaml index 0ceab0ec95..0f37baf0fc 100644 --- a/.github/ISSUE_TEMPLATE/04_other_errors.yaml +++ b/.github/ISSUE_TEMPLATE/04_other_errors.yaml @@ -23,9 +23,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.11.0 (Latest release) + - 1.11.1 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.11.0 - 1.10.3 - 1.10.2 - 1.10.1 diff --git a/README.md b/README.md index cc978678c6..75a63603a5 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ The main advantage of using vanilla pokeemerald as a base is being able to link If you use pokeemerald-expansion in your hack, please add RHH (Rom Hacking Hideout) to your credits list. Optionally, you can list the version used, so it can help players know what features to expect. You can phrase it as the following: ``` -Based off RHH's pokeemerald-expansion 1.11.0 https://github.com/rh-hideout/pokeemerald-expansion/ +Based off RHH's pokeemerald-expansion 1.11.1 https://github.com/rh-hideout/pokeemerald-expansion/ ``` #### Important: DO NOT use GitHub's "Download Zip" option. Using this option will not download the commit history required to update your expansion version or merge other feature branches. Instead, please read [this guide](https://github.com/Pawkkie/Team-Aquas-Asset-Repo/wiki/The-Basics-of-GitHub) to learn how to fork the repository and clone locally from there. @@ -33,7 +33,7 @@ With this, you'll get the latest version of pokeemerald-expansion, plus a couple - You can check in the debug menu's `Utilities -> Expansion Version` option. - If the option is not available, you possibly have version 1.6.2 or older. In that case, please check the [changelogs](docs/CHANGELOG.md) to determine your version based on the features available on your repository. - ***Important:*** If you are several versions behind, we recommend updating one minor version at a time, skipping directly to the latest patch version (eg, 1.5.3 -> 1.6.2 -> 1.7.4 and so on. Check the [online documentation site](https://rh-hideout.github.io/pokeemerald-expansion/CHANGELOG.html) to see the latest versions of each step.) -- Once you have your remote set up, run the command `git pull RHH expansion/X.Y.Z`, replacing X, Y and Z with the digits of the respective version you want to update to (eg, to update to 1.9.3, use `git pull RHH expansion/1.9.3`). +- Once you have your remote set up, run the command `git pull RHH expansion/X.Y.Z`, replacing X, Y and Z with the digits of the respective version you want to update to (eg, to update to 1.11.1, use `git pull RHH expansion/1.11.1`). - ***Important:*** If you are several versions behind, we recommend updating one minor version at a time, skipping directly to the latest patch version (eg, 1.5.3 -> 1.6.2 -> 1.7.4 and so on) - Alternatively, you can update to unreleased versions of the expansion. - ***master (stable):*** It contains unreleased **bugfixes** that will come in the next patch version. To merge, use `git pull RHH master`. diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index 193d2808a2..9a921c9373 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -21,6 +21,7 @@ - [How to add new Trainer Slides](tutorials/how_to_new_trainer_slide.md) - [Changelog](./CHANGELOG.md) - [1.11.x]() + - [Version 1.11.1](changelogs/1.11.x/1.11.1.md) - [Version 1.11.0](changelogs/1.11.x/1.11.0.md) - [1.10.x]() - [Version 1.10.3](changelogs/1.10.x/1.10.3.md) diff --git a/docs/changelogs/1.11.x/1.11.1.md b/docs/changelogs/1.11.x/1.11.1.md new file mode 100644 index 0000000000..f304a5dac3 --- /dev/null +++ b/docs/changelogs/1.11.x/1.11.1.md @@ -0,0 +1,115 @@ +```md +## How to update +- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. +- Once you have your remote set up, run the command `git pull RHH expansion/1.11.1 +`. +``` + + +## 🧬 General 🧬 +### Added +* Added workflow for labels check by @hedara90 in [#6488](https://github.com/rh-hideout/pokeemerald-expansion/pull/6488) + +### Changed +* metaprogram.h without global.h by @mrgriffin in [#6469](https://github.com/rh-hideout/pokeemerald-expansion/pull/6469) +* Rename removelishtscreenreflect to removescreens by @AlexOn1ine in [#6495](https://github.com/rh-hideout/pokeemerald-expansion/pull/6495) + +### Fixed +* Fix Melmetal's weight by @kittenchilly in [#6382](https://github.com/rh-hideout/pokeemerald-expansion/pull/6382) +* B_FAST_INTRO_PKMN_TEXT fix by @hedara90 in [#6395](https://github.com/rh-hideout/pokeemerald-expansion/pull/6395) +* remove/replace IsAlly leftovers by @cawtds in [#6399](https://github.com/rh-hideout/pokeemerald-expansion/pull/6399) +* Increase dex no digits from 3 to 4 by @PCG06 in [#6484](https://github.com/rh-hideout/pokeemerald-expansion/pull/6484) + +## 🗺️ Overworld 🗺️ +### Changed +* Replace Incorrect Slow Stairs Movement with Correct One by @Deokishisu in [#6275](https://github.com/rh-hideout/pokeemerald-expansion/pull/6275) + +### Fixed +* Fix compile errors with OW_BATTLE_ONLY_FORMS set to FALSE by @hedara90 in [#6400](https://github.com/rh-hideout/pokeemerald-expansion/pull/6400) +* Include Missed `GetInteractedMetatileScript` Entries for Mart & Center Signs by @Deokishisu in [#6269](https://github.com/rh-hideout/pokeemerald-expansion/pull/6269) +* Fix DexNav search level by @cawtds in [#6421](https://github.com/rh-hideout/pokeemerald-expansion/pull/6421) +* Hide in-battle types from Union Room trade request by @aronson in [#6489](https://github.com/rh-hideout/pokeemerald-expansion/pull/6489) + +## 🐉 Pokémon 🐉 +### Fixed +* Fixed Zacian/Zamazenta learning Iron head while already knowing by @hedara90, @wiz1989 reported the issue, in [#6365](https://github.com/rh-hideout/pokeemerald-expansion/pull/6365) +* Fix roamers having 0 hp on repeat encounters by @danaYatsuta in [#6366](https://github.com/rh-hideout/pokeemerald-expansion/pull/6366) +* Fixed unfusion of traded materials by @hedara90, @mrgriffin found the issue, in [#6415](https://github.com/rh-hideout/pokeemerald-expansion/pull/6415) + +## ⚔️ Battle General ⚔️ +### Changed +* Fix Red Card overwriting gBattlerAttacker by @ghoulslash in [#6376](https://github.com/rh-hideout/pokeemerald-expansion/pull/6376) +* Fixes Magic Coat message when move is bounced back by @AlexOn1ine in [#6419](https://github.com/rh-hideout/pokeemerald-expansion/pull/6419) + +### Fixed +* Reorder Dancer activation by @PhallenTree in [#6379](https://github.com/rh-hideout/pokeemerald-expansion/pull/6379) +* Fixes crash damage move against absorbing abilities by @AlexOn1ine in [#6361](https://github.com/rh-hideout/pokeemerald-expansion/pull/6361) +* Fixes gimmick icon flying off the screen by @PhallenTree in [#6401](https://github.com/rh-hideout/pokeemerald-expansion/pull/6401) +* Fixed Parental Bond with two-turn attacks by @hedara90 in [#6408](https://github.com/rh-hideout/pokeemerald-expansion/pull/6408) +* Wrong argument usage in `CalcCritChanceStage` by @AlexOn1ine in [#6429](https://github.com/rh-hideout/pokeemerald-expansion/pull/6429) +* Fixes Neutralizing Gas Exits, Weather Abilities and Terrain Effects order by @PhallenTree in [#6435](https://github.com/rh-hideout/pokeemerald-expansion/pull/6435) +* Fixes hazards not respecting tera types by @AlexOn1ine in [#6431](https://github.com/rh-hideout/pokeemerald-expansion/pull/6431) +* Fixes dynamax reversion when ejected out + anim fix by @AlexOn1ine in [#6416](https://github.com/rh-hideout/pokeemerald-expansion/pull/6416) +* Fixes negative priority being blocked by dazzling abilities by @AlexOn1ine in [#6433](https://github.com/rh-hideout/pokeemerald-expansion/pull/6433) +* Fixes Cotton Spore failing if one of the targets blocks it by @AlexOn1ine in [#6418](https://github.com/rh-hideout/pokeemerald-expansion/pull/6418) +* Fixes Toxic Spikes Absorbed message by @PhallenTree in [#6448](https://github.com/rh-hideout/pokeemerald-expansion/pull/6448) +* Fixes Cheek Pouch mutating damage by @AlexOn1ine in [#6466](https://github.com/rh-hideout/pokeemerald-expansion/pull/6466) +* Fixes choice move locking at the wrong time by @AlexOn1ine in [#6467](https://github.com/rh-hideout/pokeemerald-expansion/pull/6467) +* Fixes protective pads against Protects secondary effects by @AlexOn1ine in [#6474](https://github.com/rh-hideout/pokeemerald-expansion/pull/6474) +* Fixes clear body type effect and clear amulet against protect effects by @AlexOn1ine in [#6482](https://github.com/rh-hideout/pokeemerald-expansion/pull/6482) +* Fixes Aftermath ability popup message by @AlexOn1ine in [#6491](https://github.com/rh-hideout/pokeemerald-expansion/pull/6491) +* Fixes Emergency Exit and Eject Pack by @AlexOn1ine in [#6459](https://github.com/rh-hideout/pokeemerald-expansion/pull/6459) +* Fixes Hospitality not being blocked by Heal Block by @AlexOn1ine in [#6494](https://github.com/rh-hideout/pokeemerald-expansion/pull/6494) +* Fixes timesGotHit not increasing on forced switch out by @AlexOn1ine in [#6493](https://github.com/rh-hideout/pokeemerald-expansion/pull/6493) +* Fixes Destiny Bond against Dynamax no failing by @AlexOn1ine in [#6501](https://github.com/rh-hideout/pokeemerald-expansion/pull/6501) + +## 🤹 Moves 🤹 +### Fixed +* Fixed Ivy Cudgel types with type changes by @hedara90 in [#6369](https://github.com/rh-hideout/pokeemerald-expansion/pull/6369) +* Adds move description battle config by @AlexOn1ine in [#6364](https://github.com/rh-hideout/pokeemerald-expansion/pull/6364) +* Fix Jet Punch in isolated tests by @hedara90 in [#6461](https://github.com/rh-hideout/pokeemerald-expansion/pull/6461) +* Sucker punch vs struggle by @hedara90 in [#6475](https://github.com/rh-hideout/pokeemerald-expansion/pull/6475) + +## 🤖 Battle AI 🤖 +### Changed +* Update Battle Debug menu with new AI flags by @kittenchilly in [#6444](https://github.com/rh-hideout/pokeemerald-expansion/pull/6444) + +### Fixed +* Fixed AI_FLAG_CHECK_VIABILITY changing the toxic counter in some cases by @hedara90, @iriv24 discovered the issue, in [#6402](https://github.com/rh-hideout/pokeemerald-expansion/pull/6402) +* Fix Focus Sash being considered in switch AI's hits to KO calcs by @Pawkkie in [#6436](https://github.com/rh-hideout/pokeemerald-expansion/pull/6436) +* AI gimmick check changed from checking trainer data to a BattleStruct field by @hedara90 in [#6478](https://github.com/rh-hideout/pokeemerald-expansion/pull/6478) +* Fix hit escape ace mon switching by @Pawkkie and @wiz1989, @AlexOn1ine in [#6498](https://github.com/rh-hideout/pokeemerald-expansion/pull/6498) + +## 🧹 Other Cleanup 🧹 +* Update AI_TryTo2HKO comment by @Pawkkie in [#6349](https://github.com/rh-hideout/pokeemerald-expansion/pull/6349) +* Fixing grammar of Berry Tree strings by @surskitty in [#6355](https://github.com/rh-hideout/pokeemerald-expansion/pull/6355) + - Berry trees berries are no longer erroneously plural. +* Move category test cleanup by @hedara90 in [#6447](https://github.com/rh-hideout/pokeemerald-expansion/pull/6447) +* Fixes Magic Coat message when move is bounced back by @AlexOn1ine in [#6419](https://github.com/rh-hideout/pokeemerald-expansion/pull/6419) +* Update Battle Debug menu with new AI flags by @kittenchilly in [#6444](https://github.com/rh-hideout/pokeemerald-expansion/pull/6444) +* Rename removelishtscreenreflect to removescreens by @AlexOn1ine in [#6495](https://github.com/rh-hideout/pokeemerald-expansion/pull/6495) + +## 🧪 Test Runner 🧪 +### Changed +* Fix Red Card overwriting gBattlerAttacker by @ghoulslash in [#6376](https://github.com/rh-hideout/pokeemerald-expansion/pull/6376) +* Move category test cleanup by @hedara90 in [#6447](https://github.com/rh-hideout/pokeemerald-expansion/pull/6447) +* Changed KNOWN_FAILING test by @hedara90 in [#6492](https://github.com/rh-hideout/pokeemerald-expansion/pull/6492) + +### Fixed +* Fixes Known Failing Mold Breaker Sleep Clause test by @PhallenTree in [#6434](https://github.com/rh-hideout/pokeemerald-expansion/pull/6434) +* Made memory integrity checks run betweeen PARAMETRIZE runs by @hedara90 and @mrgriffin in [#6462](https://github.com/rh-hideout/pokeemerald-expansion/pull/6462) + +## 📚 Documentation 📚 +* Fixed a missing ) in trainers.party comment block. by @RubyRaven6 in [#6367](https://github.com/rh-hideout/pokeemerald-expansion/pull/6367) +* Update README.md for contest src link by @lwelyk in [#6375](https://github.com/rh-hideout/pokeemerald-expansion/pull/6375) + +## New Contributors +* @RubyRaven6 made their first contribution in [#6367](https://github.com/rh-hideout/pokeemerald-expansion/pull/6367) +* @lwelyk made their first contribution in [#6375](https://github.com/rh-hideout/pokeemerald-expansion/pull/6375) +* @danaYatsuta made their first contribution in [#6366](https://github.com/rh-hideout/pokeemerald-expansion/pull/6366) + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.11.0...expansion/1.11.1 + + + + diff --git a/include/constants/expansion.h b/include/constants/expansion.h index b3510c9845..6a2639a5e0 100644 --- a/include/constants/expansion.h +++ b/include/constants/expansion.h @@ -1,13 +1,13 @@ #ifndef GUARD_CONSTANTS_EXPANSION_H #define GUARD_CONSTANTS_EXPANSION_H -// Last version: 1.11.0 +// Last version: 1.11.1 #define EXPANSION_VERSION_MAJOR 1 #define EXPANSION_VERSION_MINOR 11 #define EXPANSION_VERSION_PATCH 1 // FALSE if this this version of Expansion is not a tagged commit, i.e. // it contains unreleased changes. -#define EXPANSION_TAGGED_RELEASE FALSE +#define EXPANSION_TAGGED_RELEASE TRUE #endif From 3615fdde29fac0ab473e44152f07596c7587eaa0 Mon Sep 17 00:00:00 2001 From: Hedara Date: Sun, 30 Mar 2025 14:56:39 +0200 Subject: [PATCH 111/115] START OF 1.11.2 CYCLE --- include/constants/expansion.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/constants/expansion.h b/include/constants/expansion.h index 6a2639a5e0..1935b81cd9 100644 --- a/include/constants/expansion.h +++ b/include/constants/expansion.h @@ -4,10 +4,10 @@ // Last version: 1.11.1 #define EXPANSION_VERSION_MAJOR 1 #define EXPANSION_VERSION_MINOR 11 -#define EXPANSION_VERSION_PATCH 1 +#define EXPANSION_VERSION_PATCH 2 // FALSE if this this version of Expansion is not a tagged commit, i.e. // it contains unreleased changes. -#define EXPANSION_TAGGED_RELEASE TRUE +#define EXPANSION_TAGGED_RELEASE FALSE #endif From 6f4a5ce1a07dd17d66057a0540441f19cdb39d91 Mon Sep 17 00:00:00 2001 From: Isaac Aronson Date: Sun, 30 Mar 2025 14:14:40 -0500 Subject: [PATCH 112/115] Mark RTC/Flash save hint string as used --- src/siirtc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/siirtc.c b/src/siirtc.c index a29a62da26..5c511f6815 100644 --- a/src/siirtc.c +++ b/src/siirtc.c @@ -75,7 +75,7 @@ static u8 ReadData(); static void EnableGpioPortRead(); static void DisableGpioPortRead(); -static const char AgbLibRtcVersion[] = "SIIRTC_V001"; +USED static const char AgbLibRtcVersion[] = "SIIRTC_V001"; void SiiRtcUnprotect(void) { From 190b916db0b5b96fbb7425cb13f117ec4db6c6b1 Mon Sep 17 00:00:00 2001 From: malad1211 <43647853+malad1211@users.noreply.github.com> Date: Mon, 31 Mar 2025 18:41:51 +0700 Subject: [PATCH 113/115] Fix move names in learnset helper (#6510) --- .../porymoves_files/b2w2.json | 60 +++++++++---------- .../learnset_helpers/porymoves_files/bw.json | 60 +++++++++---------- .../learnset_helpers/porymoves_files/dp.json | 50 ++++++++-------- .../porymoves_files/frlg.json | 40 ++++++------- .../porymoves_files/hgss.json | 50 ++++++++-------- .../porymoves_files/oras.json | 60 +++++++++---------- .../learnset_helpers/porymoves_files/pt.json | 50 ++++++++-------- .../learnset_helpers/porymoves_files/rse.json | 40 ++++++------- .../learnset_helpers/porymoves_files/sm.json | 60 +++++++++---------- .../learnset_helpers/porymoves_files/sv.json | 4 +- .../porymoves_files/usum.json | 60 +++++++++---------- .../learnset_helpers/porymoves_files/xy.json | 60 +++++++++---------- 12 files changed, 297 insertions(+), 297 deletions(-) diff --git a/tools/learnset_helpers/porymoves_files/b2w2.json b/tools/learnset_helpers/porymoves_files/b2w2.json index bd1762990e..b959d386ac 100644 --- a/tools/learnset_helpers/porymoves_files/b2w2.json +++ b/tools/learnset_helpers/porymoves_files/b2w2.json @@ -6536,7 +6536,7 @@ "MOVE_REVENGE", "MOVE_REVERSAL", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_COVET", @@ -6687,7 +6687,7 @@ "MOVE_REVENGE", "MOVE_REVERSAL", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_COVET", @@ -7754,7 +7754,7 @@ "MOVE_MEDITATE", "MOVE_POWER_TRICK", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_THUNDER_PUNCH", "MOVE_TICKLE" ], @@ -7890,7 +7890,7 @@ "MOVE_MEDITATE", "MOVE_POWER_TRICK", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_THUNDER_PUNCH", "MOVE_TICKLE" ], @@ -8033,7 +8033,7 @@ "MOVE_MEDITATE", "MOVE_POWER_TRICK", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_THUNDER_PUNCH", "MOVE_TICKLE" ], @@ -13164,7 +13164,7 @@ "MOVE_MAGNITUDE", "MOVE_MUDDY_WATER", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_ZEN_HEADBUTT" ], @@ -25781,7 +25781,7 @@ "MOVE_METRONOME", "MOVE_MIMIC", "MOVE_PRESENT", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_THUNDER_FANG" ], @@ -25930,7 +25930,7 @@ "MOVE_METRONOME", "MOVE_MIMIC", "MOVE_PRESENT", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_THUNDER_FANG" ], @@ -31544,7 +31544,7 @@ "MOVE_LOW_KICK", "MOVE_NIGHT_SLASH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_BOUNCE", @@ -31677,7 +31677,7 @@ "MOVE_LOW_KICK", "MOVE_NIGHT_SLASH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_BOUNCE", @@ -31834,7 +31834,7 @@ "MOVE_LOW_KICK", "MOVE_NIGHT_SLASH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_BLAST_BURN", @@ -35812,7 +35812,7 @@ "MOVE_EXTRASENSORY", "MOVE_FAKE_TEARS", "MOVE_HAMMER_ARM", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SMOKESCREEN", "MOVE_SNORE", "MOVE_TAKE_DOWN" @@ -35943,7 +35943,7 @@ "MOVE_EXTRASENSORY", "MOVE_FAKE_TEARS", "MOVE_HAMMER_ARM", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SMOKESCREEN", "MOVE_SNORE", "MOVE_TAKE_DOWN" @@ -36099,7 +36099,7 @@ "MOVE_EXTRASENSORY", "MOVE_FAKE_TEARS", "MOVE_HAMMER_ARM", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SMOKESCREEN", "MOVE_SNORE", "MOVE_TAKE_DOWN" @@ -36155,7 +36155,7 @@ }, { "Level": 22, - "Move": "MOVE_SMELLING_SALT" + "Move": "MOVE_SMELLING_SALTS" }, { "Level": 25, @@ -36301,7 +36301,7 @@ }, { "Level": 22, - "Move": "MOVE_SMELLING_SALT" + "Move": "MOVE_SMELLING_SALTS" }, { "Level": 27, @@ -37260,7 +37260,7 @@ "MOVE_HEAD_SMASH", "MOVE_IRON_HEAD", "MOVE_SCREECH", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STEALTH_ROCK", "MOVE_STOMP", "MOVE_SUPERPOWER" @@ -37395,7 +37395,7 @@ "MOVE_HEAD_SMASH", "MOVE_IRON_HEAD", "MOVE_SCREECH", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STEALTH_ROCK", "MOVE_STOMP", "MOVE_SUPERPOWER" @@ -37551,7 +37551,7 @@ "MOVE_HEAD_SMASH", "MOVE_IRON_HEAD", "MOVE_SCREECH", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STEALTH_ROCK", "MOVE_STOMP", "MOVE_SUPERPOWER" @@ -40230,7 +40230,7 @@ "MOVE_PSYCHO_CUT", "MOVE_RAPID_SPIN", "MOVE_ROLE_PLAY", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_TRICK", "MOVE_WATER_PULSE", "MOVE_WISH" @@ -40775,7 +40775,7 @@ "MOVE_MAGICAL_LEAF", "MOVE_NASTY_PLOT", "MOVE_SEED_BOMB", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SWITCHEROO", "MOVE_TEETER_DANCE", "MOVE_WORRY_SEED" @@ -40920,7 +40920,7 @@ "MOVE_MAGICAL_LEAF", "MOVE_NASTY_PLOT", "MOVE_SEED_BOMB", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SWITCHEROO", "MOVE_TEETER_DANCE", "MOVE_WORRY_SEED" @@ -55166,7 +55166,7 @@ "MOVE_HEADBUTT", "MOVE_ME_FIRST", "MOVE_MEDITATE", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VACUUM_WAVE", "MOVE_WAKE_UP_SLAP" ], @@ -55321,7 +55321,7 @@ "MOVE_HEADBUTT", "MOVE_ME_FIRST", "MOVE_MEDITATE", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VACUUM_WAVE", "MOVE_WAKE_UP_SLAP" ], @@ -56469,7 +56469,7 @@ "MOVE_MAGNITUDE", "MOVE_MUDDY_WATER", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_ZEN_HEADBUTT" ], @@ -65266,7 +65266,7 @@ "MOVE_FORESIGHT", "MOVE_MACH_PUNCH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_WIDE_GUARD" ], "TutorMoves": [ @@ -65403,7 +65403,7 @@ "MOVE_FORESIGHT", "MOVE_MACH_PUNCH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_WIDE_GUARD" ], "TutorMoves": [ @@ -65544,7 +65544,7 @@ "MOVE_FORESIGHT", "MOVE_MACH_PUNCH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_WIDE_GUARD" ], "TutorMoves": [ @@ -76069,7 +76069,7 @@ "MOVE_KNOCK_OFF", "MOVE_LOW_KICK", "MOVE_ME_FIRST", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VITAL_THROW" ], "TutorMoves": [ @@ -76215,7 +76215,7 @@ "MOVE_KNOCK_OFF", "MOVE_LOW_KICK", "MOVE_ME_FIRST", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VITAL_THROW" ], "TutorMoves": [ diff --git a/tools/learnset_helpers/porymoves_files/bw.json b/tools/learnset_helpers/porymoves_files/bw.json index 4a93b57602..4d744607e7 100644 --- a/tools/learnset_helpers/porymoves_files/bw.json +++ b/tools/learnset_helpers/porymoves_files/bw.json @@ -5876,7 +5876,7 @@ "MOVE_REVENGE", "MOVE_REVERSAL", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [] }, @@ -6010,7 +6010,7 @@ "MOVE_REVENGE", "MOVE_REVERSAL", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [] }, @@ -6954,7 +6954,7 @@ "MOVE_MEDITATE", "MOVE_POWER_TRICK", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_THUNDER_PUNCH", "MOVE_TICKLE" ], @@ -7078,7 +7078,7 @@ "MOVE_MEDITATE", "MOVE_POWER_TRICK", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_THUNDER_PUNCH", "MOVE_TICKLE" ], @@ -7209,7 +7209,7 @@ "MOVE_MEDITATE", "MOVE_POWER_TRICK", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_THUNDER_PUNCH", "MOVE_TICKLE" ], @@ -11879,7 +11879,7 @@ "MOVE_MAGNITUDE", "MOVE_MUDDY_WATER", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_ZEN_HEADBUTT" ], @@ -23106,7 +23106,7 @@ "MOVE_METRONOME", "MOVE_MIMIC", "MOVE_PRESENT", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_THUNDER_FANG" ], @@ -23242,7 +23242,7 @@ "MOVE_METRONOME", "MOVE_MIMIC", "MOVE_PRESENT", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_THUNDER_FANG" ], @@ -28253,7 +28253,7 @@ "MOVE_LOW_KICK", "MOVE_NIGHT_SLASH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_FIRE_PLEDGE" @@ -28379,7 +28379,7 @@ "MOVE_LOW_KICK", "MOVE_NIGHT_SLASH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_FIRE_PLEDGE" @@ -28526,7 +28526,7 @@ "MOVE_LOW_KICK", "MOVE_NIGHT_SLASH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_BLAST_BURN", @@ -32107,7 +32107,7 @@ "MOVE_EXTRASENSORY", "MOVE_FAKE_TEARS", "MOVE_HAMMER_ARM", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SMOKESCREEN", "MOVE_SNORE", "MOVE_TAKE_DOWN" @@ -32227,7 +32227,7 @@ "MOVE_EXTRASENSORY", "MOVE_FAKE_TEARS", "MOVE_HAMMER_ARM", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SMOKESCREEN", "MOVE_SNORE", "MOVE_TAKE_DOWN" @@ -32371,7 +32371,7 @@ "MOVE_EXTRASENSORY", "MOVE_FAKE_TEARS", "MOVE_HAMMER_ARM", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SMOKESCREEN", "MOVE_SNORE", "MOVE_TAKE_DOWN" @@ -32414,7 +32414,7 @@ }, { "Level": 22, - "Move": "MOVE_SMELLING_SALT" + "Move": "MOVE_SMELLING_SALTS" }, { "Level": 25, @@ -32549,7 +32549,7 @@ }, { "Level": 22, - "Move": "MOVE_SMELLING_SALT" + "Move": "MOVE_SMELLING_SALTS" }, { "Level": 27, @@ -33386,7 +33386,7 @@ "MOVE_HEAD_SMASH", "MOVE_IRON_HEAD", "MOVE_SCREECH", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STEALTH_ROCK", "MOVE_STOMP", "MOVE_SUPERPOWER" @@ -33512,7 +33512,7 @@ "MOVE_HEAD_SMASH", "MOVE_IRON_HEAD", "MOVE_SCREECH", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STEALTH_ROCK", "MOVE_STOMP", "MOVE_SUPERPOWER" @@ -33659,7 +33659,7 @@ "MOVE_HEAD_SMASH", "MOVE_IRON_HEAD", "MOVE_SCREECH", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STEALTH_ROCK", "MOVE_STOMP", "MOVE_SUPERPOWER" @@ -36075,7 +36075,7 @@ "MOVE_PSYCHO_CUT", "MOVE_RAPID_SPIN", "MOVE_ROLE_PLAY", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_TRICK", "MOVE_WATER_PULSE", "MOVE_WISH" @@ -36505,7 +36505,7 @@ "MOVE_MAGICAL_LEAF", "MOVE_NASTY_PLOT", "MOVE_SEED_BOMB", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SWITCHEROO", "MOVE_TEETER_DANCE", "MOVE_WORRY_SEED" @@ -36636,7 +36636,7 @@ "MOVE_MAGICAL_LEAF", "MOVE_NASTY_PLOT", "MOVE_SEED_BOMB", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SWITCHEROO", "MOVE_TEETER_DANCE", "MOVE_WORRY_SEED" @@ -49431,7 +49431,7 @@ "MOVE_HEADBUTT", "MOVE_ME_FIRST", "MOVE_MEDITATE", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VACUUM_WAVE", "MOVE_WAKE_UP_SLAP" ], @@ -49567,7 +49567,7 @@ "MOVE_HEADBUTT", "MOVE_ME_FIRST", "MOVE_MEDITATE", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VACUUM_WAVE", "MOVE_WAKE_UP_SLAP" ], @@ -50591,7 +50591,7 @@ "MOVE_MAGNITUDE", "MOVE_MUDDY_WATER", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_ZEN_HEADBUTT" ], @@ -58423,7 +58423,7 @@ "MOVE_FORESIGHT", "MOVE_MACH_PUNCH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_WIDE_GUARD" ], "TutorMoves": [] @@ -58548,7 +58548,7 @@ "MOVE_FORESIGHT", "MOVE_MACH_PUNCH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_WIDE_GUARD" ], "TutorMoves": [] @@ -58677,7 +58677,7 @@ "MOVE_FORESIGHT", "MOVE_MACH_PUNCH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_WIDE_GUARD" ], "TutorMoves": [] @@ -68196,7 +68196,7 @@ "MOVE_KNOCK_OFF", "MOVE_LOW_KICK", "MOVE_ME_FIRST", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VITAL_THROW" ], "TutorMoves": [] @@ -68332,7 +68332,7 @@ "MOVE_KNOCK_OFF", "MOVE_LOW_KICK", "MOVE_ME_FIRST", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VITAL_THROW" ], "TutorMoves": [] diff --git a/tools/learnset_helpers/porymoves_files/dp.json b/tools/learnset_helpers/porymoves_files/dp.json index fdae45c2a6..2cc1bbea8e 100644 --- a/tools/learnset_helpers/porymoves_files/dp.json +++ b/tools/learnset_helpers/porymoves_files/dp.json @@ -5745,7 +5745,7 @@ "MOVE_REVENGE", "MOVE_REVERSAL", "MOVE_ROCK_SLIDE", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [] }, @@ -5873,7 +5873,7 @@ "MOVE_REVENGE", "MOVE_REVERSAL", "MOVE_ROCK_SLIDE", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [] }, @@ -6789,7 +6789,7 @@ "MOVE_MEDITATE", "MOVE_ROCK_SLIDE", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_THUNDER_PUNCH" ], "TutorMoves": [] @@ -6902,7 +6902,7 @@ "MOVE_MEDITATE", "MOVE_ROCK_SLIDE", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_THUNDER_PUNCH" ], "TutorMoves": [] @@ -7018,7 +7018,7 @@ "MOVE_MEDITATE", "MOVE_ROCK_SLIDE", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_THUNDER_PUNCH" ], "TutorMoves": [] @@ -11489,7 +11489,7 @@ "MOVE_HAMMER_ARM", "MOVE_MAGNITUDE", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_SUBSTITUTE" ], @@ -22486,7 +22486,7 @@ "MOVE_METRONOME", "MOVE_PRESENT", "MOVE_REFLECT", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_THUNDER_FANG" ], @@ -22618,7 +22618,7 @@ "MOVE_METRONOME", "MOVE_PRESENT", "MOVE_REFLECT", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_THUNDER_FANG" ], @@ -27537,7 +27537,7 @@ "MOVE_NIGHT_SLASH", "MOVE_REVERSAL", "MOVE_ROCK_SLIDE", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SWAGGER" ], "TutorMoves": [] @@ -27658,7 +27658,7 @@ "MOVE_NIGHT_SLASH", "MOVE_REVERSAL", "MOVE_ROCK_SLIDE", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SWAGGER" ], "TutorMoves": [] @@ -27795,7 +27795,7 @@ "MOVE_NIGHT_SLASH", "MOVE_REVERSAL", "MOVE_ROCK_SLIDE", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SWAGGER" ], "TutorMoves": [ @@ -31332,7 +31332,7 @@ "EggMoves": [ "MOVE_ENDEAVOR", "MOVE_EXTRASENSORY", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SMOKESCREEN", "MOVE_SNORE", "MOVE_SWAGGER", @@ -31446,7 +31446,7 @@ "EggMoves": [ "MOVE_ENDEAVOR", "MOVE_EXTRASENSORY", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SMOKESCREEN", "MOVE_SNORE", "MOVE_SWAGGER", @@ -31586,7 +31586,7 @@ "EggMoves": [ "MOVE_ENDEAVOR", "MOVE_EXTRASENSORY", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SMOKESCREEN", "MOVE_SNORE", "MOVE_SWAGGER", @@ -31630,7 +31630,7 @@ }, { "Level": 22, - "Move": "MOVE_SMELLING_SALT" + "Move": "MOVE_SMELLING_SALTS" }, { "Level": 25, @@ -31758,7 +31758,7 @@ }, { "Level": 22, - "Move": "MOVE_SMELLING_SALT" + "Move": "MOVE_SMELLING_SALTS" }, { "Level": 27, @@ -32577,7 +32577,7 @@ "MOVE_ENDEAVOR", "MOVE_IRON_HEAD", "MOVE_SCREECH", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STOMP" ], "TutorMoves": [] @@ -32698,7 +32698,7 @@ "MOVE_ENDEAVOR", "MOVE_IRON_HEAD", "MOVE_SCREECH", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STOMP" ], "TutorMoves": [] @@ -32842,7 +32842,7 @@ "MOVE_ENDEAVOR", "MOVE_IRON_HEAD", "MOVE_SCREECH", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STOMP" ], "TutorMoves": [] @@ -35217,7 +35217,7 @@ "MOVE_PSYCHO_CUT", "MOVE_ROCK_SLIDE", "MOVE_ROLE_PLAY", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_TRICK", "MOVE_WISH" ], @@ -35649,7 +35649,7 @@ "MOVE_LOW_KICK", "MOVE_MAGICAL_LEAF", "MOVE_SEED_BOMB", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_TEETER_DANCE" ], "TutorMoves": [] @@ -35782,7 +35782,7 @@ "MOVE_LOW_KICK", "MOVE_MAGICAL_LEAF", "MOVE_SEED_BOMB", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_TEETER_DANCE" ], "TutorMoves": [] @@ -48274,7 +48274,7 @@ "MOVE_HEADBUTT", "MOVE_ME_FIRST", "MOVE_MEDITATE", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VACUUM_WAVE", "MOVE_WAKE_UP_SLAP" ], @@ -48405,7 +48405,7 @@ "MOVE_HEADBUTT", "MOVE_ME_FIRST", "MOVE_MEDITATE", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VACUUM_WAVE", "MOVE_WAKE_UP_SLAP" ], @@ -49430,7 +49430,7 @@ "MOVE_HAMMER_ARM", "MOVE_MAGNITUDE", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_SUBSTITUTE" ], diff --git a/tools/learnset_helpers/porymoves_files/frlg.json b/tools/learnset_helpers/porymoves_files/frlg.json index b3ca34bc90..750e15e89e 100644 --- a/tools/learnset_helpers/porymoves_files/frlg.json +++ b/tools/learnset_helpers/porymoves_files/frlg.json @@ -4694,7 +4694,7 @@ "MOVE_REVENGE", "MOVE_REVERSAL", "MOVE_ROCK_SLIDE", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_BODY_SLAM", @@ -4807,7 +4807,7 @@ "MOVE_REVENGE", "MOVE_REVERSAL", "MOVE_ROCK_SLIDE", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_BODY_SLAM", @@ -5582,7 +5582,7 @@ "MOVE_MEDITATE", "MOVE_ROCK_SLIDE", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_BODY_SLAM", @@ -5685,7 +5685,7 @@ "MOVE_MEDITATE", "MOVE_ROCK_SLIDE", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_BODY_SLAM", @@ -5789,7 +5789,7 @@ "MOVE_MEDITATE", "MOVE_ROCK_SLIDE", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_BODY_SLAM", @@ -9379,7 +9379,7 @@ "MOVE_CURSE", "MOVE_MAGNITUDE", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_SUBSTITUTE" ], @@ -18107,7 +18107,7 @@ "MOVE_METRONOME", "MOVE_PRESENT", "MOVE_REFLECT", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE" ], "TutorMoves": [ @@ -18212,7 +18212,7 @@ "MOVE_METRONOME", "MOVE_PRESENT", "MOVE_REFLECT", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE" ], "TutorMoves": [ @@ -22086,7 +22086,7 @@ "MOVE_ENDURE", "MOVE_REVERSAL", "MOVE_ROCK_SLIDE", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SWAGGER" ], "TutorMoves": [ @@ -22195,7 +22195,7 @@ "MOVE_ENDURE", "MOVE_REVERSAL", "MOVE_ROCK_SLIDE", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SWAGGER" ], "TutorMoves": [ @@ -22315,7 +22315,7 @@ "MOVE_ENDURE", "MOVE_REVERSAL", "MOVE_ROCK_SLIDE", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SWAGGER" ], "TutorMoves": [ @@ -25387,7 +25387,7 @@ ], "EggMoves": [ "MOVE_EXTRASENSORY", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_SWAGGER", "MOVE_TAKE_DOWN" @@ -25495,7 +25495,7 @@ ], "EggMoves": [ "MOVE_EXTRASENSORY", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_SWAGGER", "MOVE_TAKE_DOWN" @@ -25609,7 +25609,7 @@ ], "EggMoves": [ "MOVE_EXTRASENSORY", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_SWAGGER", "MOVE_TAKE_DOWN" @@ -25662,7 +25662,7 @@ }, { "Level": 31, - "Move": "MOVE_SMELLING_SALT" + "Move": "MOVE_SMELLING_SALTS" }, { "Level": 37, @@ -25772,7 +25772,7 @@ }, { "Level": 33, - "Move": "MOVE_SMELLING_SALT" + "Move": "MOVE_SMELLING_SALTS" }, { "Level": 40, @@ -26446,7 +26446,7 @@ "EggMoves": [ "MOVE_BODY_SLAM", "MOVE_ENDEAVOR", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STOMP" ], "TutorMoves": [ @@ -26550,7 +26550,7 @@ "EggMoves": [ "MOVE_BODY_SLAM", "MOVE_ENDEAVOR", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STOMP" ], "TutorMoves": [ @@ -26667,7 +26667,7 @@ "EggMoves": [ "MOVE_BODY_SLAM", "MOVE_ENDEAVOR", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STOMP" ], "TutorMoves": [ @@ -28659,7 +28659,7 @@ "MOVE_DISABLE", "MOVE_ENCORE", "MOVE_ROCK_SLIDE", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_TRICK", "MOVE_WISH" ], diff --git a/tools/learnset_helpers/porymoves_files/hgss.json b/tools/learnset_helpers/porymoves_files/hgss.json index 8aaf2714b3..2e54c56978 100644 --- a/tools/learnset_helpers/porymoves_files/hgss.json +++ b/tools/learnset_helpers/porymoves_files/hgss.json @@ -6393,7 +6393,7 @@ "MOVE_REVENGE", "MOVE_REVERSAL", "MOVE_ROCK_SLIDE", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_ENDEAVOR", @@ -6539,7 +6539,7 @@ "MOVE_REVENGE", "MOVE_REVERSAL", "MOVE_ROCK_SLIDE", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_ENDEAVOR", @@ -7558,7 +7558,7 @@ "MOVE_POWER_TRICK", "MOVE_ROCK_SLIDE", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_THUNDER_PUNCH" ], "TutorMoves": [ @@ -7684,7 +7684,7 @@ "MOVE_POWER_TRICK", "MOVE_ROCK_SLIDE", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_THUNDER_PUNCH" ], "TutorMoves": [ @@ -7813,7 +7813,7 @@ "MOVE_POWER_TRICK", "MOVE_ROCK_SLIDE", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_THUNDER_PUNCH" ], "TutorMoves": [ @@ -12749,7 +12749,7 @@ "MOVE_MAGNITUDE", "MOVE_MUDDY_WATER", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_SUBSTITUTE" ], @@ -25059,7 +25059,7 @@ "MOVE_METRONOME", "MOVE_PRESENT", "MOVE_REFLECT", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_THUNDER_FANG" ], @@ -25203,7 +25203,7 @@ "MOVE_METRONOME", "MOVE_PRESENT", "MOVE_REFLECT", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_THUNDER_FANG" ], @@ -30728,7 +30728,7 @@ "MOVE_NIGHT_SLASH", "MOVE_REVERSAL", "MOVE_ROCK_SLIDE", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SWAGGER" ], "TutorMoves": [ @@ -30859,7 +30859,7 @@ "MOVE_NIGHT_SLASH", "MOVE_REVERSAL", "MOVE_ROCK_SLIDE", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SWAGGER" ], "TutorMoves": [ @@ -31011,7 +31011,7 @@ "MOVE_NIGHT_SLASH", "MOVE_REVERSAL", "MOVE_ROCK_SLIDE", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SWAGGER" ], "TutorMoves": [ @@ -34988,7 +34988,7 @@ "MOVE_ENDEAVOR", "MOVE_EXTRASENSORY", "MOVE_HAMMER_ARM", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SMOKESCREEN", "MOVE_SNORE", "MOVE_SWAGGER", @@ -35114,7 +35114,7 @@ "MOVE_ENDEAVOR", "MOVE_EXTRASENSORY", "MOVE_HAMMER_ARM", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SMOKESCREEN", "MOVE_SNORE", "MOVE_SWAGGER", @@ -35268,7 +35268,7 @@ "MOVE_ENDEAVOR", "MOVE_EXTRASENSORY", "MOVE_HAMMER_ARM", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SMOKESCREEN", "MOVE_SNORE", "MOVE_SWAGGER", @@ -35325,7 +35325,7 @@ }, { "Level": 22, - "Move": "MOVE_SMELLING_SALT" + "Move": "MOVE_SMELLING_SALTS" }, { "Level": 25, @@ -35468,7 +35468,7 @@ }, { "Level": 22, - "Move": "MOVE_SMELLING_SALT" + "Move": "MOVE_SMELLING_SALTS" }, { "Level": 27, @@ -36406,7 +36406,7 @@ "MOVE_HEAD_SMASH", "MOVE_IRON_HEAD", "MOVE_SCREECH", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STOMP" ], "TutorMoves": [ @@ -36543,7 +36543,7 @@ "MOVE_HEAD_SMASH", "MOVE_IRON_HEAD", "MOVE_SCREECH", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STOMP" ], "TutorMoves": [ @@ -36704,7 +36704,7 @@ "MOVE_HEAD_SMASH", "MOVE_IRON_HEAD", "MOVE_SCREECH", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STOMP" ], "TutorMoves": [ @@ -39350,7 +39350,7 @@ "MOVE_PSYCHO_CUT", "MOVE_ROCK_SLIDE", "MOVE_ROLE_PLAY", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_TRICK", "MOVE_WISH" ], @@ -39836,7 +39836,7 @@ "MOVE_MAGICAL_LEAF", "MOVE_NASTY_PLOT", "MOVE_SEED_BOMB", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_TEETER_DANCE" ], "TutorMoves": [ @@ -39983,7 +39983,7 @@ "MOVE_MAGICAL_LEAF", "MOVE_NASTY_PLOT", "MOVE_SEED_BOMB", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_TEETER_DANCE" ], "TutorMoves": [ @@ -54014,7 +54014,7 @@ "MOVE_HEADBUTT", "MOVE_ME_FIRST", "MOVE_MEDITATE", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VACUUM_WAVE", "MOVE_WAKE_UP_SLAP" ], @@ -54164,7 +54164,7 @@ "MOVE_HEADBUTT", "MOVE_ME_FIRST", "MOVE_MEDITATE", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VACUUM_WAVE", "MOVE_WAKE_UP_SLAP" ], @@ -55299,7 +55299,7 @@ "MOVE_MAGNITUDE", "MOVE_MUDDY_WATER", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_SUBSTITUTE" ], diff --git a/tools/learnset_helpers/porymoves_files/oras.json b/tools/learnset_helpers/porymoves_files/oras.json index da1a3bf21f..c51de9a23c 100644 --- a/tools/learnset_helpers/porymoves_files/oras.json +++ b/tools/learnset_helpers/porymoves_files/oras.json @@ -6941,7 +6941,7 @@ "MOVE_REVENGE", "MOVE_REVERSAL", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_COVET", @@ -7101,7 +7101,7 @@ "MOVE_REVENGE", "MOVE_REVERSAL", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_COVET", @@ -8220,7 +8220,7 @@ "MOVE_POWER_TRICK", "MOVE_QUICK_GUARD", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_THUNDER_PUNCH", "MOVE_TICKLE" ], @@ -8372,7 +8372,7 @@ "MOVE_POWER_TRICK", "MOVE_QUICK_GUARD", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_THUNDER_PUNCH", "MOVE_TICKLE" ], @@ -8531,7 +8531,7 @@ "MOVE_POWER_TRICK", "MOVE_QUICK_GUARD", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_THUNDER_PUNCH", "MOVE_TICKLE" ], @@ -13938,7 +13938,7 @@ "MOVE_MAGNITUDE", "MOVE_MUDDY_WATER", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_ZEN_HEADBUTT" ], @@ -27315,7 +27315,7 @@ "MOVE_METRONOME", "MOVE_MIMIC", "MOVE_PRESENT", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_THUNDER_FANG" ], @@ -27475,7 +27475,7 @@ "MOVE_METRONOME", "MOVE_MIMIC", "MOVE_PRESENT", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_THUNDER_FANG" ], @@ -33468,7 +33468,7 @@ "MOVE_LOW_KICK", "MOVE_NIGHT_SLASH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_BOUNCE", @@ -33608,7 +33608,7 @@ "MOVE_LOW_KICK", "MOVE_NIGHT_SLASH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_BOUNCE", @@ -33777,7 +33777,7 @@ "MOVE_LOW_KICK", "MOVE_NIGHT_SLASH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_BLAST_BURN", @@ -38135,7 +38135,7 @@ "MOVE_EXTRASENSORY", "MOVE_FAKE_TEARS", "MOVE_HAMMER_ARM", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SMOKESCREEN", "MOVE_SNORE", "MOVE_TAKE_DOWN" @@ -38275,7 +38275,7 @@ "MOVE_EXTRASENSORY", "MOVE_FAKE_TEARS", "MOVE_HAMMER_ARM", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SMOKESCREEN", "MOVE_SNORE", "MOVE_TAKE_DOWN" @@ -38448,7 +38448,7 @@ "MOVE_EXTRASENSORY", "MOVE_FAKE_TEARS", "MOVE_HAMMER_ARM", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SMOKESCREEN", "MOVE_SNORE", "MOVE_TAKE_DOWN" @@ -38513,7 +38513,7 @@ }, { "Level": 28, - "Move": "MOVE_SMELLING_SALT" + "Move": "MOVE_SMELLING_SALTS" }, { "Level": 31, @@ -38662,7 +38662,7 @@ }, { "Level": 30, - "Move": "MOVE_SMELLING_SALT" + "Move": "MOVE_SMELLING_SALTS" }, { "Level": 34, @@ -39698,7 +39698,7 @@ "MOVE_IRON_HEAD", "MOVE_REVERSAL", "MOVE_SCREECH", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STEALTH_ROCK", "MOVE_STOMP", "MOVE_SUPERPOWER" @@ -39846,7 +39846,7 @@ "MOVE_IRON_HEAD", "MOVE_REVERSAL", "MOVE_SCREECH", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STEALTH_ROCK", "MOVE_STOMP", "MOVE_SUPERPOWER" @@ -40017,7 +40017,7 @@ "MOVE_IRON_HEAD", "MOVE_REVERSAL", "MOVE_SCREECH", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STEALTH_ROCK", "MOVE_STOMP", "MOVE_SUPERPOWER" @@ -42918,7 +42918,7 @@ "MOVE_PSYCHO_SHIFT", "MOVE_RAPID_SPIN", "MOVE_ROLE_PLAY", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_TRICK", "MOVE_WATER_PULSE", "MOVE_WISH" @@ -43493,7 +43493,7 @@ "MOVE_NASTY_PLOT", "MOVE_ROTOTILLER", "MOVE_SEED_BOMB", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SWITCHEROO", "MOVE_TEETER_DANCE", "MOVE_WORRY_SEED" @@ -43658,7 +43658,7 @@ "MOVE_NASTY_PLOT", "MOVE_ROTOTILLER", "MOVE_SEED_BOMB", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SWITCHEROO", "MOVE_TEETER_DANCE", "MOVE_WORRY_SEED" @@ -58895,7 +58895,7 @@ "MOVE_ME_FIRST", "MOVE_MEDITATE", "MOVE_QUICK_GUARD", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VACUUM_WAVE", "MOVE_WAKE_UP_SLAP" ], @@ -59058,7 +59058,7 @@ "MOVE_ME_FIRST", "MOVE_MEDITATE", "MOVE_QUICK_GUARD", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VACUUM_WAVE", "MOVE_WAKE_UP_SLAP" ], @@ -60269,7 +60269,7 @@ "MOVE_MAGNITUDE", "MOVE_MUDDY_WATER", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_ZEN_HEADBUTT" ], @@ -69623,7 +69623,7 @@ "MOVE_FORESIGHT", "MOVE_MACH_PUNCH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_WIDE_GUARD" ], "TutorMoves": [ @@ -69763,7 +69763,7 @@ "MOVE_FORESIGHT", "MOVE_MACH_PUNCH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_WIDE_GUARD" ], "TutorMoves": [ @@ -69907,7 +69907,7 @@ "MOVE_FORESIGHT", "MOVE_MACH_PUNCH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_WIDE_GUARD" ], "TutorMoves": [ @@ -81039,7 +81039,7 @@ "MOVE_KNOCK_OFF", "MOVE_LOW_KICK", "MOVE_ME_FIRST", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VITAL_THROW" ], "TutorMoves": [ @@ -81197,7 +81197,7 @@ "MOVE_KNOCK_OFF", "MOVE_LOW_KICK", "MOVE_ME_FIRST", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VITAL_THROW" ], "TutorMoves": [ diff --git a/tools/learnset_helpers/porymoves_files/pt.json b/tools/learnset_helpers/porymoves_files/pt.json index bf2ace3c59..647f12367f 100644 --- a/tools/learnset_helpers/porymoves_files/pt.json +++ b/tools/learnset_helpers/porymoves_files/pt.json @@ -6231,7 +6231,7 @@ "MOVE_REVENGE", "MOVE_REVERSAL", "MOVE_ROCK_SLIDE", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_ENDEAVOR", @@ -6373,7 +6373,7 @@ "MOVE_REVENGE", "MOVE_REVERSAL", "MOVE_ROCK_SLIDE", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_ENDEAVOR", @@ -7363,7 +7363,7 @@ "MOVE_MEDITATE", "MOVE_ROCK_SLIDE", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_THUNDER_PUNCH" ], "TutorMoves": [ @@ -7485,7 +7485,7 @@ "MOVE_MEDITATE", "MOVE_ROCK_SLIDE", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_THUNDER_PUNCH" ], "TutorMoves": [ @@ -7610,7 +7610,7 @@ "MOVE_MEDITATE", "MOVE_ROCK_SLIDE", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_THUNDER_PUNCH" ], "TutorMoves": [ @@ -12437,7 +12437,7 @@ "MOVE_HAMMER_ARM", "MOVE_MAGNITUDE", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_SUBSTITUTE" ], @@ -24447,7 +24447,7 @@ "MOVE_METRONOME", "MOVE_PRESENT", "MOVE_REFLECT", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_THUNDER_FANG" ], @@ -24587,7 +24587,7 @@ "MOVE_METRONOME", "MOVE_PRESENT", "MOVE_REFLECT", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_THUNDER_FANG" ], @@ -29978,7 +29978,7 @@ "MOVE_NIGHT_SLASH", "MOVE_REVERSAL", "MOVE_ROCK_SLIDE", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SWAGGER" ], "TutorMoves": [ @@ -30107,7 +30107,7 @@ "MOVE_NIGHT_SLASH", "MOVE_REVERSAL", "MOVE_ROCK_SLIDE", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SWAGGER" ], "TutorMoves": [ @@ -30256,7 +30256,7 @@ "MOVE_NIGHT_SLASH", "MOVE_REVERSAL", "MOVE_ROCK_SLIDE", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SWAGGER" ], "TutorMoves": [ @@ -34139,7 +34139,7 @@ "EggMoves": [ "MOVE_ENDEAVOR", "MOVE_EXTRASENSORY", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SMOKESCREEN", "MOVE_SNORE", "MOVE_SWAGGER", @@ -34263,7 +34263,7 @@ "EggMoves": [ "MOVE_ENDEAVOR", "MOVE_EXTRASENSORY", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SMOKESCREEN", "MOVE_SNORE", "MOVE_SWAGGER", @@ -34413,7 +34413,7 @@ "EggMoves": [ "MOVE_ENDEAVOR", "MOVE_EXTRASENSORY", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SMOKESCREEN", "MOVE_SNORE", "MOVE_SWAGGER", @@ -34468,7 +34468,7 @@ }, { "Level": 22, - "Move": "MOVE_SMELLING_SALT" + "Move": "MOVE_SMELLING_SALTS" }, { "Level": 25, @@ -34606,7 +34606,7 @@ }, { "Level": 22, - "Move": "MOVE_SMELLING_SALT" + "Move": "MOVE_SMELLING_SALTS" }, { "Level": 27, @@ -35512,7 +35512,7 @@ "MOVE_ENDEAVOR", "MOVE_IRON_HEAD", "MOVE_SCREECH", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STOMP" ], "TutorMoves": [ @@ -35647,7 +35647,7 @@ "MOVE_ENDEAVOR", "MOVE_IRON_HEAD", "MOVE_SCREECH", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STOMP" ], "TutorMoves": [ @@ -35805,7 +35805,7 @@ "MOVE_ENDEAVOR", "MOVE_IRON_HEAD", "MOVE_SCREECH", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STOMP" ], "TutorMoves": [ @@ -38387,7 +38387,7 @@ "MOVE_PSYCHO_CUT", "MOVE_ROCK_SLIDE", "MOVE_ROLE_PLAY", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_TRICK", "MOVE_WISH" ], @@ -38859,7 +38859,7 @@ "MOVE_LOW_KICK", "MOVE_MAGICAL_LEAF", "MOVE_SEED_BOMB", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_TEETER_DANCE" ], "TutorMoves": [ @@ -39001,7 +39001,7 @@ "MOVE_LOW_KICK", "MOVE_MAGICAL_LEAF", "MOVE_SEED_BOMB", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_TEETER_DANCE" ], "TutorMoves": [ @@ -52668,7 +52668,7 @@ "MOVE_HEADBUTT", "MOVE_ME_FIRST", "MOVE_MEDITATE", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VACUUM_WAVE", "MOVE_WAKE_UP_SLAP" ], @@ -52813,7 +52813,7 @@ "MOVE_HEADBUTT", "MOVE_ME_FIRST", "MOVE_MEDITATE", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VACUUM_WAVE", "MOVE_WAKE_UP_SLAP" ], @@ -53921,7 +53921,7 @@ "MOVE_HAMMER_ARM", "MOVE_MAGNITUDE", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_SUBSTITUTE" ], diff --git a/tools/learnset_helpers/porymoves_files/rse.json b/tools/learnset_helpers/porymoves_files/rse.json index 14708c729d..badf14488d 100644 --- a/tools/learnset_helpers/porymoves_files/rse.json +++ b/tools/learnset_helpers/porymoves_files/rse.json @@ -5046,7 +5046,7 @@ "MOVE_REVENGE", "MOVE_REVERSAL", "MOVE_ROCK_SLIDE", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_BODY_SLAM", @@ -5167,7 +5167,7 @@ "MOVE_REVENGE", "MOVE_REVERSAL", "MOVE_ROCK_SLIDE", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_BODY_SLAM", @@ -6014,7 +6014,7 @@ "MOVE_MEDITATE", "MOVE_ROCK_SLIDE", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_BODY_SLAM", @@ -6126,7 +6126,7 @@ "MOVE_MEDITATE", "MOVE_ROCK_SLIDE", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_BODY_SLAM", @@ -6239,7 +6239,7 @@ "MOVE_MEDITATE", "MOVE_ROCK_SLIDE", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_BODY_SLAM", @@ -10019,7 +10019,7 @@ "MOVE_CURSE", "MOVE_MAGNITUDE", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_SUBSTITUTE" ], @@ -19386,7 +19386,7 @@ "MOVE_METRONOME", "MOVE_PRESENT", "MOVE_REFLECT", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE" ], "TutorMoves": [ @@ -19501,7 +19501,7 @@ "MOVE_METRONOME", "MOVE_PRESENT", "MOVE_REFLECT", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE" ], "TutorMoves": [ @@ -23705,7 +23705,7 @@ "MOVE_ENDURE", "MOVE_REVERSAL", "MOVE_ROCK_SLIDE", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SWAGGER" ], "TutorMoves": [ @@ -23820,7 +23820,7 @@ "MOVE_ENDURE", "MOVE_REVERSAL", "MOVE_ROCK_SLIDE", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SWAGGER" ], "TutorMoves": [ @@ -23950,7 +23950,7 @@ "MOVE_ENDURE", "MOVE_REVERSAL", "MOVE_ROCK_SLIDE", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SWAGGER" ], "TutorMoves": [ @@ -27284,7 +27284,7 @@ ], "EggMoves": [ "MOVE_EXTRASENSORY", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_SWAGGER", "MOVE_TAKE_DOWN" @@ -27405,7 +27405,7 @@ ], "EggMoves": [ "MOVE_EXTRASENSORY", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_SWAGGER", "MOVE_TAKE_DOWN" @@ -27532,7 +27532,7 @@ ], "EggMoves": [ "MOVE_EXTRASENSORY", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_SWAGGER", "MOVE_TAKE_DOWN" @@ -27598,7 +27598,7 @@ }, { "Level": 31, - "Move": "MOVE_SMELLING_SALT" + "Move": "MOVE_SMELLING_SALTS" }, { "Level": 37, @@ -27717,7 +27717,7 @@ }, { "Level": 33, - "Move": "MOVE_SMELLING_SALT" + "Move": "MOVE_SMELLING_SALTS" }, { "Level": 40, @@ -28461,7 +28461,7 @@ "EggMoves": [ "MOVE_BODY_SLAM", "MOVE_ENDEAVOR", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STOMP" ], "TutorMoves": [ @@ -28573,7 +28573,7 @@ "EggMoves": [ "MOVE_BODY_SLAM", "MOVE_ENDEAVOR", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STOMP" ], "TutorMoves": [ @@ -28698,7 +28698,7 @@ "EggMoves": [ "MOVE_BODY_SLAM", "MOVE_ENDEAVOR", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STOMP" ], "TutorMoves": [ @@ -30867,7 +30867,7 @@ "MOVE_DISABLE", "MOVE_ENCORE", "MOVE_ROCK_SLIDE", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_TRICK", "MOVE_WISH" ], diff --git a/tools/learnset_helpers/porymoves_files/sm.json b/tools/learnset_helpers/porymoves_files/sm.json index d79ab5c4e9..627475970f 100644 --- a/tools/learnset_helpers/porymoves_files/sm.json +++ b/tools/learnset_helpers/porymoves_files/sm.json @@ -6229,7 +6229,7 @@ "MOVE_REVENGE", "MOVE_REVERSAL", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [] }, @@ -6382,7 +6382,7 @@ "MOVE_REVENGE", "MOVE_REVERSAL", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [] }, @@ -7355,7 +7355,7 @@ "MOVE_POWER_TRICK", "MOVE_QUICK_GUARD", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_THUNDER_PUNCH", "MOVE_TICKLE" ], @@ -7489,7 +7489,7 @@ "MOVE_POWER_TRICK", "MOVE_QUICK_GUARD", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_THUNDER_PUNCH", "MOVE_TICKLE" ], @@ -7638,7 +7638,7 @@ "MOVE_POWER_TRICK", "MOVE_QUICK_GUARD", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_THUNDER_PUNCH", "MOVE_TICKLE" ], @@ -12606,7 +12606,7 @@ "MOVE_MAGNITUDE", "MOVE_MUDDY_WATER", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_ZEN_HEADBUTT" ], @@ -24581,7 +24581,7 @@ "MOVE_METRONOME", "MOVE_MIMIC", "MOVE_PRESENT", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_THUNDER_FANG" ], @@ -24720,7 +24720,7 @@ "MOVE_METRONOME", "MOVE_MIMIC", "MOVE_PRESENT", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_THUNDER_FANG" ], @@ -30061,7 +30061,7 @@ "MOVE_LOW_KICK", "MOVE_NIGHT_SLASH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_FIRE_PLEDGE" @@ -30192,7 +30192,7 @@ "MOVE_LOW_KICK", "MOVE_NIGHT_SLASH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_FIRE_PLEDGE" @@ -30349,7 +30349,7 @@ "MOVE_LOW_KICK", "MOVE_NIGHT_SLASH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_BLAST_BURN", @@ -34270,7 +34270,7 @@ "MOVE_EXTRASENSORY", "MOVE_FAKE_TEARS", "MOVE_HAMMER_ARM", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SMOKESCREEN", "MOVE_SNORE", "MOVE_TAKE_DOWN" @@ -34397,7 +34397,7 @@ "MOVE_EXTRASENSORY", "MOVE_FAKE_TEARS", "MOVE_HAMMER_ARM", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SMOKESCREEN", "MOVE_SNORE", "MOVE_TAKE_DOWN" @@ -34558,7 +34558,7 @@ "MOVE_EXTRASENSORY", "MOVE_FAKE_TEARS", "MOVE_HAMMER_ARM", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SMOKESCREEN", "MOVE_SNORE", "MOVE_TAKE_DOWN" @@ -34609,7 +34609,7 @@ }, { "Level": 28, - "Move": "MOVE_SMELLING_SALT" + "Move": "MOVE_SMELLING_SALTS" }, { "Level": 31, @@ -34742,7 +34742,7 @@ }, { "Level": 30, - "Move": "MOVE_SMELLING_SALT" + "Move": "MOVE_SMELLING_SALTS" }, { "Level": 34, @@ -35641,7 +35641,7 @@ "MOVE_IRON_HEAD", "MOVE_REVERSAL", "MOVE_SCREECH", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STEALTH_ROCK", "MOVE_STOMP", "MOVE_SUPERPOWER" @@ -35769,7 +35769,7 @@ "MOVE_IRON_HEAD", "MOVE_REVERSAL", "MOVE_SCREECH", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STEALTH_ROCK", "MOVE_STOMP", "MOVE_SUPERPOWER" @@ -35920,7 +35920,7 @@ "MOVE_IRON_HEAD", "MOVE_REVERSAL", "MOVE_SCREECH", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STEALTH_ROCK", "MOVE_STOMP", "MOVE_SUPERPOWER" @@ -38534,7 +38534,7 @@ "MOVE_PSYCHO_SHIFT", "MOVE_RAPID_SPIN", "MOVE_ROLE_PLAY", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SPOTLIGHT", "MOVE_TRICK", "MOVE_WATER_PULSE", @@ -39048,7 +39048,7 @@ "MOVE_NASTY_PLOT", "MOVE_ROTOTILLER", "MOVE_SEED_BOMB", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SWITCHEROO", "MOVE_TEETER_DANCE", "MOVE_WORRY_SEED" @@ -39198,7 +39198,7 @@ "MOVE_NASTY_PLOT", "MOVE_ROTOTILLER", "MOVE_SEED_BOMB", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SWITCHEROO", "MOVE_TEETER_DANCE", "MOVE_WORRY_SEED" @@ -52913,7 +52913,7 @@ "MOVE_ME_FIRST", "MOVE_MEDITATE", "MOVE_QUICK_GUARD", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VACUUM_WAVE", "MOVE_WAKE_UP_SLAP" ], @@ -53052,7 +53052,7 @@ "MOVE_ME_FIRST", "MOVE_MEDITATE", "MOVE_QUICK_GUARD", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VACUUM_WAVE", "MOVE_WAKE_UP_SLAP" ], @@ -54137,7 +54137,7 @@ "MOVE_MAGNITUDE", "MOVE_MUDDY_WATER", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_ZEN_HEADBUTT" ], @@ -62422,7 +62422,7 @@ "MOVE_FORESIGHT", "MOVE_MACH_PUNCH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_WIDE_GUARD" ], "TutorMoves": [] @@ -62546,7 +62546,7 @@ "MOVE_FORESIGHT", "MOVE_MACH_PUNCH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_WIDE_GUARD" ], "TutorMoves": [] @@ -62674,7 +62674,7 @@ "MOVE_FORESIGHT", "MOVE_MACH_PUNCH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_WIDE_GUARD" ], "TutorMoves": [] @@ -72602,7 +72602,7 @@ "MOVE_KNOCK_OFF", "MOVE_LOW_KICK", "MOVE_ME_FIRST", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VITAL_THROW" ], "TutorMoves": [] @@ -72745,7 +72745,7 @@ "MOVE_KNOCK_OFF", "MOVE_LOW_KICK", "MOVE_ME_FIRST", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VITAL_THROW" ], "TutorMoves": [] diff --git a/tools/learnset_helpers/porymoves_files/sv.json b/tools/learnset_helpers/porymoves_files/sv.json index 190b084611..b6f43b8d07 100644 --- a/tools/learnset_helpers/porymoves_files/sv.json +++ b/tools/learnset_helpers/porymoves_files/sv.json @@ -60044,7 +60044,7 @@ }, { "Level": 52, - "Move": "MOVE_FOREST\u2019S_CURSE" + "Move": "MOVE_FORESTS_CURSE" } ], "PreEvoMoves": [], @@ -60166,7 +60166,7 @@ }, { "Level": 52, - "Move": "MOVE_FOREST\u2019S_CURSE" + "Move": "MOVE_FORESTS_CURSE" } ], "PreEvoMoves": [], diff --git a/tools/learnset_helpers/porymoves_files/usum.json b/tools/learnset_helpers/porymoves_files/usum.json index 2587a7de81..c9cb1a97d5 100644 --- a/tools/learnset_helpers/porymoves_files/usum.json +++ b/tools/learnset_helpers/porymoves_files/usum.json @@ -6867,7 +6867,7 @@ "MOVE_REVENGE", "MOVE_REVERSAL", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_COVET", @@ -7039,7 +7039,7 @@ "MOVE_REVENGE", "MOVE_REVERSAL", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_COVET", @@ -8149,7 +8149,7 @@ "MOVE_POWER_TRICK", "MOVE_QUICK_GUARD", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_THUNDER_PUNCH", "MOVE_TICKLE" ], @@ -8295,7 +8295,7 @@ "MOVE_POWER_TRICK", "MOVE_QUICK_GUARD", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_THUNDER_PUNCH", "MOVE_TICKLE" ], @@ -8457,7 +8457,7 @@ "MOVE_POWER_TRICK", "MOVE_QUICK_GUARD", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_THUNDER_PUNCH", "MOVE_TICKLE" ], @@ -13908,7 +13908,7 @@ "MOVE_MAGNITUDE", "MOVE_MUDDY_WATER", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_THRASH", "MOVE_ZEN_HEADBUTT" @@ -27257,7 +27257,7 @@ "MOVE_METRONOME", "MOVE_MIMIC", "MOVE_PRESENT", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_THUNDER_FANG" ], @@ -27411,7 +27411,7 @@ "MOVE_METRONOME", "MOVE_MIMIC", "MOVE_PRESENT", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_THUNDER_FANG" ], @@ -33325,7 +33325,7 @@ "MOVE_LOW_KICK", "MOVE_NIGHT_SLASH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_BOUNCE", @@ -33463,7 +33463,7 @@ "MOVE_LOW_KICK", "MOVE_NIGHT_SLASH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_BOUNCE", @@ -33631,7 +33631,7 @@ "MOVE_LOW_KICK", "MOVE_NIGHT_SLASH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_BLAST_BURN", @@ -37975,7 +37975,7 @@ "MOVE_EXTRASENSORY", "MOVE_FAKE_TEARS", "MOVE_HAMMER_ARM", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SMOKESCREEN", "MOVE_SNORE", "MOVE_TAKE_DOWN", @@ -38115,7 +38115,7 @@ "MOVE_EXTRASENSORY", "MOVE_FAKE_TEARS", "MOVE_HAMMER_ARM", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SMOKESCREEN", "MOVE_SNORE", "MOVE_TAKE_DOWN", @@ -38291,7 +38291,7 @@ "MOVE_EXTRASENSORY", "MOVE_FAKE_TEARS", "MOVE_HAMMER_ARM", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SMOKESCREEN", "MOVE_SNORE", "MOVE_TAKE_DOWN", @@ -38358,7 +38358,7 @@ }, { "Level": 28, - "Move": "MOVE_SMELLING_SALT" + "Move": "MOVE_SMELLING_SALTS" }, { "Level": 31, @@ -38502,7 +38502,7 @@ }, { "Level": 30, - "Move": "MOVE_SMELLING_SALT" + "Move": "MOVE_SMELLING_SALTS" }, { "Level": 34, @@ -39511,7 +39511,7 @@ "MOVE_IRON_HEAD", "MOVE_REVERSAL", "MOVE_SCREECH", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STEALTH_ROCK", "MOVE_STOMP", "MOVE_SUPERPOWER" @@ -39653,7 +39653,7 @@ "MOVE_IRON_HEAD", "MOVE_REVERSAL", "MOVE_SCREECH", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STEALTH_ROCK", "MOVE_STOMP", "MOVE_SUPERPOWER" @@ -39819,7 +39819,7 @@ "MOVE_IRON_HEAD", "MOVE_REVERSAL", "MOVE_SCREECH", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STEALTH_ROCK", "MOVE_STOMP", "MOVE_SUPERPOWER" @@ -42709,7 +42709,7 @@ "MOVE_PSYCHO_SHIFT", "MOVE_RAPID_SPIN", "MOVE_ROLE_PLAY", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SPOTLIGHT", "MOVE_TRICK", "MOVE_WATER_PULSE", @@ -43284,7 +43284,7 @@ "MOVE_POWER_UP_PUNCH", "MOVE_ROTOTILLER", "MOVE_SEED_BOMB", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SWITCHEROO", "MOVE_TEETER_DANCE", "MOVE_WORRY_SEED" @@ -43448,7 +43448,7 @@ "MOVE_POWER_UP_PUNCH", "MOVE_ROTOTILLER", "MOVE_SEED_BOMB", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SWITCHEROO", "MOVE_TEETER_DANCE", "MOVE_WORRY_SEED" @@ -58660,7 +58660,7 @@ "MOVE_ME_FIRST", "MOVE_MEDITATE", "MOVE_QUICK_GUARD", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VACUUM_WAVE", "MOVE_WAKE_UP_SLAP" ], @@ -58817,7 +58817,7 @@ "MOVE_ME_FIRST", "MOVE_MEDITATE", "MOVE_QUICK_GUARD", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VACUUM_WAVE", "MOVE_WAKE_UP_SLAP" ], @@ -60013,7 +60013,7 @@ "MOVE_MAGNITUDE", "MOVE_MUDDY_WATER", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_THRASH", "MOVE_ZEN_HEADBUTT" @@ -69340,7 +69340,7 @@ "MOVE_MACH_PUNCH", "MOVE_POWER_UP_PUNCH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_WIDE_GUARD" ], "TutorMoves": [ @@ -69477,7 +69477,7 @@ "MOVE_MACH_PUNCH", "MOVE_POWER_UP_PUNCH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_WIDE_GUARD" ], "TutorMoves": [ @@ -69618,7 +69618,7 @@ "MOVE_MACH_PUNCH", "MOVE_POWER_UP_PUNCH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_WIDE_GUARD" ], "TutorMoves": [ @@ -80651,7 +80651,7 @@ "MOVE_KNOCK_OFF", "MOVE_LOW_KICK", "MOVE_ME_FIRST", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VITAL_THROW" ], "TutorMoves": [ @@ -80805,7 +80805,7 @@ "MOVE_KNOCK_OFF", "MOVE_LOW_KICK", "MOVE_ME_FIRST", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VITAL_THROW" ], "TutorMoves": [ diff --git a/tools/learnset_helpers/porymoves_files/xy.json b/tools/learnset_helpers/porymoves_files/xy.json index 1cb68d527b..d3f2d76d51 100644 --- a/tools/learnset_helpers/porymoves_files/xy.json +++ b/tools/learnset_helpers/porymoves_files/xy.json @@ -6251,7 +6251,7 @@ "MOVE_REVENGE", "MOVE_REVERSAL", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [] }, @@ -6392,7 +6392,7 @@ "MOVE_REVENGE", "MOVE_REVERSAL", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [] }, @@ -7365,7 +7365,7 @@ "MOVE_POWER_TRICK", "MOVE_QUICK_GUARD", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_THUNDER_PUNCH", "MOVE_TICKLE" ], @@ -7492,7 +7492,7 @@ "MOVE_POWER_TRICK", "MOVE_QUICK_GUARD", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_THUNDER_PUNCH", "MOVE_TICKLE" ], @@ -7626,7 +7626,7 @@ "MOVE_POWER_TRICK", "MOVE_QUICK_GUARD", "MOVE_ROLLING_KICK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_THUNDER_PUNCH", "MOVE_TICKLE" ], @@ -12530,7 +12530,7 @@ "MOVE_MAGNITUDE", "MOVE_MUDDY_WATER", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_ZEN_HEADBUTT" ], @@ -24501,7 +24501,7 @@ "MOVE_METRONOME", "MOVE_MIMIC", "MOVE_PRESENT", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_THUNDER_FANG" ], @@ -24645,7 +24645,7 @@ "MOVE_METRONOME", "MOVE_MIMIC", "MOVE_PRESENT", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_THUNDER_FANG" ], @@ -30010,7 +30010,7 @@ "MOVE_LOW_KICK", "MOVE_NIGHT_SLASH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_FIRE_PLEDGE" @@ -30138,7 +30138,7 @@ "MOVE_LOW_KICK", "MOVE_NIGHT_SLASH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_FIRE_PLEDGE" @@ -30291,7 +30291,7 @@ "MOVE_LOW_KICK", "MOVE_NIGHT_SLASH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT" + "MOVE_SMELLING_SALTS" ], "TutorMoves": [ "MOVE_BLAST_BURN", @@ -34074,7 +34074,7 @@ "MOVE_EXTRASENSORY", "MOVE_FAKE_TEARS", "MOVE_HAMMER_ARM", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SMOKESCREEN", "MOVE_SNORE", "MOVE_TAKE_DOWN" @@ -34197,7 +34197,7 @@ "MOVE_EXTRASENSORY", "MOVE_FAKE_TEARS", "MOVE_HAMMER_ARM", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SMOKESCREEN", "MOVE_SNORE", "MOVE_TAKE_DOWN" @@ -34352,7 +34352,7 @@ "MOVE_EXTRASENSORY", "MOVE_FAKE_TEARS", "MOVE_HAMMER_ARM", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SMOKESCREEN", "MOVE_SNORE", "MOVE_TAKE_DOWN" @@ -34395,7 +34395,7 @@ }, { "Level": 22, - "Move": "MOVE_SMELLING_SALT" + "Move": "MOVE_SMELLING_SALTS" }, { "Level": 25, @@ -34532,7 +34532,7 @@ }, { "Level": 22, - "Move": "MOVE_SMELLING_SALT" + "Move": "MOVE_SMELLING_SALTS" }, { "Level": 27, @@ -35457,7 +35457,7 @@ "MOVE_IRON_HEAD", "MOVE_REVERSAL", "MOVE_SCREECH", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STEALTH_ROCK", "MOVE_STOMP", "MOVE_SUPERPOWER" @@ -35582,7 +35582,7 @@ "MOVE_IRON_HEAD", "MOVE_REVERSAL", "MOVE_SCREECH", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STEALTH_ROCK", "MOVE_STOMP", "MOVE_SUPERPOWER" @@ -35730,7 +35730,7 @@ "MOVE_IRON_HEAD", "MOVE_REVERSAL", "MOVE_SCREECH", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_STEALTH_ROCK", "MOVE_STOMP", "MOVE_SUPERPOWER" @@ -38335,7 +38335,7 @@ "MOVE_PSYCHO_SHIFT", "MOVE_RAPID_SPIN", "MOVE_ROLE_PLAY", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_TRICK", "MOVE_WATER_PULSE", "MOVE_WISH" @@ -38856,7 +38856,7 @@ "MOVE_NASTY_PLOT", "MOVE_ROTOTILLER", "MOVE_SEED_BOMB", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SWITCHEROO", "MOVE_TEETER_DANCE", "MOVE_WORRY_SEED" @@ -38999,7 +38999,7 @@ "MOVE_NASTY_PLOT", "MOVE_ROTOTILLER", "MOVE_SEED_BOMB", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SWITCHEROO", "MOVE_TEETER_DANCE", "MOVE_WORRY_SEED" @@ -52626,7 +52626,7 @@ "MOVE_ME_FIRST", "MOVE_MEDITATE", "MOVE_QUICK_GUARD", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VACUUM_WAVE", "MOVE_WAKE_UP_SLAP" ], @@ -52770,7 +52770,7 @@ "MOVE_ME_FIRST", "MOVE_MEDITATE", "MOVE_QUICK_GUARD", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VACUUM_WAVE", "MOVE_WAKE_UP_SLAP" ], @@ -53863,7 +53863,7 @@ "MOVE_MAGNITUDE", "MOVE_MUDDY_WATER", "MOVE_SLEEP_TALK", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_SNORE", "MOVE_ZEN_HEADBUTT" ], @@ -62168,7 +62168,7 @@ "MOVE_FORESIGHT", "MOVE_MACH_PUNCH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_WIDE_GUARD" ], "TutorMoves": [] @@ -62295,7 +62295,7 @@ "MOVE_FORESIGHT", "MOVE_MACH_PUNCH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_WIDE_GUARD" ], "TutorMoves": [] @@ -62426,7 +62426,7 @@ "MOVE_FORESIGHT", "MOVE_MACH_PUNCH", "MOVE_REVERSAL", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_WIDE_GUARD" ], "TutorMoves": [] @@ -72468,7 +72468,7 @@ "MOVE_KNOCK_OFF", "MOVE_LOW_KICK", "MOVE_ME_FIRST", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VITAL_THROW" ], "TutorMoves": [] @@ -72615,7 +72615,7 @@ "MOVE_KNOCK_OFF", "MOVE_LOW_KICK", "MOVE_ME_FIRST", - "MOVE_SMELLING_SALT", + "MOVE_SMELLING_SALTS", "MOVE_VITAL_THROW" ], "TutorMoves": [] From 2e6c62ff54b8efd3a81d4d896aed3fb646c68606 Mon Sep 17 00:00:00 2001 From: psf <77138753+pkmnsnfrn@users.noreply.github.com> Date: Tue, 1 Apr 2025 09:38:59 -0400 Subject: [PATCH 114/115] Add CONTRIBUTING.md and STYLEGUIDE.md (#6340) Co-authored-by: HackMD <37423+hackmd-hub[bot]@users.noreply.github.com> Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> Co-authored-by: hedara90 <90hedara@gmail.com> --- .../ISSUE_TEMPLATE/01_battle_engine_bugs.yaml | 33 +- .../ISSUE_TEMPLATE/02_battle_ai_issues.yaml | 33 +- .../ISSUE_TEMPLATE/03_feature_requests.yaml | 23 +- .github/ISSUE_TEMPLATE/04_other_errors.yaml | 33 +- .github/pull_request_template.md | 49 ++- CONTRIBUTING.md | 143 +++++++ docs/CONTRIBUTING.md | 1 + docs/CREDITS.md | 1 + docs/STYLEGUIDE.md | 399 ++++++++++++++++++ docs/SUMMARY.md | 2 + docs/team_procedures/merge_checklist.md | 66 +++ 11 files changed, 733 insertions(+), 50 deletions(-) create mode 100644 CONTRIBUTING.md create mode 100644 docs/CONTRIBUTING.md create mode 100644 docs/CREDITS.md create mode 100644 docs/STYLEGUIDE.md create mode 100644 docs/team_procedures/merge_checklist.md diff --git a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml index 7d3ad81846..b570c6f322 100644 --- a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml +++ b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml @@ -5,23 +5,42 @@ body: - type: markdown attributes: value: | - Please fill in all required fields with as many details as possible. + Please fill in all fields with as many details as possible. - type: textarea id: description attributes: label: Description description: | - Describe the issue you are experiencing. - Attach images/videos if possible. + What behavior are you expecting to happen? What behavior are you observing instead? placeholder: | - Please enter a description of the issue. Here you can also attach log screenshots, gifs or a video + Please be as descriptive as possible. validations: required: true + - type: textarea + id: reproduction + attributes: + label: Reproduction Steps + description: | + What exact steps can somebody else follow in order to recreate the issue on their own? + placeholder: | + Provide as much context as possible as to what was done to create the issue. + validations: + required: true + - type: textarea + id: media + attributes: + label: Images / Video + description: | + Do you have images or videos to show the problem happen? + placeholder: | + Here you can also attach logs, screenshots, gifs or a video. + validations: + required: false - type: dropdown id: version attributes: label: Version - description: What version of pokeemerald-expansion are you using as a base? + description: What version of pokeemerald-expansion are you using? options: - 1.11.1 (Latest release) - master (default, unreleased bugfixes) @@ -38,14 +57,14 @@ body: id: upcomingversion attributes: label: Upcoming/master Version - description: If you're using the upcoming or master branches directly, please specify what was the commit hash you pulled from. + description: If you're using the `upcoming` or `master` branches directly, please use the following command to give us the commit hash that you are on. `git log --merges RHH/upcoming -1 --format=%H` Replace `upcoming` with `master` if you're using `master`. validations: required: false - type: input id: contact attributes: label: Discord contact info - description: Provide your Discord tag here so we can contact you in case we need more details. Be sure to join our server ([here](https://discord.gg/6CzjAG6GZk)). + description: Provide your Discord tag here so we can contact you in case we need more details. Discussion around **`pokeemerald-expansion`** happens in our [Discord server](https://discord.gg/6CzjAG6GZk). placeholder: ex. Lunos#4026 validations: required: false diff --git a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml index 1fe3387f6b..e3d40589ea 100644 --- a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml +++ b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml @@ -5,23 +5,42 @@ body: - type: markdown attributes: value: | - Please fill in all required fields with as many details as possible. + Please fill in all fields with as many details as possible. - type: textarea id: description attributes: label: Description description: | - Describe the issue you are experiencing. - Attach images/videos if possible. + What behavior are you expecting to happen? What behavior are you observing instead? placeholder: | - Please enter a description of the issue. Here you can also attach log screenshots, gifs or a video + Please be as descriptive as possible. validations: required: true + - type: textarea + id: reproduction + attributes: + label: Reproduction Steps + description: | + What exact steps can somebody else follow in order to recreate the issue on their own? + placeholder: | + Provide as much context as possible as to what was done to create the issue. + validations: + required: true + - type: textarea + id: media + attributes: + label: Images / Video + description: | + Do you have images or videos to show the problem happen? + placeholder: | + Here you can also attach logs, screenshots, gifs or a video. + validations: + required: false - type: dropdown id: version attributes: label: Version - description: What version of pokeemerald-expansion are you using as a base? + description: What version of pokeemerald-expansion are you using? options: - 1.11.1 (Latest release) - master (default, unreleased bugfixes) @@ -38,14 +57,14 @@ body: id: upcomingversion attributes: label: Upcoming/master Version - description: If you're using the upcoming or master branches directly, please specify what was the commit hash you pulled from. + description: If you're using the `upcoming` or `master` branches directly, please use the following command to give us the commit hash that you are on. `git log --merges RHH/upcoming -1 --format=%H` Replace `upcoming` with `master` if you're using `master`. validations: required: false - type: input id: contact attributes: label: Discord contact info - description: Provide your Discord tag here so we can contact you in case we need more details. Be sure to join our server ([here](https://discord.gg/6CzjAG6GZk)). + description: Provide your Discord tag here so we can contact you in case we need more details. Discussion around **`pokeemerald-expansion`** happens in our [Discord server](https://discord.gg/6CzjAG6GZk). placeholder: ex. Lunos#4026 validations: required: false diff --git a/.github/ISSUE_TEMPLATE/03_feature_requests.yaml b/.github/ISSUE_TEMPLATE/03_feature_requests.yaml index 8d56216265..9b7b46c9e1 100644 --- a/.github/ISSUE_TEMPLATE/03_feature_requests.yaml +++ b/.github/ISSUE_TEMPLATE/03_feature_requests.yaml @@ -5,23 +5,32 @@ body: - type: markdown attributes: value: | - Please fill in all required fields with as many details as possible. + Please fill in all fields with as many details as possible. - type: textarea - id: description + id: behavior attributes: - label: Description + label: Behavior Description description: | - Describe the issue you are experiencing. - Attach images/videos if possible. + What is the current behavior? What behavior would you expect your feature request to provide? What other information can you provide to help your feature get implemented? placeholder: | - Please enter a description of the issue. Here you can also attach log screenshots, gifs or a video + Provide as much context as possible. validations: required: true + - type: textarea + id: media + attributes: + label: Images / Video + description: | + Have other projects or games solved this problem? Do you have images or video to show this happening? + placeholder: | + Here you can also attach logs, screenshots, gifs or a video. + validations: + required: false - type: input id: contact attributes: label: Discord contact info - description: Provide your Discord tag here so we can contact you in case we need more details. Be sure to join our server ([here](https://discord.gg/6CzjAG6GZk)). + description: Provide your Discord tag here so we can contact you in case we need more details. Discussion around **pokeemerald-expansion** happens in our [Discord server](https://discord.gg/6CzjAG6GZk). placeholder: ex. Lunos#4026 validations: required: false diff --git a/.github/ISSUE_TEMPLATE/04_other_errors.yaml b/.github/ISSUE_TEMPLATE/04_other_errors.yaml index 0f37baf0fc..0e467b4536 100644 --- a/.github/ISSUE_TEMPLATE/04_other_errors.yaml +++ b/.github/ISSUE_TEMPLATE/04_other_errors.yaml @@ -5,23 +5,42 @@ body: - type: markdown attributes: value: | - Please fill in all required fields with as many details as possible. + Please fill in all fields with as many details as possible. - type: textarea id: description attributes: label: Description description: | - Describe the issue you are experiencing. - Attach images/videos if possible. + What behavior are you expecting to happen? What behavior are you observing instead? placeholder: | - Please enter a description of the issue. Here you can also attach log screenshots, gifs or a video + Please be as descriptive as possible. validations: required: true + - type: textarea + id: reproduction + attributes: + label: Reproduction Steps + description: | + What exact steps can somebody else follow in order to recreate the issue on their own? + placeholder: | + Provide as much context as possible as to what was done to create the issue. + validations: + required: false + - type: textarea + id: media + attributes: + label: Images / Video + description: | + Do you have images or videos to show the problem happen? + placeholder: | + Here you can also attach logs, screenshots, gifs or a video. + validations: + required: false - type: dropdown id: version attributes: label: Version - description: What version of pokeemerald-expansion are you using as a base? + description: What version of pokeemerald-expansion are you using? options: - 1.11.1 (Latest release) - master (default, unreleased bugfixes) @@ -38,14 +57,14 @@ body: id: upcomingversion attributes: label: Upcoming/master Version - description: If you're using the upcoming or master branches directly, please specify what was the commit hash you pulled from. + description: If you're using the `upcoming` or `master` branches directly, please use the following command to give us the commit hash that you are on. `git log --merges RHH/upcoming -1 --format=%H` Replace `upcoming` with `master` if you're using `master`. validations: required: false - type: input id: contact attributes: label: Discord contact info - description: Provide your Discord tag here so we can contact you in case we need more details. Be sure to join our server ([here](https://discord.gg/6CzjAG6GZk)). + description: Provide your Discord tag here so we can contact you in case we need more details. Discussion around **`pokeemerald-expansion`** happens in our [Discord server](https://discord.gg/6CzjAG6GZk). placeholder: ex. Lunos#4026 validations: required: false diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 9a04e86f2b..0b214dce0a 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,36 +1,41 @@ - + - - - + + + + + + + + + + + ## Description - - + -## Images - - +## Media + ## Issue(s) that this PR fixes - - + -## **People who collaborated with me in this PR** - - +## People who collaborated with me in this PR + + - + ## Feature(s) this PR does NOT handle: - - + + ## Things to note in the release changelog: - - - + + -## **Discord contact info** - +## Discord contact info + + diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000..adb6eab67e --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,143 @@ +# Contributing to pokeemerald-expansion + +First off, thanks for helping improve `pokeemerald-expansion`! ❤️ + +All contributions are encouraged and valued. Please make sure to read the relevant section before making your contribution! It will make it a lot easier for you and the maintainers. We're excited to see your contributions. 🎉 + +## Bug Reports + +We use [GitHub](https://github.com/rh-hideout/pokeemerald-expansion/issues?q=sort%3Aupdated-desc+is%3Aissue+is%3Aopen+label%3Abug) issues to track bugs. + +### What should I do before making a bug report? + +- Does your bug occur on the latest unmodified (clean) version of the [`upcoming`](https://github.com/rh-hideout/pokeemerald-expansion/tree/upcoming) or [`master`](https://github.com/rh-hideout/pokeemerald-expansion/tree/master) branch? If not, please do not submit a report - the issue is most likely one introduced by your game. +- Has somebody else already found this issue? This is best done by searching the [bug tracker](https://github.com/rh-hideout/pokeemerald-expansion/issues?q=label%3Abug) to see if anybody else reported it. If there is already an issue, replying to the exsting issue with more information can help solve the problem. + +### How do I submit a bug report? + +If you run into an issue with the project, open an [issue](https://github.com/rh-hideout/pokeemerald-expansion/issues/new). + +The best bug reports have enough information that we won't have to contact you for more information. We welcome all efforts to improve pokeemerald-expansion, but would be very grateful if you completed as much of the checklist as possible in your bug report. This will help other contributiors fix your issue. + +### What happens after I submit a bug report? + +- A maintainer will [label](https://github.com/rh-hideout/pokeemerald-expansion/labels) the bug report. +- A maintainer will try to reproduce the bug with your provided steps. + - If there are no reproduction steps or no obvious way to reproduce the issue, somebody will ask you for those steps. Until the bug can be reproduced, the bug will retain the `bug:unconfirmed` label. Unconfirmed bugs are less likely get fixed. +- If the team is able to reproduce the issue, it will be labeled `bug:confirmed`, and the issue will be left to be [implemented by someone](#Pull-Requests). + - If the issue is particularly game-breaking, a maintainer will add it to a future version's [milestone](), meaning that version will not be released until the problem is solved. + +## Feature Requests + +This section guides you through submitting a feature request for pokeemerald-expansion, **including completely new features and minor improvements to existing functionality**. Following these guidelines will help maintainers and the community to understand your suggestion and find related suggestions. + +- We use [GitHub](https://github.com/rh-hideout/pokeemerald-expansion/issues?q=sort%3Aupdated-desc+is%3Aissue+is%3Aopen+label%3Afeature-request) issues to track feature requests. + +### What should I do before making a feature request? + +- Make sure your request is in [pokeemerald-expansion's scope](team_procedures/scope.md) - if it is not clear if something is in scope, you can start a discussion thread in the [#pr-discussions](https://discord.com/channels/419213663107416084/1102784418369785948) channel of the [the RHH Discord Server](https://discord.gg/6CzjAG6GZk). + +### What should I do before making a feature request? + +- Read the [documentation](https://rh-hideout.github.io/pokeemerald-expansion/) to find out if the functionality is already covered, maybe by an individual configuration. +- Perform a [search](https://github.com/rh-hideout/pokeemerald-expansion/issues) to see if the feature has already been requested. If it has, add a comment to the existing issue instead of opening a new one. + +### How do I submit a feature request? + +To request a feature to be added to the project, open a [feature request](https://github.com/rh-hideout/pokeemerald-expansion/issues/new). + +### What happens after I submit a feature request? + +- A maintainer will [label](https://github.com/rh-hideout/pokeemerald-expansion/labels) the issue. +- If the feature request is out of [scope](team_procedures/scope.md), it will be closed. +- if the request is in scope, any other contributor can volunteer to [fufill it via a pull request](#Pull-Requests). When the request is filled, the request will be closed. + +## Pull Requests + +If you have read all of this and still need help, feel free to start a thread in #pr-discussions of the Discord server or ask questions in #expansion-dev. + +### What should I do before starting a pull request? + +- If you're new to git and GitHub, [Team Aqua's Asset Repo](https://github.com/Pawkkie/Team-Aquas-Asset-Repo/) has a [guide on forking and cloning the repository](https://github.com/Pawkkie/Team-Aquas-Asset-Repo/wiki/The-Basics-of-GitHub). Make sure you have a [local copy](INSTALL.md) of `pokeemerald-expansion`. +- Make sure your contribution is in [scope](team_procedures/scope.md) - if it is not clear if something is in scope, you can start a discussion thread in the [#pr-discussions](https://discord.com/channels/419213663107416084/1102784418369785948) channel of the [the RHH Discord Server!](https://discord.gg/6CzjAG6GZk). +- Choose a branch to contribute your PR to: + - **`master`**: Fixes for bugs that are currently present in the `master` branch. + - **`upcoming`**: All other pull requests. +- Create a new branch from the most recent version of the branch you've chosen. +- If your contribution introduces, removes, or changes a lot of existing code, we reccomend getting a maintainer to agree to review it before you start on the work! We have a table that lists all [current maintainers and their areas of expertise](#maintainers). + +### How do I submit a pull request? + +#### 1. Get a working local copy +If you haven't already, follow [INSTALL.md](INSTALL.md) to get a working local copy of `pokeemerald-expansion`. + +#### 2. Set RHH as a remote +This will designate the main `pokeemerald-expansion` repository as a remote. +```bash +git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion # You can replace RHH with anything you want. This tutorial assumes you used RHH. +``` + +#### 3. Create a new branch +This will create a new branch and switch to it. +```bash +git switch -c newFeature # the name newFeature can be anything you want. This tutorial assumes you used newFeature. +``` + +#### 4. Copy your target branch to your new branch +This will change your new branch to match the latest version of your chosen target branch. +```bash +git reset --hard RHH/upcoming # If your PR is going to target master, replace upcoming with master. +``` + +#### 5. Implement your code +All of your work should go on this new, clean branch. If you already started work on a different branch, you can [cherry-pick](https://git-scm.com/docs/git-cherry-pick) you old commits onto this new branch, or just copy and paste the changes from the original files. + +##### Popular Features / Feature Branches + +If you are implementing functionality from a known community feature branch, it is **strongly** reccomended that you open a discussion thread _before_ starting. There are some situations where maintainers would ask you to use the existing feature branch as a base, and others where maintainers would want a feature to be written from scratch. + +This changes on a case by case basis. + +#### 6. Push your changes +When you push your first commit, you'll need to push the new branch to the remote repo. +```bash +git push --set-upstream origin newFeature +``` + +#### 7. Open Pull Request +Once your work is complete and pushed to the branch on Github, you can open a [pull request from your branch](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork), targeting the branch you've chosen from `pokeemerald-expansion`. Please fill out the pull request description as completely as possible. + +### What happens after I submit a pull request? + +A maintainer will then assign themselves as a reviewer of your pull request, and may provide feedback in the form of a PR review. + +Contributors are responsible for responding to and updating their branch by addressing the feedback in the review. Contributors are also responsible for making sure the branch passes the checklist at all times. + +Once a maintainer has begun reviewing your PR, **please** do not force-push new changes - normal pushes are fine. Do not worry about git history - we squash most incoming changes. + +Maintainers will measure the submitted pull request against a [merge checklist](docs/team_procedures/merge_checklist.md). + +Once all items on the merge checklist are true, the branch will be merged in. + + +## Maintainers + +This list was last updated 2025 Feb 27. + +| Name | Discord | Currently Active | Areas of Expertise | +| --- | --- | --- | --- | +| [Alex](https://github.com/AlexOn1ine) | rainonline | ✅ | Battle Engine, Battle AI +| [Egg](https://github.com/DizzyEggg) | egg9255 | ✅ | Battle Engine, Battle AI +| [ghoulslash](https://github.com/ghoulslash) | ghoulslash | ✅ | Dexnav, Overworld, Battle Engine +| [Jasper](https://github.com/Bassoonian) | bassoonian | ✅ | Berries, Day / Night System, Followers, Feature Branches +| [MGriffin](https://github.com/mrgriffin) | mgriffin | ✅ | Tests, Trainer Control +| [psf](https://github.com/pkmnsnfrn) | pkmnsnfrn | ✅ | Rematches, Difficulty, Trainer Slides, Fake RTC, Fishing Minigames, Imperial / Metric, OW Item Balls, Sky Battles +| [Hedara](https://github.com/hedara90) | hedara | ✅ | Compression, Sprites +| [Pawkkie](https://github.com/Pawkkie) | pawkkie | ✅ | Battle AI +| [SBird](https://github.com/SBird1337) | karathan | ✅ | Dynamic Multichoice, Damage Calculation, Animations, Trainer Control, Tests +| [AsparagusEduardo](https://github.com/AsparagusEduardo) | asparaguseduardo | Inactive | +| [Agustin](https://github.com/AgustinGDLV) | agustingdlv | Inactive | Gimmicks, Battle Engine, Tests, Items +| [tertu](https://github.com/tertu-m) | tertu | Inactive | Randomizer + +## Attribution +This guide is based on the [contributing.md](https://contributing.md/generator)! diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md new file mode 100644 index 0000000000..81ddb505e9 --- /dev/null +++ b/docs/CONTRIBUTING.md @@ -0,0 +1 @@ +{{#include ../CONTRIBUTING.md}} diff --git a/docs/CREDITS.md b/docs/CREDITS.md new file mode 100644 index 0000000000..23aced71d9 --- /dev/null +++ b/docs/CREDITS.md @@ -0,0 +1 @@ +{{#include ../CREDITS.md}} diff --git a/docs/STYLEGUIDE.md b/docs/STYLEGUIDE.md new file mode 100644 index 0000000000..50351efe5b --- /dev/null +++ b/docs/STYLEGUIDE.md @@ -0,0 +1,399 @@ +# Styleguide and Principles + +## Naming Conventions + +Function names and struct names should be formatted in `PascalCase`. + +```c +void ThisIsCorrect(void); + +struct MyStruct +{ + u8 firstField; + u16 secondField; + ... +}; +``` + +Variables and struct fields should be formatted in `camelCase`. + +```c +int thisIsCorrect = 0; +``` + +Global variables should be prefixed with `g`, and static variables should be +prefixed with `s`. + +```c +extern s32 gMyGlobalVariable; + +static u8 sMyStaticVariable = 0; +``` + +Macros and constants should use `CAPS_WITH_UNDERSCORES`. + +```c +#define MAX_LEVEL 100 + +enum +{ + COLOR_RED, + COLOR_BLUE, + COLOR_GREEN, +}; + +#define ADD_FIVE(x) ((x) + 5) +``` + +## Coding Style + +### Comments + +Ideally, contributions have descriptive variable, function and constant names so as to explain functionality without comments. When a comment is used, the content of the comment should explain _WHY_ a specific system or component works the way it does. + +When describing a system/component in-depth, use block comment syntax. + +```c +/* + * This is an in-depth description of the save block format. Its format is as follows: + * + * Sectors 0 - 13: Save Slot 1 + * Sectors 14 - 27: Save Slot 2 + * ... + */ +``` + +When briefly describing a function or block of code, use a single-line comments +placed on its own line. +There should be a single space directly to the right of `//`. + +```c +// This is supplemental information for the function. If there is a bunch of info, it should +// carry on to the next line. +void ProcessSingleTask(void) +{ + // Short comment describing some noteworthy aspect of the code immediately following. + ... + // Comments should be capitalized and end in a period. +} +``` + +When tagging a data structure that corresponds to an `enum` or some noteworthy +value, place the comment on the same line as the code. +```c +const u8 gPlantlikeMons[] = +{ + FALSE, // SPECIES_BULBASAUR + FALSE, // SPECIES_IVYSAUR + TRUE, // SPECIES_VENUSAUR + FALSE, // SPECIES_CHARMANDER + ... +}; +``` + +### Whitespace + +All `.c` and `.h` files should use 4 spaces--not tabs. +Assembler files (`.s)` use tabs. +Script files (`.inc)` use tabs. + +### Operators + +Assignments and comparison operators should have one space on both sides of `=`. + +```c +int i = 0; // correct +int i=0; // incorrect + +a > b // correct +a>b // incorrect +``` + +The incrementor and decrementor operators should NOT have a space. + +```c +i++; // correct +i ++; // incorrect +``` + +A control statement should have a space between them and their expressions, and the opening bracket should be on the next line. + +```c +for (...) +{ + // correct +} + +for(...) { + // incorrect +} +``` + +A `switch` statement's cases should left-align with the `switch`'s block. + +```c +switch (foo) +{ +case 0: // correct + ... + break; +} + +switch (foo) +{ + case 0: // incorrect + ... + break; +} +``` + +A single empty line should follow a block. + +```c +int MyFunction(int bar) +{ + int foo = 0; + if (bar) + foo++; + + return foo; // correct +} + +int MyFunction(int bar) +{ + int foo = 0; + if (bar) + foo++; + return foo; // incorrect +} +``` + +A chain of `if-else` statements in which any block is more than one line of +code should use braces. If all blocks are single-line, then no braces are necessary. + +```c +if (foo) // correct +{ + return 1; +} +else +{ + MyFunction(); + return 0; +} + +if (foo) // incorrect + return 1; +else +{ + MyFunction(); + return 0; +} +``` + +### Control Structures + +When comparing whether or not a value equals `0`, don't be explicit unless the +situation calls for it. + +```c +if (runTasks) // correct + RunTasks(); + +if (runTasks != 0) // incorrect + RunTasks(); + +if (!PlayerIsOutside()) // correct + RemoveSunglasses(); + +if (PlayerIsOutside() == 0) // incorrect + RemoveSunglasses(); +``` + +When writing a `for` or `while` loop with no body, use a semicolon `;` on the +same line, rather than empty braces. + +```c +for (i = 0; gParty[i].species != SPECIES_NONE; i++); // correct + +for (i = 0; gParty[i].species != SPECIES_NONE; i++) // incorrect +{ } +``` +### Inline Configs + +When adding functionality that is controlled by a config, defines should be checked within the normal control flow of the function unless a data structure requires a change at runtime. +```c +void SetCurrentDifficultyLevel(enum DifficultyLevel desiredDifficulty) +{ +#ifdef B_VAR_DIFFICULTY + return; // Incorrect +#endif + + if (desiredDifficulty > DIFFICULTY_MAX) + desiredDifficulty = DIFFICULTY_MAX; + + VarSet(B_VAR_DIFFICULTY, desiredDifficulty); +} +``` +```c +void SetCurrentDifficultyLevel(enum DifficultyLevel desiredDifficulty) +{ + if (!B_VAR_DIFFICULTY) // Correct + return; + + if (desiredDifficulty > DIFFICULTY_MAX) + desiredDifficulty = DIFFICULTY_MAX; + + VarSet(B_VAR_DIFFICULTY, desiredDifficulty); +} +``` +```c + [MOVE_VINE_WHIP] = + { + .name = COMPOUND_STRING("Vine Whip"), + .description = COMPOUND_STRING( + "Strikes the foe with\n" + "slender, whiplike vines."), + #if B_UPDATED_MOVE_DATA >= GEN_6 // Correct + .pp = 25, + #elif B_UPDATED_MOVE_DATA >= GEN_4 + .pp = 15, + #else + .pp = 10, + #endif + .effect = EFFECT_HIT, + .power = B_UPDATED_MOVE_DATA >= GEN_6 ? 45 : 35, + }, +``` +## Data Type Sizes +When a variable number is used, the data type should generally `u32` (unsigned) or `s32` (signed). There are a few exceptions to this rule, such as: +* Values stored in the saveblock should use the smallest data type possible. +* `EWRAM` variables should use the smallest data type possible. +* Global variables / global struct members use the smallest data type possible. + +## Constants, Enums and Type Checking +Avoid using magic numbers when possible - constants help to make clear why a specific value is used. + +```c +// Incorrect + if (gimmick == 5 && mon->teraType != 0) + return TRUE; + if (gimmick == 4 && mon->shouldUseDynamax) + return TRUE; +``` + +```c +// Correct +#define TYPE_NONE 0 +#define GIMMICK_DYNAMAX 4 +#define GIMMICK_TERA 5 + + if (gimmick == GIMMICK_TERA && mon->teraType != TYPE_NONE) + return TRUE; + if (gimmick == GIMMICK_DYNAMAX && mon->shouldUseDynamax) + return TRUE; +``` + +When several numbers in sequence are used AND those values are not utilized in the saveblock, an enum is used instead. + +```c +//Correct +enum Gimmick +{ + GIMMICK_NONE, + GIMMICK_MEGA, + GIMMICK_ULTRA_BURST, + GIMMICK_Z_MOVE, + GIMMICK_DYNAMAX, + GIMMICK_TERA, + GIMMICKS_COUNT, +}; + + if (gimmick == GIMMICK_TERA && mon->teraType != TYPE_NONE) + return TRUE; + if (gimmick == GIMMICK_DYNAMAX && mon->shouldUseDynamax) + return TRUE; +``` + +When an enum is used, the enum type is used instead of a regular number type to prevent incorrectly set values. + +```c +// Incorrect +bool32 CanActivateGimmick(u32 battler, u32 gimmick) +{ + return gGimmicksInfo[gimmick].CanActivate != NULL && gGimmicksInfo[gimmick].CanActivate(battler); +} + +u32 GetCurrentDifficultyLevel(void) +{ + if (!B_VAR_DIFFICULTY) + return DIFFICULTY_NORMAL; + + return VarGet(B_VAR_DIFFICULTY); +} +``` + +```c +//Correct + +bool32 CanActivateGimmick(u32 battler, enum Gimmick gimmick) +{ + return gGimmicksInfo[gimmick].CanActivate != NULL && gGimmicksInfo[gimmick].CanActivate(battler); +} + +enum DifficultyLevel GetCurrentDifficultyLevel(void) +{ + if (!B_VAR_DIFFICULTY) + return DIFFICULTY_NORMAL; + + return VarGet(B_VAR_DIFFICULTY); +} +``` + +## Principles + +### Minimally Invasive + +New functionality must be as minimally invasive to existing files as possible. When a large amount of new code is introduced, it is best to isolate it in its own file. + +The [`B_VAR_DIFFICULTY`](https://patch-diff.githubusercontent.com/raw/rh-hideout/pokeemerald-expansion/pull/5337.diff) pull request is a good example of lots of new code being introduced in minimally invasive ways. + +### `UNUSED` + +If a function or data is introduced but is never called, it is designated as `UNUSED`. `UNUSED` functions should not be introduced unless neccesary. + +```c +static void UNUSED PadString(const u8 *src, u8 *dst) +{ + u32 i; + + for (i = 0; i < 17 && src[i] != EOS; i++) + dst[i] = src[i]; + + for (; i < 17; i++) + dst[i] = CHAR_SPACE; + + dst[i] = EOS; +} +``` + +### Config Philosophy + +If a branch can modifies saves, the functionality that does so must be gated behind a config, and off by default. + +If a branch has a config that performs either of the following, it should be on by default: +* improves the backend / developer quality of life +* emulates present day, modern day Pokémon + +If a branch's behavior is one that Game Freak does not have a consistent stance on, the default behavior of the config should be disussed by the maintainers. + +All other configs should be off. + +### Save Philosophy + +Until [save migration](https://discord.com/channels/419213663107416084/1108733346864963746) is implemented, branches will only merged in if they do not forcefully break existing game saves. + +When `pokemeerald-expansion` gets to a point where new functionality will require that we break saves, we will merge as many [save-breaking features](https://discord.com/channels/419213663107416084/1202774957776441427) together as possible, and increment the major version number of the project. + +# Attribution +* The majority of the styleguide was written by [garakmon](https://github.com/garakmon) as part of their [PR to pokefirered](). diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index 9a921c9373..eecd9a0ec5 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -5,6 +5,8 @@ - [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) +- [Contributing](./CONTRIBUTING.md) +- [Credits](./CREDITS.md) - [Tutorials]() - [What are AI Flags?](tutorials/ai_flags.md) - [How to add new AI Flags](tutorials/ai_logic.md) diff --git a/docs/team_procedures/merge_checklist.md b/docs/team_procedures/merge_checklist.md new file mode 100644 index 0000000000..8af4247411 --- /dev/null +++ b/docs/team_procedures/merge_checklist.md @@ -0,0 +1,66 @@ +# Document Purpose + +This document is a guide for maintainers to account for all the reccomended steps before merging in a pull request. + + + +# Checklist + +## Is the branch's theoretical functionality in scope? +If you're not sure if a branch's functionality is [in scope](docs/team_procedures/scope.md), start a conversation on Discord to resolve. + +## Does the branch successfully compile? +From `make clean`, the branch should locally compile. + +## Do all CI tests pass? +Contributors are asked to make sure tests pass locally, but maintainers should at least wait for the CI to pass before merging. + +## Have you verified that the functionality works in game without any problems? +If functionality cannot be verified with an automated test, proof of an in game test is required. Do not be afraid to reach out to the contributor or the community to make sure something works in game as it should. + +## If the branch ports behavior from another Pokémon game, have you verified that the behavior functions as faithfully as possible? +We have always tried to make sure we can mimic the original functionality as closely as possible so as to avoid confusion with users and players. Do not be afraid to ask the contributor / community for proof if you cannot personally verify. + +## If the branch is a popular feature within the community with an established feature branch, is this using that established branch as a base? +There are situations where this should and should not happen, and should be discussed with maintainers on a case by case basis. + +## If this branch changes a function that is expected to be modified by users, is there a migration script? +Not everything needs a migration script - if you're unsure, start a discussion. + +## Should new functionality introduced by this branch be gated behind a config? +We don't have a strict definition of when configs should be used, but you can start with + +> Why SHOULDN'T this be a config? + +## Are tests written for everything that can be tested? +If you're not sure if something CAN be tested, start a discussion. Some contributors may not be capable of writing tests - we should guide them in #expansion-tests to do so. + +If any new tests are `KNOWN_FAILING`, issues should be opened describing each of the `KNOWN_FAILING` tests and our understanding of why they fail. + +## Does the branch meet our [config philosophy](docs/styleguide#config-philosophy)? + +## Does the branch meet our [saves philosophy](docs/styleguide#saves-philosophy)? + +## Does the submitted code follow the [styleguide](docs/styleguide)? +This applies to code that comes from other branches or games. + +## Is the pull request appropriately labeled? +Without labels, the CHANGELOG will not be properly formatted. For specifically the `bugfix` label, an additional label, detailing what area the bug exists in is required. + +## Is `pokeemerald-expansion` free from a merge freeze? +Our [release schedule](docs/team_procedures/schedule.md) prevents us from merging Big Features and non-bugfixes within certain dates close to a release. Please use `/release` in the RHH Discord to clarify when these are occuring. + +# Merging + +When a feature has passed all of the items on the checklist, it is ready to be merged. From GitHub's interface, there are three different options for merging: + +## Squash and merge +This should be used for all PRs _except_ when merging from either: +* a publicly available feature branch from by the community OR +* `upcoming`, `master` or `pret/pokeemerald`. + +## Create a merge commit +When the branch uses a publicly available feature branch from by the community, use "Create a merge commit" to preserve history for users. + +## Rebase and merge +We do not use this ever. From 807b9cb1528c98438f86fcffdb6aec1d3e18758f Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 1 Apr 2025 11:31:19 -0300 Subject: [PATCH 115/115] Update maintainer list (#6521) --- CONTRIBUTING.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index adb6eab67e..4810244c48 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -122,7 +122,7 @@ Once all items on the merge checklist are true, the branch will be merged in. ## Maintainers -This list was last updated 2025 Feb 27. +This list was last updated 2025 April 1. | Name | Discord | Currently Active | Areas of Expertise | | --- | --- | --- | --- | @@ -135,7 +135,6 @@ This list was last updated 2025 Feb 27. | [Hedara](https://github.com/hedara90) | hedara | ✅ | Compression, Sprites | [Pawkkie](https://github.com/Pawkkie) | pawkkie | ✅ | Battle AI | [SBird](https://github.com/SBird1337) | karathan | ✅ | Dynamic Multichoice, Damage Calculation, Animations, Trainer Control, Tests -| [AsparagusEduardo](https://github.com/AsparagusEduardo) | asparaguseduardo | Inactive | | [Agustin](https://github.com/AgustinGDLV) | agustingdlv | Inactive | Gimmicks, Battle Engine, Tests, Items | [tertu](https://github.com/tertu-m) | tertu | Inactive | Randomizer