From 07255a2237902b7a64252eb7b65897489aa505db Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Fri, 10 Jan 2025 11:55:02 +0100 Subject: [PATCH 01/27] 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 02/27] 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 03/27] 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 04/27] 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 04eb22f4ea9ccf5aa1f37e81b61dee88e3b52f8a Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 15 Mar 2025 17:45:42 -0400 Subject: [PATCH 05/27] 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 7b6b9ab655e1b364adea497f86404f640602c4f1 Mon Sep 17 00:00:00 2001 From: Raymond Dodge Date: Tue, 18 Mar 2025 18:41:51 -0400 Subject: [PATCH 06/27] 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 4a1d273b08c0e9bff74b70a102064de0fed59a25 Mon Sep 17 00:00:00 2001 From: Hedara Date: Mon, 24 Mar 2025 11:41:49 +0100 Subject: [PATCH 07/27] 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 08/27] 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 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 09/27] 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 10/27] 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 56947be5d67bc3cac222497f57ba60bbc816d01a Mon Sep 17 00:00:00 2001 From: Isaac Aronson Date: Fri, 28 Mar 2025 10:26:01 -0500 Subject: [PATCH 11/27] 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 12/27] 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 13/27] 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 14/27] 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 15/27] 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 16/27] 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 17/27] 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 18/27] 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 1c0e5bb0e1db867e2618c948d2b9ef44a49ca52e Mon Sep 17 00:00:00 2001 From: Pawkkie Date: Sat, 29 Mar 2025 14:18:20 -0400 Subject: [PATCH 19/27] 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 20/27] 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 21/27] 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 22/27] 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 23/27] 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 24/27] 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 25/27] 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 26/27] 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 27/27] 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": []